MADAME BUTTERFLY 1998 A film review by Timothy Voon Copyright 1998 Timothy Voon 2 :-) :-) for the music
Cast: Ying Huang, Richard Troxell, Ning Liang, Richard Cowan, Jing-Ma Fan Director: Frederic Mitterrand Written by Giuseppe Giacosa and Luiji Illica Music: Giacomo Puccini
I love the music of Puccini, and there wasn't any doubt in my mind that I would enjoy MADAME BUTTERFLY - unless of course the actors couldn't sing. Although, I had been previously exposed to the music of Puccini on cassette and radio, I was little aware of what the words actually meant. So with the help of the much needed and greatly appreciated sub text, I began to uncover the sinister nature of MADAME BUTTERFLY.
I had the general understanding that Captain Pinkerton would eventually leave Butterfly, and as a result she would end her own life.  To think that he entered into a marriage with a geisha girl, as a temporary solution for his loneliness; knowing well that by American law, he could cast her aside anytime for another woman – makes my blood boil! Although, this story may be fictional, it is probably based loosely on fact. I have been told, that what happened to Butterfly was not an uncommon occurrence for that era.
So I'm not surprised that the Japanese harboured such anti-Americanism sentiment for a long time. You can't expect to be overly forgiving when American sailors treat your women so badly. This probably didn't start 2nd WW, but there wouldn't have been any holding back over Pearl Harbour.
Ironically, it took an Italian Composer by the name of Puccini to infuse his music with such a heart-felt tragedy. One can feel the heart of the loyal, devoted Butterfly in Un bel di, vedremo one of the most beautifully created Arias of this century. French director, Frederic Mitterrand has chosen well, his leads in the Chinese Soprano, Ying Huang and tenor Richard Troxell. Overall, a great moving piece of Opera that will haunt us for a very long time. But if I had it my way, I would have ended the story with Butterfly carving out Pinkerton's wanton heart with a dagger.
Timothy Voon e-mail<EMAIL_ADDRESS>Movie Archives http://us.imdb.com/M/reviews_by?Tim+Voon Hugues Bouclier's Movies in Melbourne http://www.labyrinth.net.au/~bouclier/week/movies.html
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


If you work for a large corporation or on a project with limitless coffers, you have likely enjoyed working with a dedicated QA team. You build the website or oversee the coding efforts then hand off your labors to a separate team who systematically kicks the tires and identifies bugs with your work, reporting back on everything.
But, for the bulk of web work, QA and testing is not done by a standalone team with that single purpose. Rather, it’s one of many hats worn by everyone on a build team. Whether you’re a developer or a designer or a PM, everyone has a role in the QA process.
So what’s a PM’s role in QA? Well, besides testing finished work BEFORE the client gets access to it, a project manager’s primary role in QA is to set the proper expectations. This expectation-setting is twofold:
- Clearly articulate to the client what a feature will and will not do.
- Explain realistically to the client that QA will not catch every single bug.
What a feature will and won’t do
Firstly, what’s a code bug? It’s when code does not work. It is NOT when code does not work as expected. As such, project managers or whomever is handling client communications needs to absolutely nail down what the code will and will not accomplish.
I do not mean this as a defense of rigid, immutable requirements documents; a feature can shift over time and should not fall prey to an uninformed, early scoping effort. However, a client should not be left with ambiguous feature descriptions. Likewise, a direct review of what the outcome will be in the end needs to happen and be agreed upon by all involved. Make sure that clients know exactly how their (possible) non-technical request will be delivered technically and walk through functionality in layman language.
Just because I pull into a gas pump on the wrong side of the car does NOT mean my car was built incorrectly. I either had the wrong expectations as to where to access the gas cap, or I am not driving the car that I am used to, so acted on misplaced habits. The same is true when expectations either are not or are inadequately set with clients. When they don’t see what they assumed they would, they will flag it as a bug. But this isn’t a coding issue—it’s a project management issue and as such, needs to be handled as part of any project communication workflow.
QA won’t find every issue
Secondly, while the aspiration is to squash all of them, even the most robust QA process will not catch every single bug. This is not an issue with the testing methods themselves or a sign of a weak development team. The reality is that QA will never find every bug before you go live. Anyone who tells you differently is flat out lying to you.
Now, a solid QA process will greatly mitigate production bugs, but about 10% of them will make it through anyway. That means that, as a PM or client manager, you have to approach this head-on with your client stakeholders.
Best practices
It only takes a single bug within a project for it to be labeled “buggy”, so do what you can to minimize malfunctioning code from making it to the live site. Here are a few quick tips to limit bugs on production sites.
Favor many smaller deployments over the “one big push” method.
While it is very tempting—not to mention dramatically satisfying—to do a big reveal of a website, the smarter way forward is to consistently push small chunks of finished code to production the entire time. There is a solid correlation between delayed code deployments and the likelihood of coding bugs and conflicts arising. The more time between code being “finished” and the same code being shipped, the more issues you will have post-deployment.
Test the front-end and the back-end.
So often with site work, when it comes to QA, people focus exclusively on the front-end of the site. How does this look in a few browsers at a few window sizes and—BOOM—testing done! Not only is this inadequate for the front-end, but no one bothers to check the back-end and how it functions. This is crucial as, often, post-launch bug reports are really “how the heck does this work?” inquiries. Be deliberate in what you test.
In fact, test the whole site.
Obviously there are matters of scale to consider here, but code isn’t as siloed as some would have you believe. One change to a site’s infrastructure can have unexpected ripples across the codebase, so be aware of what files are changing and test other dependent functions as appropriate. This includes both code in your staging environments as well as legacy code already in production.
Keep it real.
This rule transcends a few points, but the takeaway should be to use real users, real browsers, real situations, and real content. Obviously your team will be the first to test things, but be sure to mix up disciplines as you can (i.e. have a front-ender test a back-end admin implementation) . A fresh perspective always helps any testing process. And no QA process is complete without a client weighing in, so be sure to communicate that directly and, before they dive in, go over your code with a fine-toothed comb.
Also, when you can, have tests done in true, native browsers. Yes, tools like BrowserStack can do a great job in certain scenarios. But when you can, ferret out someone who actually HAS a browser installed natively to do some testing. This is the truest test and can often bring unexpected, browser-specific quirks to light.
The biggest issue with QA is when you don’t use real data and content. Testing a layout with “Test Article” copied over and over again as the headline won’t set you up for success once you launch and the layout becomes dependent on article titles that are four lines long. Writing is as rhythmic as music; we all tend to use a detectable pattern in our word and sentence lengths, so avoid doing QA with Lorem Ipsum or other filler text. Design from the content out, and only test when you have real words and images fueling your layouts.
In conclusion, remember that it’s impossible to ship bug-free code, but you can definitely do what you can to ensure that what you do deploy is high-quality code of which you can proudly call your own.


Clone your github repo to your local system
Hi guys
Here is my git log. I tried to clone my repo and forgot
I already did! I used:
- git add
- git commit -m "commit message"
- git push
and used these commands on my cookie page. I tried
to be thorough and tried to make my commit messages
relevant to my work. I know I have a habit of just
putting the time of update and nothing else. If you
look at my log I wrote test commit, then initial commit,
and then first commit to give myself three chances that
its actually working. I know I should just trust the
first test commit but I guess Im just weird like that.
I also use browser-serv that I learned in CIT 93 to
view the page I am making live.
That trick is putting this in your terminal:
- browser-sync start --server --files "stylesheets/*.css, *.html"
It should open a browser automatically. (It does for me)
You can see all of your changes, which I like, after one
refresh without having to make a json file.


Lichens are way younger than scientists thought
| Source: | Field Museum |
| Summary: | Lichens — a combo of fungus and algae — can grow on bare rocks, so scientists thought that lichens were some of the first organisms to make their way onto land from the water, changing the planet's atmosphere and paving the way for modern plants. But a closer look at the DNA of the algae and fungi that form lichens shows that lichens likely evolved millions of years after plants. |
You've probably seen a lichen, even if you didn't realize it. If you've ever meandered through the forest and wondered what the crusty stuff on trees or rocks was, they're lichens, a combination of algae and fungi living together almost as if they were one organism. And since they can grow on bare rocks, scientists thought that lichens were some of the first organisms to make their way onto land from the water, changing the planet's atmosphere and paving the way for modern plants. A new study in Geobiology upends this history by delving deep into the DNA of the algae and fungi that form lichens and showing the lichens likely evolved millions of years after plants.
"When we look at modern ecosystems, and we see a bare surface like a rock, oftentimes lichens are the first thing to grow there, and eventually you'll get plants growing on there too," says Matthew Nelsen, lead author of the paper and a research scientist at the Field Museum. "People have thought that maybe that's the way ancient colonization of land worked, but we're seeing that these lichens actually came later in the game than plants."
Four hundred and eighty-five million years ago, Earth was very different from what we see today. Hardly anything lived on land. But lichens can live in extreme conditions. They can grow on bare rocks and break them down, helping to create the soil needed by complex plants with roots (called "vascular plants"). Scientists thought that lichens must have arrived on land before the vascular plants did and made the environment more hospitable. But Nelsen and his colleagues' work calls this timeline into question.
Nelsen didn't set out to disrupt lichen's status as some of the land's first colonizers. He was initially interested in finding out how the algae-fungus relationship that makes up lichens came to be. If lichens could update their relationship status on Facebook, it would definitely be "it's complicated." They're a product of symbiosis, a relationship where two species live together and both benefit. In this instance, the algae — or specialized blue-green algae called cyanobacteria — provide food and the fungi wraps around it creating a shelter. "The question of when lichens evolved and how many times fungi evolved the ability to form symbiotic relationships with algae has been a bit contentious in the past," says Nelsen.
But to accurately determine when lichens evolved, scientists needed to examine the evolutionary history of both the fungi and algae that make them up. The early lichen fossil record isn't very clear; it can be hard to tell lichen fossils apart from other fossils, and all the fossils that scientists know for sure are lichens are younger than the oldest complex plant fossils. So, the researchers used the fossils that were available to extrapolate the ages of family trees of lichen-forming fungi and algae. They compared these family trees with ages of fossil plants. The verdict: lichens probably evolved long after complex plants.
"Lichens aren't as old as we thought they were. They're a younger, newer sort of symbiosis and haven't been around forever, covering the earth long before there were plants and animals running around," says Nelsen.
Unearthing the age of lichens makes it clear that the pattern of modern lichens showing up on rocks before plants doesn't mean that lichens evolved before plants. "It provides a snapshot into what was going on deep in time on Earth, and when some of these groups started appearing," says Nelsen. And since lichens growing on soil can make the ground wetter, hold the soil in place, and influence the kind of nutrients present in soil, learning when lichens arrived on the scene use us a clearer picture of the world in which complex plants evolved.
By understanding what the Earth was like hundreds of millions of years ago, we can examine how it's changed and gain more insight into the current state of our planet. For the researchers, it's similar to the feeling you might get when learning about your family history from an ancestry DNA kit.
"It reshapes our understanding of the early evolution of complex ecosystems on Earth," says Nelsen.
make a difference: sponsored opportunity
Story Source:
Materials provided by Field Museum.
Note: Content may be edited for style and length.
Journal Reference:
- Matthew P. Nelsen, Robert Lücking, C. Kevin Boyce, H. Thorsten Lumbsch, Richard H. Ree. No support for the emergence of lichens prior to the evolution of vascular plants. Geobiology, 2019; DOI: 10.1111/gbi.12369
Cite This Page:
| MLA | Field Museum. "Lichens are way younger than scientists thought." ScienceDaily. ScienceDaily, 15 November 2019. <www.sciencedaily.com/releases/2019/11/191115074414.htm>. |
| APA | Field Museum. (2019, November 15). Lichens are way younger than scientists thought. ScienceDaily. Retrieved November 17, 2019 from www.sciencedaily.com/releases/2019/11/191115074414.htm |
| Chicago | Field Museum. "Lichens are way younger than scientists thought." ScienceDaily. www.sciencedaily.com/releases/2019/11/191115074414.htm (accessed November 17, 2019). |


