Welcome to the third project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with 'Implementation' in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a 'TODO'
statement. Please be sure to read the instructions carefully!
In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a 'Question X' header. Carefully read each question and provide thorough answers in the following text boxes that begin with 'Answer:'. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide.
Note: Code and Markdown cells can be executed using the Shift + Enter keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode.
In this project, you will analyze a dataset containing data on various customers' annual spending amounts (reported in monetary units) of diverse product categories for internal structure. One goal of this project is to best describe the variation in the different types of customers that a wholesale distributor interacts with. Doing so would equip the distributor with insight into how to best structure their delivery service to meet the needs of each customer.
The dataset for this project can be found on the UCI Machine Learning Repository. For the purposes of this project, the features 'Channel'
and 'Region'
will be excluded in the analysis — with focus instead on the six product categories recorded for customers.
Run the code block below to load the wholesale customers dataset, along with a few of the necessary Python libraries required for this project. You will know the dataset loaded successfully if the size of the dataset is reported.
# Import libraries necessary for this project
import numpy as np
import pandas as pd
import renders as rs
from IPython.display import display # Allows the use of display() for DataFrames
# Show matplotlib plots inline (nicely formatted in the notebook)
%matplotlib inline
# Load the wholesale customers dataset
try:
data = pd.read_csv("customers.csv")
data.drop(['Region', 'Channel'], axis = 1, inplace = True)
print "Wholesale customers dataset has {} samples with {} features each.".format(*data.shape)
except:
print "Dataset could not be loaded. Is the dataset missing?"
In this section, you will begin exploring the data through visualizations and code to understand how each feature is related to the others. You will observe a statistical description of the dataset, consider the relevance of each feature, and select a few sample data points from the dataset which you will track through the course of this project.
Run the code block below to observe a statistical description of the dataset. Note that the dataset is composed of six important product categories: 'Fresh', 'Milk', 'Grocery', 'Frozen', 'Detergents_Paper', and 'Delicatessen'. Consider what each category represents in terms of products you could purchase.
# Display a description of the dataset
display(data.describe())
To get a better understanding of the customers and how their data will transform through the analysis, it would be best to select a few sample data points and explore them in more detail. In the code block below, add three indices of your choice to the indices
list which will represent the customers to track. It is suggested to try different sets of samples until you obtain customers that vary significantly from one another.
# TODO: Select three indices of your choice you wish to sample from the dataset
indices = [0, 222, 342]
# Create a DataFrame of the chosen samples
samples = pd.DataFrame(data.loc[indices], columns = data.keys()).reset_index(drop = True)
print "Chosen samples of wholesale customers dataset:"
display(samples)
Consider the total purchase cost of each product category and the statistical description of the dataset above for your sample customers.
What kind of establishment (customer) could each of the three samples you've chosen represent?
Hint: Examples of establishments include places like markets, cafes, and retailers, among many others. Avoid using names for establishments, such as saying "McDonalds" when describing a sample customer as a restaurant.
Answer:
One interesting thought to consider is if one (or more) of the six product categories is actually relevant for understanding customer purchasing. That is to say, is it possible to determine whether customers purchasing some amount of one category of products will necessarily purchase some proportional amount of another category of products? We can make this determination quite easily by training a supervised regression learner on a subset of the data with one feature removed, and then score how well that model can predict the removed feature.
In the code block below, you will need to implement the following:
new_data
a copy of the data by removing a feature of your choice using the DataFrame.drop
function.sklearn.cross_validation.train_test_split
to split the dataset into training and testing sets.test_size
of 0.25
and set a random_state
.random_state
, and fit the learner to the training data.score
function.# TODO: Make a copy of the DataFrame, using the 'drop' function to drop the given feature
new_data = data.copy()
# TODO: Split the data into training and testing sets using the given feature as the target
y = new_data['Fresh'].copy()
X = new_data.drop('Fresh', 1)
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=72)
# TODO: Create a decision tree regressor and fit it to the training set
from sklearn.tree import DecisionTreeRegressor
regressor = DecisionTreeRegressor(random_state=72)
regressor.fit(X_train, y_train)
# TODO: Report the score of the prediction using the testing set
score = regressor.score(X_test, y_test)
print score
Which feature did you attempt to predict? What was the reported prediction score? Is this feature is necessary for identifying customers' spending habits?
Hint: The coefficient of determination, R^2
, is scored between 0 and 1, with 1 being a perfect fit. A negative R^2
implies the model fails to fit the data.
Answer: The feature I was attempting to predict was the Fresh. The prediction score I've found, using the Decision Tree Regressor -1.21236771823l. As my R^2 was negative I am assuming that the model failed to fit the data, that way, this feature looked to not have a strong relation with any of the other features. The final conclusion, about the role of the feature Fresh in model, is that it have a high Relevance to model as it was not possible to predict its value only by using the information shared with the other features from the model.
To get a better understanding of the dataset, we can construct a scatter matrix of each of the six product features present in the data. If you found that the feature you attempted to predict above is relevant for identifying a specific customer, then the scatter matrix below may not show any correlation between that feature and the others. Conversely, if you believe that feature is not relevant for identifying a specific customer, the scatter matrix might show a correlation between that feature and another feature in the data. Run the code block below to produce a scatter matrix.
# Produce a scatter matrix for each pair of features in the data
pd.scatter_matrix(data, alpha = 0.3, figsize = (14,8), diagonal = 'kde');
Are there any pairs of features which exhibit some degree of correlation? Does this confirm or deny your suspicions about the relevance of the feature you attempted to predict? How is the data for those features distributed?
Hint: Is the data normally distributed? Where do most of the data points lie?
Answer:
Most of the points lie close to zero, showing that most of the features are independent. But there is pair the show a good correlation, the pair Detergents_Paper x Grocery. We can also see some correlation, not strong as the other but considerable between the pair Detergents_Paper x Milk and between Milk x Grocery After my analysis I assumed that Fresh is an important feature, but I would probably remove Detergents_Paper and Milk from the data as Grocery will be there to representing them.
In this section, you will preprocess the data to create a better representation of customers by performing a scaling on the data and detecting (and optionally removing) outliers. Preprocessing data is often times a critical step in assuring that results you obtain from your analysis are significant and meaningful.
If data is not normally distributed, especially if the mean and median vary significantly (indicating a large skew), it is most often appropriate to apply a non-linear scaling — particularly for financial data. One way to achieve this scaling is by using a Box-Cox test, which calculates the best power transformation of the data that reduces skewness. A simpler approach which can work in most cases would be applying the natural logarithm.
In the code block below, you will need to implement the following:
log_data
after applying a logarithm scaling. Use the np.log
function for this.log_samples
after applying a logrithm scaling. Again, use np.log
.# TODO: Scale the data using the natural logarithm
log_data = np.log(data)
# TODO: Scale the sample data using the natural logarithm
log_samples = np.log(samples)
# Produce a scatter matrix for each pair of newly-transformed features
pd.scatter_matrix(log_data, alpha = 0.3, figsize = (14,8), diagonal = 'kde');
After applying a natural logarithm scaling to the data, the distribution of each feature should appear much more normal. For any pairs of features you may have identified earlier as being correlated, observe here whether that correlation is still present (and whether it is now stronger or weaker than before).
Run the code below to see how the sample data has changed after having the natural logarithm applied to it.
# Display the log-transformed sample data
display(log_samples)
Detecting outliers in the data is extremely important in the data preprocessing step of any analysis. The presence of outliers can often skew results which take into consideration these data points. There are many "rules of thumb" for what constitutes an outlier in a dataset. Here, we will use Tukey's Method for identfying outliers: An outlier step is calculated as 1.5 times the interquartile range (IQR). A data point with a feature that is beyond an outlier step outside of the IQR for that feature is considered abnormal.
In the code block below, you will need to implement the following:
Q1
. Use np.percentile
for this.Q3
. Again, use np.percentile
.step
.outliers
list.NOTE: If you choose to remove any outliers, ensure that the sample data does not contain any of these points!
Once you have performed this implementation, the dataset will be stored in the variable good_data
.
#Inicialize uma lista vazia de indices_outliers
outliers_dict = dict()
# For each feature find the data points with extreme high or low values
for feature in log_data.keys():
# TODO: Calculate Q1 (25th percentile of the data) for the given feature
Q1 = np.percentile(log_data[feature], 25)
# TODO: Calculate Q3 (75th percentile of the data) for the given feature
Q3 = np.percentile(log_data[feature], 75)
# TODO: Use the interquartile range to calculate an outlier step (1.5 times the interquartile range)
step = 1.5 * (Q3 - Q1)
# Display the outliers
print "Data points considered outliers for the feature '{}':".format(feature)
outlier = log_data[~((log_data[feature] >= Q1 - step) & (log_data[feature] <= Q3 + step))]
display(outlier)
#Iterate over outliers from the current feature and add them to the outliers_dict
for key in outlier.index.values:
if key in outliers_dict:
outliers_dict[key] += 1
else:
outliers_dict[key] = 1
# OPTIONAL: Select the indices for data points you wish to remove
outliers = list()
for key, value in outliers_dict.items():
if value > 1:
outliers.append(key)
# Remove the outliers, if any were specified
good_data = log_data.drop(log_data.index[outliers]).reset_index(drop = True)
Are there any data points considered outliers for more than one feature based on the definition above? Should these data points be removed from the dataset? If any data points were added to the outliers
list to be removed, explain why.
Answer:
I've found some data points considered outliers in our dataset. By being an outlier, before considering the possible elimination of these points from the data, I've reviewed the data distrubtion seeking the understanding of why they appeared in the dataset. After assuming they were really outliers, and confirming that a few of them were present in more than one feature I've considered those as bad data points for our data analysis and I decided to remove them from the dateaset.
In this section you will use principal component analysis (PCA) to draw conclusions about the underlying structure of the wholesale customer data. Since using PCA on a dataset calculates the dimensions which best maximize variance, we will find which compound combinations of features best describe customers.
Now that the data has been scaled to a more normal distribution and has had any necessary outliers removed, we can now apply PCA to the good_data
to discover which dimensions about the data best maximize the variance of features involved. In addition to finding these dimensions, PCA will also report the explained variance ratio of each dimension — how much variance within the data is explained by that dimension alone. Note that a component (dimension) from PCA can be considered a new "feature" of the space, however it is a composition of the original features present in the data.
In the code block below, you will need to implement the following:
sklearn.decomposition.PCA
and assign the results of fitting PCA in six dimensions with good_data
to pca
.log_samples
using pca.transform
, and assign the results to pca_samples
.from sklearn.decomposition import PCA
# TODO: Apply PCA by fitting the good data with the same number of dimensions as features
pca = PCA(6)
pca.fit(good_data)
# TODO: Transform the sample log-data using the PCA fit above
pca_samples = pca.transform(log_samples)
# Generate PCA results plot
pca_results = rs.pca_results(good_data, pca)
np.cumsum(pca.explained_variance_ratio_)
How much variance in the data is explained in total by the first and second principal component? What about the first four principal components? Using the visualization provided above, discuss what the first four dimensions best represent in terms of customer spending.
Hint: A positive increase in a specific dimension corresponds with an increase of the positive-weighted features and a decrease of the negative-weighted features. The rate of increase or decrease is based on the indivdual feature weights.
Answer:
The variance for the first and second components is equals to 0.7068 or around 70%. If we count with the first four principal components the variance becomes 0.9311 or around 90%.
Considering that an increase in a specific dimension corresponds with an increase of the positive-weighted features and a decrease of the negative-weighted features the fisrt four dimensions can be analyzed as:
Dimension 1 Seems to be an area primarly focused in Detergents_Paper (weight close to 0.8) follwed by Grocery and Milk (around 0.4). There is negative weights on Fresh and Frozen. So I think it describes a Retailer.
Dimension 2 Seems to be an area well distributed in consume, but we can notice Fresh and top weight (around 0.7) follwed by Frozen and Delicatessen equaly important (around 0.5). Because of the occurence of all features at this dimension and the preseted weights I think it describes a Market.
Dimension 3 Seems to be an area extremely focused in Delicatessen (around 0.7) and Frozen (around 0.4), it is also important to notice that there is a significant negative weight on Fresh (around -0.8). Our Customer 342 (from question 1) fits here. This dimension describes something like a Small Cofe or an Ice Cream Shop.
Dimension 4 Seems to be an area where Frozen goods is very important (around 0.8) the other positive feature is Detergents_Paper (but is not that significant). Our Customer 222 (from question 1) fits here our very busy modern family.
Run the code below to see how the log-transformed sample data has changed after having a PCA transformation applied to it in six dimensions. Observe the numerical value for the first four dimensions of the sample points. Consider if this is consistent with your initial interpretation of the sample points.
# Display sample log-data after having a PCA transformation applied
display(pd.DataFrame(np.round(pca_samples, 4), columns = pca_results.index.values))
When using principal component analysis, one of the main goals is to reduce the dimensionality of the data — in effect, reducing the complexity of the problem. Dimensionality reduction comes at a cost: Fewer dimensions used implies less of the total variance in the data is being explained. Because of this, the cumulative explained variance ratio is extremely important for knowing how many dimensions are necessary for the problem. Additionally, if a signifiant amount of variance is explained by only two or three dimensions, the reduced data can be visualized afterwards.
In the code block below, you will need to implement the following:
good_data
to pca
.good_data
using pca.transform
, and assign the reuslts to reduced_data
.log_samples
using pca.transform
, and assign the results to pca_samples
.from sklearn.decomposition import PCA
# TODO: Apply PCA by fitting the good data with only two dimensions
pca = PCA(2)
pca.fit(good_data)
# TODO: Transform the good data using the PCA fit above
reduced_data = pca.transform(good_data)
# TODO: Transform the sample log-data using the PCA fit above
pca_samples = pca.transform(log_samples)
# Create a DataFrame for the reduced data
reduced_data = pd.DataFrame(reduced_data, columns = ['Dimension 1', 'Dimension 2'])
Run the code below to see how the log-transformed sample data has changed after having a PCA transformation applied to it using only two dimensions. Observe how the values for the first two dimensions remains unchanged when compared to a PCA transformation in six dimensions.
# Display sample log-data after applying PCA transformation in two dimensions
display(pd.DataFrame(np.round(pca_samples, 4), columns = ['Dimension 1', 'Dimension 2']))
In this section, you will choose to use either a K-Means clustering algorithm or a Gaussian Mixture Model clustering algorithm to identify the various customer segments hidden in the data. You will then recover specific data points from the clusters to understand their significance by transforming them back into their original dimension and scale.
What are the advantages to using a K-Means clustering algorithm? What are the advantages to using a Gaussian Mixture Model clustering algorithm? Given your observations about the wholesale customer data so far, which of the two algorithms will you use and why?
Answer:
K-Means Clustering Algorithm Simpliest, easy to implement, the number of clusters is defined by the user and most of time it's fast and efficient than the other clustering algorithms (considering you have a reduced number of Ks).
Gaussian Mixture Model Clustering Algorithm better to find hidden parameters in data, more flexible to identify clusters by allowing a point to be classified by more than one cluster (mixture). As the K-means, this alorigthm have the number of clusters defined by the user, what do not happen in other algorithms like the hierachical clustering.
I am still not confortable with the classification of the customers, so I think Gaussian Mixture Model will help me to see if I have any hidden cluster or, at least, confirm how the data its being classified.
Depending on the problem, the number of clusters that you expect to be in the data may already be known. When the number of clusters is not known a priori, there is no guarantee that a given number of clusters best segments the data, since it is unclear what structure exists in the data — if any. However, we can quantify the "goodness" of a clustering by calculating each data point's silhouette coefficient. The silhouette coefficient for a data point measures how similar it is to its assigned cluster from -1 (dissimilar) to 1 (similar). Calculating the mean silhouette coefficient provides for a simple scoring method of a given clustering.
In the code block below, you will need to implement the following:
reduced_data
and assign it to clusterer
.reduced_data
using clusterer.predict
and assign them to preds
.centers
.pca_samples
and assign them sample_preds
.reduced_data
against preds
.score
and print the result.# TODO: Apply your clustering algorithm of choice to the reduced data
from sklearn.mixture import GMM
from sklearn import metrics
def silhouette_by_cluster(cluster):
clusterer = GMM(cluster).fit(reduced_data)
# TODO: Predict the cluster for each data point
preds = clusterer.predict(reduced_data)
# TODO: Find the cluster centers
centers = clusterer.means_
# TODO: Predict the cluster for each transformed sample data point
sample_preds = clusterer.predict(pca_samples)
# TODO: Calculate the mean silhouette coefficient for the number of clusters chosen
score = metrics.silhouette_score(reduced_data, preds)
return score
for cluster in range(2, 9):
print("{} Clusters: {}".format(cluster, silhouette_by_cluster(cluster)))
Report the silhouette score for several cluster numbers you tried. Of these, which number of clusters has the best silhouette score?
Answer:
2 Clusters: 0.411818864386
3 Clusters: 0.372313708076
4 Clusters: 0.337969395886
5 Clusters: 0.280672691612
6 Clusters: 0.278739044291
7 Clusters: 0.321289330242
8 Clusters: 0.304106857662
The best silhouette Score was found using 2 Clusters.
Once you've chosen the optimal number of clusters for your clustering algorithm using the scoring metric above, you can now visualize the results by executing the code block below. Note that, for experimentation purposes, you are welcome to adjust the number of clusters for your clustering algorithm to see various visualizations. The final visualization provided should, however, correspond with the optimal number of clusters.
# Display the results of the clustering from implementation
rs.cluster_results(reduced_data, preds, centers, pca_samples)
Each cluster present in the visualization above has a central point. These centers (or means) are not specifically data points from the data, but rather the averages of all the data points predicted in the respective clusters. For the problem of creating customer segments, a cluster's center point corresponds to the average customer of that segment. Since the data is currently reduced in dimension and scaled by a logarithm, we can recover the representative customer spending from these data points by applying the inverse transformations.
In the code block below, you will need to implement the following:
centers
using pca.inverse_transform
and assign the new centers to log_centers
.np.log
to log_centers
using np.exp
and assign the true centers to true_centers
.# TODO: Inverse transform the centers
log_centers = pca.inverse_transform(centers)
# TODO: Exponentiate the centers
true_centers = np.exp(log_centers)
# Display the true centers
segments = ['Segment {}'.format(i) for i in range(0,len(centers))]
true_centers = pd.DataFrame(np.round(true_centers), columns = data.keys())
true_centers.index = segments
display(true_centers)
Consider the total purchase cost of each product category for the representative data points above, and reference the statistical description of the dataset at the beginning of this project. What set of establishments could each of the customer segments represent?
Hint: A customer who is assigned to 'Cluster X'
should best identify with the establishments represented by the feature set of 'Segment X'
.
Answer:
A customer who is assigned to the Cluster 0, by considering segment 0, is customer that represents a Restaurant as it have high values associeted with Grocery and is well distributed among Fresh, Milk and Detergents.
A customer who is assinged to the Cluster 1, by considering segment 1, is a customer highly associated with Fresh food, and have a low cost of Detergents_paper. Looks to be a Fresh Market.
For each sample point, which customer segment from Question 8 best represents it? Are the predictions for each sample point consistent with this?
Run the code block below to find which cluster each sample point is predicted to be.
# Display the predictions
for i, pred in enumerate(sample_preds):
print "Sample point", i, "predicted to be in Cluster", pred
Answer:
Sample 0: Was assigned to Cluster 0, Restaurant, I've originally assigned this customer to an Italian Restaurant. I belive this classification was done right, pretty consistent.
Sample 1: Was assigned to Cluster 1, Fresh Market, I've originally assigned this customer to a very busy familiy, but now it looks to be Fresh Market. It's center showed more Frozen costs associated than with the other segment, but not as much as the sample point presented. This lead me to consider the sample was like Busy Families living by Frozen foods. I think my observation was wrong (probably an outlier).
Sample 2: Was assigned to Cluster 0, Restaurant, I've originally assigned this customer to a Small Cafe. I think it was pretty close, I assume it was consistent enough.
In this final section, you will investigate ways that you can make use of the clustered data. First, you will consider how the different groups of customers, the customer segments, may be affected differently by a specific delivery scheme. Next, you will consider how giving a label to each customer (which segment that customer belongs to) can provide for additional features about the customer data. Finally, you will compare the customer segments to a hidden variable present in the data, to see whether the clustering identified certain relationships.
Companies will often run A/B tests when making small changes to their products or services to determine whether making that change will affect its customers positively or negatively. The wholesale distributor is considering changing its delivery service from currently 5 days a week to 3 days a week. However, the distributor will only make this change in delivery service for customers that react positively. How can the wholesale distributor use the customer segments to determine which customers, if any, would reach positively to the change in delivery service?
Hint: Can we assume the change affects all customers equally? How can we determine which group of customers it affects the most?
Answer:
The wholesale distributor should use the segments produced by our PCA, dividing its customers in 2 segments. As they behave differently, they should not be considered as one.
To better apply this test, the distributor should select a few customers from each segment and create a "Pilot", only customers from the Pilot will have their delivery service changed. The distributor needs to be aware of the average amount spent by those customers, and also consider the values from same period of the year (in the past).
That way, after a pre-determined period of analysis and test of this new delivery model on its Pilot customers, the distributor can compare the amounts and values and check if they were lower (negative reaction) equal or greather (positive reaction).
Additional structure is derived from originally unlabeled data when using clustering techniques. Since each customer has a customer segment it best identifies with (depending on the clustering algorithm applied), we can consider 'customer segment' as an engineered feature for the data. Assume the wholesale distributor recently acquired ten new customers and each provided estimates for anticipated annual spending of each product category. Knowing these estimates, the wholesale distributor wants to classify each new customer to a customer segment to determine the most appropriate delivery service.
How can the wholesale distributor label the new customers using only their estimated product spending and the customer segment data?
Hint: A supervised learner could be used to train on the original customers. What would be the target variable?
Answer:
This looks to be a classification problem. In our case, we would need to classify the new customers in one of the two segments we have defined (wich segment will be our target variable).
At the beginning of this project, it was discussed that the 'Channel'
and 'Region'
features would be excluded from the dataset so that the customer product categories were emphasized in the analysis. By reintroducing the 'Channel'
feature to the dataset, an interesting structure emerges when considering the same PCA dimensionality reduction applied earlier to the original dataset.
Run the code block below to see how each data point is labeled either 'HoReCa'
(Hotel/Restaurant/Cafe) or 'Retail'
the reduced space. In addition, you will find the sample points are circled in the plot, which will identify their labeling.
# Display the clustering results based on 'Channel' data
rs.channel_results(reduced_data, outliers, pca_samples)
How well does the clustering algorithm and number of clusters you've chosen compare to this underlying distribution of Hotel/Restaurant/Cafe customers to Retailer customers? Are there customer segments that would be classified as purely 'Retailers' or 'Hotels/Restaurants/Cafes' by this distribution? Would you consider these classifications as consistent with your previous definition of the customer segments?
Answer:
The clustering algorithm (plus the number of clusters) applied into my research looks pretty similar to the underlying distribution of Hotel/Restaurant/Cafe customers to Retailer customers, they are both following the best silhouette score produced by the chosen 2 Clusters only.
For my first Cluster (0): I've considered this cluster a Restaurant like, and in this example it was classified as Hotel/Restaurant/Cafe. I think it was very aligned with my classifcation, however it still looks to be to much generic and presenting some points that are presenting a mixed behavior.
For my second Cluser (1): I've considered this cluster a Market like, and in this example it was classified as Retailer. I think it was also aligned with my original classification, even not being directly set as retailer by me, I think a Market like classification means pretty much the same.
After this project I saw that it is better to use the segments identified by Clustering Algorithms instead of labels we used assign based on superficial analysis. The use of Clustering helped us to identify segments that are really similar like Hotels/Restaurants/Cafes and that would probably being considerated differents by the common Labeling approach. Lessons Learnt: always classify based on Data analysis than simply trust in pre-defined labels.
Note: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to
File -> Download as -> HTML (.html). Include the finished document along with this notebook as your submission.


