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
input_real = tf.placeholder(tf.float32, (None, image_width, image_height, image_channels), name='input_real')
input_z = tf.placeholder(tf.float32, (None, z_dim), name='input_z')
lr = tf.placeholder(tf.float32, (), name='learning_rate')
return input_real, input_z, 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
drop_rate = 0.5
size_mult = 64
alpha = 0.2
with tf.variable_scope('discriminator', reuse=reuse):
x = tf.layers.dropout(images, rate=drop_rate/2.5)
x1 = tf.layers.conv2d(x, size_mult, 3, strides=2, padding='same')
relu1 = tf.maximum(alpha * x1, x1)
relu1 = tf.layers.dropout(relu1, rate=drop_rate)
x2 = tf.layers.conv2d(relu1, size_mult, 3, strides=2, padding='same')
bn2 = tf.layers.batch_normalization(x2, training=True)
relu2 = tf.maximum(alpha * x2, x2)
x3 = tf.layers.conv2d(relu2, size_mult, 3, strides=2, padding='same')
bn3 = tf.layers.batch_normalization(x3, training=True)
relu3 = tf.maximum(alpha * bn3, bn3)
relu3 = tf.layers.dropout(relu3, rate=drop_rate)
x4 = tf.layers.conv2d(relu3, 2 * size_mult, 3, strides=1, padding='same')
bn4 = tf.layers.batch_normalization(x4, training=True)
relu4 = tf.maximum(alpha * bn4, bn4)
x5 = tf.layers.conv2d(relu4, 2 * size_mult, 3, strides=1, padding='same')
bn5 = tf.layers.batch_normalization(x5, training=True)
relu5 = tf.maximum(alpha * bn5, bn5)
x6 = tf.layers.conv2d(relu5, 2 * size_mult, 3, strides=2, padding='same')
bn6 = tf.layers.batch_normalization(x6, training=True)
relu6 = tf.maximum(alpha * bn6, bn6)
relu6 = tf.layers.dropout(relu6, rate=drop_rate)
x7 = tf.layers.conv2d(relu5, 2 * size_mult, 3, strides=1, padding='valid')
relu7 = tf.maximum(alpha * x7, x7)
features = tf.reduce_mean(relu7, (1, 2))
logits = tf.layers.dense(features, 1, activation=None)
out = tf.sigmoid(logits)
return out, logits
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_discriminator(discriminator, tf)
Implement generator
to generate an image using z
. This function should be able to reuse the variables in the neural network. Use tf.variable_scope
with a scope name of "generator" to allow the variables to be reused. The function should return the generated 28 x 28 x out_channel_dim
images.
def generator(z, out_channel_dim, is_train=True):
"""
Create the generator network
:param z: Input z
:param out_channel_dim: The number of channels in the output image
:param is_train: Boolean if generator is being used for training
:return: The tensor output of the generator
"""
# TODO: Implement Function
size_mult = 64
alpha = 0.2
with tf.variable_scope('generator', reuse=not is_train):
# First fully connected layer
x1 = tf.layers.dense(z, 4 * 4 * size_mult * 4)
# Reshape it to start the convolutional stack
x1 = tf.reshape(x1, (-1, 4, 4, size_mult * 4))
x1 = tf.layers.batch_normalization(x1, training=is_train)
x1 = tf.maximum(alpha * x1, x1)
x2 = tf.layers.conv2d_transpose(x1, size_mult * 2, 5, strides=2, padding='same')
x2 = tf.layers.batch_normalization(x2, training=is_train)
x2 = tf.maximum(alpha * x2, x2)
x3 = tf.layers.conv2d_transpose(x2, size_mult, 3, strides=3, padding='same')
x3 = tf.layers.batch_normalization(x3, training=is_train)
x3 = tf.maximum(alpha * x3, x3)
logits = tf.layers.conv2d_transpose(x3, out_channel_dim, 5, strides=1, padding='valid')
out = tf.tanh(logits)
return out
"""
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
# Build the model
g_model = generator(input_z, out_channel_dim)
# g_model is the generator output
d_model_real, d_logits_real = discriminator(input_real)
d_model_fake, d_logits_fake = discriminator(g_model, reuse=True)
smooth = 0.1
# Calculate losses
d_loss_real = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_real,
labels=tf.ones_like(d_logits_real) * (1 - smooth)))
d_loss_fake = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake,
labels=tf.zeros_like(d_logits_real)))
d_loss = d_loss_real + d_loss_fake
g_loss = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake,
labels=tf.ones_like(d_logits_fake)))
return d_loss, g_loss
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_model_loss(model_loss)
Implement model_opt
to create the optimization operations for the GANs. Use tf.trainable_variables
to get all the trainable variables. Filter the variables with names that are in the discriminator and generator scope names. The function should return a tuple of (discriminator training operation, generator training operation).
def model_opt(d_loss, g_loss, learning_rate, beta1):
"""
Get optimization operations
:param d_loss: Discriminator loss Tensor
:param g_loss: Generator loss Tensor
:param learning_rate: Learning Rate Placeholder
:param beta1: The exponential decay rate for the 1st moment in the optimizer
:return: A tuple of (discriminator training operation, generator training operation)
"""
# TODO: Implement Function
# Get the trainable_variables, split into G and D parts
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')]
d_train_opt = tf.train.AdamOptimizer(learning_rate = learning_rate, beta1 = beta1).minimize(d_loss, var_list=d_vars)
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
g_updates = [opt for opt in update_ops if opt.name.startswith('generator')]
with tf.control_dependencies(g_updates):
g_train_opt = tf.train.AdamOptimizer(learning_rate = 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
# Create our input placeholders
input_real, input_z, lr = model_inputs(*data_shape[1:], z_dim)
d_loss, g_loss = model_loss(input_real, input_z, data_shape[-1])
d_train_opt, g_train_opt = model_opt(d_loss, g_loss, lr, beta1)
steps = 0
n_images = 25
show_output_step = 100
print_loss_step = 20
losses = []
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
# Sample random noise for G
batch_z = np.random.uniform(-1, 1, size=(batch_size, z_dim))
# Run optimizers
batch_images *= 2
_ = sess.run(d_train_opt, feed_dict={input_real: batch_images,
input_z: batch_z,
lr: learning_rate})
_ = sess.run(g_train_opt, feed_dict={input_z: batch_z,
lr: learning_rate})
if steps % print_loss_step == 0:
train_loss_d = d_loss.eval({input_z: batch_z, input_real: batch_images})
train_loss_g = g_loss.eval({input_z: batch_z})
print("Epoch {}/{}...".format(epoch_i+1, epoch_count),
"Discriminator Loss: {:.4f}...".format(train_loss_d),
"Generator Loss: {:.4f}".format(train_loss_g))
losses.append((train_loss_d, train_loss_g))
if steps % show_output_step == 0:
show_generator_output(sess, 25, input_z, data_shape[-1], 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 = 64
z_dim = 100
learning_rate = 0.002
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 = 64
z_dim = 100
learning_rate = 0.002
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.


|
robot_fingers
|
We provide a Singularity image with all required dependencies to build and run the software. See About Singularity.
You can, of course, also use the package without Singularity. In this case you need to install all dependencies locally, though.
robot_fingers
depends on several other of our packages which are organized in separate repositories. We therefore use a workspace management tool called treep which allows easy cloning of multi-repository projects.
treep can be installed via pip:
pip install treep
Clone the treep configuration containing the "ROBOT_FINGERS" project:
git clone git@github.com:machines-in-motion/treep_machines_in_motion.git
Note: treep searches for a configuration directory from the current working directory upwards. So you can use treep in the directory in which you invoked the git clone
command above or any subdirectory.
Now clone the project:
treep --clone ROBOT_FINGERS
Important: treep uses SSH to clone from github. So for the above command to work, you need a github account with a registered SSH key. Further this key needs to work without asking for a password everytime. To achieve this, run
ssh-add
first.
Go to the root directory of your workspace (the one containing the "src" folder) and run the container in shell mode (see About Singularity):
singularity shell -e --no-home -B $(pwd) path/to/image.sif
The current working directory gets automatically mounted into the container so you can edit all the files from outside the container using your preferred editor or IDE and all changes will directly be visible inside the container. Vise versa modifications done from inside the container will modify the files on the host system!
Inside the container first set up the environment:
Singularity> source /setup.bash
This will source the ROS setup.bash
and create an alias catbuild
for catkin that already contains the argument to set the Python executable to python3 (needed to get Python 3 bindings).
Now you can build by using this alias:
Singularity> catbuild
To build, cd into the workspace
directory and build with
catkin build
With the above command Python bindings will be build for the default python version of your system (see python --version
). If you want to use a different version (e.g. python3), you can specify as follows:
catkin build -DPYTHON_EXECUTABLE=/usr/bin/python3
Note that all our scripts are implemented for Python 3, so if your default version is not already 3, you need to specify this in order to use these scripts.


Saint bob
Home
About Us
Campaign
Collections
Spring 2018
Another action
Something else here
Press
Contact Us
Spring
2018
Spring
2018
Spring
2018
Spring
2018
Previous
Next


| DOSE: T+ 0:00 |
2 hits |
oral |
LSD |
(blotter / tab) |
| T+ 2:00 |
1 repeated |
smoked |
Cannabis |
|
| T+ 2:00 |
10 mg |
oral |
2C-E |
(powder / crystals) |
Until this trip I had been relativly comfortable with Lsd, having used it a dozen times or so, and I had once tried 15mg 2c-i and although that was a frantic mindmelting adventure, I maintained a safe mind set and managed to enjoy myself.
A long time friend of mine and I took 2 hits of paper acid at around 4pm, on a warm sunny friday, we were in a very good spirts and expected a good trip. The first 2 hours were rather light, just buzz not to much visuals, but very enjoyable. Around that time we met up with a friend of his and used his cannabis vaporizer, He wanted to trip with us but since we had eaten all the acid I had, the idea came up of splitting 2 2ce 15mg capsules 3 ways. I didn't have a accurate enough scale so I opened them and split the bright white crystals into 3 piles as equal as I could make them, poured each onto a small piece of toilet paper and wrapped it into a ball. We swallowed them and went back outside.
I didn't mentaly prepare my self for the 2c-e at all. I didn't even really think through that I just took a powerful pscycidelic which I had never done, on top of an acid trip which isn't even in full gear, and that I was about to tripping out really hard and should make accomidations. Within 5 or 10 miniutes all three of us felt the effects.
About an hour later, I made a classic tripping mistake, going back to my room alone. Its started to get a little windy and chilly so I went back to my room to change. The cold started to raise abstract doubts, and bring down the positive energy. After taking a shower for about 2 hours, I called my friend who had also done the acid and 2c-e, and asked him to come to my place. When he got there we started having a very emotional albiet nonsencical discussion/argument. At the end of which I was crying and screeming and I told him to leave. It was the last time we've spoke. The hullicination I was having a distortion of the image I have of my self. I hated this person, who I just realized I really was. I felt I didn't deserve to live.
Complicating the issue was the full bottle oxazapam (like valium), in my desk, making suicide a readily available option. It was torture, my life was in my hands, and 100% of my consciousness was telling me to let it slip into the abyss. I think the main thing that kept me from doing it was the thought, that I'd be the only one who wouldn't have to deal with my death. I called one of my better nontriping friend who knew me well, and is an artist at defusing crisises drug related and otherwise. I stayed up all night, the visuals, didnt subside till around 6am.
  What I do know is that he was acting eractict enough on saterday that some authority saw him called the police and had him commited to mental institution for a few days, and had him kicked out of school. From what I hear he returned mentaly back to normal around 3 or 4 days after the trip.
Was this a result or circumstance, prexisiting stress, or an inherent result of taking 2c-e and lsd together. I think a bit of all three but, I don't think they are few many people who could handle a trip so intensly stimulating and relentless visually hallucinagenic.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Note: New features require the latest version of the watch face to be installed. Please ensure you have v1.3.1.


A lot more content is to be displayed here which would constitute the mass and bulk of text on this page, relating to myself and areas of interest to potential readership of this dummy page. This page, while built on the mentality of a wireframe, was fleshed out and finally and successfuly implemented as the recommeneded assignment. After a number of iterations the need for frameworks such as bootstrap becomes apparent to the designer. The need to create a new template with its unique nuances and quirks and having to fine tune these for every occassion while educational soon devolves into a frustrating exercise.
There were a number of things I realized after completing this assignment. Lets start with the fact that there is no alternative to pencil and paper when it comes to creating the blueprint of the wbsite. It was vital to visualize the pages as creations comprising containers especially if one style sheet was to be used. However the realization that another style sheet can be used is also a useful tool that I will aim to keep in mind for my next assignment. Content is the first priority of a website designer. It is only when the content is at hand that one can begin to go about experimenting with the CSS to arrange it into its mosaic. And mosaic like it is. Juggling sections, classes and ids it is easy to get lost in the colorful maze of css functionality and the degree of interaction it creates on the webpage. Theres more to be said ofcourse but maybe on another page at another time. For now this version of the project has hit its end date as a basic protfolio webpage.
Happy Browsing!!! :)


A RSMQ terminal client.
npm install -g rsmq-cli
rsmq send "mymsg"
Global options can be used by every command.
Execpt the option --group
tt's also possible to define your own default by using rsmq config
or by editing the file ~/.rsmq-cli
.
String
optional: default = <IP_ADDRESS>
) Redis hostNumner
optional: default = 6379
) Redis portString
optional: default = rsmq
) RSMQ namespaceString
optional ) RSMQ queuename.String
optional ) RSMQ client configuration profile.create
create a new queue if not exists
rsmq create [global-options]
send
short: sn
send a message to the queue
rsmq send message [global-options]
receive
short: rc
receive a single message
rsmq receive [global-options] [-t]
Options
Number
optional: default = 10
) RSMQ client idle timeout until the process exits. It set to 0
to use no timeout.delete
short:rm
send a message from the queue
rsmq delete [msgid] [global-options]
stats
get the current queue attributes and stats
rsmq stats [global-options]
listqueues
short: ls
List all queues within the namespace
rsmq listqueues [global-options]
visibility
short: vs
change the visibility of a message
rsmq visibility [msgid] [vt] [global-options]
attributes
short: attr
get or set the attributes of a queue
rsmq attributes set [name] [value] [global-options]
rsmq attributes get [name] [global-options]
rsmq attributes ls [global-options]
attributes to set:
vt
( Number
optional ) The length of time, in seconds, that a message received from a queue will be invisible to other receiving components when they ask to receive messages. Allowed values: 0-9999999 (around 115 days)delay
( Number
optional ) The time in seconds that the delivery of all new messages in the queue will be delayed. Allowed values: 0-9999999 (around 115 days)maxsize
( Number
optional ) The maximum message size in bytes. Allowed values: 1024-65536config
configurate your client. This makes it possible to redefine the defaults of the client options
rsmq config [group] ls
rsmq config [group] get [name]
rsmq config [group] set [name] [value]
|Version|Date|Description| |:--:|:--:|:--| |0.0.1|2015-2-23|Initial commit|
Initially Generated with generator-mpnodemodule
Copyright © 2015 mpneuried, http://www.tcs.de
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


TM3's new clinical notes are impressing practitioners nationwide and we want you to join us in celebrating its early success!
On the 4th May we are inviting clients, like yourself to join us in celebrating the launch of clinical notes. You'll also have the chance to have your say on the future development of TM3. This is a great opportunity to give us your feedback whilst enjoying some fine wine and nibbles. What to expect at the client summit:
We promise to dig deep into clinical notes with an in-depth demonstration. It's full potential will be unveiled to all!
TM3 is always developing and practitioner feedback is imperative. What would you like to see TM3 do for your practice?
At the end of the event you'll have the chance to play around with TM3's clinical notes.


THE BEST FOOD BLOG ON THE WEB.
POSTED ON 15 DEC 2013 / DESSERTS PRINT
For the fig-swirl: Melt butter over medium heat in a saucepan. Add brown sugar and sstir to dissolve. Halve all of the figs and toss in the saucepan with water and lemon juice. Cook over medium heat, stirring frequently, until you have a chunky-jammy mixture. Add salt with one or two stirs, set aside and let cool completely.
Ice cream: In a small pot over medium heat, combine milk, and granulated sugar until sugar is completely dissolved and the milk is just barely lukewarm. Whisk in the egg yolks. Set mixture in the fridge and wait until the fig mixture is cooled.
Using an ice cream machine, pour liquids into the frozen basin and process according to manufacturer instructions, i.e., let spin and thicken for 20 minutes before adding mascarpone, fig jam mixture, and the nuts. Continue to process for +/- 10 minutes. Pour semi-frozen mixture into a pyrex dish or glass tupperware. Freeze for at least two hours before serving.
Food enthusiast, photography fan. Add a pinch of raw foodism and that's pretty much who I am.


Add courses by searching
Search for courses by course code or title and float multiple courses in one go!
CO304
-
Computer Architecture
DC
Semester : 3
-
Credits : 4
Remove


By 1995 the World Wide Web was being seen, and started to turn out to be essential for mainstream society. A large number of us may recall the main program we utilized in those days was AOL, a couple of perusers may even recollect Prodigy.
Seeing the achievement of the Netscape program utilized by these two antiquated web organizations, Windows delivered Internet Explorer 1.0 as a major aspect of the Windows 95 Plus pack in August 1995. The two organizations started delivering updates in fast progression throughout the following couple of years. It appeared to be that each time we pivoted either Netscape or Internet Explorer was delivering another form and needing us to update.
They were going after the most users; the title of the best browser. Obviously, this was to the detriment of being fairly buggy, yet they continued giving the world and their users increasingly "amazing" features. It wasn't simply users these organizations were battling for, it was money. A well known internet browser could rake in some serious cash from the offers via search engines to be the default web browser, also famous pages needing to be pre-installed in the programs bookmarks. it appeared to be a minor fight until Microsoft "wowed" the world with the fast and stable update to IE 4.0 in 1997. Utilizing the "monopoly" they had with the Windows operating system, they started bundling the web with each update of Windows that was released.
Throughout the following years Microsoft gradually removed Netscape's "air supply" with its various assets. It even made an authorizing concurrence with AOL to put together AOL's essential interface with respect to IE instead of Netscape. IE started including features a lot of like those of Netscape and of those that were superior.


White Rock RCMP launches ‘Safe Place’ for LGBTQ2S community
Police say window decal identifies allies for those seeking shelter from bullying, etc
by Tracy HolmesWhite Rock RCMP, with support of the City of White Rock, has launched an initiative aimed at increasing safety for the LGBTQ2S+ community.
According to a news release, the ‘Safe Place’ program offers individuals “shelter if they are feeling unsafe, and a place where they will be welcomed and can call police and wait until officers arrive.”
“Businesses, schools, or other institutions may apply to join the program. By placing a decal in their window, they will be clearly identifying the premise as a safe haven and ally for members of the LGBTQ2S+ community,” the release states.
White Rock Mayor Darryl Walker said the detachment “reflects our community values.”
“The Safe Place program gives individuals from the LGBTQ2S+ community shelter when they need it most. Thank you to White Rock RCMP for this initiative,” Walker said in the release.
More to come…


A nodejs CLI app to curate scene movie releases.
So far I've only done some really basic testing on my own machine, so if you decide to give this a try, please don't point it at your media collection and let it go, because it will likely do some catastrophic damage.
lib-avtools
package)npm install
config.ini
from config.example.ini
node index.js
install node
This used to be really clunky, but these days it's much better, so I'd avoid googling it and following the first guide you see because lots has changed.
Best way is to follow the instructions from nodesource which will go something like this:
you shouldn't just run scripts you download from the interwebs willy nilly, especially as sudo.. unless like me, you like to live dangerously.
sudo curl -sL https://deb.nodesource.com/setup_5.x | bash -
sudo apt-get install -y nodejs
install avprobe
sudo apt-get install libav-tools
clone & populate
git clone <address>
cd <folder>
npm install
setup
rename ./config.example.ini
to config.ini
, and edit it as you like.
you can also node concierge.js -h
to get a list of options. All (most?)
options can be set from CLI args or from config.ini, CLI takes precedence.
run
Running with no arguments will juse all args from your config.ini
.
nodejs index.js
You can override your config.ini
with command line options ala
nodejs index.js --target /downloads/movies/some-specific-release
Post an issue here or pm /u/Mr5o1 on reddit.


This website is designed to support college students who have a traumatic brain injury (TBI), their family members and caregivers, college advisors, educators, health and rehabilitation providers, military/veterans and advocates to explore the STAR practices and strategies used in our project. Here, you will find the tools, information, accommodations, and employment-supporting resources necessary to enhance college and career achievements using readily-available technology and apps.
Read more about ProjectUse the following controls to filter resources by audience, resource type, and/or STAR practice.
Information
Project Career is pleased to make this new web-based resource available to anyone who is interested in improving the academic performance of students who have experienced a traumatic brain injury (TBI). Bookmark this page now, so you can return again and again to always get the most up-to-date information.
STAR
Information
Cognitive Support Technology is the use of a device, software ("app"), or other technology-based tools to assist with tasks typically handled by the brain. This includes technology to support memory, organization, navigating, and much more. In Project Career, we are using Cognitive Support Technology (CST) to help college students who have experienced a Traumatic Brain Injury improve their academic performance.
Technology
Information
Looking for information about traumatic brain injury (TBI)? Many organizations provide helpful information about what a TBI is and how it can affect many different aspects of life. Goverment agencies, government-funded projects, and non-profit organizations all offer a wealth of information, resources, findings, and more. To access these, go to our informational resources page.
Resources
Apps
Here's some great information about how you can take more effective class notes! You will learn about the Cornell Method of note-taking and how you can use the Notability app with the Cornell Method on your tablet or laptop computer. To get started, go to our Cornell Method page.
Audience: Students, Educators
Student, Accommodations
Research
An article about Project Career published in the the journal NeuroRehabilitation includes case studies on five Project Career participants. Authored by Amanda Nardone, Elaine Sampson, Callista Stauffer, et al., this article includes a set of qualitative analyses for each individual's case notes. The article's abstract and complete reference information are available.
Resources
Videos
A cornerstone of the Project Career model is matching an individual with the right technology. Dr. Marcia Scherer hosts an informative look at this process. Topics include the technology selection process, steps in the user-focused AT assessment, and the reliability and validity of the MPT assessments. Matching Person and Technology: Focusing on the Person, Milieu, and Technology
Technology
Webcasts
Check out this webcast on Post-Traumatic Stress Disorder from the Job
Accommodation Network.
View PTSD Module (25 minutes).
Download accessible transcript.
Access the reference and
resource lists from JAN.
Download accessible corresponding handouts and
resources.
Audience: Veterans
Accommodations
Research
Although still early in the five-year grant cycle, Project Career has published some preliminary findings. This study found participants in the Project Career program are using cognitive support technology (CST) and having an improved experience with technology. The abstract and complete reference information are provided.
Resources


{% extends "appfx:base_with_app_bar.html" %} {% load splunkui %} {% block title %}{{app_name}} Home Page{% endblock title %} {% block css %} {% endblock css %} {% block content %}
A very nice pattern is to have a table row expand into a more detailed view when it is clicked. Usually, this is done using two searches: one representing the "master" table, and another, which is tokenized for the "detail" view and is set whenever a row is clicked.
In this example, when a table row is clicked, we expand that row and start the detail search for that sourcetype. The key takeaway is how we manually work with a search context (and its datasource) to get the results, and how we use the table click to drive that search.
Don't be startled by the seemingly large number of lines of code. The majority of it is the HTML-DOM wrangling to get the table to expand properly. In another example, we will show how you could take this functionality and wrap it in a reusable control.


{% extends "base.html" %}
{% load static %}
{% block content %}
You haven't created any goal yet!
{% endif %} {% for g in payload %}{% if g.goal.is_completed %} {% else %} {% endif %} Your goal is to {{ g.goal }} Your system is to {% if g.systems|length %} {% for s in g.systems %} {% if s.system.is_completed %} {{ s.system }} {% else %} {{ s.system }} {% endif %} {% endfor %} {% else %} Define it {% endif %}
{% endfor %}After a few days you'll have a chain.
You'll like seeing that chain, especially when you get a few weeks under your belt.
Your only job is to not break the chain.
Start with a version that is incredibly easy for you.
Try to increase it each day, but in an incredibly small way.
Getting 1% better each day results in 37 times better by the end of the year.


Digital marketing is the component of marketing
that utilizes internet and online based
digital technologies such as desktop computers,
mobile phones and other digital media and platforms to promote products and services.
Most of the based IT Company, best
for Website designing , developme
-ment & E-commerce Website.
Sahajee is one stop shop for all IT
related services like Website design
-ing, Ecommerce Web developments.


Visitors who have come to spend time with us and survived :)
Who: John McCraw
When: July 2012
Their story: Parking the boat
This was John's second time on the boat and and we really let him have it this time. The night John showed up there was a lightning and rain storm that he was able to watch from the boat, just got to the boat in time to stay dry. We have been using John's address to mail supplies and goodies to so he had quite the bag of goodies to bring.
The trip to Newport was more motoring than sailing but it was not raining so it was a good day on the boat, better than at work. We anchored between the New York Yacht Club and Ida Lewis, in the special anchorage area. There were a lot of boats here and other than re-anchoring a few times and then watching another boat all night it wasn't too bad. We were able to walk the town and see many of the old mansions that are around town.
We did get a decent sail with the spinnaker from Newport over to Block Island. The anchorage at Block was very vacant so we had a great spot to anchor and watch the boats in the harbor. Last year we bicycled the east end of the island so this year it was the west end. We rode out to the light house, not a bad ride other than the hill just before you get there. Since it was early in the day and Derek was wanting to play in the surf we decided to ride to the east end as well. Made it with a few aching muscles but Derek had a great time playing in the surf.
The trip back to Stonington was a great sail, 10-15 knots of wind and the boat moved along at 5-6 knots. The weather was cloudy and drizzly but it was an enjoyable trip back.
| Derek tried to get John to jump in too, but no luck | |
|
This is the fouth lighthouse for this spot |
|


STAY IN TOUCH
Sign up here to receive interesting updates
CLICKOnline hotel is Founded by Favour John and Victory Unogu.
They were guided by the zeal to finish their project early before presentation day,
their principles remain embedded in the company’s culture, growth and in everything we see today.
Taking care of people and their well-being is our most precious cultural inheritance.
Guided by our sustainability and social impact platform, Serve 360: Doing Good in Every Direction.
Online Hotel commits to creating positive and sustainable impact wherever we do business.
We're delighted to welcome you to our full-service expeience with premium accomodation and service.


|
14 October 2015 Mobile Consulate in Houston, TexasThe Consul General of the Kingdom of Morocco in New York is pleased to announce that the Mobile Consulate will be providing consular services to the Moroccan community residing in Houston, Texas, on October 22nd and 23rd, 2016. Click Here for additional information. |
|
14 October 201 Elections of October 7th 2016The Consul General of the Kingdom of Morocco in New York is pleased to announce that the Mobile Consulate will be providing consular services to the Moroccan community residing in Houston, Texas, on October 22nd and 23rd, 2016. Click Here for additional information. |
visist morocco
Morocco, a North African country bordering the Atlantic Ocean and Mediterranean Sea, is distinguished by its Berber, Arabian and European cultural influences. Marrakesh’s medina, a mazelike medieval quarter, offers entertainment in its Djemaa el-Fna square and souks (marketplaces) selling ceramics, jewelry and metal lanterns. The capital Rabat’s Kasbah of the Udayas is a 12th-century royal fort overlooking the water.
cultural agenda in NY
Morocco, a North African country bordering the Atlantic Ocean and Mediterranean Sea, is distinguished by its Berber, Arabian and European cultural influences. Marrakesh’s medina, a mazelike medieval quarter, offers entertainment in its Djemaa el-Fna square and souks (marketplaces) selling ceramics, jewelry and metal lanterns. The capital Rabat’s Kasbah of the Udayas is a 12th-century royal fort overlooking the water.


Meats (Coventry) LTD was the vision of managing director Paul Bickle. In 2004 Paul decided that there was a ed for a smaller family run wholesaler to fit into
his own niche amongst all the faceless multinationals that dominated the et. Through years of hard work and consistent attention to detail we have built up a brilliant team of hard working, cientious, caring employees determined to make customer service our number one priority, our list of contacts and suppliers grows.
year by year due to our genuine belief in being fair to all,from farmer through to the house wife! Our massive buying ility means we can pass the big savings directly onto you. Being a family owned and family run business we have 3 enerations currently working directly within the business, guaranteeing you, that you the customer really are our number one!
OPENING HOURS in the shop.
Thursday - 10am - 4pm ELDERLY, VULNERABLE AND KEY WORKERS ONLY
Friday - 10am - 7pm FOR EVERYONE
Saturday - 9am - 5pm FOR EVERYONE
Sunday - 10am - 4pm FOR EVERYONE
Opened in October 2011, following a dip in trade, due to the recession and hard trading times,
we had the idea “Lets open to the public and sell them the meat at wholesale price”.
We dedicated a large area of the factory, filled it with refrigeration and loaded the shelves with thousands of pounds of cut price meat.
We opened the door on that day and the people started coming… and coming, and coming!
Word started spreading! With that as well as personal recommendation being our best advertisement we regularly have thousands of people every
weekend coming to see what bargains they can pick up, what offers we can temp them with and what we can save their hard earned money on!
With many items up to half the regular supermarket prices whilst not cutting on quality or service it’s no surprise customers keep coming back!
4.1 average based on 254 reviews.
© Untitled. All rights reserved..


Who we are
We are a passionate team of engineers who believe strongly in creating technology for bettering humanity. We've taken up the challenge up solving the ever changing rubix cube of false news and misinformation, to do this we have bring a societal change. Our vision is to bring the rational thought to the world and to put a quality news app in the hands of everyone with a news app. We see a world where news is not just consumed, it is collaborated on by everyone.
How can we contact you?
You can email our team at<EMAIL_ADDRESS>ask us anything!


| PostgreSQL 9.0.10 Documentation | ||||
|---|---|---|---|---|
| Prev | Up | Chapter 31. libpq - C Library | Next |
libpq's event system is designed to notify registered event handlers about interesting libpq events, such as the creation or destruction of PGconn and PGresult objects. A principal use case is that this allows applications to associate their own data with a PGconn or PGresult and ensure that that data is freed at an appropriate time.
Each registered event handler is associated with two pieces of data,
known to libpq only as opaque void *
pointers. There is a passthrough pointer that is provided
by the application when the event handler is registered with a
PGconn. The passthrough pointer never changes for the
life of the PGconn and all PGresults
generated from it; so if used, it must point to long-lived data.
In addition there is an instance data pointer, which starts
out NULL in every PGconn and PGresult.
This pointer can be manipulated using the
PQinstanceData
,
PQsetInstanceData
,
PQresultInstanceData
and
PQsetResultInstanceData
functions. Note that
unlike the passthrough pointer, instance data of a PGconn
is not automatically inherited by PGresults created from
it. libpq does not know what passthrough
and instance data pointers point to (if anything) and will never attempt
to free them — that is the responsibility of the event handler.
The enum PGEventId names the types of events handled by the event system. All its values have names beginning with PGEVT. For each event type, there is a corresponding event info structure that carries the parameters passed to the event handlers. The event types are:
The register event occurs when PQregisterEventProc
is called. It is the ideal time to initialize any
instanceData an event procedure may need. Only one
register event will be fired per event handler per connection. If the
event procedure fails, the registration is aborted.
typedef struct { PGconn *conn; } PGEventRegister;
When a PGEVT_REGISTER event is received, the
evtInfo pointer should be cast to a
PGEventRegister *. This structure contains a
PGconn that should be in the
CONNECTION_OK status; guaranteed if one calls
PQregisterEventProc
right after obtaining a good
PGconn. When returning a failure code, all
cleanup must be performed as no PGEVT_CONNDESTROY
event will be sent.
The connection reset event is fired on completion of
PQreset
or PQresetPoll
. In
both cases, the event is only fired if the reset was successful. If
the event procedure fails, the entire connection reset will fail; the
PGconn is put into
CONNECTION_BAD status and
PQresetPoll
will return
PGRES_POLLING_FAILED.
typedef struct { PGconn *conn; } PGEventConnReset;
When a PGEVT_CONNRESET event is received, the evtInfo pointer should be cast to a PGEventConnReset *. Although the contained PGconn was just reset, all event data remains unchanged. This event should be used to reset/reload/requery any associated instanceData. Note that even if the event procedure fails to process PGEVT_CONNRESET, it will still receive a PGEVT_CONNDESTROY event when the connection is closed.
The connection destroy event is fired in response to
PQfinish
. It is the event procedure's
responsibility to properly clean up its event data as libpq has no
ability to manage this memory. Failure to clean up will lead
to memory leaks.
typedef struct { PGconn *conn; } PGEventConnDestroy;
When a PGEVT_CONNDESTROY event is received, the
evtInfo pointer should be cast to a
PGEventConnDestroy *. This event is fired
prior to PQfinish
performing any other cleanup.
The return value of the event procedure is ignored since there is no
way of indicating a failure from PQfinish
. Also,
an event procedure failure should not abort the process of cleaning up
unwanted memory.
The result creation event is fired in response to any query execution
function that generates a result, including
PQgetResult
. This event will only be fired after
the result has been created successfully.
typedef struct { PGconn *conn; PGresult *result; } PGEventResultCreate;
When a PGEVT_RESULTCREATE event is received, the
evtInfo pointer should be cast to a
PGEventResultCreate *. The
conn is the connection used to generate the
result. This is the ideal place to initialize any
instanceData that needs to be associated with the
result. If the event procedure fails, the result will be cleared and
the failure will be propagated. The event procedure must not try to
PQclear
the result object for itself. When returning a
failure code, all cleanup must be performed as no
PGEVT_RESULTDESTROY event will be sent.
The result copy event is fired in response to
PQcopyResult
. This event will only be fired after
the copy is complete. Only event procedures that have
successfully handled the PGEVT_RESULTCREATE
or PGEVT_RESULTCOPY event for the source result
will receive PGEVT_RESULTCOPY events.
typedef struct { const PGresult *src; PGresult *dest; } PGEventResultCopy;
When a PGEVT_RESULTCOPY event is received, the evtInfo pointer should be cast to a PGEventResultCopy *. The src result is what was copied while the dest result is the copy destination. This event can be used to provide a deep copy of instanceData, since PQcopyResult cannot do that. If the event procedure fails, the entire copy operation will fail and the dest result will be cleared. When returning a failure code, all cleanup must be performed as no PGEVT_RESULTDESTROY event will be sent for the destination result.
The result destroy event is fired in response to a
PQclear
. It is the event procedure's
responsibility to properly clean up its event data as libpq has no
ability to manage this memory. Failure to clean up will lead
to memory leaks.
typedef struct { PGresult *result; } PGEventResultDestroy;
When a PGEVT_RESULTDESTROY event is received, the
evtInfo pointer should be cast to a
PGEventResultDestroy *. This event is fired
prior to PQclear
performing any other cleanup.
The return value of the event procedure is ignored since there is no
way of indicating a failure from PQclear
. Also,
an event procedure failure should not abort the process of cleaning up
unwanted memory.
PGEventProc is a typedef for a pointer to an event procedure, that is, the user callback function that receives events from libpq. The signature of an event procedure must be
int eventproc(PGEventId evtId, void *evtInfo, void *passThrough)
The evtId parameter indicates which
PGEVT event occurred. The
evtInfo pointer must be cast to the appropriate
structure type to obtain further information about the event.
The passThrough parameter is the pointer
provided to PQregisterEventProc
when the event
procedure was registered. The function should return a non-zero value
if it succeeds and zero if it fails.
A particular event procedure can be registered only once in any PGconn. This is because the address of the procedure is used as a lookup key to identify the associated instance data.
| Caution |
On Windows, functions can have two different addresses: one visible from outside a DLL and another visible from inside the DLL. One should be careful that only one of these addresses is used with libpq's event-procedure functions, else confusion will result. The simplest rule for writing code that will work is to ensure that event procedures are declared static. If the procedure's address must be available outside its own source file, expose a separate function to return the address. |
PQregisterEventProc
Registers an event callback procedure with libpq.
int PQregisterEventProc(PGconn *conn, PGEventProc proc, const char *name, void *passThrough);
An event procedure must be registered once on each PGconn you want to receive events about. There is no limit, other than memory, on the number of event procedures that can be registered with a connection. The function returns a non-zero value if it succeeds and zero if it fails.
The proc argument will be called when a libpq event is fired. Its memory address is also used to lookup instanceData. The name argument is used to refer to the event procedure in error messages. This value cannot be NULL or a zero-length string. The name string is copied into the PGconn, so what is passed need not be long-lived. The passThrough pointer is passed to the proc whenever an event occurs. This argument can be NULL.
PQsetInstanceData
Sets the connection conn's instanceData for procedure proc to data. This returns non-zero for success and zero for failure. (Failure is only possible if proc has not been properly registered in conn.)
int PQsetInstanceData(PGconn *conn, PGEventProc proc, void *data);
PQinstanceData
Returns the connection conn's instanceData associated with procedure proc, or NULL if there is none.
void *PQinstanceData(const PGconn *conn, PGEventProc proc);
PQresultSetInstanceData
Sets the result's instanceData for proc to data. This returns non-zero for success and zero for failure. (Failure is only possible if proc has not been properly registered in the result.)
int PQresultSetInstanceData(PGresult *res, PGEventProc proc, void *data);
PQresultInstanceData
Returns the result's instanceData associated with proc, or NULL if there is none.
void *PQresultInstanceData(const PGresult *res, PGEventProc proc);
Here is a skeleton example of managing private data associated with libpq connections and results.
/* required header for libpq events (note: includes libpq-fe.h) */ #include <libpq-events.h> /* The instanceData */ typedef struct { int n; char *str; } mydata; /* PGEventProc */ static int myEventProc(PGEventId evtId, void *evtInfo, void *passThrough); int main(void) { mydata *data; PGresult *res; PGconn *conn = PQconnectdb("dbname = postgres"); if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "Connection to database failed: %s", PQerrorMessage(conn)); PQfinish(conn); return 1; } /* called once on any connection that should receive events. * Sends a PGEVT_REGISTER to myEventProc. */ if (!PQregisterEventProc(conn, myEventProc, "mydata_proc", NULL)) { fprintf(stderr, "Cannot register PGEventProc\n"); PQfinish(conn); return 1; } /* conn instanceData is available */ data = PQinstanceData(conn, myEventProc); /* Sends a PGEVT_RESULTCREATE to myEventProc */ res = PQexec(conn, "SELECT 1 + 1"); /* result instanceData is available */ data = PQresultInstanceData(res, myEventProc); /* If PG_COPYRES_EVENTS is used, sends a PGEVT_RESULTCOPY to myEventProc */ res_copy = PQcopyResult(res, PG_COPYRES_TUPLES | PG_COPYRES_EVENTS); /* result instanceData is available if PG_COPYRES_EVENTS was * used during the PQcopyResult call. */ data = PQresultInstanceData(res_copy, myEventProc); /* Both clears send a PGEVT_RESULTDESTROY to myEventProc */ PQclear(res); PQclear(res_copy); /* Sends a PGEVT_CONNDESTROY to myEventProc */ PQfinish(conn); return 0; } static int myEventProc(PGEventId evtId, void *evtInfo, void *passThrough) { switch (evtId) { case PGEVT_REGISTER: { PGEventRegister *e = (PGEventRegister *)evtInfo; mydata *data = get_mydata(e->conn); /* associate app specific data with connection */ PQsetInstanceData(e->conn, myEventProc, data); break; } case PGEVT_CONNRESET: { PGEventConnReset *e = (PGEventConnReset *)evtInfo; mydata *data = PQinstanceData(e->conn, myEventProc); if (data) memset(data, 0, sizeof(mydata)); break; } case PGEVT_CONNDESTROY: { PGEventConnDestroy *e = (PGEventConnDestroy *)evtInfo; mydata *data = PQinstanceData(e->conn, myEventProc); /* free instance data because the conn is being destroyed */ if (data) free_mydata(data); break; } case PGEVT_RESULTCREATE: { PGEventResultCreate *e = (PGEventResultCreate *)evtInfo; mydata *conn_data = PQinstanceData(e->conn, myEventProc); mydata *res_data = dup_mydata(conn_data); /* associate app specific data with result (copy it from conn) */ PQsetResultInstanceData(e->result, myEventProc, res_data); break; } case PGEVT_RESULTCOPY: { PGEventResultCopy *e = (PGEventResultCopy *)evtInfo; mydata *src_data = PQresultInstanceData(e->src, myEventProc); mydata *dest_data = dup_mydata(src_data); /* associate app specific data with result (copy it from a result) */ PQsetResultInstanceData(e->dest, myEventProc, dest_data); break; } case PGEVT_RESULTDESTROY: { PGEventResultDestroy *e = (PGEventResultDestroy *)evtInfo; mydata *data = PQresultInstanceData(e->result, myEventProc); /* free instance data because the result is being destroyed */ if (data) free_mydata(data); break; } /* unknown event id, just return TRUE. */ default: break; } return TRUE; /* event processing succeeded */ }


Internal Server Error
An internal server error has occurred. Please proceed to the main page.
Main Page
PrimeFaces Exception Handler


I needed a way to chronicle and showcase a growing list of projects for 25x52. Based on some quick research, Jekyll seemed like a good solution especially since my projects are hosted on Github.
Except I didn’t know Jekyll.
And all the Jekyll templates I found were either ugly or ill-suited since they were mostly intended to be blog clones.
So, out of necessity, I needed to make my own. And you’re looking at it.
Feel free to use it for your own project documentation. Fork it here: https://github.com/femmebot/jekyll-grid


The main purpose of this page is to maintain some academic and non academic things related to me. You can contact me using the links given in the right side.


Classes and interfaces supporting the client side of the HTTP protocol.
The HttpClient component supports the client-side of
RFC 1945 (HTTP/1.0) and
RFC 2616 (HTTP/1.1),
several related specifications
(RFC 2109 (Cookies),
RFC 2617 (HTTP Authentication),
etc.), and provides a framework by which new request types (methods) or HTTP
extensions can can be easily created or supported.
The basis for the abstraction is provided by three types:
- {@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.HttpConnection}
-
represents a network connection to some HTTP host.
- {@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.HttpMethod}
-
represents a request to be made over some
{@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.HttpConnection}
and contains the server's response.
- {@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.HttpState}
-
contains the HTTP attributes that may persist from
request to request, such as cookies and authentication
credentials.
and several simple bean-style classes:
- {@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.Cookie}
-
represents HTTP cookie.
- {@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.Credentials}
-
an interface representing a set of authentication credentials.
- {@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.Header}
-
represents an HTTP request or response header.
- {@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.HeaderElement}
-
represents a single element of a multi-part header.
- {@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.UsernamePasswordCredentials}
-
a username and password pair.
{@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.HttpClient} provides a
simple "user-agent" implementation that will suffice for many
applications, but whose use is not required.
HttpClient also provides several utilities that may be
useful when extending the framework:
- {@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.HttpMethodBase}
-
an abstract base implementation of HttpMethod,
which may be extended to create new method types or
to support additional protocol HTTP features.
- {@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.HttpStatus}
-
an enumeration of HttpStatus codes.
- {@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.ChunkedOutputStream}
-
an {@link java.io.OutputStream} wrapper supporting the "chunked"
transfer encoding.
- {@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.ChunkedInputStream}
-
an {@link java.io.InputStream} wrapper supporting the "chunked"
transfer encoding.
- {@link edu.internet2.middleware.grouperInstallerExt.org.apache.commons.httpclient.util.URIUtil}
-
provides utilities for encoding and decoding URI's in the
%HH format.
HttpClient Configuration with Java Properties
Java properties can be set at run time with the -Dname=value
command line arguments to the application that uses HttpClient.
These properties can also be set programaticly by calling
System.getProperties().setProperty(name, value)
.
This is the list of properties that HttpClient recognizes:
| Name |
Type |
Effect |
| httpclient.useragent |
String |
Sets the User-Agent string to be sent on every HTTP request. |
| httpclient.authentication.preemptive |
boolean |
Sends authorization credentials without requiring explicit requests
from the web server |


To Do
To Do
person
About the developer
toc
List view (beta)
Settings
brightness_medium
Toggle Dark mode


Contents
map.destroy()
Description
This function is the :removeSelf()
of Dusk. It deletes a map, along with all layers, tilesets, and any other resources the map has used. Make sure the map is set to nil
after using to eliminate chances of memory leaks.


Study %
ID ACB+LIA LIA WMD (95% Cl) Weight VAS with mobilization at 8h
Andersen 2013 EE —20.00 (-32.40,-7.60) 8.86 Perlas 2013 i 10.00 (5.82, 14.18) 14.59 Subtotal (|-squared = 95.0%, p = 0.000) —4.41 (-33.79, 24.97) 23.45 -P=0.769
VAS with mobilization at 24h
Andersen 2013 —10.00 (—27.80, 7.80) 6.03 Perlas 2013 3.00 (-4.80, 10.80) 12.10 Sawhney 2016 —— —0.80 (—9.59, 7.99) 11.37 Zhou 2017 —5.00 (-18.03, 8.03) 8.47 Subtotal (I-squared = 0.0%, p = 0.507) -0.57 (-5.68, 4.53) 37.96 P=0.825
VAS with mobilization at 48h
Andersen 2013 0.00 (-17.32, 17.32) 6.23 Perlas 2013 6.00 (—0.83, 12.83) 12.81 Sawhney 2016 4.70 (-4.47, 13.87) 11.08 Zhou 2017 —7.00 (-20.03, 6.03) 8.47 Subtotal (I-squared = 7.1%, p = 0.358) 3.19 (-1.95, 8.33) 38.59 P=0.224
Overall (I-squared = 71.0%, p = 0.000) ~037(-5.91,5.17) 100.00
NOTE: Weights are from random effects analysis


It was a bright summer day and it started with me and two of my friends having stayed up late the night before we woke up at about 12:00 noon and we had already planned on going swimming. Before my friends got up so around 11:30 I did a small 10mg line of MXE and was buzzed but not intoxicated off of that.
At this point I had finally decided to try about 60 milligrams of this memantine I had purchased weeks before but was scared to because of its long duration.
12:15 - I pop a pill that has roughly 60 milligrams of Memantine in it.
1:00 - We arrive at the beach that's just down the road after going for a small bike ride just before. The beach was pretty busy so we just sat at the table.
1:30 - While although I'm coming down from the small amount of MXE I can swear I'm feeling drunker. We are still sitting at the picnic table.
2:00 - Effects from the memantine are definitely more noticeable now as I continue to become more initiated and more talkative and silly like.
3:00 - Still at the picnic table talking away as I'm feeling pretty good and pretty intoxicated. It is a very DXM like intoxication feeling much different from MXE however because it's not at all speedy which is why I prefer dissociatives that do not increase dopamine levels. Although the 'drunk' feeling is a lot like DXM it doesn't quite match up to DXM's euphoric and magic effects but it's still quite decent. Not to mention I had the whole night of this coming up!
4:00 - So the beach finally clears and the 3 of us had been sitting in the same spot for hours! Feeling hilarious! At this point my friend A had invited one of his friends to come down who showed up shortly after 4 and he walked down from his car and talked to us for a bit. At this point it was time for us all to go swimming! The water was quite warm in the small lake we were by so we got in quite fast.
4:30 - I got back out of the water to run to the table and do a quick 20mg line of MXE. After I quickly ran back into the water and swam back out to the dock. Now when this kicked in.. my perception got even more shifty and hilarious while we were all jumping off the dock and getting back up. I was trying to do dives which I was always in the past too scared to try, let's just say I have more work to do. That and while jumping into the water it felt like I was snorting huge lines of water which felt worse than snorting anything else could of possibly felt. After we were done talking we pretty much just sat on the dock and talked which was fun and I was feeling pretty hilarious.
5:50 - At this time we finally got out of the water and dried off. The friend of my friend A gave my other two friends a ride back home while I biked back to my place.
6:00 - When getting back to my house I had come to remember that the night before when I first went to pick up my friends I had tripped over the Internet cable outside my house and I had not yet been able to get around to fixing it so I had to do that first because I just can't live without it. Finding out that when I tripped over the wire I had ripped the connector piece a part and would have to try and find a new one, try doing this on these dissociation! especially when my mind constantly keeps drifting off into space and I cannot for the life of it concentrate on one thing at a time!
7:00 - I kept loosing concentration and would repeat looking in the same spots over and over again accomplishing nothing. It wasn't until I began getting angry and frustrated with myself that I had to keep saying 'STAY ON TRACK' 'WE NEED TO FIX THIS' I would stop and get this irritable feeling that I was climbing a mountain. Having tried many different things that didn't work I finally found a connector piece that worked after having to discipline myself to stay on track.
9:00 - I must of been on the computer until about 9 when I decided to do some more MXE. I decided to go a little beyond where I usually go because I hadn't M-holed in awhile so I did a few small lines then did another few. when things began to get really intense and I began to M-hole. It felt as if I had fallen into another dimension and as I was walking around the house a sudden fear of encountering a spirit came to me and I began to get very scared. I decided to grab my laptop and go lay in the tub and while walking through the house I feared every corner I walked around.
9:15 - After finally getting into the tub and trying to create a more comfortable setting my fear went down and was manageable. It was a very intense experience but it wasn't uncomfortable or bad it was just a little scary. I pretty much just laid in the tub on the computer and listened to music and drifted through my mind feeling as if I was in a complete sense of emotion and that I wasn't really there I was just floating emotions.
10:30 - At this point having left the M-hole I got back out of the tub and headed back to my room where while I was still feeling the very DXM like drunk feeling, the last MXE was wearing off slowly. I don't think I ended up getting to sleep until around 1 am.
The next day I woke up at about noon and felt much more sober than the day before but there was still a pleasant yet bizarre dissociated and partially intoxicating like feeling most definitely. Of course after that day and night anything would feel sober! Even after biking back to town that day I could still feel the Memantine intoxication. It was probably completely gone by that night so as long as Memantine is taken early one day, it's wearing off by the time I wake up the next day and probably wouldn't interfere with anything I had to do. I must say though that it's an impressive substance!
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Ethics in Photography Abroad
During a lecture on the Ethics of Photography, that Dr. Paul Hester gave to the Loewenstern Fellows, I was reminded of the story of Kevin Carter. Carter was a South African photojournalist won the 1993 Pulitzer Prize for capturing a picture of a starving Sudanese child trying to reach the feeding center while a hungry vulture was waiting nearby.
This photograph is very controversial. Some critics claim that Carter had a moral obligation to help the child. Others claimed that the picture is a lie of omission. While the toddler seems abandoned in the picture, in reality, a photojournalist who accompanied Carter claim that the parents briefly left the child to get food from a UN plane. This picture reminds me that a camera is essentially a lens for the photographer's eye.
Taking a picture imposes one's biases onto the roll of film because those same biases color one's vision of reality. Just like added bolded words and italics influences the meaning of the preceding sentence, the choice of lighting, composition, and color influence the reaction that a photograph elicits. Furthermore, the biases of my audience influences how they interpret the photograph. I think the key in taking ethical photographs is clearly identifying possible biases and trying not to inject my own into the picture.
It is especially important that I take ethical photographs in Jinja because they are the first look into the city, district, and country for many of the viewers. It is hypocritical and wrong to exploit people's stories for the sake of a photograph, especially if I am only in the country to complete a project for them.
So, how do I take ethical photographs?
I asked Dr. Hester this same question. First, he emphasized that it is important to ask the permission of everyone in the photograph. Information about them is released to the public, so it is critical that everyone has consented to that.
Additionally, I should take pictures in a way that maintains the dignity of everyone involved. Kevin Carter's picture diminishes the dignity of the parents because it omits them from the frame, implying that they abandoned this child. Pictures of starving African children flood the booklets and websites of NGO's. While poverty is a somber reality, these pictures don't showcase the remarkable resiliency of the communities depicted. They don't showcase the success stories. To accomplish this, it is very useful to ask how the subjects in the photograph want to be depicted.
It is also useful to build a relationship with the subjects, if people are being photograph. If the subject of the photograph is an object or location, it is important to learn more about the context and history. These will help bring my perspective closer to the truth, however you define it. In the same vein, photographs should be faithfully edited as to not distort the image from reality.
All in all, I'm very excited to document my trip abroad. The lecture on the ethics of photography gave me some tools to do so in a responsible way.


| Aggregates | Simple class which holds aggregated values (MIN, MAX, FIRST, LAST, AVERAGE and TOTAL). |
| ArcDef | Class to represent single archive definition within the RRD. |
| Archive | Class to represent single RRD archive in a RRD with its internal state. |
| Archive | Instances of this class model an archive section of an RRD file. |
| ArcState | Class to represent internal RRD archive state for a single datasource. |
| CDPStatusBlock | Instances of this class model the consolidation data point status from an RRD file. |
| ConsolFun | Enumeration of available consolidation functions. |
| ConsolidationFunctionType | Class ConsolidationFunctionType |
| Converter | Simple utility class to convert RRD files created with RRDTool 1.0.x to Rrd4j's native RRD format. |
| CubicSplineInterpolator | Class used to interpolate datasource values from the collection of (timestamp, values) points using natural cubic spline interpolation. |
| DataChunk | Models a chunk of result data from an RRDatabase. |
| DataProcessor | Class which should be used for all calculations based on the data fetched from RRD files. |
| Datasource | Class to represent single datasource within RRD. |
| DataSource | Instances of this class model a data source in an RRD file. |
| DataSourceType | Class DataSourceType |
| Demo | Simple demo just to check that everything is OK with this library. |
| DsDef | Class to represent single data source definition within the RRD. |
| DsType | Enumeration of available datasource types. |
| Epoch | Small swing-based utility to convert timestamps (seconds since epoch) to readable dates and vice versa. |
| FetchData | Class used to represent data fetched from the RRD. |
| FetchRequest | Class to represent fetch request. |
| Header | Class to represent RRD header. |
| Header | Instances of this class model the header section of an RRD file. |
| HeartbeatFix |
| LinearInterpolator | Class used to interpolate datasource values from the collection of (timestamp, values) points. |
| PDPStatusBlock | Instances of this class model the primary data point status from an RRD file. |
| Plottable | Abstract class to be used for custom datasources. |
| Robin | Class to represent archive values for a single datasource. |
| RobinArray | Class to represent archive values for a single datasource. |
| RobinMatrix | Class to represent archive values for a single datasource. |
| RRDatabase | Instances of this class model Round Robin Database (RRD) files. |
| RrdBackend | Base implementation class for all backend classes. |
| RrdBackendFactory | Base (abstract) backend factory class which holds references to all concrete backend factories and defines abstract methods which must be implemented in all concrete factory implementations. |
| RrdBerkeleyDbBackend | Backend which is used to store RRD data to ordinary disk files using Oracle Berkeley DB Java Edition. |
| RrdBerkeleyDbBackendFactory | RrdBackendFactory that uses Oracle Berkeley DB Java Edition
to read data. |
| RrdByteArrayBackend | Abstract byte array based backend. |
| RrdDb | Main class used to create and manipulate round robin databases (RRDs). |
| RrdDbPool | |
| RrdDbPoolNew | |
| RrdDbPoolOld | This class should be used to synchronize access to RRD files in a multithreaded environment. |
| RrdDef | Class to represent definition of new Round Robin Database (RRD). |
| RrdDefTemplate | Class used to create an arbitrary number of RrdDef (RRD definition) objects
from a single XML template. |
| RRDFile | This class is a quick hack to read information from an RRD file. |
| RrdFileBackend | Backend which is used to store RRD data to ordinary files on the disk. |
| RrdFileBackendFactory | Factory class which creates actual RrdFileBackend objects. |
| RrdGraph | Class which actually creates Rrd4j graphs (does the hard work). |
| RrdGraphConstants | Class to represent various constants used for graphing. |
| RrdGraphConstants.FontConstructor | Font constructor, to use embedded fonts |
| RrdGraphDef | Class which should be used to define new Rrd4j graph. |
| RrdGraphDefTemplate | Class used to create an arbitrary number of RrdGraphDef (graph definition) objects from a single XML template. |
| RrdGraphInfo | Class to represent successfully created Rrd4j graph. |
| RrdInspector | Utility application (swing) to analyze, change and plot content of Rrd4j RRD files. |
| RrdMemoryBackend | Backend to be used to store all RRD bytes in memory. |
| RrdMemoryBackendFactory | Factory class which creates actual RrdMemoryBackend objects. |
| RrdNioBackend | Backend which is used to store RRD data to ordinary disk files using java.nio.* package. |
| RrdNioBackendFactory | Factory class which creates actual RrdNioBackend objects. |
| RrdSafeFileBackend | Backend which is used to store RRD data to ordinary files on the disk, using locking. |
| RrdSafeFileBackendFactory | Factory class which creates actual RrdSafeFileBackend objects. |
| RrdToolkit | Class used to perform various complex operations on RRD files. |
| Sample | Class to represent data source values for the given timestamp. |
| TimeParser | Class which parses at-style time specification (described in detail on the rrdfetch man page), used in all RRDTool commands. |
| TimeSpec | Simple class to represent time obtained by parsing at-style date specification (described in detail on the rrdfetch man page. |
| Util | Class defines various utility functions used in Rrd4j. |
| Util.Xml | Various DOM utility functions. |
| XmlTemplate | Class used as a base class for various XML template related classes. |
| XmlWriter | Extremely simple utility class used to create XML documents. |


Admission requirements for Bachelor programmes are:
•An entrance examination comparable to a upper secondary school leaving certificate
•Proof of proficiency in English, if the programme is taught in English
Admission requirements for Candidatus/Master programmes are:
•an internationally recognised Bachelor's degree
•proof of proficiency in English, if the programme is taught in English
To embark on a PhD, you generally need to have a Master's/Candidatus degree or equivalent.


AppSales [[APP_VERSION_BUILD]]
[[APP_VERSION_STATUS_TEXT]]
AppSales was originally created by Ole Zorn, and is now maintained and developed by Nicolas Gomollon, with help from many contributors.
The latest source code is available on GitHub.
Acknowledgements
A few images include icons from Glyphish.
AppSales uses FlagKit by Bowtie.
Copyright (c) 2015 Bowtie
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
AppSales uses FFGlobalAlertController by Eric Larson.
Copyright (c) 2015 Eric Larson<EMAIL_ADDRESS>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
AppSales uses MBProgressHUD by Matej Bukovinski.
Copyright (c) 2009-2015 Matej Bukovinski
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
AppSales uses SAMKeychain by Sam Soffes.
Copyright (c) 2010-2016 Sam Soffes, https://soff.es
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
AppSales uses ZIPArchive by Nicolas Gomollon.
Copyright (c) 2008 Aish<EMAIL_ADDRESS>Copyright (c) 2015 Nicolas Gomollon
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Guidelines for Learning Anything from Scratch
Posted on May 4, 2013
October 28th, 2010 is the day I started to learn programming from scratch all by myself. I built my first website in 6 months, got a programming job in 8 months, and begin to lead the development in a startup in 18 months and now I am still making progress and exploring new fields everyday.
This self-educating experience is both challenging and rewarding. To conquer obstacles and make the learning process effective, I’ve learned, tested and applied some principles of learning to my own studies.
Despite their effectiveness, these principles are often misunderstood or ignored by most people, even by education institutions. Thus I am sorting them out here and hope it might be helpful for you to apply some in your own studies.
Keep Yourself Motivated All the Time
Motivation matters.
Continuous effort is required to build skills and it is hard to commit that effort without being motivated during the whole learning process. People tend to give up shortly after they decided to start something new, even those who are highly motivated at the beginning.
Given any book series, the first volume always outsells later sequences; among curriculum provided by schools, introductory courses are more popular than advanced ones; in gym business, registered members are much more than regular ones. People tend to initialize something on a hunch but few will succeed to develop it into a hobby, fewer into a profession.
These phenomena are common because motivation doesn’t arrive naturally, deliberate effort is required to obtain that.
Realize the Difficulties and Set Proper Expectation
When people decide to initialize a learning process, they rarely vision the resulting tedious details, boring exercises and uncomfortable stretches. To learn a foreign language, memorizing the basic vocabulary, grammar and pronunciation is required before any serious reading and writing; to learn a music instrument, scale exercise is required to let the body play seamlessly with an instrument; to learn programming, basic syntaxes and tedious rules are required to work with computers.
The starting process is particularly difficult because it usually takes quite a long period before a beginner realizes the outcome of the effort. It might take several months to compose a paragraph in a foreign language, play one complete song or write a practical program. The beginning phase of learning is like the ‘death valley’ - dry, harsh and seems forever.
Frustration comes up when the initial expectation mismatches the reality. The illusion of an easy start and fancy progress vanishes shortly after the learning starts. When people realise learning as tedious and boring exercises with little progress, they easily become disappointed, self-doubting and later give up.
A prepared mind for those difficulties will avoid the frustration. When the tedious and boring exercise is within the initial expectaion, less frustration will occur when encounter them in reality.
When the learning has initialized, it is time to learn how to keep motivation along the way.
Seek Motivation Deliberately
Motivation could be collected from external source. You could deliberately look for materials which inspire you and it doesn’t need to be directly related to the fields you are studying. When I was learning programming, I collected short inspiring quotes deliberately and turn this collection into a site which I set as default home page in the browser. Those quotes fed me inspiration on a daily basis to move forward.
Motivation could be cultivated internally as well. The hunch which drives you to learning is a good place to start. Ask yourself why you want to acquire those skills in the first place. It’s okay the motivation doesn’t sound noble but it must matter to yourself. Once you dig out the motivation, keep reminding yourself of it - write down on paper, paste on the wall or set as screen saver etc.
Focus on Steps, One at a Time
A clear goal helps keep motivation high but narrowing yourself to that goal is counter-productive.
It is a good start to have a clear goal - speak Spanish with Latin friends, learn to cover your famous guitar song, write a program to crawl a website etc. . But if you only keep your eyes on the goals, the necessary exercises and effort become painful and unpleasant obstacles in order to reach that destination. The process itself becomes frustrating.
However, if you think on a broader scale, the destination doesn’t exist. Even for professionals, there is always space to improve. How would you tell that one writer has reached the “destination” of writing, or one musician has developed all the skills to perform music. Any endeavour is serious enough to commit a lifelong effort so that there is no destination but an endless journey with seemingly repetitive but rewarding daily activities.
Instead of feeling obliged and restricted about the boring and tedious exercises, it is better to embrace and enjoy this experience because this experience together with the resulting progress is the everything about learning.
Then focus on individual steps and pay attention to however tiny progress made every day. Be proud of how you’ve learned to pronounce a new word, how you could play the scale little faster, how you have grasped the meaning of a new syntax.
When focusing on the individual steps, positive feedback will be accumulating along the way, which will collectively serve as a greater momentum to move you forward.
Choose the Direction to Make Effort
Once you have learned to keep your motivation high, you are ready to invest your efforts in your studies.
For a beginner in one field, there are a lot of choices needed to be made. These choices certainly determine how much progress you might make along the way.
Start from the Basics
In any fields, there are several levels of concepts which might be exposed to you. Some are the basics. In learning a language, vocabulary, grammar and spelling are the basic; in programming, syntax, data structure, clauses are the basics; in guitar playing, chord switches, playing scales, picking and strumming are the basics.
There are also high level concepts. In learning a language, they include tones, choices of words, idioms; in programming, design pattern, abstraction, architecture; in guitar playing, musicality, negative spaces and dynamics.
These two kinds of concepts are usually exposed to a beginner simultaneously, but the higher concepts could not be fully understood without a comprehensive understanding of the lower ones. It is impossible to write a well-structured articles in one language if the author still struggles with the meaning and spelling of most of the vocabulary, same for a programmer to write an application when he is still confused by the syntaxes.
Despite the dependencies, beginners are inclined to learn the high-level concepts instead of low-level ones. This is reasonable tendency. Learning the basics usually requires plain, tedious, repeated exercises. Memorize vocabulary, do repetitive exercises, read dry documentation. These basics seem to have no relationship with the work carried out by experts. It is easily get bored practicing those basics. On the other hand, the ambiguity of high-level concepts makes them easily to be understood ‘in general’. This ‘general understanding’ creates an illusion in the beginners to believe they have grasped this concept by being able to talk about these concepts.
The attractiveness of high-level concepts will misguide the beginners to skip practicing the basics and jump to the high-level ones. This will in fact slow down the actual progress they could potentially make.
Slow is fast. For a beginner, it is more important to focus on the basics. Practice those basics until they become natural to the brain and the high level concepts will be built on top of those.
When in Doubt, Make Instinct Decision
Besides the choices between low-level ones and high-level ones, there are still a lot of detailed choices to be made for a beginner. Which dictionary should I purchase when learning Spanish? Which guitar should I play? Acoustic or electric? Which language should I use to start programming? Python, Ruby or C?
The answer is any one which you find most accessible and inspiring. These detailed choices don’t matter that much comparing with the effort to move forward. If you master the acoustic guitar, it won’t be hard to switch to an electric one; if you master Ruby, it only takes days to work with Python.
And those really important choices will reveal themselves to you later in the future when you are mature enough to distinguish the difference then.
So when you are in doubt, just follow the instinct and move forward.
Follow the Uncomfortable Zone
The starting experience is usually unpleasant. It might be hard to reason out a very simple sentence when studying a foreign language, hard to play the simplest scales, hard to write a small piece of program that doesn’t generate an error.
This hardness usually leads to frustration which stops beginners making progress. But why not see it as a sign of where breakthroughs can be made?
If you find some words very hard to understand, look up dictionaries to learn more examples about it; if you feel certain scales are hard to play, practice more on them and let the muscle memory get used to that; if you constantly make certain type of errors when programming, look up the documentation for more details.
This short term goals will also feed you motivation. With continuous effort, you will notice improvement on that particular spot quickly, this generates feeling of accomplishment and help to keep the morale high.
Conclusion
These are the principles that I have gleaned from my own learning experience and which, I believe, underlies what will really help you survive the ‘death valley of giving up’. To get through the hard beginning phase, you need to focus on small steps and put efforts on the basics. Do not worry about the choices you make, worry about the actions you are not about to make. You should live with the stretches and let the uncomfortable stretches guide you through the journey of learning.
Connect these principles with your successful learning experience and apply them into your next learning attempt. Happy Learning.
Thanks for Chenjie Ding for reading draft of this.


{% extends 'onboarding/base.html' %} {% block body %} {% load static %}
FAQ
Some frequently asked questions
What is WasteCoin?
Wastecoin is a waste currency just like Bitcoin that can be mined via this app. It is simply the reward for a good waste disposal habit.This reward can be exchanged for cash and other incentives.
How can i mine WasteCoins?
Wastecoin is a waste currency just like Bitcoin that can be mined via this app. It is simply the reward for a good waste disposal habit.This reward can be exchanged for cash and other incentives.
How do I redeem my coins?
Wastecoin is a waste currency just like Bitcoin that can be mined via this app. It is simply the reward for a good waste disposal habit.This reward can be exchanged for cash and other incentives.


sheetengine examples (test)
Creating a scene
Using custom textures
Creating / moving / rotating objects
Moving the camera
Animating objects
Animating sheet texture
Moving object sheets
Sprite animation
Hiding / showing objects
Rendering with zoom
Custom view transformations
Making sheets transparent
Static drawing
Collision detection
Selecting locations and objects
Adjusting the light source
Rendering large scenes
Rendering scenes on server side


You May Recall
John Venable from NIST presented last month.
(he is exceptionally tall)
True Story...
I am taller than John.
(in certain circumstances)
What Are We Trying To Do
In the process of moving from CommonSpot to Drupal. We need to meet or exceed CommonSpot's features.
- Fieldable files
- Revisionable files
- Add files from and insert files into the WYSIWYG
How are we doing it
Media module and...
- First implementation: John let's just use a file field
- Actual first implementation: custom module(s)
- Current implementation: Media 7.x-2.0, and others, complemented by custom modules
Living Dangerously
You're about to hear stuff like "dev branch" and "patch" - Media handling in Drupal is in flux.
Don't do this unless you are comfortable blowing things up and fixing it.
Contrib Modules
- Media 7.x-2.0-alpha3
- File Entiy 7.x-2.0-alpha3
- File entity Revisions 7.x-1.x-dev (and patches)
- Rabbit Hole (files) 7.x-2.23 (and patch)
- WYSIWYG 7.x-2.x-dev
Media
- Provides a framework for handling files, images, videos, etc
- Using 2.0-alpha over 1.x stable because of the file entity module
- Dev branch tends to break frequently
"...New is always better[, Ted]."
File Entity
- Adds an entity for files. Allows you to field files like you would nodes, users, etc
- Using 2.0-alpha; it is the most stable release
Rabbit Hole
-
Allows us to redirect anonymous users directly to the file from the file entity
- Doesn't tie us to a layout solution (panels could do this too)
-
Using latest stable and the following patch:
Custom Modules
- File Entity Link Display Mode
- Media Browser Override
File Entity Link Display Mode
Adds a display mode for file entities that links to the file entity, not the file itself.
Media Browser Override
Overrides (as cleanly as possible) some of Media 2's media browser WYSIWYG plugin functionality.
- Default to WYSIWYG display format
- Skip view mode form in the media browser
- Alter media browser plugin js
How everything fits together
-
Media provides the ground work
- Media browser WYSIWYG plugin (part of Media 2) allows us to add and insert media from a wyswiwyg
- File Entity and File Entity Revisions lets us interact with files like nodes
- Rabbit Hole allows us to have a link to the file that will always (within reason) be correct
- Custom modules fill in the gaps
<shameless-plug>
</shameless-plug>


| Scripts | 0!: |
| 0!:k y |
The script y is executed according to the digits (zero or one)
in the 3-digit decimal representation of k :
Sessions begin with (silent, stop) execution of 0!:0<'profile.ijs' | ||||||||||||
| 0!:2 y | The script y is expected to be a sequence of tautologies; 0!:2 y is like 0!:1 y but stops if any non-assigned noun result is not all 1 . | ||||||||||||
| 0!:3 y | Like 0!:2 y , but produces a 1 or 0 result according to whether the script passes (contains only tautologies) or fails. |


Literature values for the d10 lattice spacing
The following list summarizes the lattice spacings determined from the equatorial reflections from cardiac or skelatal muscle. The list is non-exhaustive and the authors would like to invite everyone to extend this list.
In order to do so, please register with Github, login to your account and become a collaborator of the Github account irpgoe. You can then directly edit this site using the tools appearing on the right side of this list on hovering with the mouse cursor over an entry in the list.
Please report any bugs or errors to the authors or directly correct the mistake. Thank you!
Example
Example
Example
Example