4.3. Clustering¶
Clustering of unlabeled data can be performed with the module sklearn.cluster.
Each clustering algorithm comes in two variants: a class, that implements the fit method to learn the clusters on train data, and a function, that, given train data, returns an array of integer labels corresponding to the different clusters. For the class, the labels over the training data can be found in the labels_ attribute.
Input data
One important thing to note is that the algorithms implemented in this module take different kinds of matrix as input. On one hand, MeanShift and KMeans take data matrices of shape [n_samples, n_features]. These can be obtained from the classes in the sklearn.feature_extraction module. On the other hand, AffinityPropagation and SpectralClustering take similarity matrices of shape [n_samples, n_samples]. These can be obtained from the functions in the sklearn.metrics.pairwise module. In other words, MeanShift and KMeans work with points in a vector space, whereas AffinityPropagation and SpectralClustering can work with arbitrary objects, as long as a similarity measure exists for such objects.
Here a visual comparison of some of the clustering algorithms in scikit-learn:
4.3.1. K-means¶
The KMeans algorithm clusters data by trying to separate samples in n groups of equal variance, minimizing a criterion known as the ‘inertia’ of the groups. This algorithm requires the number of cluster to be specified. It scales well to large number of samples, however its results may be dependent on an initialisation. As a result, the computation is often done several times, with different initialisation of the centroids.
K-means is often referred to as Lloyd’s algorithm. After initialization, k-means consists of looping between two major steps. First the Voronoi diagram of the points is calculated using the current centroids. Each segment in the Voronoi diagram becomes a separate cluster. Secondly, the centroids are updated to the mean of each segment. The algorithm then repeats this until a stopping criteria is fulfilled. Usually, as in this implementation, the algorithm stops when the relative increment in the results between iterations is less than the given tolerance value.
A parameter can be given to allow K-means to be run in parallel, called n_jobs. Giving this parameter a positive value uses that many processors (default=1). A value of -1 uses all processors, with -2 using one less, and so on. Parallelization generally speeds up computation at the cost of memory (in this case, multiple copies of centroids need to be stored, one for each job).
K-means can be used for vector quantization. This is achieved using the transform method of a trained model of KMeans.
Examples:
- A demo of K-Means clustering on the handwritten digits data: Clustering handwritten digits
<IP_ADDRESS>. Mini Batch K-Means¶
The MiniBatchKMeans is a variant of the KMeans algorithm using mini-batches, random subset of the dataset, to compute the centroids.
Althought the MiniBatchKMeans converge faster than the KMeans version, the quality of the results, measured by the inertia, the sum of the distance of each points to the nearest centroid, is not as good as the KMeans algorithm.
Examples:
- A demo of the K Means clustering algorithm: Comparison of KMeans and MiniBatchKMeans
- Clustering text documents using k-means: Document clustering using sparse MiniBatchKMeans
References:
- “Web Scale K-Means clustering” D. Sculley, Proceedings of the 19th international conference on World wide web (2010)
4.3.2. Affinity propagation¶
AffinityPropagation clusters data by diffusion in the similarity matrix. This algorithm automatically sets its numbers of cluster. It will have difficulties scaling to thousands of samples.
Examples:
- Demo of affinity propagation clustering algorithm: Affinity Propagation on a synthetic 2D datasets with 3 classes.
- Visualizing the stock market structure Affinity Propagation on Financial time series to find groups of companies
4.3.3. Mean Shift¶
MeanShift clusters data by estimating blobs in a smooth density of points matrix. This algorithm automatically sets its numbers of cluster. It will have difficulties scaling to thousands of samples. The utility function estimate_bandwidth can be used to guess the optimal bandwidth for MeanShift from the data.
Examples:
- A demo of the mean-shift clustering algorithm: Mean Shift clustering on a synthetic 2D datasets with 3 classes.
4.3.4. Spectral clustering¶
SpectralClustering does a low-dimension embedding of the affinity matrix between samples, followed by a KMeans in the low dimensional space. It is especially efficient if the affinity matrix is sparse and the pyamg module is installed. SpectralClustering requires the number of clusters to be specified. It works well for a small number of clusters but is not advised when using many clusters.
For two clusters, it solves a convex relaxation of the normalised cuts problem on the similarity graph: cutting the graph in two so that the weight of the edges cut is small compared to the weights in of edges inside each cluster. This criteria is especially interesting when working on images: graph vertices are pixels, and edges of the similarity graph are a function of the gradient of the image.
Warning
Shapeless isotropic data
When the data is really shapeless (i.e. generated from a random distribution with no clusters), the spectral-clustering problem is ill-conditioned: the different choices are almost equivalent, and the spectral clustering solver chooses an arbitrary one, putting the first sample alone in one bin.
Examples:
- Spectral clustering for image segmentation: Segmenting objects from a noisy background using spectral clustering.
- Segmenting the picture of Lena in regions: Spectral clustering to split the image of lena in regions.
References:
- “A Tutorial on Spectral Clustering” Ulrike von Luxburg, 2007
- “Normalized cuts and image segmentation” Jianbo Shi, Jitendra Malik, 2000
- “A Random Walks View of Spectral Segmentation” Marina Meila, Jianbo Shi, 2001
- “On Spectral Clustering: Analysis and an algorithm” Andrew Y. Ng, Michael I. Jordan, Yair Weiss, 2001
4.3.5. Hierarchical clustering¶
Hierarchical clustering is a general family of clustering algorithms that build nested clusters by merging them successively. This hierarchy of clusters represented as a tree (or dendrogram). The root of the tree is the unique cluster that gathers all the samples, the leaves being the clusters with only one sample. See the Wikipedia page for more details.
The Ward object performs a hierarchical clustering based on the Ward algorithm, that is a variance-minimizing approach. At each step, it minimizes the sum of squared differences within all clusters (inertia criterion).
This algorithm can scale to large number of samples when it is used jointly with an connectivity matrix, but can be computationally expensive when no connectivity constraints are added between samples: it considers at each step all the possible merges.
<IP_ADDRESS>. Adding connectivity constraints¶
An interesting aspect of the Ward object is that connectivity constraints can be added to this algorithm (only adjacent clusters can be merged together), through an connectivity matrix that defines for each sample the neighboring samples following a given structure of the data. For instance, in the swiss-roll example below, the connectivity constraints forbid the merging of points that are not adjacent on the swiss roll, and thus avoid forming clusters that extend across overlapping folds of the roll.
The connectivity constraints are imposed via an connectivity matrix: a scipy sparse matrix that has elements only at the intersection of a row and a column with indices of the dataset that should be connected. This matrix can be constructed from apriori information, for instance if you whish to cluster web pages, but only merging pages with a link pointing from one to another. It can also be learned from the data, for instance using sklearn.neighbors.kneighbors_graph to restrict merging to nearest neighbors as in the swiss roll example, or using sklearn.feature_extraction.image.grid_to_graph to enable only merging of neighboring pixels on an image, as in the Lena example.
Examples:
- A demo of structured Ward hierarchical clustering on Lena image: Ward clustering to split the image of lena in regions.
- Hierarchical clustering: structured vs unstructured ward: Example of Ward algorithm on a swiss-roll, comparison of structured approaches versus unstructured approaches.
- Feature agglomeration vs. univariate selection: Example of dimensionality reduction with feature agglomeration based on Ward hierarchical clustering.
4.3.6. DBSCAN¶
The DBSCAN algorithm clusters data by finding core points which have many neighbours within a given radius. After a core point is found, the cluster is expanded by adding its neighbours to the current cluster and recusively checking if any are core points. Formally, a point is considered a core point if it has more than min_points points which are of a similarity greater than the given threshold eps. This is shown in the figure below, where the color indicates cluster membership and large circles indicate core points found by the algorithm. Moreover, the algorithm can detect outliers, indicated by black points below.
Examples:
- Demo of DBSCAN clustering algorithm: Clustering synthetic data with DBSCAN
References:
- “A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise” Ester, M., H. P. Kriegel, J. Sander, and X. Xu, In Proceedings of the 2nd International Conference on Knowledge Discovery and Data Mining, Portland, OR, AAAI Press, pp. 226–231. 1996
4.3.7. Clustering performance evaluation¶
Evaluating the performance of a clustering algorithm is not as trivial as counting the number of errors or the precision and recall of a supervised classification algorithm. In particular any evaluation metric should not take the absolute values of the cluster labels into account but rather if this clustering define separations of the data similar to some ground truth set of classes or satisfying some assumption such that members belong to the same class are more similar that members of different classes according to some similarity metric.
<IP_ADDRESS>. Inertia¶
<IP_ADDRESS>.1. Presentation and usage¶
TODO: factorize inertia computation out of kmeans and then write me!
<IP_ADDRESS>.2. Advantages¶
- No need for the ground truth knowledge of the “real” classes.
<IP_ADDRESS>.3. Drawbacks¶
- Inertia makes the assumption that clusters are convex and isotropic which is not always the case especially of the clusters are manifolds with weird shapes: for instance inertia is a useless metrics to evaluate clustering algorithm that tries to identify nested circles on a 2D plane.
- Inertia is not a normalized metrics: we just know that lower values are better and bounded by zero. One potential solution would be to adjust inertia for random clustering (assuming the number of ground truth classes is known).
<IP_ADDRESS>. Adjusted Rand index¶
<IP_ADDRESS>.1. Presentation and usage¶
Given the knowledge of the ground truth class assignments labels_true and our clustering algorithm assignments of the same samples labels_pred, the adjusted Rand index is a function that measures the similarity of the two assignements, ignoring permutations and with chance normalization:
>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metrics.adjusted_rand_score(labels_true, labels_pred)
0.24...
One can permute 0 and 1 in the predicted labels and rename 2 by 3 and get the same score:
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.adjusted_rand_score(labels_true, labels_pred)
0.24...
Furthermore, adjusted_rand_score is symmetric: swapping the argument does not change the score. It can thus be used as a consensus measure:
>>> metrics.adjusted_rand_score(labels_pred, labels_true)
0.24...
Perfect labeling is scored 1.0:
>>> labels_pred = labels_true[:]
>>> metrics.adjusted_rand_score(labels_true, labels_pred)
1.0
Bad (e.g. independent labelings) have negative or close to 0.0 scores:
>>> labels_true = [0, 1, 2, 0, 3, 4, 5, 1]
>>> labels_pred = [1, 1, 0, 0, 2, 2, 2, 2]
>>> metrics.adjusted_rand_score(labels_true, labels_pred)
-0.12...
<IP_ADDRESS>.2. Advantages¶
- Random (uniform) label assignements have a ARI score close to 0.0 for any value of n_clusters and n_samples (which is not the case for raw Rand index or the V-measure for instance).
- Bounded range [-1, 1]: negative values are bad (independent labelings), similar clusterings have a positve ARI, 1.0 is the perfect match score.
- No assumption is made on the cluster structure: can be used to compare clustering algorithms such as k-means which assumes isotropic blob shapes with results of spectral clustering algorithms which can find cluster with “folded” shapes.
<IP_ADDRESS>.3. Drawbacks¶
Contrary to inertia, ARI requires the knowlege of the ground truth classes while almost never available in practice or requires manual assignment by human annotators (as in the supervised learning setting).
However ARI can also be useful in purely unsupervised setting as a building block for a Consensus Index that can be used for clustering model selection (TODO).
Examples:
- Adjustment for chance in clustering performance evaluation: Analysis of the impact of the dataset size on the value of clustering measures for random assignements.
<IP_ADDRESS>.4. Mathematical formulation¶
If C is a ground truth class assignement and K the clustering, let us define and as:
- , the number of pairs of elements that are in the same set in C and in the same set in K
- , the number of pairs of elements that are in different sets in C and in different sets in K
The raw (unadjusted) Rand index is then given by:
Where is the total number of possible pairs in the dataset (without ordering).
However the RI score does not guarantee that random label assignements will get a value close to zero (esp. if the number of clusters is in the same order of magnitude as the number of samples).
To counter this effect we can discount the expected RI of random labelings by defining the adjusted Rand index as follows:
References
- Comparing Partitions L. Hubert and P. Arabie, Journal of Classification 1985
- Wikipedia entry for the adjusted Rand index
<IP_ADDRESS>. Adjusted Mutual Information¶
<IP_ADDRESS>.1. Presentation and usage¶
Given the knowledge of the ground truth class assignments labels_true and our clustering algorithm assignments of the same samples labels_pred, the Adjusted Mutual Information is a function that measures the agreement of the two assignements, ignoring permutations and with chance normalization:
>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)
0.22504...
One can permute 0 and 1 in the predicted labels and rename 2 by 3 and get the same score:
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)
0.22504...
Furthermore, adjusted_mutual_info_score is symmetric: swapping the argument does not change the score. It can thus be used as a consensus measure:
>>> metrics.adjusted_mutual_info_score(labels_pred, labels_true)
0.22504...
Perfect labeling is scored 1.0:
>>> labels_pred = labels_true[:]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)
1.0
Bad (e.g. independent labelings) have non-positive scores:
>>> labels_true = [0, 1, 2, 0, 3, 4, 5, 1]
>>> labels_pred = [1, 1, 0, 0, 2, 2, 2, 2]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)
-0.10526...
<IP_ADDRESS>.2. Advantages¶
- Random (uniform) label assignements have a AMI score close to 0.0 for any value of n_clusters and n_samples (which is not the case for raw Mutual Information or the V-measure for instance).
- Bounded range [0, 1]: Values close to zero indicate two label assignments that are largely independent, while values close to one indicate significant agreement. Further, values of exactly 0 indicate purely independent label assignments and a AMI of exactly 1 indicates that the two label assignments are equal (with or without permutation).
- No assumption is made on the cluster structure: can be used to compare clustering algorithms such as k-means which assumes isotropic blob shapes with results of spectral clustering algorithms which can find cluster with “folded” shapes.
<IP_ADDRESS>.3. Drawbacks¶
Contrary to inertia, AMI requires the knowlege of the ground truth classes while almost never available in practice or requires manual assignment by human annotators (as in the supervised learning setting).
However AMI can also be useful in purely unsupervised setting as a building block for a Consensus Index that can be used for clustering model selection.
Examples:
- Adjustment for chance in clustering performance evaluation: Analysis of the impact of the dataset size on the value of clustering measures for random assignements. This example also includes the Adjusted Rand Index.
<IP_ADDRESS>.4. Mathematical formulation¶
Assume two label assignments (of the same data), with classes and with classes. The entropy of either is the amount of uncertaintly for an array, and can be calculated as:
Where P(i) is the number of instances in U that are in class . Likewise, for :
Where P’(j) is the number of instances in V that are in class .
The (non-adjusted) mutual information between and is calculated by:
Where P(i, j) is the number of instances with label and also with label .
This value of the mutual information is not adjusted cfor chance and will tend to increase as the number of different labels (clusters) increases, regardless of the actual amount of “mutual information” between the label assignments.
The expected value for the mutual information can be calculated using the following equation, from Vinh, Epps, and Bailey, (2009). In this equation, is the number of instances with label and is the number of instances with label .
Using the expected value, the adjusted mutual information can then be calculated using a similar form to that of the adjusted Rand index:
References
- Vinh, Epps, and Bailey, (2009). “Information theoretic measures for clusterings comparison”. Proceedings of the 26th Annual International Conference on Machine Learning - ICML ‘09. doi:10.1145/1553374.1553511. ISBN<PHONE_NUMBER>161.
- Vinh, Epps, and Bailey, (2010). Information Theoretic Measures for Clusterings Comparison: Variants, Properties, Normalization and Correction for Chance}, JMLR http://jmlr.csail.mit.edu/papers/volume11/vinh10a/vinh10a.pdf
- Wikipedia entry for the Adjusted Mutual Information
<IP_ADDRESS>. Homogeneity, completeness and V-measure¶
<IP_ADDRESS>.1. Presentation and usage¶
Given the knowledge of the ground truth class assignments of the samples, it is possible to define some intuitive metric using conditional entropy analysis.
In particular Rosenberg and Hirschberg (2007) define the following two desirable objectives for any cluster assignment:
- homogeneity: each cluster contains only members of a single class.
- completeness: all members of a given class are assigned to the same cluster.
We can turn those concept as scores homogeneity_score and completeness_score. Both are bounded below by 0.0 and above by 1.0 (higher is better):
>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metrics.homogeneity_score(labels_true, labels_pred)
0.66...
>>> metrics.completeness_score(labels_true, labels_pred)
0.42...
Their harmonic mean called V-measure is computed by v_measure_score:
>>> metrics.v_measure_score(labels_true, labels_pred)
0.51...
All three metrics can be computed at once using homogeneity_completeness_v_measure as follows:
>>> metrics.homogeneity_completeness_v_measure(labels_true, labels_pred)
...
(0.66..., 0.42..., 0.51...)
The following clustering assignment is slighlty better, since it is homogeneous but not complete:
>>> labels_pred = [0, 0, 0, 1, 2, 2]
>>> metrics.homogeneity_completeness_v_measure(labels_true, labels_pred)
...
(1.0, 0.68..., 0.81...)
Note
v_measure_score is symmetric: it can be used to evaluate the agreement of two independent assignements on the same dataset.
This is not the case for completeness_score and homogeneity_score: both are bound by the relationship:
homogeneity_score(a, b) == completeness_score(b, a)
<IP_ADDRESS>.2. Advantages¶
- Bounded scores: 0.0 is as bad as it can be, 1.0 is a perfect score
- Intuitive interpretation: clustering with bad V-measure can be qualitatively analyzed in terms of homogeneity and completeness to better feel what ‘kind’ of mistakes is done by the assigmenent.
- No assumption is made on the cluster structure: can be used to compare clustering algorithms such as k-means which assumes isotropic blob shapes with results of spectral clustering algorithms which can find cluster with “folded” shapes.
<IP_ADDRESS>.3. Drawbacks¶
The previously introduced metrics are not normalized w.r.t. random labeling: this means that depending on the number of samples, clusters and ground truth classes, a completely random labeling will not always yield the same values for homogeneity, completeness and hence v-measure. In particular random labeling won’t yield zero scores especially when the number of clusters is large.
This problem can safely be ignored when the number of samples is more than a thousand and the number of clusters is less than 10. For smaller sample sizes or larger number of clusters it is safer to use an adjusted index such as the Adjusted Rand Index (ARI).
- These metrics require the knowlege of the ground truth classes while almost never available in practice or requires manual assignment by human annotators (as in the supervised learning setting).
Examples:
- Adjustment for chance in clustering performance evaluation: Analysis of the impact of the dataset size on the value of clustering measures for random assignements.
<IP_ADDRESS>.4. Mathematical formulation¶
Homogeneity and completeness scores are formally given by:
where is the conditional entropy of the classes given the cluster assignments and is given by:
and is the entropy of the classes and is given by:
with the total number of samples, and the number of samples respectively belonging to class and cluster , and finally the number of samples from class assigned to cluster .
The conditional entropy of clusters given class and the entropy of clusters are defined in a symmetric manner.
Rosenberg and Hirschberg further define V-measure as the harmonic mean of homogeneity and completeness:
References
- V-Measure: A conditional entropy-based external cluster evaluation measure Andrew Rosenberg and Julia Hirschberg, 2007
<IP_ADDRESS>. Silhouette Coefficient¶
<IP_ADDRESS>.1. Presentation and usage¶
If the ground truth labels are not known, evaluation must be performed using the model itself. The Silhouette Coefficient (sklearn.metrics.silhouette_score) is an example of such an evaluation, where a higher Silhouette Coefficient score relates to a model with better defined clusters. The Silhouette Coefficient is defined for each sample and is composed of two scores:
- a: The mean distance between a sample and all other points in the same class.
- b: The mean distance between a sample and all other points in the next nearest cluster.
The Silhoeutte Coefficient s for a single sample is then given as:
The Silhouette Coefficient for a set of samples is given as the mean of the Silhouette Coefficient for each sample.
>>> from sklearn import metrics
>>> from sklearn.metrics import pairwise_distances
>>> from sklearn import datasets
>>> dataset = datasets.load_iris()
>>> X = dataset.data
>>> y = dataset.target
In normal usage, the Silhouette Coefficient is applied to the results of a cluster analysis.
>>> import numpy as np
>>> from sklearn.cluster import KMeans
>>> kmeans_model = KMeans(k=3, random_state=1).fit(X)
>>> labels = kmeans_model.labels_
>>> metrics.silhouette_score(X, labels, metric='euclidean')
...
0.55...
References
- Peter J. Rousseeuw (1987). “Silhouettes: a Graphical Aid to the Interpretation and Validation of Cluster Analysis”. Computational and Applied Mathematics 20: 53–65. doi:10.1016/0377-0427(87)90125-7.
<IP_ADDRESS>.2. Advantages¶
- The score is bounded between -1 for incorrect clustering and +1 for highly dense clustering. Scores around zero indicate overlapping clusters.
- The score is higher when clusters are dense and well separated, which relates to a standard concept of a cluster.
<IP_ADDRESS>.3. Drawbacks¶
- The Silhouette Coefficient is generally higher for convex clusters than other concepts of clusters, such as density based clusters like those obtained through DBSCAN.