--- title: What permalink: /what/ layout: default excerpt: The technologies we use and the brands we are associated to. ---
The Brands and technologies we work with.
{{report.description}}


MR. DEATH: THE RISE AND FALL OF FRED A. LEUCHTER, JR. (Lions Gate) Featuring: Fred A. Leuchter Jr., Robert Jan van Pelt, Ernst Zundel, James Roth. Producers: Michael Williams, David Collins, Dorothy Aufiero and Errol Morris. Director: Errol Morris. MPAA Rating: PG-13 (adult themes, mild profanity) Running Time: 90 minutes. Reviewed by Scott Renshaw.
We're going to have to create a new designation for Errol Morris, because "documentary filmmaker" just doesn't seem to cut it. Yes, Morris' subjects have all been real-life people in films like THE THIN BLUE LINE, A BRIEF HISTORY OF TIME and FAST, CHEAP & OUT OF CONTROL. He has also opted to up the ante for what a non-fiction film can be, staging visually compelling vignettes or using re-creations to impose his artistic vision on the story he's trying to tell. It's no wonder Morris' films have consistently been overlooked by the more tradition-bound documentarians of the Motion Picture Academy. Call him a maker of non-fiction films if you must ... or simply a director.
With MR. DEATH: THE RISE AND FALL OF FRED A. LEUCHTER, JR., Errol Morris has given us another reason to toss out the term "documentary filmmaker" -- as striking as the film is, it sometimes feels a bit thin on background detail. Morris' latest subject is another man with a unique obsessive interest: Fred A. Leuchter, Jr., a Massachusetts-based execution technology enthusiast. After becoming aware of the horrendous quality of most capital punishment equipment, Leuchter became an expert in designing more effectvie and humane electric chairs, lethal injection machines and gas chambers for states' prison systems. His expertise in this field led him down a life-changing road when he was asked to be a witness in the defense of Ernst Zundel, a revisionist historian charged in Canada with disseminating propaganda denying the truth of the Holocaust. After visiting the ruins of the Nazi camps at Auschwitz, Birkenau and Majdanek, Leuchter concludes that they could not have included gas chambers. While his "Leuchter Report" was not admitted at the trial, it has become one of the most widely disseminated pieces of "evidence" for those who claim there was no Holocaust.
Leuchter's involvement in the 1988 Zundel trial begins a downward spiral in his career, as states terminate contracts and Holocaust remembrance groups assail the science in his report (chemist James Roth, who performed the "Leuchter Report" tests, supports the contention that Leuchter's tests were miserably designed). While activists argue that Leuchter's work for revisionist groups marks him an anti-Semite, Morris paints a slightly different picture. Leuchter becomes a vivid character in the film, a "mouse of a man" (in Zundel's words) with a Boston Brahmin accent and an unshakeable conviction that he is right. He comes off as a unique sort of egotist, a man so used to playing God in his manufacture of instruments of death that infallibility becomes part of his self-image.
It would be a helpful bit of information in the formation of that picture for us to know that Leuchter's academic background had nothing to do with engineering or chemistry, but was in fact in history. Though Leuchter does discuss a move by the state of Massachusetts to prosecute him as an unlicensed engineer late in the film, his background would seem to be much more important than the casual inclusion Morris gives it. In fact, MR. DEATH leaves much about Leuchter only peripherally explored: his relationship with his wife of only a few months (who speaks but does not appear on screen); his reactions to the fame/infamy inspired by the "Leuchter Report;" his strangely superstitious response to a mysterious image in a photo of one of his electric chairs. Morris lets Leuchter talk about himself for a very long time, but he doesn't probe. In this case, the approach leaves holes in the story.
That doesn't make MR. DEATH a failure as a film. Indeed, a less-than-perfect Errol Morris documentary is still infinitely more watchable than most conventional documentaries. Some viewers may find his stylized renderings of his subject -- Leuchter the coffee addict reflected in a cup of coffee; Leuchter filmed between flashing electrodes like a modern Dr. Frankenstein -- distracting or inappropriate. Others will find them part of Morris' ongoing reinvention of the form. It is surprising, however, that this may be the first Morris' documentary that's more interesting as a cinematic experience than it is as a learning experience. As a documentarian, Morris is a singular artist. In Fred Leuchter, he's left an enigmatic unfinished portrait.
On the Renshaw scale of 0 to 10 depth penalties: 7.
Visit Scott Renshaw's Screening Room http://www.inconnect.com/~renshaw/ *** Subscribe to receive new reviews directly by email! See the Screening Room for details, or reply to this message with subject "Subscribe".
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Millionaire's son handed jail delay despite booze attack spotted partying in Barbados bar
Oliver George, 26, was allowed to jet off to enjoy 31C sunshine for 'alcohol treatment sessions' - despite a conviction for terrorising a barman with a fake firearm
by Dan WarburtonClutching a drink in Barbados, millionaire’s son Oliver George looks like any other sunseeker.
But the gun thug, 26, was actually enjoying an amazing pre-jail jaunt to the Caribbean – sanctioned by the courts.
Despite a conviction for terrorising a barman with a fake firearm, he was allowed to jet off to enjoy 31C sunshine.
George was granted unconditional bail after telling a court he was going to the Caribbean for alcohol treatment sessions.
But he found time to trawl a string of bars in between zipping round on a golf buggy.
At one bar he even boasted of being a “Gypsy gangster” and a “celebrity millionaire”.
Last night the holiday snaps were branded “extraordinary” by victims’ rights campaigners.
We tracked George down to the party resort of Holetown, near his family’s £1million villa close to the £1,500-a-night Sandy Lane Hotel celeb haunt.
Wearing what he boasted were £1,500 glasses with 18ct gold inlays, he downed Baby Guinness shots, a mixture of Baileys and Kahlua, at £9 each.
Elsewhere on the island he necked Grey Goose vodka and enjoyed expensive meals.
At the West Bar he spent over £50 in a matter of minutes on shots, telling drinkers: “I’ve been in all the papers for getting a six-month jail sentence. I’m a nasty man.”
He called himself “Ollie George aka George Best”, referring to the footie idol who drank his way to an early grave.
He was also spotted partying at the 1627 Bar and Lounge.
George will be jailed for up to six months when he returns to court in Dorset in three weeks.
He admitted flashing an imitation pistol when he was refused Prosecco at a yacht club in exclusive Sandbanks by a barman he called a “p***y”.
George convinced Poole magistrates to allow him to go on a family trip by producing a £1,100 ticket booked 16 days before the offence happened.
His solicitor Terry Scanlan told the court he would see a doctor three times a week for “alcohol-related issues”, saying: “For all sorts of reasons, there are benefits to this trip.”
Prosecutor Ryan Seneviratne did not object to the delay.
George, whose father owns 35,000 sq ft Wimborne Market in Dorset, is now back in Britain and due in court again on December 4. When we approached him at his home, his mother said he would not comment.
Victims’ rights campaigner Harry Fletcher said: “A different person with no financial resources would not have been allowed to go on holiday.”