Music Suggestion System
CS 250 Final Project
Matt Jones, Travis Thomas, Xingbang Liu
suggestions flickr photo by Jurgen Appelo shared under a Creative Commons (BY) license
Motivation
Why Music Suggestion System?
- Build off of previous labs
- Spotify & Pandora
Algorithms
Collaborative filtering
- Memory-based
$$cos(A) = \frac{\vec a \cdot \vec b} {|\vec a| \times |\vec b|}$$
- Model-based
$$R_{user,song}= Q_{user,factor} P^T_{factor,song}$$
Background/Overview
Repository structure overview
Like List
Explore
- Store our Cloud list (music.csv) into a 2D ArrayList
- song<>(String) in exploreSongs<>(String)
- randomly pick 5 songs
- if user likes, then update "y" (in music.csv) by using BufferedWriter
- add line to liked.csv by using FileWriter
Music Suggestion
- Not done yet
- Melody score (1-10 representing speed)
- Calculate mean score from liked.csv
- Linear search in music.csv
- Randomly select 2 songs
Math Evaluation
- By running
System.nanoTime()
four times, I got:
| in nano seconds | bubble sort | exchange sort |
| 1. | 186,525 | 106,856 |
| 2. | 156,695 | 111,009 |
| 3. | 156,318 | 110,631 |
| 4. | 239,386 | 110,254 |
| mean | 184,731 | 109,688 |
- $$O(n^{2})$$
Conclusion
- Making good progress
- inheritance
- Biggest Challenge - Overwriting Y in the music.csv
2d arrayList, Test.csv


#PROG: ALIGNMENT QUALITY METRICS
2D
3D
- Unmapped: Not mapped reads.
- Multimapping: Reads mapping multiple genome sites (different genomic features).
- Ambiguous: Reads mapping overlapping exons/genes (same strand for the 'stranded' counts column and opposite/same strand for the 'unstranded' counts column).
- noFeature: Reads not mapping any feature (exon). Most of them are reads mapping intronic sites.


How to use the Repl: 1. Right click on any Chrome browser and click inspect 2. Click the Console
tab on the interface that opens 3. Right any JS code in the console
| NodeJS has… | Browser has… |
|---|---|
- "global" object named global |
- "global" object named window |
- NodeJS-specific objects like process |
- browser-specific objects like location and document |
- a require function to import another .js file |
- no require function |
- access to node_modules like readline |
- no access to node_modules |
fs
(file-system) built-in node module will allow us to read and write to filesfs
has synchronous and asynchronous versions of the same function so make sure you pick the right one!fs.writeFile
and fs.readFile
are asynchronouscommit
- a saved version of your current folderbranch
- a linear series of commit versions HEAD
- last committed change to the branch you are currently onmaster
branch - first created branch when initializing a git repositorymerge
- can merge commits on one branch into another branchgit init
- initializes a git repository in a folder - creates a hidden folder, .git
, can be seen by using command, ls -a
- DO NOT initialize a git repository on your Desktop or your root! - DO NOT have a nested git repository!! (a folder with a git repo in a folder with a git repo) - If you do any of the above, you can delete the hidden .git
folder created with: rm -rf .git
>> PLEASE MAKE SURE TO WRITE THIS OUT EXACTLY BEFORE PRESSING ENTER!!!!  THEY CANNOT BE RECOVERED
git status
- checks if there is a git repository and the status of your git repository
git add {FOLDER/FILE PATH}
- adds folder or file specified to your staging area from your working directory
git commit -m 'Write your commit message here...'
- adds all items in your staging area to your local repository bundled as a new version or commit
git log
- see your past commit history (past versions)
git log --oneline
- shortened version of the above command
git diff
- used to compare two versions, or points of time, in a git repository - without arguments, will display the difference between the working directory and the last committed version
git diff --staged
- compare changes between staging area and last commited version
git diff {INSERT YOUR COMMIT HERE TO COMPARE}
- compare changes between last commited version and the argument to git diff
git branch
- will show all branches and what branches you are currently on
git checkout -b {insert-name-of-branch-here}
- creates a new branch with the given name and checks it out
git checkout {branch-name}
- checks out the branch given
git reset
git reset --soft {INSERT A COMMIT TO ROLLBACK TO HERE}
- will rollback changes to the commit specified AND will add the changes in the commits rolled back to the STAGING AREA
git reset --mixed {INSERT A COMMIT TO ROLLBACK TO HERE}
- will rollback changes to the commit specified AND will add the changes in the commits rolled back to the WORKING DIRECTORY - is the default reset (git reset INSERT A COMMIT TO ROLLBACK TO HERE}
will do a mixed reset)
git reset --hard {INSERT A COMMIT TO ROLLBACK TO HERE}
- will rollback changes to the commit specified BUT will REMOVE all the changes in the commits rolled back - NO WAY TO GET ANY OF THE CHANGES BACK IN THE COMMITS REMOVED
git remote add {name-of-remote} {remote-url}
- adds a remote repository with the given tag name for the url
git rebase
git rebase {BRANCH NAME or COMMIT HASH}
- takes the HEAD of the branch name or the commit and uses it as the start point of the current branch
git rebase --abort
- only if there is a rebase conflict, this will abort the rebase
git rebase --continue
- run this after you add all the changes to staging to continue with the rebase (make sure to run git status
to see if you still have conflicts after you continue)
git merge
git merge {other-branch}
- will take the other branch's commits and add it into teh current branch - If there is no merge conflict when running merging, then the new commits from the branch you are merging will be added to the master branch
git merge --abort
- only if there is a merge conflict, this will abort the merge
git merge --continue
- run this after you add all the changes to staging to continue with the merge (make sure to run git status
to see if you still have conflicts after you continue)
git checkout
git checkout {BRANCH NAME or COMMIT HASH}
- used to force the HEAD to be at the checked out branch or commit on a detached branch (Not recommended. Just checkout a new branch and reset the commits on the branch there.)
git checkout -- {FILE NAME}
- used to reset the file specified to be the same as the HEAD's version
git config --global user.name {INSERT NAME HERE}
- sets your global git user's name and displays that for every git commit you make
git config --global user.email {INSERT EMAIL HERE}
- sets your global git user's email and displays that for every git commit you make
git push -u {REMOTE REPO TAG NAME} {BRANCH NAME}
- sets the upstream for the branch to the remote repo and branch so your local git repo will track changes between itself and the remote repo (can see those changes with git status
)
If you want VSCode to be the editor that opens when changing commit messages, do EDITOR="code --wait"
in your terminal.