WINDMC
Section: GNU Development Tools (1)Updated: 2012-06-22
Index Return to Main Contents
NAME
windmc - generates Windows message resources.SYNOPSIS
DESCRIPTION
windmc reads message definitions from an input file (.mc) and translate them into a set of output files. The output files may be of four kinds:- h
- A C header file containing the message definitions.
- rc
- A resource file compilable by the windres tool.
- bin
- One or more binary files containing the resource data for a specific message language.
- dbg
- A C include file that maps message id's to their symbolic name.
The exact description of these different formats is available in documentation from Microsoft.
When windmc converts from the "mc" format to the "bin" format, "rc", "h", and optional "dbg" it is acting like the Windows Message Compiler.
OPTIONS
- -a
- --ascii_in
- Specifies that the input file specified is ANSI. This is the default behaviour.
- -A
- --ascii_out
- Specifies that messages in the output "bin" files should be in ANSI format.
- -b
- --binprefix
- Specifies that "bin" filenames should have to be prefixed by the basename of the source file.
- -c
- --customflag
- Sets the customer bit in all message id's.
- -C codepage
- --codepage_in codepage
- Sets the default codepage to be used to convert input file to UTF16. The default is ocdepage 1252.
- -d
- --decimal_values
- Outputs the constants in the header file in decimal. Default is using hexadecimal output.
- -e ext
- --extension ext
- The extension for the header file. The default is .h extension.
- -F target
- --target target
- Specify the BFD format to use for a bin file as output. This is a BFD target name; you can use the --help option to see a list of supported targets. Normally windmc will use the default format, which is the first one listed by the --help option.
- -h path
- --headerdir path
- The target directory of the generated header file. The default is the current directory.
- -H
- --help
- Displays a list of command line options and then exits.
- -m characters
- --maxlength characters
- Instructs windmc to generate a warning if the length of any message exceeds the number specified.
- -n
- --nullterminate
- Terminate message text in "bin" files by zero. By default they are terminated by CR/LF.
- -o
- --hresult_use
- Not yet implemented. Instructs "windmc" to generate an OLE2 header file, using HRESULT definitions. Status codes are used if the flag is not specified.
- -O codepage
- --codepage_out codepage
- Sets the default codepage to be used to output text files. The default is ocdepage 1252.
- -r path
- --rcdir path
- The target directory for the generated "rc" script and the generated "bin" files that the resource compiler script includes. The default is the current directory.
- -u
- --unicode_in
- Specifies that the input file is UTF16.
- -U
- --unicode_out
- Specifies that messages in the output "bin" file should be in UTF16 format. This is the default behaviour.
- -v
- --verbose
- Enable verbose mode.
- -V
- --version
- Prints the version number for windmc.
- -x path
- --xdgb path
- The path of the "dbg" C include file that maps message id's to the symbolic name. No such file is generated without specifying the switch.
- @file
-
Read command-line options from file. The options read are
inserted in place of the original @file option. If file
does not exist, or cannot be read, then the option will be treated
literally, and not removed.
Options in file are separated by whitespace. A whitespace character may be included in an option by surrounding the entire option in either single or double quotes. Any character (including a backslash) may be included by prefixing the character to be included with a backslash. The file may itself contain additional @file options; any such options will be processed recursively.
SEE ALSO
the Info entries for binutils.COPYRIGHT
Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''.
Index
This document was created by man2html, using the manual pages.
Time: 05:29:12 GMT, December 24, 2015