{% extends 'base.html' %} {% load i18n %} {% block header %} {% trans 'Welcome to Help Others!' %} {% blocktrans %}This is the place to find how and where you can help the refugees...{% endblocktrans %} {# Find Out More#} {% endblock %} {% block content %} {% trans 'Gathering centers' %} {% for center in gathering_centers %} {% include 'elements/preview-map.html' with object=center %} {{ center.city }} - {% if center.location_name %}{{ center.location_name }}{% else %}{{ center.address }}{% endif %} {% endfor %} {% trans 'Add a gathering center' %} {% trans 'Resources' %} {% for resource in resources %} {{ resource.name }} - {{ resource.description|truncatechars:140 }} {% endfor %} {% trans 'Suggest a resource' %} {% trans 'About Help Others' %} {% blocktrans %}So you want to help? That's how you found this site, right? ...{% endblocktrans %} {% endblock %}
{% blocktrans %}This is the place to find how and where you can help the refugees...{% endblocktrans %}
{% blocktrans %}So you want to help? That's how you found this site, right? ...{% endblocktrans %}


{% extends "base.html" %} {% block stuff %}
| Project | Pools | Containers | Days from Queued Date | Project Queue Date | Sequencing Platform | Flowcell | Flowcell Option | Lanes | Setup | Final Loading Conc.(pM) | qPCR Conc.(nM) | Conc. of pool(nM) | Library Type | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Project | Pools | Containers | Days from Queued Date | Project Queue Date | Sequencing Platform | Flowcell | Flowcell Option | Lanes | Setup | Final Loading Conc.(pM) | qPCR Conc.(nM) | Conc. of pool(nM) | Library Type |


| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
gauche.mop.propagate
- スロットアクセスの伝播Provides a metaclass to add :propagated
slot allocation option.
When a slot allocation has :propagated
, access
to the slot is redirected to other object’s slot.
It is handy for composite objects to keep external
interface simple, for access to the slot of inner objects
can be disguised as if it is a slot of the parent object.
An example would work better than explanation.
Suppose you have a <rect>
class to represent
generic rectangular area, and you want to use it when you create
a <viewport>
class by composition, instead of
inheritance. A simple way would be as follows:
(define-class <rect> () ((width :init-keyword :width) (height :init-keyword :height))) (define-class <viewport> () ((dimension :init-form (make <rect>)) ;; ... other slots ... )) |
With this definition, whenever you want to access the viewport’s
width or height, you have to go through <rect>
object, e.g.
(~ viewport'dimension'width)
. This is not only cumbersome,
but the users of viewport class have to know that how the
viewport is composed (it’s not necessarily a bad thing,
but sometimes you may want to hide it).
Using gauche.mop.propagate
, you can define slots
width
and height
in <viewport>
class
that are proxies of <rect>
’s slots.
(use gauche.mop.propagate) (define-class <rect> () ((width :init-keyword :width) (height :init-keyword :height))) (define-class <viewport> (<propagate-mixin>) ((dimension :init-form (make <rect>)) (width :allocation :propagated :propagate 'dimension :init-keyword :width) (height :allocation :propagated :propagate 'dimension :init-keyword :height))) |
With :propagated
allocation, the slots are not actually
allocated in <viewport>
instance, and accesses to the
slots are redirected to the object in the slot specified by
:propagate
slot option?in this case, the dimension
slot.
It is somewhat similar to the virtual slots, but it’s more convenient
for you don’t explicitly write procedures to redirect the access.
Now you can treat width
and height
as if they
are slots of <viewport>
. You can even make them
initialize via init-keyword
(but you can’t use
:init-form
or :init-value
; if you want to specify
default values, give the default values to the actual object).
gosh> (define vp (make <viewport> :width 640 :height 480)) vp gosh> (d vp) #<<viewport> 0xc5a1e0> is an instance of class <viewport> slots: dimension : #<<rect> 0xc5a130> width : 640 height : 480 gosh> (set! (~ vp'width) 800) #<undef> gosh> (~ vp'width) 800 |
Here’s two classes that enables this feature.
Usually all you have to do is to inherit <propagate-mixin>
class.
Adds :propagated
slot allocation.
The propagated slot has to have :propagate
slot option
which specifies the name of the slot that points to an object
that actually holds the value of the slot.
If a slot has :propagated
slot allocation but
does not have :propagate
slot option, an error is signalled.
The :propagate
slot option should have a value
of either a symbol, or a list of two symbols.
If it is a symbol, it names the slot that contains an object, whose slot with the same name of the propagate slot holds the value.
If it is a list of two symbols as (X Y)
, then
the access to this propagated slot actually works as
(slot-ref (slot-ref obj X) Y)
.
If you want to make a propagated slot initializable by init-keywords, make sure the slot holding the actual object comes before the propagated slots. Slot initialization proceeds in the order of appearance by default, and you want the actual object is created before setting values.
This is a convenience mixin class. Instead of giving
:metaclass <propagate-meta>
, you can just inherit
this calss to make propagated slots available.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] |
This document was generated by Shiro Kawai on May 28, 2012 using texi2html 1.82.


--- layout: a_base title: Official site Mars Idelia cssUrls: style.css --- {% include mod/face/h.html %} {% include mod/music/h.html %}


Travello
Login Page
Email
Password
Login
Register
New Account
My Bookings
My Account
Log Out
Sign In Page
Email
Name
Surname
--------------------------
Password
Repeat password
Submit
Home
About us
Contact us
from
to
dep date
dep time
arr date
arr time
number of people
from 700$
PAID
UNPAID
Pay
History
from
to
dep date
dep time
arr date
arr time
number of people
REVIEW


Dublin Coffee Shop
About Us
We are currently open 4 days a week (Wednesday – Saturday) as a shop and take away café. The shop stocks produce from local farms and food producers as well as staples and essentials from further afield with a large selection of natural wines, fresh baked daily sourdough and in house made fermented foods. Currently, we are offering a selection made up of daily-changing sandwiches, salads, arancini and soup/lentils.
Our coffee is made with beans from Cloud Picker Coffee Roasters, a Dublin-based roastery who ethically source their beans from Bolivia. You can enjoy the best coffee in Dublin while supporting local businesses and Bolivian Coffee Farmers.
REST ASSURED, ALONGSIDE OUR REGULAR HIGH SPEC HEALTH AND FOOD SAFETY POLICY, WE HAVE A SAFETY PLAN IN PLACE SPECIFIC TO COVID-19. WE ARE TAKING EVERY PRECAUTION TO MAKE SURE WE AND YOU ARE SAFE.


Laravel Learnings: Week 7
You might have noticed that my posts in this series are getting shorter. I'm trying to provide as much resources as possible in a small blog post for you to check real quick and not too much extra info. I feel this gives you a better way to check quickly what has happened in the last week and while not having to read too much.
It's the end of april which means May is almost upon us and that's when Laravel 4 gets released! The wait is almost over.
For the people who are interested, I'm doing an introduction talk about Laravel 4 on the 8th of May at MCS in Wilrijk. It's going to be a talk about the basics of Laravel and some of the new Laravel 4 functionality. You can RSVP here.
Laracon EU CFP ends on Tuesday 30 April!
Laracon EU CFP ends tomorrow. There's still time to submit yours if you want to give a 45 minute presentation at Laracon EU.
New Laravel 4 Screencasts
Taylor has been busy the past week and posted some new Laravel 4 screencasts.
PHP-FIG
As of two weeks ago, Taylor applied for membership into the PHP-FIG user group. As of this moment the vote is going great and it looks like he's going to get accepted in.
Now what is PHP-FIG exactly? It's a group of PHP developers which maintain popular PHP projects or are experts in the PHP community which got together to find ways in which they can work together. One of these ways is a set of coding standards called PSR-# which are being widely adopted by more and more PHP projects each day.
Now why is it good that Taylor is on board? When he gets on board he gets a vote on all the important decisions the PHP-FIG group takes and will help create better ways for PHP projects to work together and improve the way PHP projects, which adopted the PHP-FIG standards, can develop their projects. This will also give Laravel a better position in the ever-growing PHP community.
Packages
Resources
- Laravel 4 Tutorials by beni
- Testing Laravel Controllers by Jeffrey Way
- Laravel Quick Tip – get previous / next records by Maksim Surguy
- Laravel 4 Vagrant by Bryan Nielsen
- Log errors to the database asynchronously in Laravel 4 by Conrad Kleinespel
Talks
- An introduction to Laravel by Shawn McCool (slides and audio)


Login to your personal banking account to avail online services
Get personalized offers delivered directly to your inbox.
Register
With 3200 branches all over the country, 24/7 online presence and support, we are always there for you with our services.
Explore
With our Universally Accepted VISA Credit Card, the market is in your pocket. Always.
Apply Now
* Terms and Conditions


|
Pebble Foundation Classes
0.2.0
C++ for Pebble
|
#include <pebble.h>
Public Attributes | |
| AppFocusHandler | will_focus |
| AppFocusHandler | did_focus |
There are two different focus events which take place when transitioning to and from an app being in focus. Below is an example of when these events will occur: 1) The app is launched. Once the system animation to the app has completed and the app is completely in focus, the did_focus handler is called with in_focus set to true. 2) A notification comes in and the animation to show the notification starts. The will_focus handler is called with in_focus set to false. 3) The animation completes and the notification is in focus, with the app being completely covered. The did_focus hander is called with in_focus set to false. 4) The notification is dismissed and the animation to return to the app starts. The will_focus handler is called with in_focus set to true. 5) The animation completes and the app is in focus. The did_focus handler is called with in_focus set to true.
| AppFocusHandler AppFocusHandlers::did_focus |
Handler which will be called when an animation finished which has put the app into focus or taken the app out of focus.
| AppFocusHandler AppFocusHandlers::will_focus |
Handler which will be called right before an app will lose or gain focus.


This library takes advantage of angular's
reactive forms
module. If you are making forms of any kind inside your application and you are
not using it, you should take the time to read up on what it is and how to get
it setup in your project. It will speed up making any kind of form you can think
of, and provides many different methods of form validation right in their with
it while making it easy to implement your own validators. On top of all that,
it transforms all form edits by the user into ReactiveX observables, giving you
the power of any observable operator.
First we want to create a basic reactive form to hook into the template of our controller.
I will not go into too much detail for this part of the process since there are
plenty tutorials out there that tells you how it works in great detail. So in
our component we might have something like this:
Here we've used Angular's Form Builder to create us a reactive form with the two
controls referal
and alternativeReferal
.
At this point in time the form has a single validator function that is run against
the value of referal
whenever some change to
the form is made. With this specific validator, referal
must not be an empty string for it to be considered valid. Once all controls
are considered valid then the form as a whole is considered valid.
This kind of form might seem familiar. Imagine we're trying to figure out how people
found out about your online service. You might have a dropdown who's value is
bound to the referal
control of our form.
But of course you can't think of every posibility of how a user found your website,
so you've left an extra option 'other', and a extra field alternativeReferal
for a user to fill in. You don't really need the user to fill in the alternative
referal field unless the referal field is set to 'other'. Also, you really don't
want the alternative referal text field to even render unless needed. This library
makes that kind of functionality easy.
All we need to do is import the Conditionally Validate Service and inject it into
our component. We pass it our form and specify what controls we want to have
some form of validation ran on them using the service's validate()
function. This function is meant to be chained with multiple other calls to specify
what exactly you want to happen with validation and how. At the end of the chaining
you are returned an Rx observable that emits a boolean as to whether or not your
validation functions you specified are being ran on the form controls you passed
in. In the end we have our controller looking something like this:
And the template code might look like this:
The form is now only considered valid as a whole when referal is not empty, and if it is 'other' then alternative referal must not be empty.
Now that you understand what this library aims to achieve, try checking out some examples on how you can use this.


| DOSE: |
1 line |
insufflated |
Ketamine |
(powder / crystals) |
With much mental preparation, my coleagues and I had a small test line of the ketamine that we had taken from a liquid to a powder. Snorted just a bit to be sure of not having a negative reaction. Each of us was fine after 15 minutes and then sniffed a full line. In 5 minutes I thought I needed to sit down before I fell down. Peaking already, I saw my friends moving slowly around the patio and I rose to my feet. While I did not fall down, my body movements were all over the place as was my mouth. The words were intelligible, but i was saying things that I would not normally saw.
I did not understand the term disassociatives before. Now I understand. My mind left my physical body. Arms and legs flailing around like a serious hadicap and feeling reaaly groovy. Aside from the naseau, I felt great, albeit out of control. I kept wondering what I might do if a visitor were to arrive. No way that I could conceal this buzz. I have tried lots of potent drugs over the years, but this one might be the strongest. After my experience, at least 3 months went by before I thought I might try Ketamine again. Use with caution.
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.


Iv'e come across a lot of platoons that actively engage in bad game-play; whether that is glitching, hacking and generally abusive manner.
Would it be possible to add the radar functionality to a platoon which would affectively add any current member of that platoon to my radar so I dont end up having to play with them.
Thanks
Goblinstomper
BrainFooLong
Administrator
Not a good idea, i guess. Rejected.  On tiny platoons you can add the players manually.


Temperture Converter Give your temperture in Celsius, get back temperture in Kelvin, instantly! °C {{result}}


Step 2/3
Person 1
Select Semester
select
1
2
3
4
5
6
7
8
Do you want Accommodation?
Yes
No
Gender
Male
Female
Person 2
Select Semester
select
1
2
3
4
5
6
7
8
Do you want Accommodation?
Yes
No
Gender
Male
Female
Person 3
Check if not applicable
Select Semester
select
1
2
3
4
5
6
7
8
Do you want Accommodation?
Yes
No
Gender
Male
Female
Person 4
Check if not applicable
Select Semester
select
1
2
3
4
5
6
7
8
Do you want Accommodation?
Yes
No
Gender
Male
Female


Keyboard Shortcuts - OSX¶
Warning
This topic is a draft and may contain wrong information.
Editing¶
| Keypress | Command |
|---|---|
| ⌘ + X | Cut line |
| ⌘ + ↩ | Insert line after |
| ⌘ + ⇧ + ↩ | Insert line before |
| ⌘ + ⌃ + ↑ | Move line/selection up |
| ⌘ + ⌃ + ↓ | Move line/selection down |
| ⌘ + L | Select line - Repeat to select next lines |
| ⌘ + D | Select word - Repeat to select next occurrence |
| ⌃ + ⌘ + G | Select all occurrences of current selection |
| ⌃ + ⇧ + ↑ | Extra cursor on the line above |
| ⌃ + ⇧ + ↓ | Extra cursor on the line below |
| ⌃ + M | Jump to closing parentheses Repeat to jump to opening parentheses |
| ⌃ + ⇧ + M | Select all contents of the current parentheses |
| ⌃ + A, ⌘ + Left | Move to beginning of line |
| ⌃ + E, ⌘ + Right | Move to end of line |
| ⌘ + K, ⌘ + K | Delete from cursor to end of line |
| ⌘ + K + ⌫ | Delete from cursor to start of line |
| ⌘ + ] | Indent current line(s) |
| ⌘ + [ | Un-indent current line(s) |
| ⌘ + ⇧ + D | Duplicate line(s) |
| ⌘ + J | Join line below to the end of the current line |
| ⌘ + / | Comment/un-comment current line |
| ⌘ + ⌥ + / | Block comment current selection |
| ⌘ + Y | Redo, or repeat last keyboard shortcut command |
| ⌘ + ⇧ + V | Paste and indent correctly |
| ⌃ + Space | Select next auto-complete suggestion |
| ⌃ + U | Soft undo; jumps to your last change before undoing change when repeated |
| ⌃ + ⇧ + Up | Column selection up |
| ⌃ + ⇧ + Down | Column selection down |
| ⌃ + ⇧ + W | Wrap Selection in html tag |
| ⌃ + ⇧ + K | Delete current line of cursor |
General¶
| Keypress | Command |
|---|---|
| ⌘ + ⇧ + P | Command Palette |
| ⌃ + ` | Python Console |
| ⌃ + ⌘ + F | Toggle fullscreen mode |
| ⌃ + ⇧ + ⌘ + F | Toggle distraction-free mode |
| ⌘ + K, ⌘ + B | Toggle side bar |
| ⌃ + ⇧ + P | Show scope in status bar |
Find/Replace¶
| Keypress | Command |
|---|---|
| ⌘ + F | Find |
| ⌘ + ⌥ + F | Replace |
| ⌘ + ⇧ + F | Find in files |
Scrolling¶
| Keypress | Command |
|---|---|
| ⌃ + V | Scroll down one page |
| ⌃ + L | Center current line vertically in page |
| ⌘ + Down | Scroll to end of file |
| ⌘ + Up | Scroll to start of file |
Tabs¶
| Keypress | Command |
|---|---|
| ⌘ + ⇧ + t | Open last closed tab |
| ⌘ + [NUM] | Jump to tab in current group where num is 1-9 |
| ⌘ + 0 | Jump to 10th tab in current group |
| ⌘ + ⇧ + [ | Cycle left through tabs |
| ⌘ + ⇧ + ] | Cycle right through tabs |
| ^ + Tab | Cycle up through recent tabs |
| ⇧ + ^ + Tab | Cycle down through recent tabs |
| Find in files |
Split window¶
| Keypress | Command |
|---|---|
| ⌘ + ⌥ + 1 | Revert view to single column |
| ⌘ + ⌥ + 2 | Split view into two columns |
| ⌘ + ⌥ + 3 | Split view into three columns |
| ⌘ + ⌥ + 4 | Split view into four columns |
| ⌘ + ⌥ + 5 | Set view to grid (4 groups) |
| ⌃ + [NUM] | Jump to group where num is 1-4 |
| ⌃ + ⇧ + [NUM] | Move file to specified group where num is 1-4 |
Bookmarks¶
| Keypress | Command |
|---|---|
| ⌘ + F2 | Toggle bookmark |
| F2 | Next bookmark |
| ⇧ + F2 | Previous bookmark |
| ⇧ + ⌘ + F2 | Clear bookmarks |
Text manipulation¶
| Keypress | Command |
|---|---|
| ⌘ + K, ⌘ + U | Transform to Uppercase |
| ⌘ + K, ⌘ + L | Transform to Lowercase |
| ⌘ + ⌃ + up, ⌘ + ⌃ + down | Clip text upwards / downwards |


In the SUGGESTED section Scientilla shows the already verified documents that likely belong to you.
To improve your suggestions add or remove ALIASES relative to your name.
For example, Rita Levi-Montalcini:
You can directly edit your ALIASES using the form on the right.
You can always edit this information in your profile .


What channel is Leicester vs Arsenal on? TV and live stream information
Arsenal have been on a poor run of form and it gets no easier as they travel to the King Power Stadium to face Leicester in the Premier League
by Sam FletcherArsenal are back in Premier League action against Leicester City - and are desperate for a win before the international break.
But they face a stern task as Brendan Rodgers’ high-flying Foxes aim to maintain their unbeaten record at the King Power Stadium and Arsenal haven’t won away from home since the opening day of the season.
Unai Emery’s job has come under severe pressure in recent weeks with odds already being taken over who will succeed him as Arsenal manager.
In the opposite dugout is Rodgers is one of the men tipped to replace Emery as Arsenal manager, despite only taking charge of the Foxes in February.
Striker Jamie Vardy is in fine goalscoring form having netted seven times in the last five matches and scored twice when the sides last met in April.
Here’s everything you need to know before the match...
When is the game?
The game is on Saturday 9 November.
It will kick-off at 5:30pm.
Where is the game being played?
The game is being played at Leicester City’s King Power Stadium.
Since the draw with Wolves on opening day of the season, Leicester have won all four of their Premier League home matches.
What TV channel is the game on?
UK viewers will need a Sky Sports subscription to watch the match with the game being shown on both their Main Event and Premier League channels.
Coverage starts from 5pm.
Can you live stream the game?
UK subscribers to Sky Sports can stream the game through their website and the Sky Sports app.
Alternatively, you can follow all of the action on the Mirror Football live blog.
Leicester team news
Brendan Rodgers stated in his pre-match press conference he has no fresh injury concerns ahead of the Arsenal game with the Northern Irishman boasting a fully-fit squad.
Arsenal team news
Dani Ceballos is unavailable for the match having picked up a thigh injury in Wednesday’s Europa League draw with Vitoria SC.
The Spaniard was substituted in the 54th-minute with Unai Emery already ruling him out of Saturday’s fixture.
Granit Xhaka is also expected to miss out, having not featured since his angry reaction to being substituted against Crystal Palace two weeks ago. Xhaka was also stripped of the captaincy.
Betting odds
- Leicester City 21/20
- Draw 11/4
- Arsenal 5/2
Odds courtesy of thepools.com


This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.
Descrição do produto
Categorias
Imagens


Lax Links
Horseheads Boys Lacrosse
Open Page
US Lacrosse
**Information and Membership
Open Page
Sportstop
**Equipment and Apparel
Open Page
Laxworld
**Equipment and Apparel
Open Page
Lacrosse Unlimited
**Equipment and Apparel
Open Page
SU Lacrosse
Open Page
Cornell Lacrosse
Open Page
Rochester Rattlers
Open Page
Rochester Knighthawks
Open Page


Greetings! My name is Eron Lloyd, and I am graduate student at Lewis University, completing my Master of Science in Data Science. My research interests are in public choice theory, electoral systems, and voting technology. Before I began my graduate studies, I served in the trenches of government as a Chief Data Officer and policy analyst, where I experienced the good, bad, and ugly sides of public service. Through my research work, I plan to concentrate on better understanding the breakdown of our democratic institutions and help to create solutions to repair them.
I love to collaborate, so if this interests you, please contact me using any of the channels listed below:
I manage my projects on GitHub, and have listed them here as a portfolio of past and present work.
Technologies: Python Jupyter Pandas Django PostgreSQL
Voting in America is a personal research project of mine focused on identifying and understanding voter participation patterns in the United States through detailed data analysis and visualization. Learn more here.
Technologies: Python Pandas NumPy
In addition to my graduate work at Lewis, I'm also enrolled in the Udacity Data Analyst Nanodegree, where I'm continually training to update and remain current in my analytical skills. As I complete my projects, I'll post links to them here.
Technologies: Linux Python PyQt
I served as part of the Open Voting Consortium development team, where we created the EVM2003, a prototype system that incorporated the concepts of OVC's electronic voting machine specification. I was specifically in charge of the ballot reconciliation program, which verified the authenticity of the paper and digital ballots. Learn more here.


Officials: Florida security guard shoots man dead at club
TAMPA, Fla. (AP) - Authorities say a security guard shot a man dead as the guard was trying to break up a fight outside a Florida nightclub.
The Hillsborough County Sheriff’s Office said the fight happened in the parking lot of Aqua Lounge in Tampa, Florida, early Sunday.
Sheriff’s Capt. Preston Hollis said one of the patrons pulled out a gun, before he was shot in the upper body by one of two security guards who tried to intervene. The man was taken to a hospital where he died.
TOP STORIES
Nancy Pelosi goes for slam dunk -- and crashes to court
Biden trolls Trump after Stone verdict: 'Zero criminal convictions' for Team Obama
George Soros group asks Fox News to ban guest who claimed billionaire controls State Dept.
Hollis said the security guard is cooperating with detectives, who were interviewing people involved in the fight.
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


I wanted to quickly note that, although the models PR has been merged into master, it is not quite ready for use. To be really effective, Mirage also needs a serializer layer (in progress), and an update to the factory layer (to support associations and traits).
My plan is to document all three of these features (models, serializers and updated factories) at once, since they all rely on the orm, and will all require you to write simple model definitions to take advantage of.
Once you add a model definition, say by defining an author
model
// mirage/models/author.js
export default Mirage.Model.extend({
posts: Mirage.hasMany()
});
then you opt into the orm. Now, routes will get a schema
object injected instead of a db
(the db
will be accessible via schema.db
), and shorthands and factories will leverage the schema
, and you’ll be able to use serializers as well.
I’ve hit some snags writing serializers, and there’s a lot of hidden complexity in this effort, but I’m hoping I can wrap this all up in the next few weeks.


Inland Empire Fencing
The Inland Empire's fence experts. With decades of combined industry experience we take pride in providing you with the best work, service, and ideas to secure your property. Be it high security Industrial and commerical projects or beautiful custom residential projects, we do it all.
Lorem ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English.
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.


I am Gulzat Karimova, 27 years old. I live in Kenmore, originally from Kyrgyzstan (Central Asia). I have been living in the United States for 4 years. I have a 3 years old daughter, Jibek.
email:gulzat.karimova@gmail.com


NT_CATALOGUE_READER
Documentation du Custom Transformer FME
Description
This Custom Transformer is used to read the metadata of the North West Territories open data portal (https://www.geomatics.gov.nt.ca/en/resources). The portal is not offering a public API to access the metdata information so, this custom transformer is reading all the XHTML code and flatten it in order to parse it and extract the needed metadata information.
Note: There is no option to read only one record with a specific identifier.
Input Ports
- Input: One feature to start the extraction of all the records from the North West Territories open data portal.
Output Ports
- DATA: All the metadata records from the DATA catalog
- MAPS: All the metadata records from the MAPS catalog
- WMS: All the metadata records from the WMS catalog
- REPORTS: All the metadata records from the REPORTS catalog
- DOCUMENTS: All the metadata records from the DOCUMENTS catalog
- MAPS_VIEWERS: All the metadata records from the MAPS_VIWERS catalog
Parameters
- DATA_METADATA: Flag to enable or disable reading the DATA catalog (default: Yes).
- MAPS_METADATA: Flag to enable or disable reading the MAPS catalog (default: Yes).
- WMS_METADATA: Flag to enable or disable reading the WMS catalog (default: Yes).
- REPORTS_METADATA: Flag to enable or disable reading the REPORTS catalog (default: Yes).
- DOCUMENTS_METADATA: Flag to enable or disable reading the DOCUMENTS catalog (default: Yes).
- MAPS_VIEWERS_METADATA: Flag to enable or disable reading the MAPS_VIEWERS catalog (default: Yes).
Documentation du code NL_CATALOGUE_READER.py
Class used to extract WMS metadata from the NWT open web site |
|
Class used to extract Map Viewers metadata from the NWT open web site |
|
Class used to extract Reports metadata from the NWT open web site |
|
Class used to extract Maps metadata from the NWT open web site |
|
- class NT_CATALOGUE_READER.CatalogueReader[source]
Bases:
object
- class NT_CATALOGUE_READER.ExtractData[source]
Bases:
object
- class NT_CATALOGUE_READER.ExtractMapViewers[source]
Bases:
object
Class used to extract Map Viewers metadata from the NWT open web site
- class NT_CATALOGUE_READER.ExtractMaps[source]
Bases:
object
Class used to extract Maps metadata from the NWT open web site
- class NT_CATALOGUE_READER.ExtractReports[source]
Bases:
object
Class used to extract Reports metadata from the NWT open web site
- class NT_CATALOGUE_READER.ExtractWms[source]
Bases:
object
Class used to extract WMS metadata from the NWT open web site


Tracker
New item
Add item
Filters
Select finished
List of tasks
Task id
Description
Create date
Finished
Del


To reset your password please click on the button below and follow the steps.
If you have any problem or questions, feel free to email us on<EMAIL_ADDRESS>https://flamingo.cfapps.io


{% extends '_layouts/layout_2-3_no_title_block.html' %} {% block page_title %} Something {% endblock %} {% block pageTitle %} Where to go {% endblock %} {% block pageIntro %} {% endblock %} {% block content %}
If you have chlamydia symptoms you should see a sexual health professional to get tested.
This is free.
We'll help you find the best places for you.


Calmly Writer
0 Words
0 Characters
00:00:00 Reading Time
New
Open
Save
Save As
Insert Picture
Full screen
Print
Preferences
Exit
Recent
Backups
Saved
Please
Upgrade Now
to help us improve the app (and remove this notice)


Using this add-in you can search free (Creative Commons CC0 licensed) images on Pixabay right inside Word or PowerPoint – and insert them with one click.
This add-in is licensed under the MIT License.
This includes that:
In case you need support, you can
The add-in does not collect user information and does not transmit data to any party other than Pixabay, which is obviously necessary for the add-in to function.
Please review Pixabay's Privacy Policy for more information.
The add-in stores search queries and their results on the user's computer for caching purposes. This data is deleted after 24 hours, and it is never transmitted to another computer.


It handled {{ ctrl.stats.total_requests }} requests resulting {{ ctrl.stats.total_response_bytes | prettysize }} of response data from {{ ctrl.stats.start_date | date : 'medium' }} to {{ (ctrl.stats.start_date | date : 'mediumDate') == (ctrl.stats.end_date | date : 'mediumDate') ? (ctrl.stats.end_date | date : 'mediumTime') : (ctrl.stats.end_date | date : 'medium') }}.
{{ ctrl.stats.error_responses }} requests returned 5xx server error.
{{ ctrl.stats.distinct_ips }} distinct IP addresses have visited the server.
{{ ctrl.stats.flagged_requests / ctrl.stats.total_requests * 100 | number : 2 }}%
{{ ctrl.stats.flagged_requests }} attacks in total divided by following:
Not enought data to answer this question.
It is {{ ctrl.stats.dangerous_ip.ip.ip }} and originates from {{ ctrl.stats.dangerous_ip.ip.country_name }}. It made {{ ctrl.stats.dangerous_ip.bad_count / ctrl.stats.total_requests * 100 | number : 2 }}% of total attacks (that is {{ ctrl.stats.dangerous_ip.bad_count }} attacks) among of {{ ctrl.stats.dangerous_ip.by_vuln.length }} vulnerabilities that is {{ (ctrl.stats.dangerous_ip.bad_count - ctrl.stats.dangerous_ip.rival.bad_count) / ctrl.stats.total_requests * 100 | number : 2 }}% more compared to its international rival ({{ ctrl.stats.dangerous_ip.rival.ip.ip }} / {{ ctrl.stats.dangerous_ip.rival.ip.country_name }}) . This IP seems belong to "{{ ctrl.stats.dangerous_ip.ip.organisation }}" , ISP providing this IP is "{{ ctrl.stats.dangerous_ip.ip.isp }}" and it looks like it is residental network and the city this IP belongs to {{ ctrl.stats.dangerous_ip.ip.city_name }}. and city information not available for this specific IP address :( but we have {{ ctrl.stats.dangerous_ip.next_with_city.ip.ip }} which is also originates from {{ ctrl.stats.dangerous_ip.next_with_city.ip.country_name }}. Although it made {{ (ctrl.stats.dangerous_ip.next_with_city.bad_count - ctrl.stats.dangerous_ip.bad_count) / ctrl.stats.total_requests * 100 | number : 2 }}% less attacks. We know it is located in the city of {{ ctrl.stats.dangerous_ip.next_with_city.ip.city_name }} of {{ ctrl.stats.dangerous_ip.next_with_city.ip.country_name }} .


If to be welcomed by the good,
O Book! thou make thy steady aim,
No empty chatterer will dare
To question or dispute thy claim.

Of a Manchegan gentleman
Thy purpose is to tell the story,
Relating how he lost his wits
O'er idle tales of love and glory,
Of "ladies, arms, and cavaliers:"
A new Orlando Furioso-
Innamorato, rather—who
Won Dulcinea del Toboso.
Put no vain emblems on thy shield;
All figures—that is bragging play.
A modest dedication make,
And give no scoffer room to say,
"What! Alvaro de Luna here?
Or is it Hannibal again?
Or does King Francis at Madrid
Once more of destiny complain?"
Since Heaven it hath not pleased on thee
Deep erudition to bestow,
Or black Latino's gift of tongues,
No Latin let thy pages show.
Ape not philosophy or wit,
Lest one who cannot comprehend,
Make a wry face at thee and ask,
"Why offer flowers to me, my friend?"
Be not a meddler; no affair
Of thine the life thy neighbours lead:
Be prudent; oft the random jest
Recoils upon the jester's head.
Thy constant labour let it be
To earn thyself an honest name,
For fooleries preserved in print
Are perpetuity of shame.
A further counsel bear in mind:
If that thy roof be made of glass,
It shows small wit to pick up stones
To pelt the people as they pass.
Win the attention of the wise,
And give the thinker food for thought;
Whoso indites frivolities,
Will but by simpletons be sought.
Thou that didst imitate that life of mine
When I in lonely sadness on the great
Rock Pena Pobre sat disconsolate,
In self-imposed penance there to pine;
Thou, whose sole beverage was the bitter brine
Of thine own tears, and who withouten plate
Of silver, copper, tin, in lowly state
Off the bare earth and on earth's fruits didst dine;
Live thou, of thine eternal glory sure.
So long as on the round of the fourth sphere
The bright Apollo shall his coursers steer,
In thy renown thou shalt remain secure,
Thy country's name in story shall endure,
And thy sage author stand without a peer.
In slashing, hewing, cleaving, word and deed,
I was the foremost knight of chivalry,
Stout, bold, expert, as e'er the world did see;
Thousands from the oppressor's wrong I freed;
Great were my feats, eternal fame their meed;
In love I proved my truth and loyalty;
The hugest giant was a dwarf for me;
Ever to knighthood's laws gave I good heed.
My mastery the Fickle Goddess owned,
And even Chance, submitting to control,
Grasped by the forelock, yielded to my will.
Yet—though above yon horned moon enthroned
My fortune seems to sit—great Quixote, still
Envy of thy achievements fills my soul.
Oh, fairest Dulcinea, could it be!
It were a pleasant fancy to suppose so—
Could Miraflores change to El Toboso,
And London's town to that which shelters thee!
Oh, could mine but acquire that livery
Of countless charms thy mind and body show so!
Or him, now famous grown—thou mad'st him grow so—
Thy knight, in some dread combat could I see!
Oh, could I be released from Amadis
By exercise of such coy chastity
As led thee gentle Quixote to dismiss!
Then would my heavy sorrow turn to joy;
None would I envy, all would envy me,
And happiness be mine without alloy.
All hail, illustrious man! Fortune, when she
Bound thee apprentice to the esquire trade,
Her care and tenderness of thee displayed,
Shaping thy course from misadventure free.
No longer now doth proud knight-errantry
Regard with scorn the sickle and the spade;
Of towering arrogance less count is made
Than of plain esquire-like simplicity.
I envy thee thy Dapple, and thy name,
And those alforjas thou wast wont to stuff
With comforts that thy providence proclaim.
Excellent Sancho! hail to thee again!
To thee alone the Ovid of our Spain
Does homage with the rustic kiss and cuff.
I am the esquire Sancho Pan—
Who served Don Quixote of La Man—;
But from his service I retreat-,
Resolved to pass my life discreet-;
For Villadiego, called the Si—,
Maintained that only in reti—
Was found the secret of well-be—,
According to the "Celesti—:"
A book divine, except for sin—
By speech too plain, in my opin—
I am that Rocinante fa—,
Great-grandson of great Babie—,
Who, all for being lean and bon—,
Had one Don Quixote for an own—;
But if I matched him well in weak—,
I never took short commons meek—,
But kept myself in corn by steal—,
A trick I learned from Lazaril—,
When with a piece of straw so neat—
The blind man of his wine he cheat—.
If thou art not a Peer, peer thou hast none;
Among a thousand Peers thou art a peer;
Nor is there room for one when thou art near,
Unvanquished victor, great unconquered one!
Orlando, by Angelica undone,
Am I; o'er distant seas condemned to steer,
And to Fame's altars as an offering bear
Valour respected by Oblivion.
I cannot be thy rival, for thy fame
And prowess rise above all rivalry,
Albeit both bereft of wits we go.
But, though the Scythian or the Moor to tame
Was not thy lot, still thou dost rival me:
Love binds us in a fellowship of woe.
My sword was not to be compared with thine
Phoebus of Spain, marvel of courtesy,
Nor with thy famous arm this hand of mine
That smote from east to west as lightnings fly.
I scorned all empire, and that monarchy
The rosy east held out did I resign
For one glance of Claridiana's eye,
The bright Aurora for whose love I pine.
A miracle of constancy my love;
And banished by her ruthless cruelty,
This arm had might the rage of Hell to tame.
But, Gothic Quixote, happier thou dost prove,
For thou dost live in Dulcinea's name,
And famous, honoured, wise, she lives in thee.

Your deeds are open proof in all men's view;
For you went forth injustice to abate,
And for your pains sore drubbings did you get
From many a rascally and ruffian crew.
If the fair Dulcinea, your heart's queen,
Be unrelenting in her cruelty,
If still your woe be powerless to move her,
In such hard case your comfort let it be
That Sancho was a sorry go-between:
A booby he, hard-hearted she, and you no lover.
B. "How comes it, Rocinante, you're so lean?"
R. "I'm underfed, with overwork I'm worn."
B. "But what becomes of all the hay and corn?"
R. "My master gives me none; he's much too mean."

R.
B. "To be in love is folly?"—R. "No great sense."
B. "You're metaphysical."—R. "From want of food."
B. "Rail at the squire, then."—R. "Why, what's the good?
I might indeed complain of him, I grant ye,
But, squire or master, where's the difference?
They're both as sorry hacks as Rocinante."


We were challenged to design an online Web-based goal-setting tool that allows primary school aged children to set goals with the support of their teacher and parents. The motivation for providing such a tool should be based on the idea of personalised learning.
We built this web-based Personalised Learning Plan (PLP) named STEPs, which incorporates gamification concept into goal achievement process. Our website enables students to timely and easily set personalised goals, view progress, receive suggestions from their teachers and parents and also compete with other students.
Every achievement is visualized as a footprint on the virtual map, which makes the learning progress less tedious, more playful and motivational.
I collaborated with Jingyi on this project. My role was UX Designer and Web Developer, and her role was UX and Graphic Designer.
FOCUS: Web Design and Development
TOOLS: Sketch, HTML/CSS, JavaScript
DATE: Aug-Nov 2016
STEPs encourages students to logically and efficiently set and achieve personal interested, as well as enjoying the gaming system, and communicates with friends, parents and teacher.
In the web prototype, we focused on the main function - the process of setting and managing goals. By following our Setting Goal processes, students will learn to think and analyses things from an individual events. Then the long-time achievements and statistic results of goal categories (current, completed, on-hold, dropped goals) help to build up personal time and interest schedule via critical thinking and analysing skills.
Due to a limited time, there are a number of aspects in our design that we haven't fully developed. We tried to present as many details as we could, however there were too many small features that required more time and effort to work on. For example, this website is not responsive to mobile and tablet screens at this moment. Also due to lacking database supported, it is more like a demonstration website, instead of allowing users' interactions.


Reset Your Password
Enter your new password and then confirm it. There are no password rules yet, but there really should be.
{% extends "base_new.html" %} {% load static %} {% block stylesheets %} {% endblock %} {% block content %}
Enter your new password and then confirm it. There are no password rules yet, but there really should be.


Login Successful.
Welcome
Error
Wrong Username or Password
Login
Or
Facebook
Or
Google
New to us?
Sign Up
Brand
Link
Link
Dropdown
Action
Another Action
Something else here
Separated Link
One more separated link
My Events
Suggested Events
Create Event
Sign-in For Event
Created Events
Events
Item 1
Item 2
Item 3
Events
Events
First Name
Last Name
Email Address
Password
Verify Password
Phone Number
Address
Billing Information
Card Type
Card Type
Visa
PayPal
Mastercard
Card Number
Security code
Expiration
Month
January
February
March
April
May
June
July
August
September
October
November
December
Create
Cancel
Events
Name of event
Host Name
Start Date
End Date
Start Time
End Time
Location
Description
Category
Category
Leisure
Cultural
Personal
Organizational
Networking
Charity
Number of Tags
Tag
1 Tag
2 Tags
3 Tags
4 Tags
5 Tags
Create
Cancel
2016 Party
17 likes
3 people
Tag
Tag
This event is a class party where the whole of 2016 will be present!!
Brand
Link
Link
Dropdown
Action
Another Action
Something else here
Separated Link
One more separated link
Leisure
Cultural
Personal
Organizational
Networking
Charity


I came to coding very recently. I began casually inspecting webpages code, then shortly after became obsessed with watching David Malan's CS50 lectures at Harvard, even tackling some of the problem sets for that course (all in C). At that point, the allure of solving problems with a type of "language" was my real interest. Since 2012, I've worked as an assistant Adjunct Professor of Foundations and Painting, a small business owner, and a practicing artist. All three of these occupations require first, an understanding of the possibilities of the tools at hand, and then finding the various solutions inside of that structure. This is all critical thinking and creative problem solving. This keeps me going.
I was born in Portland Oregon in 1978. My father, now deceased, made his living as a small business owner and jazz musician. My mother, to this day is the principal Harpist in the Oregon Symphony, in Portland, OR. My household was musical, and early on I studied music, but later took a keen interest in visual arts, which I pursued as an Undergraduate at University of Oregon, where I received my BFA Painting degree in 2003. I later went on to receive an MFA degree at the Tyler Shcool of Art in Philadelphia, PA.
I'm naturally a very curious person, and it leads me to have many hobbies, but here is a list of just a few:
"Success is the ability to go from one failure to another with no loss of enthusiasm."


Navindoor modules
Navindoor has been developed under the paradigm of object-oriented programming. Classes have been defined to represent elements in the design of location systems. The planimetry, trajectories or signals are classes that contain associated methods for their visualization, data extraction and interaction between them. On the other hand, we have location algorithms and metrics to compare algorithms. These are represented by functions that act on the above mentioned classes. These classes and functions have been developed in five modules that follow the process of experimentation in the design of location systems. In order to have a global vision of it, this process and the module proposed in each point will be briefly described:
- Obtaining the planimetry. The first step in the experimentation is the choice of the scenario and the obtaining of the planimetry. In Navindoor, the planimetry module has been created with the necessary classes for to build a multi-level planimetry.
- Generation of trajectories. In the experimentation, reference points are taken in order to be able to construct trajectories through them. This limits the variety of trajectories, however it is necessary to obtain precise measurements of the position at any given moment. Navindoor has created the module for generating trajectories, dedicated to the simulation of trajectories. Because we are in a simulation environment we have exact information about the real trajectory, generated from a succession of points provided by the user.
- Signal measurement. In experimentation, once the trajectory has been generated, it must be enriched with signals. The third module, called the signal generation module, is dedicated to simulation. of synthetic signals. Thanks to simulation, we can create the signals after the trajectory has been generated.
- Signal processing. After taking measurements, the locating algorithms process the signals. The fourth Navindoor module, called the measurement processing module, provides algorithms capable of creating estimates of the real trajectory from the simulated signals. It also offers a scheme where new algorithms can be developed.
- Algorithm Comparison. Finally, in order to validate the developed algorithms it is necessary to compare them with other already consolidated algorithms. The fifth module of Navindoor is the validation module of algorithms, which provide us with methods of comparing algorithms provided by the user or between algorithms by default.
Within these modules are distributed the classes and functions defined in Navindoor. It is worth mentioning that both CLI and GUI are compatible in MATLAB versions higher than MATLAB R2017b. Details of each module are presented next.
Table of contents
- Planimetry module
- Trajectory module
- Signal generation module
- Signal processing module
- Evaluation module