Review1
- What is NFL? What are its implications for selecting the "best" learner
- List 5 baseline criteria for an AI tools, make argument:
- Why it is important to meet that criteria?
- Why, pragmatically, it might be necessary to ignore (or, at least relax) that criteria
- Distinguish supervised (S) from unsupervised (U) learning
- When would do S or U?
- Is FFT an S or U? Why? (Hint: your answer should say something about FFT).
- Is the Fastmap Cluster an S or U? Why? (Hint: your answer should say something about the Fastmap clusterer).
- Instance models refer to specific values (e.g. X=6,Y=10,Z=100) while other models refer to ranges of some attributes (e.g. X>6 and Y < 5).
- Which of these models reference points or volumes?
- Which of these offer more generalizations of the past?
- Which of these are shorter to share?
- How to generalize from point models to models that cover volumes?
- FFTs:
- What are the attributes in an node of an FFT tree?
- What is the structure of an FFT tree (hint: use the node attributes to make that description).
- Fastmap Clustering
- Given 2 points Y,Z at distance c, if a new point X is a=dist(X,Y) and b=dist(X,Z), derive an expression for the distance x that X falls along the line between Y,Z.
- What are the attributes in an node of an Fastmap cluster? (hint: parts of it are recursive)
- What is the structure of an Fastmap clustering tree (hint: use the node attributes to make that description).
- How to use a Fastmap cluster node for
- classification (hint: there are many ways)
- anomaly detection, sharing, privacy (hint: see III.D.4
- incremental model updates over an infinite stream of data? (hint
- How to use any clustering method for optimization, anomaly detection, classification, sharing, privacy.
- How to use a Fastmap cluster free for: - very fast optimization (hint: see Algorithm1)
- What are diversity measures for numeric and symbolic values? Offer a formula for each.
- What is the diversity of "y,n,y,y,y,n,y,y,n"? If you don't have a calculator, show all working and stop before the final calculation.
- What is the diversity of "10,89,32,11,9,90,30,31,91"? If you don't have a calculator, show all working and stop before the final calculation.
- Consider the following data.
- Just considering the
age
column, where to divide it such thatage
diversity is minimized? Assume a minimum bin size of 3. - Now consider the
age,alive
relationship. Where to divideage
in order to reduce the diversity ofalive
? Assume a minimum bin size of 3.
- Just considering the
Data:
age,alive
10, y
89, n
32, y
11, y
9, y
90, n
30, y
31, y
91, n
- Iterative dichmotization (ID) algorithms divide attributes into ranges, then recurse on each range.
- How do ID algorithms decide what attribute with which to split the data


{{define "checkAuthentication"}}
This page requires you to be authenticated with active characters in your account. Please log in with EVE Online and add some characters to your account.


Submit
Sorted by New
Are you sure?
This action cannot be undone!
Please type the delete password to continue.
Confirm delete
Wrong password


| Interface | Description |
|---|---|
| BitConverter<T> |
Decomposes objects into a sequence of bits.
|
| Componentizer<T,U> |
An interface used to break a composite object up into its constituent components.
|
| CompositeTrie<K,C,V> |
A trie whose keys are composite objects.
|
| NavigableCompositeTrie<K,C,V> | |
| NavigableSequenceTrie<K,V> | |
| SequenceTrie<K,V> |
A trie whose keys are lists of values.
|
| Class | Description |
|---|---|
| ArrayMappedBitwiseTrie<K,V> | |
| ArrayMappedStringTrie<V> | |
| BigIntRadixTrieMap<V> |
Like a
RadixTrieMap , but with BigInteger keys. |
| BitConverters |
Factory methods for useful
BitConverter implementations. |
| CompactBitwiseTrie<K,V> | |
| CompactStringTrie<V> | |
| DescendingCompositeTrie<K,C,V> | |
| DescendingSequenceTrie<K,V> | |
| HashCompositeTrie<K,C,V> | |
| HashSequenceTrie<K,V> | |
| RadixTrieMap<V> |
A structure that can be used to perform radix sort and can be used to efficiently represent very
sparse arrays.
|
| SimpleBitwiseTrie<K,V> |
A trie structure that most closely resembles a binary tree.
|
| SimpleStringTrie<V> |
A trie that has
String keys. |
| SortedArrayCompositeTrie<K,C,V> | |
| SortedArraySequenceTrie<K,V> |
Map
:
SequenceTrie
Map
that organizes keys that represent sequences and provides views of
sub-maps that all share a common prefix. This data structure is typically known as a
trie and
sometimes called a prefix tree or radix tree..CompositeTrie
SequenceTrie
but supports keys that are
composite objects (which must be "componentized" into a sequence of sub-objects for search and
storage).  The Map
interface is in terms of
the composite type, instead of being in terms of Iterable
s.Searching for an item is O(k) where k
is the length of the requested key.
Often, k
is greater than log n
(where n
is the number of items in the
map), so this would seem to be less efficient than a normal binary search tree. However,
searching through a binary search tree requires an O(k) comparison of keys at each
node visited. In a trie, comparisons at a given node are O(1) since only a single
element must be compared, as opposed to the entire sequence.
Another benefit of a trie is that it makes it trivial to search for all values whose keys have a given prefix. This makes it ideal for suggesting values in text auto-completion.
There are three main types of structures used in tries:
AmtPersistentList
,
HamtMap
, and
HamtPersistentMap
.)


Economic Development Projects
This is a sample page to illustrate using a Google spreadsheet and tabletop.js to fill tables, templates, maps, charts... Everything below this text is generated from (Sheet 2 of) this spreadsheet (Sheet 2 generates some other stuff I'll set up later). The github repo is here. Also, this is super in progress.
This is all a part of a larger project of mine at Code for America. The project is See Penny Work, you can see the beta example in action for the city of Macon (will be completed by mid November aka end of fellowship!) here.
Economic Development Quick Stats
Project Locations
Project Funding Comparison
Project Funding Schedule
A breakdown of the projects, their total funds and fund dispersal over the course of this SPLOST.


Basic TensorFlow.
Web Real-Time Communications to communicate, collaborate, and create AI. (requires webrtc browser support)
In commputer programming, an application programming interface (API) is a set of routines, protocals, and tools for building software applications.


extendTemplateData
Called each time the configuration for DocPad reloads. Called after most of the configuration has loaded and when it is time to extend our template data.
Options:
templateData
the object to inject your additions to
Use to inject new template data variables and helpers into the template data.
Examples:
extendCollections
Called each time the configuration for DocPad reloads. Called after most of the configuration has loaded and when it is time to extend our collections.
Use to create additional collections.
Examples:
docpadLoaded
Called each time the configuration for DocPad reloads. Called before docpadReady
as we have to load the configuration in order to be ready.
docpadReady
Called once DocPad when DocPad is now ready to perform actions which is once it has finished initializing and loading its configuration. Partnered with the docpadDestroy
event.
consoleSetup
Called once the command line interface for DocPad has loaded.
Options:
consoleInterface
the console interface instance we are usingcommander
the instance of commander we are using
Use to extend the console interface with additional commands.
Examples:
populateCollectionsBefore
Called just before we start to insert dynamic files into the database. Called before each generation, just before the generateBefore
event. Partnered with the populateCollections
event.
populateCollections
Called just after we've inserted dynamic files into the collections. Called before each generation, just before the generateBefore
event. Partnered with the populateCollectionsBefore
event.
Use this for inserting your dynamic files into the database.
Examples:
generateBefore
Called just before we start generating your project. Partnered with the generateAfter
event.
Options:
reset
whether or not this is a partial- (false
) or full-regeneration (true
)Deprecated; useserver
getServer()
API method instead
parseBefore
parseBefore
Deprecated/removed since DocPad v6.58.0. See issue #736 for information.
parseAfter
parseAfter
Deprecated/removed since DocPad v6.58.0. See issue #736 for information.
conextualizeBefore
Called just before we start to contextualize all the files. Partnered with the contextualizeAfter
event. Contextualizing is the process of adding layouts and awareness of other documents to our document.
Options:
collection
the collection we are working withDeprecated; usetemplateData
extendTemplateData
event instead
contextualizeAfter
Called just after we've finished contextualize all the files. Partnered with the conextualizeBefore
event. Contextualizing is the process of adding layouts and awareness of other documents to our document.
Options:
collection
the collection we are working withDeprecated; usetemplateData
extendTemplateData
event instead
renderBefore
Called just before we start rendering all the files. Partnered with the renderAfter
event.
Options:
collection
a query-engine [collection][] containing the models we are about to rendertemplateData
the template data that will be provided to the documents
renderCollectionBefore
Triggered before a render collection is about to be rendered. Added by Bruno Heridet with Pull Request #608.
Options:
collection
a query-engine [collection][] containing the models we are about to renderrenderPass
which render pass is this render collection for?
renderCollectionAfter
Triggered before a render collection is about to be rendered. Added by Bruno Heridet with Pull Request #608.
Options:
collection
a query-engine [collection][] containing the models we are about to renderrenderPass
which render pass is this render collection for?
render
Called per document, for each extension conversion.
Use to render one extension to another.
Options:
inExtension
the extension we are rendering fromoutExtension
the extension we are rendering totemplateData
the template data that we will use for this document's renderingfile
the model instance for the document we are renderingcontent
the current content that this document contains, you shall overwrite this option with any updates you do
Notes: The file blah.html.md.eco
will call trigger this event twice. The first time for the eco
to md
conversion. The second time for the md
to html
conversion.
Example: You would check the inExtension
and outExtension
options to make sure we only apply our rendering for the desired extension conversions. To apply the rendering, we would write our result back to opts.content
. For example here is a render event handler that will convert the content of files to upper case when named like file.txt.captialize|uppercase|upper
:
render: (opts) ->
# Prepare
{inExtension,outExtension,templateData,file,content} = opts
docpad = @docpad
# Render if applicable
if inExtension in ['capitalize','uppercase','upper'] and outExtension in ['txt']
opts.content = content.toUpperCase() # your conversion to be saved
renderDocument
Called per document, after all the extensions have been rendered.
Use to perform transformations to the entire document.
Options:
extension
the resulted extension for our documenttemplateData
the template data that we will use for this document's renderingfile
the model instance for the document we are renderingcontent
the current content that this document contains, you shall overwrite this option with any updates you do
Notes: It is also called for each of the layout rendering for the document, as well as for each render pass, as such care should be taken with ensuring your transformation does not re-transform an already transformed part.
Example: The Pygments Plugin more or less uses this event to search for all
HTML elements that have the CSS class highlight
(e.g.,
) and replaces the element with one that has been syntax highlighted by the popular pygments syntax highlighting engine.
renderAfter
Called just just after we've rendered all the files. Partnered with the renderBefore
event.
Options:
collection
a query-engine [collection][] containing the models we've rendered
writeBefore
Called just before we start writing all the files. Partnered with the writeAfter
event.
Options:
collection
a query-engine [collection][] containing the models we are about to writetemplateData
the template data that was provided to the documents
writeAfter
Called just just after we've wrote all the files. Partnered with the writeBefore
event.
Options:
collection
a query-engine collection containing the models we are about to render
generateAfter
Called just after we've finished generating your project. Partnered with the generateBefore
event.
generated
Called just after the initial generation has completed.
serverBefore
Called just before we start setting up the server. Partnered with the serverAfter
event.
serverExtend
Called just while we are setting up the server, and just before the DocPad routes are applied.
Use to extend the server with routes that will be triggered before the DocPad routes.
Options:
server
andserverExpress
are the Express.js server instance we are usingserverHttp
is the raw Node.js HTTP server we are usingexpress
is the Express module we are using
serverAfter
Called just after we finished setting up the server.
Use to extend the server with routes that will be triggered after the DocPad routes.
Options:
server
andserverExpress
are the Express.js server instance we are usingserverHttp
is the raw Node.js HTTP server we are usingexpress
is the Express module we are using
docpadDestroy
Called when it is time for DocPad to shutdown. Partnered with the docpadReady
event.
Use this to shutdown anything inside your plugins, close all connections, file system handlers, files, etc.


Utah Valley Granite is your wholesale direct supplier of premium granite, marble, and quartz to the trade.
Utah Valley Granite is your wholesale direct supplier of premium granite, marble, and quartz to the trade.
Utah Valley Granite has over 172 colors to choose from. We’re ready to help you find the perfect stone with our same day delivery and friendly customer service.
Utah Valley Granite is proud to offer beautiful granite, marble and quartz slabs at wholesale prices. We purchase our stone in very large runs so we have a massive selection and can offer wholesale pricing to retail customers.
We invite you to visit our showroom located at 555 West 220 South Pleasant Grove, UT 84062 (Next to Pleasant Grove Rodeo Grounds, just off of State Street). By visiting us in person you will be able to accurately see the quality and affordability we offer.
Give us a call at:<PHONE_NUMBER>
Check out our website: UtahValleyGranite.com


The footer stuff
So let's begin by preparing the containers and getting that footer fixed!
html {
height: 100%;
}
body {
min-height: 100%;
}
Percentage height is relative to the parent and if parent doesn't have a defined height, it won't take effect.
By setting it on both html and body, we can make sure they take up (at least) the full height of the browser window.
Next, we tell the body element to use flexbox to position its direct descendants.
body {
display: flex;
flex-direction: column;
min-height: 100%;
}
What we are basically saying with this is: Hey, body! Show your children in a column!


PIMPRI CHINCHWAD COLLEGE OF ENGINEERING
User
Home
Website1
About
Contact Us
Create Lecture
Year
Select Year
SE
TE
BE
Division
Select Division
A
B
C
Subject
Date
Time
Create


Now I have to do 2 pairs, which are the 2 pairs with the color shown in Fig. 1. All the turns of this step only rotate R, U faces.
First use the R face rotation to rotate the edge to the opposite side of the R face as the starting point, that is, the B side, the corner is rotated to the B side of the R, U layer overlap, that is, at URB position and will do U R sequence. If the corner is twisted to the orientation that can be combined with the edge, but the edge is not yet rotated to the destination RF, first rotate the corner with the U face roration and turn away from the R, U layer overlap, so that the corner will not be twisted again, and wait until the edge is rotated to the destination RF with the R face rotation, and then use the U face rotation to turn the corner to the edge for combination, as in Example 1 below.
You can also observe that the corner must be twisted once to combine the edge. Therefore, the edge is first rotated to the DR position that is rotated 1/4 circle from the destination, and the corner is rotated to the URB position and will do U R squence, so that the corner is twisted to the orientation that can be combined with the edge, and the edge is also just arrived at the destination RF, it just happens to be combined. As example 2 below
For the convenience of the subsequent steps, this move method is called "RU combine pair move"
Because you can't destroy the first pair that has just been combined, when you use the RU combine pair move to combine the second pair, you must first turn the pair that has been combined to the U face and connect it with the edge you want to combine. Then, the edge of the new pair is rotated on the U face to the F side as the starting point, and then the RU combine pair move is performed, as in the following Example 3.
In the case of Example 4, the corner must be twisted once to combine the edge. Therefore, first turn the edge to the position UL that needs to be rotated 1/4 circle from the destination, and then perform the RU combine pair move.
next: Reducing to the group of retaining 3 pairs The RUP Method
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.


{% extends "mainapp/layout.html" %} {% block pagename %}Documentation{% endblock %} {% block headadditions %} {% endblock %} {% block body %}
Returns the model information for the specified model id.
GET /api/info/<int:modelid>Sample (prettified) Response:
{
"id": 423,
"title": "Eiffel Tower",
"lat": 48.8583,
"lon": 2.2945,
"desc": "A model of the world famous Eiffel Tower",
"tags": {
"shape": "pyramidal",
"building": "yes",
"tourism": "attraction",
}
"author": "n42k",
"date": "2017-03-28",
"categories": ["monuments", "tall"],
"comments": [
{
"author": "n42k",
"body": "I've technically been here!"
},
{
"author": "n42k",
"body": "test comment"
}
]
}
Returns a zip with the model of the specified model id.
GET /api/model/<int:modelid>Sample Response: a zip file.
Returns a listing of all the files present in the model zip.
GET /api/filelist/<int:modelid>Sample Response:
EiffelTowerLarge_copy.png
EiffelTowerLarge_copy_0.png
eiffel.mtl
eiffel.obj
et.jpg
Returns a file from the model zip.
GET /api/filelatest/<int:modelid>/<string:filename>Sample Response: a file.
Returns model ids that have the specified tag as one of their tags.
GET /api/tag/<string:tag>Sample Response:
[3, 5]
Returns model ids that have the specified category as one of their categories.
GET /api/category/<string:tag>Sample Response:
[6, 8]
Returns model ids that have the specified author as one of their categories.
GET /api/author/<string:username>Sample Response:
[6, 8]
Returns model ids that contain the specified string in their title.
GET /api/search/title/<string:title>Sample Response:
[2, 10, 17]
Returns model ids that have the specified category as one of their categories.
GET /api/search/<float:lat>/<float:lon>/<float:range>Sample Response:
[2, 10, 17]
Permits combining various criteria to find the exact kinds of models we need. Search query is sent in the request body. If any parameter is not specified, it's ignored and won't be filtered from the results.
Notes:
Live request body (try pressing Submit!):
Response:
(None yet)
Sample request body:
{
"lat": 48.8583,
"lon": 2.2945,
"range": 1000,
"title": "Eiffel",
"tags": {
"shape": "pyramidal",
"building": "yes"
},
"categories": [
"monuments",
"tall"
],
"page": 1,
"author": "n42k"
}
Sample Response:
[6, 8]
Sample request body with format attribute:
{
"lat": 48.8583,
"lon": 2.2945,
"range": 1000,
"format": ["id", "latitude", "longitude", "title"]
}
Sample Response:
[[1, 48.8583, 2.2945, "Eiffel Tower"], [64, 48.85831, 2.2945, "Near Eiffel Tower"]]


Ezequiel Scott
teaching
I currently teach:
- Agile Software Development (MTAT.03.295), MSc, University of Tartu
- Software Engineering (LTAT.05.003), BSc, University of Tartu
- Software Analytics (LTAT.05.008), MSc, University of Tartu
- Software Testing (MTAT.03.159), BSc, University of Tartu
In the past, I taught:
- Software Engineering, Systems Engineering, UNICEN
- Software Engineering Workshop, Systems Engineering, UNICEN
- Object Oriented Programming, Systems Engineering, UNICEN
- Documentation and Validation Techniques, TUPAR, UNICEN
Supervised Students
- Onuche Akor Idoko, Master’s Degree, 2020. “Automating the Release Planning of Mobile Apps by Including App-Reviews”. University of Tartu, Faculty of Science and Technology, Institute of Computer Science.
- Muhammad Bilal Shahid, Master’s Degree, 2020. “Splitting User Stories Using Supervised Machine Learning”. University of Tartu, Faculty of Science and Technology, Institute of Computer Science.
- Kadri Daljajev, Master’s Degree, 2020, “The Role of an Agile Coach”, University of Tartu, Faculty of Science and Technology, Institute of Computer Science.
- Kiryl Lashkevich, Master’s Degree, 2020, “Improving Agile Processes with Customized Mission-based Practices. Case Study”, University of Tartu, Faculty of Science and Technology, Institute of Computer Science.
- Tanel Tõemets, Master’s Degree, 2020, “Analysing the Quality of User Stories in Open Source Projects”, University of Tartu, Faculty of Science and Technology, Institute of Computer Science.
- Veronika Vlasova, Master’s Degree, 2020, “An Analysis of the Impact of the Process Improvement at LHV Bank”, University of Tartu, Faculty of Science and Technology, Institute of Computer Science.
- Tedo Gogoladze, Master’s Degree, 2020, “The Importance of Personality Traits in Agile Software Development: A Case Study”, University of Tartu, Faculty of Science and Technology, Institute of Computer Science.
- Khaled Nimr Charkie, Master’s Degree, 2020, “Focus Factor and Hyper-Productivity of Agile Teams: A Study of 8 Open-Source Projects”, University of Tartu, Faculty of Science and Technology, Institute of Computer Science.
- Abel Mesfin Cherinet, Master’s Degree, 2019, “Recommending Issue Reports to Developers Using Machine Learning”, University of Tartu, Faculty of Science and Technology, Institute of Computer Science.
- Rodrigo Pena and Marcos Suhit. System Engineer’s degree (equivalent to MSc Degree), 2016, “A Virtual Environment for Teaching Scrum with LEGO”. UNICEN, Faculty of Exact Science.


| A young girl suffering from amnesia after surviving a house fire that takes her childhood friend's life, begins a tormented road to recovery. | |
| Genres: | Crime, Drama, Thriller |
| Director: | Iain Softley |
| Writer: | Sébastien Japrisot, Iain Softley |
Cast: | Micky - Tuppence Middleton Chance - Alex Jennings Jake - Aneurin Barnard Aunt Elinor - Frances de la Tour Serge - Stanley Weber Do - Alexandra Roach Julia - Kerry Fox Jean Claude - Pierre Boulanger Do's Mother - Elizabeth Healey Chance's Receptionist - Mandi Sidhu Dr. Muller - Erich Redman Do's Father - Tim Wallers Landlady - Neelam Bakshi Yvette - Nathalie Paris Waitress - Emma Dennis-Edwards Young Do - Maisie Lloyd Young Micky - Ciara Southwood DJ - Dean Roof Hooded Youth - Israr Azam Pycotheropist - Emilia Fox |


|
Home Usage Download Change History Support |
doxygenDescriptionGenerates documentation for source files, using the document generation utility doxygen. DependencyThe 'doxygen' binary need to be pre-installed on the system. If it is not in the PATH environment variable of your operating system, please see the attribute 'doxygenPath' as to how to use the same to invoke doxygen. Parameters
Parameters specified as nested elementsproperty
doxygen task can have more than one 'property' nested elements as follows.
Defining Doxygen TaskThe doxygen task could be defined as follows. <taskdef name="doxygen" classname="org.doxygen.tools.DoxygenTask" classpath="<path_to_ant_doxygen.jar_file>" /> Examples1. To generate documentation by default in current directory, basic option. <doxygen> <property name="INPUT" value="${inputdir}" /> </doxygen> 2. To generate html documentation recursively for a given directory and suppress latex documentation. <doxygen> <property name="INPUT" value="${inputdir}" /> <property name="RECURSIVE" value="yes" /> <property name="GENERATE_LATEX" value="false" /> <property name="PROJECT_NAME" value="Ant-Doxygen" /> </doxygen> 3. To launch doxygen that is not installed on the path. <doxygen doxygenPath="/usr/local/doxygen-1.2.5/doxygen" > <property name="INPUT" value="${inputdir}" /> <property name="PROJECT_NAME" value="Ant-Doxygen" /> </doxygen> 4. To launch doxygen that should be run only with doxygen version 1.2.17. <doxygen versionCompatible="1.2.17" > <property name="INPUT" value="${inputdir}" /> <property name="PROJECT_NAME" value="Ant-Doxygen" /> </doxygen> 4. To launch doxygen that should be run with doxygen versions 1.2.17 and above. <doxygen versionCompatible="1.2.17+" > <property name="INPUT" value="${inputdir}" /> <property name="PROJECT_NAME" value="Ant-Doxygen" /> </doxygen> 5. To load the doxygen configuration properties from a given file. <doxygen configFilename="/home/myhome/doxygen.cfg" /> |


{% extends 'base.html' %} {%block head%} {% endblock %} {% block member_data%}
Meet Reem
Hello! I'm a CS student at JHU in Baltimore, Maryland. I like quantum computing and being creative!
Meet Nandini
Hi there! I'm ...
Meet José
Hi! I'm ...


I am willing to care for a child who has asthma and have put together the following policy and procedures. I recognise that asthma is an important condition that affects many children.
Furthermore all children with asthma will have immediate access to their reliever medicine whenever they need it. This may include allowing them to carry it on them either in their pocket or inhaler pouch, if they are mature enough to do this.
I would request that I am also given an inhaler to keep at my house, in case the child forgets to bring it back with them. Please let me know if your child needs to be reminded to take their inhaler and if they need to do it privately (I appreciate that some children are shy about taking their medication in front of others) I will always inform parents if their child has experienced asthma symptoms and had to use their reliever medicine. If, after discussion between the parents/carers and the doctor or nurse, it is believed that a particular child is too young to carry their inhaler, I will keep it with me.
Provide written information detailing:
I will ensure any spare medicines stored by me are labelled and have not passed their expiry date.


[name]
The following is a collection of links that you might find useful when learning three.js.
If you find something that you'd like to add here, or think that one of the links below is no longer
relevant or working, feel free to click the 'edit' button in the bottom right and make some changes!
Note also that as three.js is under rapid development, a lot of these links will contain information that is
out of date - if something isn't working as you'd expect or as one of these links says it should,
check the browser console for warnings or errors. Also check the relevant docs pages.
Help forums
Three.js officially uses the [link:https://discourse.threejs.org/ forum] and [link:http://stackoverflow.com/tags/three.js/info Stack Overflow] for help requests.
If you need assistance with something, that's the place to go. Do NOT open an issue on Github for help requests.
Tutorials and courses
Getting started with three.js
-
[link:https://threejs.org/manual/#en/fundamentals Three.js Fundamentals starting lesson]
-
[link:https://codepen.io/rachsmith/post/beginning-with-3d-webgl-pt-1-the-scene Beginning with 3D WebGL] by [link:https://codepen.io/rachsmith/ Rachel Smith].
-
[link:https://www.august.com.au/blog/animating-scenes-with-webgl-three-js/ Animating scenes with WebGL and three.js]
More extensive / advanced articles and courses
-
[link:https://threejs-journey.com/ Three Journey] Course by [link:https://bruno-simon.com/ Bruno Simon] - Teaches beginners how to use Three.js step by step
-
[link:https://discoverthreejs.com/ Discover three.js]
-
[link:http://blog.cjgammon.com/ Collection of tutorials] by [link:http://www.cjgammon.com/ CJ Gammon].
-
[link:https://medium.com/soffritti.pierfrancesco/glossy-spheres-in-three-js-bfd2785d4857 Glossy spheres in three.js].
-
[link:https://www.udacity.com/course/cs291 Interactive 3D Graphics] - a free course on Udacity that teaches the fundamentals of 3D Graphics,
and uses three.js as its coding tool.
-
[Link:https://aerotwist.com/tutorials/ Aerotwist] tutorials by [link:https://github.com/paullewis/ Paul Lewis].
-
[link:https://discourse.threejs.org/t/three-js-bookshelf/2468 Three.js Bookshelf] - Looking for more resources about three.js or computer graphics in general?
Check out the selection of literature recommended by the community.
News and Updates
-
[link:https://twitter.com/hashtag/threejs Three.js on Twitter]
-
[link:http://www.reddit.com/r/threejs/ Three.js on reddit]
-
[link:http://www.reddit.com/r/webgl/ WebGL on reddit]
Examples
-
[link:https://github.com/edwinwebb/three-seed/ three-seed] - three.js starter project with ES6 and Webpack
-
[link:http://stemkoski.github.io/Three.js/index.html Professor Stemkoskis Examples] - a collection of beginner friendly
examples built using three.js r60.
-
[link:https://threejs.org/examples/ Official three.js examples] - these examples are
maintained as part of the three.js repository, and always use the latest version of three.js.
-
[link:https://raw.githack.com/mrdoob/three.js/dev/examples/ Official three.js dev branch examples] -
Same as the above, except these use the dev branch of three.js, and are used to check that
everything is working as three.js being is developed.
Tools
-
[link:https://github.com/tbensky/physgl physgl.org] - JavaScript front-end with wrappers to three.js, to bring WebGL
graphics to students learning physics and math.
-
[link:https://whsjs.readme.io/ Whitestorm.js] – Modular three.js framework with AmmoNext physics plugin.
-
[link:http://zz85.github.io/zz85-bookmarklets/threelabs.html Three.js Inspector]
-
[link:http://idflood.github.io/ThreeNodes.js/ ThreeNodes.js].
-
[link:https://marketplace.visualstudio.com/items?itemName=slevesque.shader vscode shader] - Syntax highlighter for shader language.
[link:https://marketplace.visualstudio.com/items?itemName=bierner.comment-tagged-templates vscode comment-tagged-templates] - Syntax highlighting for tagged template strings using comments to shader language, like: glsl.js.
-
[link:https://github.com/MozillaReality/WebXR-emulator-extension WebXR-emulator-extension]
WebGL References
-
[link:https://www.khronos.org/files/webgl/webgl-reference-card-1_0.pdf webgl-reference-card.pdf] - Reference of all WebGL and GLSL keywords, terminology, syntax and definitions.
Old Links
These links are kept for historical purposes - you may still find them useful, but be warned that
they may have information relating to very old versions of three.js.
-
[link:https://www.youtube.com/watch?v=Dir4KO9RdhM AlterQualia at WebGL Camp 3]
-
[link:http://yomotsu.github.io/threejs-examples/ Yomotsus Examples] - a collection of examples using three.js r45.
-
[link:http://fhtr.org/BasicsOfThreeJS/#1 Introduction to Three.js] by [link:http://github.com/kig/ Ilmari Heikkinen] (slideshow).
-
[link:http://www.slideshare.net/yomotsu/webgl-and-threejs WebGL and Three.js] by [link:http://github.com/yomotsu Akihiro Oyamada] (slideshow).
-
[link:https://www.youtube.com/watch?v=VdQnOaolrPA Trigger Rally] by [link:https://github.com/jareiko jareiko] (video).
-
[link:http://blackjk3.github.io/threefab/ ThreeFab] - scene editor, maintained up until around three.js r50.
-
[link:http://bkcore.com/blog/3d/webgl-three-js-workflow-tips.html Max to Three.js workflow tips and tricks] by [link:https://github.com/BKcore BKcore]
-
[link:http://12devsofxmas.co.uk/2012/01/webgl-and-three-js/ A whirlwind look at Three.js]
by [link:http://github.com/nrocy Paul King]
-
[link:http://bkcore.com/blog/3d/webgl-three-js-animated-selective-glow.html Animated selective glow in Three.js]
by [link:https://github.com/BKcore BKcore]
-
[link:http://www.natural-science.or.jp/article/20120220155529.php Building A Physics Simulation Environment] - three.js tutorial in Japanese


Customer Service and Customer Satisfaction
Great customer service makes a lasting impression on every user of your product or service. The impression can be so strong it increases the lifetime value of the customer while bring new customers through a referral channel.
If your small, great customer service can be the single thing that differentiates your company from your competition. Zappos used the customer service angle to build an incredible company that was finally sold to Amazon for $1.2 Billion. Zappos secret was to go above and beyond for customers. In doing this, customers wrote amazing testimonials for them. Zappos attracted future customers through their interactions with their current customers.
Zappos acquirer, Amazon, is similar in their customer centric approach. Amazon Prime for mothers, Amazon's mission statement, their customer service awards, and customer service compliments emphasize their focus on customer service.
Great customer service is something humans crave. In How to Win Friends and Influence People, Dale Carnegie explains how everyone wants to feel important. We crave others to appreciate us. This hidden quirk can be utilized to help you (in dealing with others) and your company to be incredibly successful. However, be sincere with your compliments and service. If you are disingenuous, and it is detected, it will back fire.
Customer Service, Large and Small
Startups can use customer service to differentiate from their more established competitors. Employees notice how the executives and founders treat the customers and will follow their lead. People always want to please their leaders and if their leaders value the customers, so will they.
As a company grows, founders are replaced by middle management. The organizational structure of a large companies can't carry the founder's DNA. The negative attitude of one member of an organization transfers virally. The front line employees, those who deal with customers, don't have day-to-day interaction with the people who care about the companies reputation. If left unmonitored, a single person on the front line can change the way a company feels about customers. Unlike a large organization, a startup can quarantine the infection, by firing the employee, before the attitude spreads.
Some more established companies have begun to adopt a customer centric focus. They've started to see how treating customers with affection can spread virally and transform their customers into proponents of their company.
This video is titled Why LEGO is the BEST Company in the World. The title alone, chosen by it's creator, conveys an amazing message that marketing teams kill for. At the time of writing, this video had over 650,000 views. A video created by an act of kindness by Lego has now either created or reinforced a thought in others that Lego is an amazing company.
Poor Customer Service
Poor customer service can have the opposite effect. I recently had a horrible customer service experience at a restaurant. The experience changed the way I felt about the restaurant. The positive experiences I had before couldn't remove the negative experience. I had previously suggested the restaurant to others, however, I won't do that anymore. The experience was so offsetting that I won't be going to the restaurant again and I will deter others from it. The restaurant has turned me into a detractor of their business.
Customer service is how your company's name travels among groups and between tribes. The way you treat customers will be remembered regardless of your product or service. People want to use companies whom they like.