What we accomplished
This week we researched and experimented with some of the available assets for Oculus hand tracking. We found some examples of how others have done custom hand tracking (see notes) and we plan to use this as a starting point as we start developing our custom hand gestures. We finalized our project details and presented the project pitch in class on Tuesday and received some final feedback from the course staff about our idea. We also finished our detailed PRD, where we set milestones and outlined responsibilities for each member moving forward.
Plan for next week
Start implementing our components! Our goal for next week is to have some working components that we can show the course staff during our lab session next week. Yuma and Sea-Eun will begin some work on the backend for the programming concepts we’re planning to implement. Logan will be working on implementing the hand gestures for block movement and the emit gesture, Erik will work on hand gestures for the define module and looping gesture. We aren’t necessarily planning on connecting all of this together yet (ie. maybe the backend components are tested with a controller, and then we add the custom hand gestures the week after).


Gunmen fire on buses carrying minority Muslim voters in Sri Lanka
by bdnews24.comGunmen have fired on a convoy of buses carrying minority Muslim voters in Sri Lanka on Saturday, hours before polling in presidential elections got under way, reports NDTV.
There were no immediate reports of casualties, but a policeman said the attackers had burnt tyres on the road and set up makeshift road blocks to ambush the convoy of more than 100 vehicles.
"The gunmen opened fire and also pelted stones," a police official in Tantirimale, 240 kilometres north of Colombo said. "At least two buses were hit, but we have no reports of casualties."
Muslims from the coastal town of Puttalam were travelling to the neighbouring district of Mannar, where they were registered to vote, the police official added.
Police reinforcements rushed to the area and cleared the obstructions on the road and escorted the convoy so that passengers could cast their ballots.
The incident came as police and troops were locked in a tense standoff in the Tamil-dominated northern peninsula of Jaffna where residents complained of military road blocks ahead of voting.
Sri Lankans have begun voting in a hotly contested presidential election where former military strongman Mahinda Rajapaksa's family is seeking a return to power after five years.


This website provides you with your local RSPB hides, the birds that should be around you,what time of year you might see them and how to maximise your viewing success.You can also set up a membership with the RSPB on the website to donate money and receive the monthly magazine and goodies.Birds of Britain is a website that consists of over 450 pages and ever changing news stories about the latest bird watching information.It also includes a handy guide to where you might like to stay whilst bird watching and their proximity to the local reserves.


2048
Join the numbers and get to the 2048 tile!
Moves
Score
Best
Some error occured.
YES
OK
CANCEL
Some error occured.


| MATLAB 文件帮助: cv.denoise_TVL1 | 查看 cv.denoise_TVL1 的代码 | Index |
denoise_TVL1 Primal-Dual algorithm to perform image denoising
result = cv.denoise_TVL1(observations)
result = cv.denoise_TVL1(observations, 'OptionName',optionValue, ...)
uint8
type (grayscale).lambda
in the formulas below. As it is
enlarged, the smooth (blurred) images are treated more favorably than
detailed (but maybe more noised) ones. Roughly speaking, as it becomes
smaller, the result will be more blur but more sever outliers will be
removed. default 1.0Primal-dual algorithm is an algorithm for solving special types of variational problems (that is, finding a function to minimize some functional). As the image denoising, in particular, may be seen as the variational problem, primal-dual algorithm then can be used to perform denoising and this is exactly what is implemented.
It should be noted, that this implementation was taken from the July 2013 blog entry [MA13], which also contained (slightly more general) ready-to-use source code on Python. Subsequently, that code was rewritten on C++ with the usage of OpenCV by Vadim Pisarevsky at the end of July 2013 and finally it was slightly adapted by later authors.
Although the thorough discussion and justification of the algorithm involved
may be found in [ChambolleEtAl], it might make sense to skim over it here,
following [MA13]. To begin with, we consider the 1-byte gray-level images as
the functions from the rectangular domain of pixels (it may be seen as set
{(x,y) in NxN | 1<=x<=n, 1<=y<=m}
for some m,n in N
into {0,1,...,255}
.
We shall denote the noised images as f_i
and with this view, given some
image x
of the same size, we may measure how bad it is by the formula:
|| nabla_x || + lambda * sum_i || x - f_i ||
|| . ||
here denotes L2-norm and as you see, the first addend states that
we want our image to be smooth (ideally, having zero gradient, thus being
constant) and the second states that we want our result to be close to the
observations we've got. If we treat x
as a function, this is exactly the
functional what we seek to minimize and here the Primal-Dual algorithm comes
into play.
[MA13]:
Alexander Mordvintsev. "ROG and TV-L1 denoising with primal-dual algorithm".
[ChambolleEtAl]:
Antonin Chambolle, Vicent Caselles, Daniel Cremers, Matteo Novaga, and Thomas Pock. "An introduction to total variation for image analysis". Theoretical foundations and numerical methods for sparse recovery, 9:263-340, 2010.


--- layout: example.html title: Export Image Example shortdesc: Demonstrates exporting the map image to PNG. docs: >


What is specific about equations in Modelica?
Equations are more powerful than assignments, since one equation can express several different assignments.
What is a declaration equation?
A declaration equation is the equation used when declaring a variable, usually constants or parameters. Such equations are actually required for constants, but are optional for parameters. It is also possible to specify a declaration equation for a normal state variable, but this will make the variable behave as a kind of constant.
What is a modifier equation?
Modifier equations occur for example in a variable declaration when there is a need to modify the default value of an attribute of the variable. A modifier equation replaces the declaration equation, if present, for an attribute of the specific type.


search endpoint name
host
port
https
True
False
browser
Chrome
Firefox
ie 7 or 8
ie 9, 10, or 11
Microsoft Edge
Add Splunk as a Search Provider


§431:4-410 Policies effective. Any policy applied for by an original subscriber shall become effective concurrently with the issuance of a certificate of authority to the reciprocal insurer. [L 1987, c 347, pt of §2]


Like your BBLog assignments - here are some more ideas:
1) my 50 bucks - Get 50 Master Dogtags (500 Kills) with weapons
2) Weapon class pro - get all weapons within a weapon class to one service star (without Dice only weapons)
--> could be done for every weapons class (carabiner, shotgun, PDW, light MG, Sniper rifle, assault rifle, explosives (RPG, AA, Mines, Grenades), pistols)
3) Weapon class master - get all weapons within a weapon class to 5 service star (without Dice only weapons)
--> could be done for every weapons class (carabiner, shotgun, PDW, light MG, Sniper rifle, assault rifle, explosives (RPG, AA, Mines, Grenades), pistols)
4) Weapons Master - get all Weapons to 500 Kills (without explosives and Pistols)
--> could be done for explosives/Pistols as well
5) real Jack of all Trades - get 10 Service Stars with all 4 classes
6) Weapon God - get any weapon to 100 Service Stars
7) Vehicle God - get any vehicle to 100 Service Stars
I hope you like it :)
ORFK
Global Moderator
hey, thank you for your ideas
we didn't release yet all our assigments ideas ;-)
our list with possible assigments is long, so maybe one of your ideas is already in development ;-) keep your eyes open and watch out for new upcoming assigments =)
Topicstarter
Viper139
OK - some more ideas you might not have had yet :)
- Watching your back - get 25 Savior medals (or 5000)
- Redeemer - get 25 Avenger medals (or 5000)
- sharpshooter - get 25 Accuracy Medals
- Mr. Invincible - get 25 Combat efficiency medals
- Teamplayer - get 10 ace squad medals
- Dr. - get 10 medical medals
- Spy - get 10 surveillance medals
- Conqueror - get 10 flag attacker medals
- Defender - get 10 flag defender medals
- Helping Pro - get 10 resupply, maintenance and medical medals
- Destroyer - destroy 5000 vehicles
- Headworker - 10000 Headshots
ORFK
Global Moderator
sounds everything cool, but only one task for one assigment is a little bit less not?
i like the assigments like the one from B2K with 3 or more tasks :-D
Topicstarter
Viper139
then you can mesh them together:
Teamfighter - Get 5000 Savior and Avenger kills
Spying Sharpshooter - get 10000 Headshots and 10 surveillance medals
Flag Man - get 10 flag attacker and 10 flag defender medals
Battle Pro - get 25 combat efficiency medals and destroy 5000 Vehicles
Helper - get 10 resupply, maintenance and medical medals
You are right - makes it more demanding :)
albero78
Good ideas, especially the 500 kills for every weapon (including or not including pistols).
Looking forward new assignments!


Enter email:


I created responsive websites including those based on WordPress as a CMS. Below are some of my skills:
I am a hard-working front-end developer, passionate about web technologies and learning new skills. In 2018, I graduated from RED Academy Vancouver (Web Developer Professional Program), where I learned how to develop a fully functional site from scratch as well as how to maintain an existing one.
Before becoming a web dev, I worked as a news editor. Experience in editing helps me pay strong attention to detail, organize and plan the project's workflow, and be always fully committed to the project.
Website created using WordPress as a CMS, Javascript, jQuery, and Sass.
Code on GitHubSite created combining JavaScript and WordPress.
Code on GitHubWebsite of a camping supply company created using WordPress as a CMS.
Code on GitHubBasic pong game developed using SVGs and JavaScript.
Code on GitHubResponsive website that allows a user to filter 6 top news story categories via the New York Times API.
Code on GitHubSample of a responsive site homepage created using HTML5, CSS3, and jQuery.
Code on GitHubThis is a WordPress theme for the Quotes on Dev website, which is created combining JavaScript and WordPress. The website is functioning using the WordPress REST API.
Quotes on Dev is a responsive website optimized for 3 screen sizes: mobile, tablet (620px), and desktop (1080px).
A random quote is fetching on the front page of the website using the WordPress REST API. I used the AJAX method "GET".
When the button "Show Me Another!" is clicked, the quote changes, and the url updates. I used the History API for this.
A register user can submit a new quote by filling a submission form. I set the form using the AJAX method "POST".
A custom Quotes on Dev theme is based on the starter theme from the Underscore.
I created two custom pages for the Archives and the Submit a Quote.
Comments form on the default Posts page is disabled.
This is a new website for The Starfish Canada – a volunteer-run non-profit environmental organization.
The site is developed using WordPress as a CMS, with a mobile-first approach and optimized for the desktop screen size.
I created The Starfish Canada website as a member of a development team.
We built a custom WordPress theme for the website, using JavaScript, jQuery, Sass, Gulp, Git, PHP, and Ajax.
Creating custom post types and taxonomies.
Developing and styling several website pages.
Creating fully customizable carousels for different pages.
This is a custom WordPress theme for the website of a camping supply company.
The website contains blog posts, product descriptions, a custom static homepage, About page, and Contact page.
I created custom page templates, and custom post types and taxonomies inside of the functionality plugin.
I added custom fields for additional metadata.
I included a custom widget plugin for business hours, featured in the sidebar of the site.
Also, there is a toggle-able search form in the site header where the search input is automatically focused when the form is toggled open.
This is a pong game for two players using SVGs and Object Oriented JavaScript.
The project is loaded using Webpack.
Board size: 768px x 384px.
The ball hits a paddle with a sound.
The game starts with an opening screen with instructions for players. They can start the game by pressing the Shift key.
The game has 3 levels that differ in the speed of the ball: 8, 10 and 12. Each level ends when one of the players gets 10 points.
Before the beginning of each level, players see a screen with a level number and a countdown starting at 5.
After the end of each level, players see a screen with the name of the current level winner. They can continue the game by pressing the Shift key.
Players can pause the game by pressing the Spacebar. When the game is paused, players cannot move paddles, the ball stops where it was when the Spacebar was pressed, and all the board is darkened. Players see a screen telling them that the game is paused. They can continue the game by pressing the Spacebar again.
After the 3rd level, the game ends. Players see the screen with the name of the winner of the whole game round. The winner of the game is the player who won in two levels of three.
This is a single-page resposive website that allows a user to filter 6 top news story categories via the New York Times API.
The site is optimized for mobile, tablet (600px), and desktop (1000px) screens.
The site is styled using Sass as a preprocessor.
Project is handled by Gulp to compile Sass and check errors.
I used Ajax to retrieve data from the NYT Top Stories.
This is a sample of an online shop homepage.
The site is created using HTML5, CSS3, and jQuery for smooth scrolling and basic click counter.
The site was built with mobile-first approach and optimized for two additional screen sizes: tablet (600px) and desktop (1240px).
I added an image slider (Flickity Carousel).
An email address validation is installed into the subscription form.
I added smooth scrolling for the navigation menu.
I implemented an interactive cart filling (a basic click counter) using jQuery.


| Interface | Description |
|---|---|
| FormField |
Information read for a field in the database design
|
| RichTextConstants | |
| RichTextRecordList |
This sub-interface of
List represents an ordered collection of
RichTextRecord s. |
| RichTextWriter |
Writer to produce a new rich text item
|
| TextStyle |
| Enum | Description |
|---|---|
| RichTextWriter.CaptionPosition |
Enum of available positions to place the caption of a file hotspot
|
| TextStyle.Justify |
Copyright © 2019–2021 HCL. All rights reserved.


|
gbmath
v0.051
c++ math library
|
describes a point/coordinate/position in 3-dimensional space. Level higher than the vector More...
#include <point3.h>
Public Member Functions | |
| point3 () | |
| set all to zero More... | |
| point3 (const point3 &p) | |
| point3 (float x, float y, float z) | |
| operator const float * () const | |
| operator float * () | |
| void | operator= (const vec3 &v) |
| operator vec3 () const | |
| operator const vec3 * () const | |
| point3 & | setMiddle (const vec3 &p1, const vec3 &p2) |
| set middle point More... | |
| point3 & | setMiddle (const point3 &p) |
| set middle point More... | |
| point3 & | moveTo (const point3 &posTo, float distance) |
| Going to the point posTo a distance-distance. More... | |
| point3 & | moveAlongNormal (const normal3 &normal, float distance) |
| Moving toward the point normal at a distance distance. More... | |
| float | distanceBetween (const point3 &p) const |
| return distance between points More... | |
| point3 & | adjustDistancePoint (const point3 &pnt, const float k) |
| Change the distance between this point and the coefficient on pnt. k. If k is less than 1 then the convergence is made if more then removal. More... | |
| point3 & | transform (const mat44 &m) |
| transform coordinate More... | |
Public Attributes | |
| float | _x |
| float | _y |
| float | _z |
describes a point/coordinate/position in 3-dimensional space. Level higher than the vector
|
inline |


This page shows events that occurred in mwc713 (the underlying MWC wallet). Each message has a time, level and, message field.
These events may be useful for troubleshooting issues with the wallet.


In no particular order (and at a very high level of abstraction and with as little fluff as possible)…
5) Don’t come with a problem. Come with a working prototype.
A working prototype says much more about a proposed solution, than does talking about the proposed solution.
4) Be both purist and pragmatic
This is a careful balance of business goals vs. coding nirvana, ruthless pragmatism vs. lofty purism. In other words, it’s both good to know exactly what the perfect solution should look like, and to know what compromises you have to make to have a working solution based on business timeline constraints.
3) Conflict breeds results (but always listen)
As our patient, level-headed CTO says, “One person scores, but the whole team gets them there.” By “conflict” I don’t mean the bad type of conflict. I mean the conflict that arises from a group of passionate people all trying to arrive at the best solution.
The opposite side of the coin is: communication. “Today, I will learn nothing by speaking, but much by listening.” Beme engineer Matt Hackett (previously VP of Engineering at Tumblr) says: “Most important engineering skill: Humility.”
2) The pieces eventually come together
When working on teams of engineers (perhaps in an Agile environment), all the pieces of the product seem scattered, but eventually, everything will begin to cleanly merge back into the product that everyone has been imagining it would be.
1) Work hard
You’re it. You directly influence the success or failure of your company. Dwayne Johnson says, “always be the hardest worker in the room.”
Great companies don’t hire skilled people and motivate them, they hire already motivated people and inspire them. People are either motivated or they are not. Unless you give motivated people something to believe in, something bigger than their job to work toward, they will motivate themselves to find a new job and you’ll be stuck with whoever’s left.
— Simon Sinek, Start with Why: How Great Leaders Inspire Everyone to Take Action


Home
Contact Us
Register Account
Member Login
Tutor Selection | TutorU
Search:
Search
Home
About Us
Sign-Up
Member Login
Retrieve Password
Tutor Information
Subjects:
Student reviews:
Back
Previous tutor
Confirm
Next tutor
Copyright © 2015 - All Rights Reserved -
Domain Name
Template by
OS Templates
Student reviews:


3DBin
ROLE
Mobile design, Branding
DATES
2013-2014
3DBin app uses technology that compiles photos of your product from different angles to create '3D' — spin view of the product. The app gives you a link that one can add on Amazon or elsewhere. It's particularly useful for people who want to give a better presentation of the product they're selling. I've collaborated with the product team and engineers to shape product vision and direction. I was primarily designing their iOS app. I've also worked on the logo and merchandise.
Along with Facebook Messenger and Wunderlist, 3DBin was featured on the list of "20 New Best Apps of July, 2014".
WEB EXAMPLE
If someone wants to to sell their car - he downloads the app, takes a few photos and voilà!


Register
First Name:
Last Name:
Male
Female
Other
Birthday:
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
1
2
3
4
5
6
7
2001
Email:
Password:
I agree to the terms and conditions
Submit


public class ClientToProxyConnection
extends io.netty.channel.SimpleChannelInboundHandler<java.lang.Object>
Represents a connection from a client to our proxy. Each
ClientToProxyConnection can have multiple ProxyToServerConnection
s,
at most one per outbound host:port.
Once a ProxyToServerConnection has been created for a given server, it is
continually reused. The ProxyToServerConnection goes through its own
lifecycle of connects and disconnects, with different underlying
Channel
s, but only a single ProxyToServerConnection object is used
per server. The one exception to this is CONNECT tunneling - if a connection
has been used for CONNECT tunneling, that connection will never be reused.
As the ProxyToServerConnections receive responses from their servers, they
feed these back to the client by calling
respond(ProxyToServerConnection, HttpFilters, HttpRequest, HttpResponse, HttpObject)
.
| Modifier and Type | Method and Description |
|---|---|
void |
channelActive(io.netty.channel.ChannelHandlerContext ctx)
Only once the Netty Channel is active to we recognize the ProxyConnection
as connected.
|
void |
channelInactive(io.netty.channel.ChannelHandlerContext ctx)
As soon as the Netty Channel is inactive, we recognize the
ProxyConnection as disconnected.
|
void |
channelRegistered(io.netty.channel.ChannelHandlerContext ctx) |
void |
channelWritabilityChanged(io.netty.channel.ChannelHandlerContext ctx) |
void |
exceptionCaught(io.netty.channel.ChannelHandlerContext ctx,
java.lang.Throwable cause) |
java.net.InetSocketAddress |
getClientAddress() |
javax.net.ssl.SSLEngine |
getSslEngine() |
boolean |
isMitming() |
boolean |
isTunneling() |
void |
userEventTriggered(io.netty.channel.ChannelHandlerContext ctx,
java.lang.Object evt)
We're looking for
IdleStateEvent s to see if we need to
disconnect. |
acceptInboundMessage, channelRead
channelReadComplete, channelUnregistered
handlerAdded, handlerRemoved, isSharable
public boolean isMitming()
public java.net.InetSocketAddress getClientAddress()
public boolean isTunneling()
public javax.net.ssl.SSLEngine getSslEngine()
public void channelRegistered(io.netty.channel.ChannelHandlerContext ctx) throws java.lang.Exception
channelRegistered
in interface io.netty.channel.ChannelInboundHandler
channelRegistered
in class io.netty.channel.ChannelInboundHandlerAdapter
java.lang.Exception
public final void channelActive(io.netty.channel.ChannelHandlerContext ctx) throws java.lang.Exception
channelActive
in interface io.netty.channel.ChannelInboundHandler
channelActive
in class io.netty.channel.ChannelInboundHandlerAdapter
java.lang.Exception
public void channelInactive(io.netty.channel.ChannelHandlerContext ctx) throws java.lang.Exception
channelInactive
in interface io.netty.channel.ChannelInboundHandler
channelInactive
in class io.netty.channel.ChannelInboundHandlerAdapter
java.lang.Exception
public final void channelWritabilityChanged(io.netty.channel.ChannelHandlerContext ctx) throws java.lang.Exception
channelWritabilityChanged
in interface io.netty.channel.ChannelInboundHandler
channelWritabilityChanged
in class io.netty.channel.ChannelInboundHandlerAdapter
java.lang.Exception
public final void exceptionCaught(io.netty.channel.ChannelHandlerContext ctx, java.lang.Throwable cause) throws java.lang.Exception
exceptionCaught
in interface io.netty.channel.ChannelHandler
exceptionCaught
in interface io.netty.channel.ChannelInboundHandler
exceptionCaught
in class io.netty.channel.ChannelInboundHandlerAdapter
java.lang.Exception
public final void userEventTriggered(io.netty.channel.ChannelHandlerContext ctx, java.lang.Object evt) throws java.lang.Exception
We're looking for IdleStateEvent
s to see if we need to
disconnect.
Note - we don't care what kind of IdleState we got. Thanks to qbast for pointing this out.
userEventTriggered
in interface io.netty.channel.ChannelInboundHandler
userEventTriggered
in class io.netty.channel.ChannelInboundHandlerAdapter
java.lang.Exception


Last updated: 2018-08-03
workflowr checks: (Click a bullet for more information) ✔ R Markdown file: up-to-date
Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.
✔ Environment: empty
Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.
✔ Seed:
set.seed(20180731)
The command set.seed(20180731)
was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.
✔ Session information: recorded
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
✔ Repository version: 2689835
wflow_publish
or wflow_git_commit
). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:
Ignored files:
Ignored: .DS_Store
Ignored: .Rhistory
Ignored: .Rproj.user/
Ignored: data/.DS_Store
Ignored: inst/.DS_Store
Ignored: inst/doc/.DS_Store
Ignored: vignettes/.DS_Store
Untracked files:
Untracked: docs/figure/hidden_heterogeneity_glioblastoma.Rmd/
Untracked: output/CC_genes.long.txt
Untracked: output/CC_genes.short.txt
Untracked: output/Clustering_analyses_figure3_sv1.pdf
Untracked: output/Patel_Glioblastoma_MGH30_CellCycle_Figure3ABCD.pdf
Untracked: output/Patel_Glioblastoma_MGH30_Cellcycle_SV1_Genes_rsqcutoff0.3.txt
Untracked: output/Patel_Glioblastoma_MGH30_Cellcycle_SV1_Genes_rsqcutoff0.4.txt
Untracked: output/Patel_Glioblastoma_MGH30_iasva_SV1_genes_rsqcutoff0.3_pheatmap_iasvaV0.95_Figure3F.pdf
Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.
The IA-SVA based feature selection can significantly improve the performance and utility of clustering algorithms (e.g., tSNE, hierarchical clustering). To illustrate how the IA-SVA method can be used to improve the performance of clustering algorithms, we used real-world single cell RNA sequencing (scRNA-Seq) data obtained from human pancreatic islet samples (Lawlor et. al., 2016). This dataset is included in a R data package (“iasvaExamples”) containing data examples for IA-SVA (https://github.com/dleelab/iasvaExamples). To install the ‘iasvaExamples’ package, follow the instruction provided in the GitHub page.
rm(list=ls())
library(irlba)
Loading required package: Matrix
library(iasva)
library(iasvaExamples)
library(Seurat)
Loading required package: ggplot2
Loading required package: cowplot
Attaching package: 'cowplot'
The following object is masked from 'package:ggplot2':
ggsave
library(dbscan)
library(Rtsne)
library(pheatmap)
library(corrplot)
corrplot 0.84 loaded
library(DescTools) #pcc i.e., Pearson's contingency coefficient
library(RColorBrewer)
library(SummarizedExperiment)
Loading required package: GenomicRanges
Loading required package: stats4
Loading required package: BiocGenerics
Loading required package: parallel
Attaching package: 'BiocGenerics'
The following objects are masked from 'package:parallel':
clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
clusterExport, clusterMap, parApply, parCapply, parLapply,
parLapplyLB, parRapply, parSapply, parSapplyLB
The following objects are masked from 'package:Matrix':
colMeans, colSums, rowMeans, rowSums, which
The following objects are masked from 'package:stats':
IQR, mad, sd, var, xtabs
The following objects are masked from 'package:base':
anyDuplicated, append, as.data.frame, basename, cbind,
colMeans, colnames, colSums, dirname, do.call, duplicated,
eval, evalq, Filter, Find, get, grep, grepl, intersect,
is.unsorted, lapply, lengths, Map, mapply, match, mget, order,
paste, pmax, pmax.int, pmin, pmin.int, Position, rank, rbind,
Reduce, rowMeans, rownames, rowSums, sapply, setdiff, sort,
table, tapply, union, unique, unsplit, which, which.max,
which.min
Loading required package: S4Vectors
Attaching package: 'S4Vectors'
The following object is masked from 'package:Matrix':
expand
The following object is masked from 'package:base':
expand.grid
Loading required package: IRanges
Loading required package: GenomeInfoDb
Loading required package: Biobase
Welcome to Bioconductor
Vignettes contain introductory material; view with
'browseVignettes()'. To cite Bioconductor, see
'citation("Biobase")', and for packages 'citation("pkgname")'.
Loading required package: DelayedArray
Loading required package: matrixStats
Attaching package: 'matrixStats'
The following objects are masked from 'package:Biobase':
anyMissing, rowMedians
Loading required package: BiocParallel
Attaching package: 'DelayedArray'
The following objects are masked from 'package:matrixStats':
colMaxs, colMins, colRanges, rowMaxs, rowMins, rowRanges
The following objects are masked from 'package:base':
aperm, apply
color.vec <- brewer.pal(8, "Set1")
# Normalization.
normalize <- function (counts)
{
normfactor <- colSums(counts)
return(t(t(counts)/normfactor)*median(normfactor))
}
data("Lawlor_Islet_scRNAseq_Read_Counts")
data("Lawlor_Islet_scRNAseq_Annotations")
ls()
[1] "color.vec" "Lawlor_Islet_scRNAseq_Annotations"
[3] "Lawlor_Islet_scRNAseq_Read_Counts" "normalize"
counts <- Lawlor_Islet_scRNAseq_Read_Counts
anns <- Lawlor_Islet_scRNAseq_Annotations
dim(anns)
[1] 638 26
dim(counts)
[1] 26542 638
summary(anns)
run cell.type COL1A1 INS
Length:638 Length:638 Min. :1.00 Min. :1.000
Class :character Class :character 1st Qu.:1.00 1st Qu.:1.000
Mode :character Mode :character Median :1.00 Median :1.000
Mean :1.03 Mean :1.414
3rd Qu.:1.00 3rd Qu.:2.000
Max. :2.00 Max. :2.000
PRSS1 SST GCG KRT19
Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
1st Qu.:1.000 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:1.000
Median :1.000 Median :1.000 Median :1.000 Median :1.000
Mean :1.038 Mean :1.039 Mean :1.375 Mean :1.044
3rd Qu.:1.000 3rd Qu.:1.000 3rd Qu.:2.000 3rd Qu.:1.000
Max. :2.000 Max. :2.000 Max. :2.000 Max. :2.000
PPY num.genes Cell_ID UNOS_ID
Min. :1.000 Min. :3529 10th_C1_S59 : 1 ACCG268 :136
1st Qu.:1.000 1st Qu.:5270 10th_C10_S104: 1 ACJV399 :108
Median :1.000 Median :6009 10th_C11_S96 : 1 ACEL337 :103
Mean :1.028 Mean :5981 10th_C13_S61 : 1 ACIW009 : 93
3rd Qu.:1.000 3rd Qu.:6676 10th_C14_S53 : 1 ACCR015A: 57
Max. :2.000 Max. :8451 10th_C16_S105: 1 ACIB065 : 57
(Other) :632 (Other) : 84
Age Biomaterial_Provider Gender Phenotype
Min. :22.00 IIDP : 45 Female:303 Non-Diabetic :380
1st Qu.:29.00 Prodo Labs:593 Male :335 Type 2 Diabetic:258
Median :42.00
Mean :39.63
3rd Qu.:53.00
Max. :56.00
Race BMI Cell_Type Patient_ID
African American:175 Min. :22.00 INS :264 P1 :136
Hispanic :165 1st Qu.:26.60 GCG :239 P8 :108
White :298 Median :32.95 KRT19 : 28 P3 :103
Mean :32.85 SST : 25 P7 : 93
3rd Qu.:35.80 PRSS1 : 24 P5 : 57
Max. :55.00 none : 21 P6 : 57
(Other): 37 (Other): 84
Sequencing_Run Batch Coverage Percent_Aligned
12t : 57 B1:193 Min. :1206135 Min. :0.8416
4th : 57 B2:148 1st Qu.:2431604 1st Qu.:0.8769
9th : 57 B3:297 Median :3042800 Median :0.8898
10t : 56 Mean :3160508 Mean :0.8933
7th : 55 3rd Qu.:3871697 3rd Qu.:0.9067
3rd : 53 Max. :5931638 Max. :0.9604
(Other):303
Mitochondrial_Fraction Num_Expressed_Genes
Min. :0.003873 Min. :3529
1st Qu.:0.050238 1st Qu.:5270
Median :0.091907 Median :6009
Mean :0.108467 Mean :5981
3rd Qu.:0.142791 3rd Qu.:6676
Max. :0.722345 Max. :8451
ContCoef(table(anns$Gender, anns$Cell_Type))
[1] 0.225969
ContCoef(table(anns$Phenotype, anns$Cell_Type))
[1] 0.1145096
ContCoef(table(anns$Race, anns$Cell_Type))
[1] 0.3084146
ContCoef(table(anns$Patient_ID, anns$Cell_Type))
[1] 0.5232058
ContCoef(table(anns$Batch, anns$Cell_Type))
[1] 0.3295619
The annotations describing the islet samples and experimental settings are stored in “anns” and the read counts information is stored in “counts”.
counts <- counts[, (anns$Phenotype!="Non-Diabetic")&
((anns$Cell_Type=="GCG")|
(anns$Cell_Type=="INS")|
(anns$Cell_Type=="KRT19"))]
anns <- subset(anns, (Phenotype!="Non-Diabetic")&
((Cell_Type=="GCG")|
(Cell_Type=="INS")|
(Cell_Type=="KRT19")))
dim(counts)
[1] 26542 213
dim(anns)
[1] 213 26
anns <- droplevels(anns)
prop.zeros <- sum(counts==0)/length(counts)
prop.zeros
[1] 0.6917875
filter = apply(counts, 1, function(x) length(x[x>5])>=3)
counts = counts[filter,]
dim(counts)
[1] 16005 213
prop.zeros <- sum(counts==0)/length(counts)
prop.zeros
[1] 0.4956072
Patient_ID <- anns$Patient_ID
Cell_Type <- anns$Cell_Type
levels(Cell_Type) <- c("alpha", "beta", "ductal")
Batch <- anns$Batch
table(Cell_Type)
Cell_Type alpha beta ductal 101 96 16
raw.counts <- counts
summary(colSums(counts))
Min. 1st Qu. Median Mean 3rd Qu. Max.<PHONE_NUMBER>530 1263975 1310323 1492478 3090459
counts <- normalize(counts)
summary(colSums(counts))
Min. 1st Qu. Median Mean 3rd Qu. Max. 1263975 1263975 1263975 1263975 1263975 1263975
It is well known that the number of detected genes in each cell explains a very large portion of variability in scRNA-Seq data (Hicks et. al. 2015 BioRxiv, McDavid et. al. 2016 Nature Biotechnology). Frequently, the first principal component of log-transformed scRNA-Seq read counts is highly correlated with the number of detected genes (e.g., r > 0.9). Here, we calculate the number of detected genes for islet cells, which will be used as an known factor in the IA-SVA analyses.
Num_Detected_Genes <- colSums(counts>0)
Geo_Lib <- colSums(log(counts+1))
summary(Geo_Lib)
Min. 1st Qu. Median Mean 3rd Qu. Max.
16331 21429 25600 25262 28659 34613
barplot(Geo_Lib, xlab="Cell", las=2, ylab = "Geometric Library Size")
lcounts <- log(counts + 1)
# PC1 and Geometric library size correlation
pc1 = irlba(lcounts - rowMeans(lcounts), 1)$v[,1] ## partial SVD
cor(Geo_Lib, pc1)
[1] -0.9796015
For comparison purposes, we applied tSNE on read counts of all genes. We used the Rtsne R package with default settings for this analyses. Genes are colored with respect to the expression of marker genes.
set.seed(32354388)
tsne.res <- Rtsne(t(lcounts), dims = 2)
plot(tsne.res$Y, main="tSNE", xlab="Dim1", ylab="Dim2", pch=21,
col=color.vec[Cell_Type], bg=color.vec[Cell_Type], oma=c(4,4,6,12))
legend("bottomright", levels(Cell_Type), border="white",fill=color.vec, bty="n")
Here, we first run IA-SVA using Patient_ID, Batch and Geo_Lib_Size as known factors and identify 5 hidden factors. Since cell type is not used as a known factor in this analyses, IA-SVA will detect the heterogeneity associated with the cell types.
mod <- model.matrix(~Patient_ID+Batch+Geo_Lib)
summ_exp <- SummarizedExperiment(assays = counts)
iasva.res<- iasva(summ_exp, mod[,-1],verbose=FALSE, permute=FALSE, num.sv=5)
IA-SVA running...
SV 1 Detected!
SV 2 Detected!
SV 3 Detected!
SV 4 Detected!
SV 5 Detected!
# of significant surrogate variables: 5
iasva.sv <- iasva.res$sv
#with color-coding based on true cell-type
pairs(iasva.sv, main="IA-SVA", pch=21, col=color.vec[Cell_Type],
bg=color.vec[Cell_Type], oma=c(4,4,6,14))
legend("right", levels(Cell_Type), border="white", fill=color.vec, bty="n")
cor(Num_Detected_Genes, iasva.sv)
SV1 SV2 SV3 SV4 SV5
[1,] -0.06492242 -0.6767266 -0.09183223 -0.1677585 0.7053465
cor(Geo_Lib, iasva.sv)
SV1 SV2 SV3 SV4 SV5
[1,] -0.2044236 -0.7212868 -0.275179 -0.1841835 0.7725583
corrplot(cor(iasva.sv))
Here, using the find_markers() function we find marker genes significantly associated with SV1 and SV3 (multiple testing adjusted p-value < 0.05, default significance cutoff, a high R-squared value: R-squared > 0.4).
# try different R2 thresholds
pdf("Clustering_analyses_figure4_islets_sv1_3.pdf")
r2.results <- study_R2(summ_exp, iasva.sv,selected.svs=c(1,3), no.clusters=3)
# of markers (SV1): 682
# of markers (SV3): 534
total # of unique markers: 979
# of markers (SV1): 357
# of markers (SV3): 281
total # of unique markers: 519
# of markers (SV1): 207
# of markers (SV3): 161
total # of unique markers: 309
# of markers (SV1): 123
# of markers (SV3): 99
total # of unique markers: 192
# of markers (SV1): 78
# of markers (SV3): 62
total # of unique markers: 129
# of markers (SV1): 44
# of markers (SV3): 37
total # of unique markers: 79
# of markers (SV1): 34
# of markers (SV3): 26
total # of unique markers: 58
# of markers (SV1): 25
# of markers (SV3): 20
total # of unique markers: 44
# of markers (SV1): 19
# of markers (SV3): 14
total # of unique markers: 33
# of markers (SV1): 11
# of markers (SV3): 9
total # of unique markers: 20
# of markers (SV1): 8
# of markers (SV3): 7
total # of unique markers: 15
# of markers (SV1): 4
# of markers (SV3): 7
total # of unique markers: 11
# of markers (SV1): 2
# of markers (SV3): 5
total # of unique markers: 7
# of markers (SV1): 2
# of markers (SV3): 3
total # of unique markers: 5
# of markers (SV1): 1
# of markers (SV3): 3
total # of unique markers: 4
# of markers (SV1): 0
# of markers (SV3): 1
total # of unique markers: 1
# of markers (SV1): 0
# of markers (SV3): 0
total # of unique markers: 0
dev.off()
quartz_off_screen
2
marker.counts <- find_markers(summ_exp, as.matrix(iasva.sv[,c(1,3)])
, rsq.cutoff = 0.4)
# of markers (SV1): 34
# of markers (SV3): 26
total # of unique markers: 58
nrow(marker.counts)
[1] 58
anno.col <- data.frame(Cell_Type=Cell_Type)
rownames(anno.col) <- colnames(marker.counts)
head(anno.col)
Cell_Type
4th-C63_S30 alpha
4th-C66_S36 alpha
4th-C7_S15 beta
4th-C18_S31 alpha
4th-C5_S8 beta
4th-C57_S18 alpha
cell.type.col <- color.vec[1:3]
names(cell.type.col) <- c("alpha","beta","ductal")
anno.colors <- list(Cell_Type=cell.type.col)
pheatmap(log(marker.counts+1), show_colnames =FALSE,
clustering_method = "ward.D2", cutree_cols = 3,
annotation_col = anno.col, annotation_colors = anno.colors)
In the case of islet cells, marker genes are well established and IA-SVA did an excellent job of redefining these markers along with some other highly informative genes. Therefore, IA-SVA can be effectively used to uncover heterogeneity associated with cell types and can reveal genes that are expressed in a cell-specific manner.
Here, using the find_markers() function we find marker genes significantly associated with SV4 (multiple testing adjusted p-value < 0.05, default significance cutoff, a high R-squared value: R-squared > 0.3).
marker.counts.SV4 <- find_markers(summ_exp, as.matrix(iasva.sv[,c(4)]),
rsq.cutoff = 0.3)
# of markers (): 94
total # of unique markers: 94
nrow(marker.counts.SV4)
[1] 94
anno.col <- data.frame(SV4=iasva.sv[,4])
rownames(anno.col) <- colnames(marker.counts)
head(anno.col)
SV4
4th-C63_S30 0.022045049
4th-C66_S36 0.006979656
4th-C7_S15 0.014475352
4th-C18_S31 0.012836294
4th-C5_S8 0.009518166
4th-C57_S18 -0.126329593
pheatmap(log(marker.counts.SV4+1), show_colnames =FALSE,
clustering_method = "ward.D2", cutree_cols = 2,
annotation_col = anno.col)
Here, we apply tSNE on the marker genes for SV1 and SV2
set.seed(344588)
tsne.res.iasva <- Rtsne(unique(t(log(marker.counts+1))), dims = 2)
plot(tsne.res.iasva$Y, main="IA-SVA + tSNE", xlab="Dimension 1",
ylab="Dimension 2", pch=21, col=color.vec[Cell_Type],
bg=color.vec[Cell_Type], oma=c(4,4,6,12))
legend("topright", levels(Cell_Type), border="white", fill=color.vec, bty="n")
tSNE conducted on genes selected via IA-SVA very clearly seperates cells into their corresponding cell types. Moreover, this analyses also revealed one cell (green cell clustered together with blue cells) that is potentially mislabeled in the original analyses.
# specify gene number to select for
gene_num <- 1000
# calcuclate dispersion
row.var <- apply(lcounts,1,sd)**2
row.mean <- apply(lcounts,1,mean)
dispersion <- row.var/row.mean
# generate sequence of bins
bins <- seq(from = min(row.mean), to = max(row.mean), length.out = 20)
# sort mean expression data into the bins
bin.exp <- row.mean
# sort the values
bin.sort <- sort(bin.exp, decreasing = FALSE)
# vector of bin assignment
cuts <- cut(x = bin.exp, breaks = bins, labels = FALSE)
# find which are NA and change to zero
na.ids <- which(is.na(cuts) == TRUE)
cuts[na.ids] <- 0
# create an empty vector for overdispersion
overdispersion <- NULL
# for each gene and bin index, calculate median, mad, and then normalized dispersion
# first loop through length of bins found
for (k in 1:length(names(table(cuts)))) {
# find index of bins
bin.id <- which(cuts == names(table(cuts))[k])
# median of all genes in the bin
median.bin <- median(dispersion[bin.id], na.rm = TRUE)
# calculate mad (median absolute deviation)
mad.bin <- mad(dispersion[bin.id])
# calculate norm dispersion for each gene
for (m in 1:length(bin.id)) {
norm.dispersion <- abs(dispersion[bin.id[m]] - median.bin)/mad.bin
overdispersion <- c(overdispersion, norm.dispersion)
}
}
# remove nans
overdis.na <- which(is.na(overdispersion) == TRUE)
if (length(overdis.na) > 0) {
overdis.filt <- overdispersion[-overdis.na]
} else {
overdis.filt <- overdispersion
}
# plot mean expression vs overdisperssion
ids <- which(names(overdis.filt) %in% names(row.mean))
plot(row.mean[ids], overdis.filt)
# Do t-sne using top over-dispersed genes (apply mean expression filter too)
rank.ov <- order(overdis.filt, decreasing = TRUE)
ov.genes <- names(overdis.filt[rank.ov[1:gene_num]])
log.sel <- lcounts[ov.genes,]
all1 <- t(log.sel)
# Remove groups that are all zeros
df <- all1[,apply(all1, 2, var, na.rm=TRUE) != 0]
set.seed(34544532)
rtsne_out <- Rtsne(as.matrix(df), dims = 3)
# Set rownames of matrix to tsne matrix
rownames(rtsne_out$Y) <- rownames(df)
tsne.cellview <- rtsne_out$Y
plot(tsne.cellview[,c(1,2)], main="CellView", xlab="Dimension 1",
ylab="Dimension 2",pch=21, col=color.vec[Cell_Type],
bg=color.vec[Cell_Type], oma=c(4,4,6,12))
legend("topright", levels(Cell_Type), border="white", fill=color.vec, bty="n")
set.seed(12344)
seurat.obj <- CreateSeuratObject(raw.data=raw.counts,
min.cells=3, min.genes=200, project="Seurat_Comp")
names(Patient_ID) <-<EMAIL_ADDRESS>seurat.obj <- AddMetaData(object = seurat.obj,
metadata = Patient_ID, col.name = "patient.id")
names(Batch) <-<EMAIL_ADDRESS>seurat.obj <- AddMetaData(object = seurat.obj,
metadata = Batch, col.name = "batch")
names(Geo_Lib) <-<EMAIL_ADDRESS>seurat.obj <- AddMetaData(object = seurat.obj,
metadata = Geo_Lib, col.name = "geo.lib")
# Normalizing the data
seurat.obj <- NormalizeData(object = seurat.obj,
normalization.method = "LogNormalize",
scale.factor = median(colSums(raw.counts)))
# Detection of variable genes across the single cells
seurat.obj <- FindVariableGenes(object = seurat.obj,
mean.function = ExpMean, dispersion.function = LogVMR,
x.low.cutoff = 0.0125, x.high.cutoff = 3, y.cutoff = 0.5)
length(x =<EMAIL_ADDRESS>[1] 2933
# Scaling the data and removing unwanted sources of variation
seurat.obj <- ScaleData(object = seurat.obj,
vars.to.regress = c("patient.id", "batch", "geo.lib"))
Regressing out: patient.id, batch, geo.lib
Time Elapsed: 9.59692406654358 secs
Scaling data matrix
# Perform linear dimensional reduction
seurat.obj <- RunPCA(object = seurat.obj,
pc.genes =<EMAIL_ADDRESS>do.print = TRUE, pcs.print = 1:5,
genes.print = 5)
[1] "PC1"
[1] "CCDC108" "SGIP1" "MBD5" "RP11-222A11.1"
[5] "GLRA3"
[1] ""
[1] "DEFB1" "VTCN1" "PKHD1" "ITGB6" "PROM1"
[1] ""
[1] ""
[1] "PC2"
[1] "ELTD1" "GPR116" "ERG" "VWF" "DYSF"
[1] ""
[1] "VTCN1" "DEFB1" "PKHD1" "ITGB6" "LGALS4"
[1] ""
[1] ""
[1] "PC3"
[1] "PAQR4" "SLITRK6" "BUB1B" "MTFR2" "TFAP2A"
[1] ""
[1] "GCKR" "LYPD6B" "LGALS4" "C6orf222"
[5] "RP4-534N18.2"
[1] ""
[1] ""
[1] "PC4"
[1] "BUB1" "ASPM" "KIFC1" "RAD51" "DEPDC1"
[1] ""
[1] "SLIT2" "COL5A1" "TFAP2A" "RUNX2" "SFRP1"
[1] ""
[1] ""
[1] "PC5"
[1] "FHL3" "FGG" "MAMLD1" "PRKCG" "KRT222"
[1] ""
[1] "GLRA1" "EPB41L2" "ADRA2A" "TET1" "DACH2"
[1] ""
[1] ""
# Run tSNE (Spectral tSNE)
set.seed(8883)
seurat.obj <- RunTSNE(object = seurat.obj, dims.use = 1:5, do.fast = TRUE)
# tSNE plot with color-coding of true cell types
plot(seurat.obj@dr$tsne@cell.embeddings[,c(1,2)],
main="Spectral tSNE (Seurat)", xlab="Dimension 1",
ylab="Dimension 2",pch=21, col=color.vec[Cell_Type],
bg=color.vec[Cell_Type], oma=c(4,4,6,12))
legend("topleft", levels(Cell_Type), border="white", fill=color.vec, bty="n")
pdf(file="output/Lawlor_Islets_3Cells_tSNE_IA-SVA_Fig4AB.pdf", width=9, height=5)
layout(matrix(c(1,2), nrow=1, ncol=2, byrow=TRUE))
plot(tsne.res$Y, main="tSNE", xlab="Dimension 1",
ylab="Dimension 2", pch=21, col=color.vec[Cell_Type],
bg=color.vec[Cell_Type])
legend("topleft", levels(Cell_Type), border="white",
fill=color.vec, bty="n")
plot(tsne.res.iasva$Y, main="IA-SVA + tSNE", xlab="Dimension 1",
ylab="Dimension 2", pch=21, col=color.vec[Cell_Type],
bg=color.vec[Cell_Type])
legend("topright", levels(Cell_Type), border="white",
fill=color.vec, bty="n")
dev.off()
quartz_off_screen
2
anno.col <- data.frame(Cell_Type=Cell_Type)
rownames(anno.col) <- colnames(marker.counts)
head(anno.col)
Cell_Type
4th-C63_S30 alpha
4th-C66_S36 alpha
4th-C7_S15 beta
4th-C18_S31 alpha
4th-C5_S8 beta
4th-C57_S18 alpha
cell.type.col <- color.vec[1:3]
names(cell.type.col) <- c("alpha","beta","ductal")
anno.colors <- list(Cell_Type=cell.type.col)
pheatmap(log(marker.counts+1), show_colnames =FALSE,
clustering_method = "ward.D2", cutree_cols = 3,
annotation_col = anno.col, annotation_colors = anno.colors,
filename="output/Lawlor_Islets_3Cells_IASVA_SV1SV3_rsqcutoff0.3_pheatmap_iasvaV0.95_Figure4_C.pdf",
width=6, height=17)
pdf(file="output/Lawlor_Islets_3Cells_IASVA_pairs4SVs_iasvaV0.95_black_FigS6.pdf",
width=4, height=4)
pairs(iasva.sv[,1:4], pch=21, col="black", bg="black")
dev.off()
quartz_off_screen
2
pdf(file="output/Lawlor_Islets_3Cells_IASVA_pairs4SVs_iasvaV0.95_color_FigS6.pdf",
width=4, height=4)
pairs(iasva.sv[,1:4], pch=21, col=color.vec[Cell_Type],
bg=color.vec[Cell_Type])
dev.off()
quartz_off_screen
2
## 1,2
pdf(file="output/Lawlor_Islets_3Cells_CellView_Seurat_FigS.pdf", width=9, height=5)
layout(matrix(c(1,2), nrow=1, ncol=2, byrow=TRUE))
plot(tsne.cellview[,c(1,2)], main="CellView", xlab="Dimension 1",
ylab="Dimension 2",pch=21, col=color.vec[Cell_Type],
bg=color.vec[Cell_Type], oma=c(4,4,6,12))
legend("topright", levels(Cell_Type), border="white",
fill=color.vec, bty="n")
plot(seurat.obj@dr$tsne@cell.embeddings[,c(1,2)],
main="Spectral tSNE (Seurat)", xlab="Dimension 1",
ylab="Dimension 2",pch=21, col=color.vec[Cell_Type],
bg=color.vec[Cell_Type], oma=c(4,4,6,12))
legend("topleft", levels(Cell_Type), border="white",
fill=color.vec, bty="n")
dev.off()
quartz_off_screen
2
write.table(as.data.frame(rownames(marker.counts)),
file="output/Lawlor_Islets_3Cells_SV1_SV3_Cell_Type_Genes_rsqcutoff0.3.txt",
quote=F, row.names=F, col.names=F, sep=" ")
write.table(as.data.frame(rownames(marker.counts.SV4)),
file="output/Lawlor_Islets_3Cells_SV4_Genes_rsqcutoff0.3.txt", quote=F,
row.names=F, col.names=F, sep=" ")
anno.col <- data.frame(SV4=iasva.sv[,4])
rownames(anno.col) <- colnames(marker.counts)
head(anno.col)
SV4
4th-C63_S30 0.022045049
4th-C66_S36 0.006979656
4th-C7_S15 0.014475352
4th-C18_S31 0.012836294
4th-C5_S8 0.009518166
4th-C57_S18 -0.126329593
pheatmap(log(marker.counts.SV4+1), show_colnames =FALSE,
clustering_method = "ward.D2", cutree_cols = 2,
annotation_col = anno.col,
filename="output/Lawlor_Islets_3Cells_IASVA_SV4_rsqcutoff0.3_pheatmap_iasvaV0.95.pdf",
width=8, height=14)
sessionInfo()
R version 3.5.0 (2018-04-23)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.6
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] parallel stats4 stats graphics grDevices utils datasets
[8] methods base
other attached packages:
[1] SummarizedExperiment_1.10.1 DelayedArray_0.6.1
[3] BiocParallel_1.14.2 matrixStats_0.53.1
[5] Biobase_2.40.0 GenomicRanges_1.32.3
[7] GenomeInfoDb_1.16.0 IRanges_2.14.10
[9] S4Vectors_0.18.3 BiocGenerics_0.26.0
[11] RColorBrewer_1.1-2 DescTools_0.99.24
[13] corrplot_0.84 pheatmap_1.0.10
[15] Rtsne_0.13 dbscan_1.1-2
[17] Seurat_2.3.2 cowplot_0.9.2
[19] ggplot2_<IP_ADDRESS>00 iasvaExamples_1.0.0
[21] iasva_0.99.3 irlba_2.3.2
[23] Matrix_1.2-14
loaded via a namespace (and not attached):
[1] snow_0.4-2 backports_1.1.2 Hmisc_4.1-1
[4] workflowr_1.0.1 VGAM_1.0-5 plyr_1.8.4
[7] igraph_1.2.1 lazyeval_0.2.1 splines_3.5.0
[10] digest_0.6.15 foreach_1.4.4 htmltools_0.3.6
[13] lars_1.2 gdata_2.18.0 magrittr_1.5
[16] checkmate_1.8.5 cluster_2.0.7-1 mixtools_1.1.0
[19] ROCR_1.0-7 sfsmisc_1.1-2 recipes_0.1.3
[22] gower_0.1.2 dimRed_0.1.0 R.utils_2.6.0
[25] colorspace_1.3-2 dplyr_0.7.5 jsonlite_1.5
[28] RCurl_1.95-4.10 bindr_0.1.1 zoo_1.8-2
[31] survival_2.42-3 iterators_1.0.9 ape_5.1
[34] glue_1.2.0 DRR_0.0.3 gtable_0.2.0
[37] ipred_0.9-6 zlibbioc_1.26.0 XVector_0.20.0
[40] kernlab_0.9-26 ddalpha_1.3.3 prabclus_2.2-6
[43] DEoptimR_1.0-8 abind_1.4-5 scales_0.5.0
[46] mvtnorm_1.0-8 Rcpp_0.12.17 dtw_1.20-1
[49] metap_0.9 htmlTable_1.12 tclust_1.4-1
[52] magic_1.5-8 reticulate_1.8 bit_1.1-14
[55] proxy_0.4-22 foreign_0.8-70 mclust_5.4
[58] SDMTools_1.1-221 Formula_1.2-3 tsne_0.1-3
[61] lava_1.6.1 prodlim_2018.04.18 htmlwidgets_1.2
[64] FNN_1.1 gplots_3.0.1 fpc_2.1-11
[67] acepack_1.4.1 modeltools_0.2-21 ica_1.0-2
[70] manipulate_1.0.1 pkgconfig_2.0.1 R.methodsS3_1.7.1
[73] flexmix_2.3-14 nnet_7.3-12 caret_6.0-80
[76] tidyselect_0.2.4 rlang_0.2.1 reshape2_1.4.3
[79] munsell_0.4.3 tools_3.5.0 ranger_0.10.1
[82] pls_2.6-0 ggridges_0.5.0 broom_0.4.4
[85] evaluate_0.10.1 geometry_0.3-6 stringr_1.3.1
[88] yaml_2.1.19 bit64_0.9-7 ModelMetrics_1.1.0
[91] knitr_1.20 fitdistrplus_1.0-9 robustbase_0.93-0
[94] caTools_1.17.1 purrr_0.2.5 RANN_2.5.1
[97] bindrcpp_0.2.2 pbapply_1.3-4 nlme_3.1-137
[100] whisker_0.3-2 R.oo_1.22.0 RcppRoll_0.3.0
[103] hdf5r_1.0.0 compiler_3.5.0 rstudioapi_0.7
[106] png_0.1-7 tibble_1.4.2 stringi_1.2.2
[109] lattice_0.20-35 trimcluster_0.1-2 psych_1.8.4
[112] diffusionMap_1.1-0 pillar_1.2.3 lmtest_0.9-36
[115] data.table_1.11.4 bitops_1.0-6 R6_2.2.2
[118] latticeExtra_0.6-28 KernSmooth_2.23-15 gridExtra_2.3
[121] codetools_0.2-15 boot_1.3-20 MASS_7.3-50
[124] gtools_3.5.0 assertthat_0.2.0 CVST_0.2-2
[127] rprojroot_1.3-2 withr_2.1.2 mnormt_1.5-5
[130] GenomeInfoDbData_1.1.0 expm_0.999-2 diptest_0.75-7
[133] doSNOW_1.0.16 grid_3.5.0 rpart_4.1-13
[136] timeDate_3043.102 tidyr_0.8.1 class_7.3-14
[139] rmarkdown_1.9 segmented_0.5-3.0 git2r_0.21.0
[142] lubridate_1.7.4 scatterplot3d_0.3-41 base64enc_0.1-3
This reproducible R Markdown analysis was created with workflowr 1.0.1


I'm building a straw bale house that I hope to certify as a Passivhaus, so it has very low heating demand. We're just finishing first fix and I'm putting the final bits of wiring in before we close up the walls and ceiling, so I really do need to make my mind up about heating now! Or at least make my mind up about initial heating and any wiring I might want to be able to change in the future.
It's an all-electric house, so my basic strategy is to scatter electric heaters around, although I do have a thermal store with some spare tappings so I could add a fan-assisted radiator in the hall later if it seems like a good idea. The house is designed as a Passivhaus and our max heat load as indicated by PHPP is around 1.5 kW.
I've put power wiring to fused connection units in various places:
* each bathroom/ensuite
* living room
* plant room to connect a post-heater in the MVHR
* downstairs hall for a fan-assisted convection heater
The ones in the wet rooms and the living room are intended for relatively low-powered infrared heaters to provide comfort warmth if needed. They could also be turned on overnight to take advantage of E7 tariff. The MVHR could accept up to a 1.5 kW post heater; the hall could use up to a 3 kW fan heater. Obviously, I could also later add additional small heaters via 13A sockets anywhere.
Being well-insulated and probably moderate to high mass (straw bale and plaster, plus a concrete slab under the floors) I expect it will have a long time constant. There'll probably be somebody at home most of the time as well. So I'm not too concerned about programmability and I plan to just try to keep it constantly warm. We should only need any heating for three or four months.
The question that is puzzling me now is what do I need to build in for heating control? Individual thermostats for the various rooms with heaters? Some kind of network? External sensors? Do the thermostats directly control the heaters or should I build in some 'brain'? And is everything connected together via mains wiring, bell wire, Cat 5, wi-fi or some other wireless system? And how do I do it all without spending much?
Since I'm posting here, I suppose it is obvious that I'm wondering whether I can sensibly do all this using an Open Energy Monitor system, and what would be involved if I can? How much can I buy off the shelf and how much would I have to build and/or develop?
Re: control system for a new house
I have a follow-on question already! By browsing the site, I can see most of the parts of a possible system. The part I'm left wondering about is controlling the heaters. I need some sort of power relay, which would need to be located close to each heater. Ideally, the relays would be controlled wirelessly by the monitor system and/or manual switches. Are there suitable wireless relays?
Re: control system for a new house
First, put in plenty of plastic pipes through which you can run cables later, with little or no disruption to the decoration.
The follow-up question first: Robin Emley (calypso_rae or Mk2PVRouter.co.uk) offers a wireless remote switch using a triac - it's an emonTx and the triac output stage from the PV diverter designs.
But if you're still at 'first fix', why not leave your ring main for all the 'usual' appliances and take all the power cabling for the items you want to control automatically/remotely back to a central point, then you won't need to worry about wireless, interference or anything else. And it will probably be cheaper too. If you have a central 'brain', you can easily have a lot more intelligence and take weather (temperature, wind, insolation?) into account as well as internal temperatures.
Re: control system for a new house
"First, put in plenty of plastic pipes through which you can run cables later, with little or no disruption to the decoration."
Thanks for your comments. I thought about putting in extra ducting, but I have enough trouble knowing where to run e.g TV points, let alone where to run ducting for some purpose that I don't [yet] know!
"The follow-up question first: Robin Emley (calypso_rae or Mk2PVRouter.co.uk) offers a wireless remote switch using a triac - it's an emonTx and the triac output stage from the PV diverter designs."
Ah, excellent. I'll probably end up with his diverter for my PV panels anyway, so it will be sensible to use the same building blocks.
"But if you're still at 'first fix', why not leave your ring main for all the 'usual' appliances and take all the power cabling for the items you want to control automatically/remotely back to a central point, then you won't need to worry about wireless, interference or anything else. And it will probably be cheaper too. If you have a central 'brain', you can easily have a lot more intelligence and take weather (temperature, wind, insolation?) into account as well as internal temperatures."
The heater power isn't on the main rings. The MVHR post heater and the hall fan heater have their own radials. The three wetrooms and the living room are on a private ring; I have (had?) ideas of switching power to the ring on an E7 timeswitch. But due to the layout of the house, I could reconfigure that ring to be four separate radials by the use of one extra length of wire, I think. That does sound like it's worth doing. Thanks very much for the idea.
The consumer unit, solar PV, thermal store, router and the hoped-for 'heating brain' will all be together in a cupboard in the utility room. So if I rewire as you suggest, I'd just need remote temperature sensors and manual override switches local to the heaters.
I'm basically a software type, though I can do simple electrics and soldering etc. I need adult supervision for mains stuff, but my electrician is helpful.


|
Intel(R) Threading Building Blocks Doxygen Documentation
version 4.2.3
|
Files | |
| file | _aggregator_impl.h [code] |
| file | _allocator_traits.h [code] |
| file | _concurrent_queue_impl.h [code] |
| file | _concurrent_unordered_impl.h [code] |
| file | _flow_graph_async_msg_impl.h [code] |
| file | _flow_graph_body_impl.h [code] |
| file | _flow_graph_cache_impl.h [code] |
| file | _flow_graph_impl.h [code] |
| file | _flow_graph_indexer_impl.h [code] |
| file | _flow_graph_item_buffer_impl.h [code] |
| file | _flow_graph_join_impl.h [code] |
| file | _flow_graph_node_impl.h [code] |
| file | _flow_graph_streaming_node.h [code] |
| file | _flow_graph_tagged_buffer_impl.h [code] |
| file | _flow_graph_trace_impl.h [code] |
| file | _flow_graph_types_impl.h [code] |
| file | _mutex_padding.h [code] |
| file | _range_iterator.h [code] |
| file | _tbb_hash_compare_impl.h [code] |
| file | _tbb_strings.h [code] |
| file | _tbb_trace_impl.h [code] |
| file | _tbb_windef.h [code] |
| file | _template_helpers.h [code] |
| file | _x86_eliding_mutex_impl.h [code] |
| file | _x86_rtm_rw_mutex_impl.h [code] |


Web-developer
Tester Automation
Manh Hung
I am a programmer and tester. The main languages I learn are: Java, PHP. At the same time I am a developer: Front-end, Tester Automation, Java web development.
I am a programmer and tester. The main languages I learn are: Java, PHP. At the same time I am a developer: Front-end, Tester Automation, Java web development.


svn changelist
Associate a changelist with a set of files.
More information: home page
- Add files to a changelist, creating the changelist if it does not exist:
svn changelist changelist_name path/to/file1 path/to/file2
- Remove files from a changelist:
svn changelist --remove path/to/file1 path/to/file2
- Remove the whole changelist at once:
svn changelist --remove --recursive --changelist changelist_name .
- Add the contents of a space-separated list of directories to a changelist:
svn changelist --recursive changelist_name path/to/directory1 path/to/directory2
- Commit a changelist:
svn commit --changelist changelist_name


☰ Menu
Immersive Experience
About
- An immersive experience is an illusory environment that completely surrounds you such that you feel that you are inside it and part of it. The term is associated with technology environments that command the senses such as virtual reality and mixed reality.
Research
- Platinum Rhino have researched that consumers have a positive view of brands that have utilized some form of immersive tech. “The appetite is growing rapidly,” Clarence White, Platinum Rhino CEO of Emerging Platform, said. 360-degree videos, AR and VR will continue to grow and dominate not just the marketing industry but other industries around the world. Immersive technology is key to success in the marketing industry. Consumers continue to search for the latest innovative content to keep them entertained.


Path Following algorithm takes as an input a path object and returns a position placed on the path ahead of the vehicle.
The method returns a target, only if the vehicle drifts away from the path.
The calculated point is passed to Seek.
Essential for the algorithm is calculating the normal points on path's segments and choosing which is closest to the agent.
It can be done in the method itself or using methods defined in the path object.
The orange vector sticking out of the center of the vehicle is a visualization of the desired velocity and the violet one shows the current velocity of the agent. The pink space is the path that the vehicle follows. The pink circles are representing the predicted position of the vehicle and the target's position. The red line follows the points calculated by the algorithm to get the target.
The orange vector sticking out of the center of the vehicle is a visualization of the desired velocity and the violet one shows the current velocity of the agent. The pink space is the path that the vehicle follows. The pink circles are representing the predicted position of the vehicle and the target's position. The red line follows the points calculated by the algorithm to get the target.
Vehicle position x:
y:
velocity:


[Daily Statistics] [Hourly Statistics] [URLs] [Entry] [Exit] [Sites] [Referrers] [Search] [Agents] [Countries]
| Monthly Statistics for November 2009 | ||
|---|---|---|
| Total Hits | 4970 | |
| Total Files | 4410 | |
| Total Pages | 442 | |
| Total Visits | 270 | |
| Total KBytes | 218017 | |
| Total Unique Sites | 281 | |
| Total Unique URLs | 148 | |
| Total Unique Referrers | 60 | |
| Total Unique User Agents | 82 | |
| . | Avg | Max |
| Hits per Hour | 51 | 304 |
| Hits per Day | 1242 | 1913 |
| Files per Day | 1102 | 1751 |
| Pages per Day | 110 | 135 |
| Visits per Day | 67 | 72 |
| KBytes per Day | 54504 | 84600 |
| Hits by Response Code | ||
| Code 200 - OK | 4410 | |
| Code 206 - Partial Content | 5 | |
| Code 304 - Not Modified | 120 | |
| Code 404 - Not Found | 435 | |
| Daily Statistics for November 2009 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Day | Hits | Files | Pages | Visits | Sites | KBytes | ||||||
| 1 | 1044 | 21.01% | 933 | 21.16% | 102 | 23.08% | 65 | 24.07% | 82 | 29.18% | 32371 | 14.85% |
| 2 | 952 | 19.15% | 851 | 19.30% | 91 | 20.59% | 66 | 24.44% | 90 | 32.03% | 47782 | 21.92% |
| 3 | 1061 | 21.35% | 875 | 19.84% | 114 | 25.79% | 67 | 24.81% | 89 | 31.67% | 53265 | 24.43% |
| 4 | 1913 | 38.49% | 1751 | 39.71% | 135 | 30.54% | 72 | 26.67% | 93 | 33.10% | 84600 | 38.80% |
| Hourly Statistics for November 2009 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Hour | Hits | Files | Pages | KBytes | ||||||||
| Avg | Total | Avg | Total | Avg | Total | Avg | Total | |||||
| 0 | 100 | 401 | 8.07% | 94 | 378 | 8.57% | 4 | 19 | 4.30% | 6021 | 24084 | 11.05% |
| 1 | 33 | 133 | 2.68% | 32 | 129 | 2.93% | 2 | 11 | 2.49% | 483 | 1932 | 0.89% |
| 2 | 77 | 310 | 6.24% | 73 | 293 | 6.64% | 2 | 11 | 2.49% | 5333 | 21330 | 9.78% |
| 3 | 10 | 42 | 0.85% | 8 | 34 | 0.77% | 1 | 5 | 1.13% | 376 | 1503 | 0.69% |
| 4 | 7 | 30 | 0.60% | 3 | 14 | 0.32% | 2 | 11 | 2.49% | 27 | 108 | 0.05% |
| 5 | 6 | 26 | 0.52% | 3 | 12 | 0.27% | 2 | 10 | 2.26% | 225 | 900 | 0.41% |
| 6 | 18 | 73 | 1.47% | 14 | 56 | 1.27% | 3 | 13 | 2.94% | 842 | 3370 | 1.55% |
| 7 | 24 | 96 | 1.93% | 17 | 71 | 1.61% | 3 | 12 | 2.71% | 571 | 2285 | 1.05% |
| 8 | 111 | 445 | 8.95% | 103 | 412 | 9.34% | 7 | 31 | 7.01% | 3034 | 12135 | 5.57% |
| 9 | 60 | 243 | 4.89% | 49 | 198 | 4.49% | 7 | 30 | 6.79% | 2510 | 10040 | 4.61% |
| 10 | 53 | 212 | 4.27% | 37 | 149 | 3.38% | 5 | 22 | 4.98% | 1414 | 5657 | 2.59% |
| 11 | 65 | 260 | 5.23% | 61 | 244 | 5.53% | 3 | 15 | 3.39% | 1110 | 4439 | 2.04% |
| 12 | 52 | 211 | 4.25% | 48 | 193 | 4.38% | 4 | 16 | 3.62% | 6144 | 24575 | 11.27% |
| 13 | 39 | 158 | 3.18% | 37 | 148 | 3.36% | 3 | 12 | 2.71% | 750 | 3001 | 1.38% |
| 14 | 67 | 271 | 5.45% | 63 | 254 | 5.76% | 5 | 20 | 4.52% | 2284 | 9136 | 4.19% |
| 15 | 48 | 194 | 3.90% | 41 | 166 | 3.76% | 7 | 31 | 7.01% | 1912 | 7649 | 3.51% |
| 16 | 31 | 127 | 2.56% | 28 | 112 | 2.54% | 5 | 23 | 5.20% | 2044 | 8178 | 3.75% |
| 17 | 48 | 192 | 3.86% | 43 | 173 | 3.92% | 5 | 22 | 4.98% | 6734 | 26938 | 12.36% |
| 18 | 88 | 354 | 7.12% | 82 | 328 | 7.44% | 7 | 31 | 7.01% | 2850 | 11399 | 5.23% |
| 19 | 32 | 130 | 2.62% | 28 | 115 | 2.61% | 4 | 16 | 3.62% | 1155 | 4619 | 2.12% |
| 20 | 40 | 162 | 3.26% | 35 | 143 | 3.24% | 5 | 23 | 5.20% | 1850 | 7402 | 3.40% |
| 21 | 74 | 299 | 6.02% | 59 | 236 | 5.35% | 3 | 14 | 3.17% | 1382 | 5528 | 2.54% |
| 22 | 55 | 222 | 4.47% | 51 | 206 | 4.67% | 3 | 14 | 3.17% | 1169 | 4674 | 2.14% |
| 23 | 94 | 379 | 7.63% | 86 | 346 | 7.85% | 7 | 30 | 6.79% | 4284 | 17136 | 7.86% |
| Top 30 of 148 Total URLs | |||||
|---|---|---|---|---|---|
| # | Hits | KBytes | URL | ||
| 1 | 219 | 4.41% | 230 | 0.11% | / |
| 2 | 169 | 3.40% | 2156 | 0.99% | /home.php |
| 3 | 115 | 2.31% | 35 | 0.02% | /index2.html |
| 4 | 115 | 2.31% | 40854 | 18.74% | /intro.swf |
| 5 | 105 | 2.11% | 89 | 0.04% | /musicplayer/CNPlayer.html |
| 6 | 103 | 2.07% | 514 | 0.24% | /template/default.css |
| 7 | 103 | 2.07% | 21288 | 9.76% | /template/img/group-header.png |
| 8 | 101 | 2.03% | 12 | 0.01% | /template/img/bgfooter.gif |
| 9 | 100 | 2.01% | 1254 | 0.58% | /template/img/tLogo.gif |
| 10 | 99 | 1.99% | 175 | 0.08% | /template/img/bg.png |
| 11 | 99 | 1.99% | 9056 | 4.15% | /template/img/bgcontainer.gif |
| 12 | 84 | 1.69% | 7377 | 3.38% | /poster/lost_poster.png |
| 13 | 83 | 1.67% | 531 | 0.24% | /current.php |
| 14 | 83 | 1.67% | 12898 | 5.92% | /poster/PostersCCXXV-small.png |
| 15 | 82 | 1.65% | 2780 | 1.28% | /poster/classified08.png |
| 16 | 81 | 1.63% | 11062 | 5.07% | /current/Newbs.png |
| 17 | 81 | 1.63% | 1228 | 0.56% | /poster/classified007.jpg |
| 18 | 80 | 1.61% | 4315 | 1.98% | /musicplayer/xspf_player_slim.swf |
| 19 | 68 | 1.37% | 90 | 0.04% | /template/img/CNbullet.gif |
| 20 | 48 | 0.97% | 1307 | 0.60% | /includes/thickbox/jquery.js |
| 21 | 47 | 0.95% | 792 | 0.36% | /current/Alex.png |
| 22 | 47 | 0.95% | 844 | 0.39% | /current/Cassie.png |
| 23 | 47 | 0.95% | 780 | 0.36% | /current/Chamoun.png |
| 24 | 47 | 0.95% | 879 | 0.40% | /current/Emma.png |
| 25 | 47 | 0.95% | 699 | 0.32% | /current/Grace.png |
| 26 | 47 | 0.95% | 769 | 0.35% | /current/Gwen.png |
| 27 | 47 | 0.95% | 798 | 0.37% | /current/Hahn.png |
| 28 | 47 | 0.95% | 832 | 0.38% | /current/Lindsay.png |
| 29 | 47 | 0.95% | 870 | 0.40% | /current/Martino.png |
| 30 | 47 | 0.95% | 855 | 0.39% | /current/Rachel.png |
| Top 10 of 148 Total URLs By KBytes | |||||
|---|---|---|---|---|---|
| # | Hits | KBytes | URL | ||
| 1 | 115 | 2.31% | 40854 | 18.74% | /intro.swf |
| 2 | 7 | 0.14% | 27054 | 12.41% | /sounds/The Class Notes - The Offbeat of Avenues.mp3 |
| 3 | 103 | 2.07% | 21288 | 9.76% | /template/img/group-header.png |
| 4 | 4 | 0.08% | 19513 | 8.95% | /sounds/The Class Notes - Torn.mp3 |
| 5 | 4 | 0.08% | 14260 | 6.54% | /sounds/The Class Notes - Blackhorse and a Cherry Tree.mp3 |
| 6 | 83 | 1.67% | 12898 | 5.92% | /poster/PostersCCXXV-small.png |
| 7 | 81 | 1.63% | 11062 | 5.07% | /current/Newbs.png |
| 8 | 99 | 1.99% | 9056 | 4.15% | /template/img/bgcontainer.gif |
| 9 | 9 | 0.18% | 8450 | 3.88% | /sounds/The Class Notes - STTA (Sample).mp3 |
| 10 | 84 | 1.69% | 7377 | 3.38% | /poster/lost_poster.png |
| Top 3 of 3 Total Entry Pages | |||||
|---|---|---|---|---|---|
| # | Hits | Visits | URL | ||
| 1 | 219 | 4.41% | 213 | 79.78% | / |
| 2 | 115 | 2.31% | 46 | 17.23% | /index2.html |
| 3 | 105 | 2.11% | 8 | 3.00% | /musicplayer/CNPlayer.html |
| Top 3 of 3 Total Exit Pages | |||||
|---|---|---|---|---|---|
| # | Hits | Visits | URL | ||
| 1 | 219 | 4.41% | 148 | 56.49% | / |
| 2 | 105 | 2.11% | 93 | 35.50% | /musicplayer/CNPlayer.html |
| 3 | 115 | 2.31% | 21 | 8.02% | /index2.html |
| Top 30 of 281 Total Sites | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| # | Hits | Files | KBytes | Visits | Hostname | ||||
| 1 | 265 | 5.33% | 260 | 5.90% | 4019 | 1.84% | 1 | 0.37% | <IP_ADDRESS> |
| 2 | 192 | 3.86% | 180 | 4.08% | 3393 | 1.56% | 2 | 0.74% | <IP_ADDRESS> |
| 3 | 168 | 3.38% | 161 | 3.65% | 17149 | 7.87% | 1 | 0.37% | <IP_ADDRESS> |
| 4 | 138 | 2.78% | 135 | 3.06% | 2075 | 0.95% | 1 | 0.37% | <IP_ADDRESS> |
| 5 | 138 | 2.78% | 135 | 3.06% | 2084 | 0.96% | 1 | 0.37% | <IP_ADDRESS> |
| 6 | 137 | 2.76% | 135 | 3.06% | 1670 | 0.77% | 1 | 0.37% | <IP_ADDRESS> |
| 7 | 134 | 2.70% | 130 | 2.95% | 1987 | 0.91% | 1 | 0.37% | <IP_ADDRESS> |
| 8 | 123 | 2.47% | 120 | 2.72% | 1492 | 0.68% | 1 | 0.37% | <IP_ADDRESS> |
| 9 | 116 | 2.33% | 114 | 2.59% | 1043 | 0.48% | 0 | 0.00% | <IP_ADDRESS> |
| 10 | 96 | 1.93% | 94 | 2.13% | 711 | 0.33% | 0 | 0.00% | <IP_ADDRESS> |
| 11 | 96 | 1.93% | 95 | 2.15% | 748 | 0.34% | 0 | 0.00% | <IP_ADDRESS> |
| 12 | 95 | 1.91% | 94 | 2.13% | 711 | 0.33% | 0 | 0.00% | <IP_ADDRESS> |
| 13 | 95 | 1.91% | 94 | 2.13% | 711 | 0.33% | 0 | 0.00% | <IP_ADDRESS> |
| 14 | 94 | 1.89% | 94 | 2.13% | 711 | 0.33% | 0 | 0.00% | <IP_ADDRESS> |
| 15 | 88 | 1.77% | 82 | 1.86% | 3226 | 1.48% | 2 | 0.74% | <IP_ADDRESS> |
| 16 | 87 | 1.75% | 52 | 1.18% | 1250 | 0.57% | 0 | 0.00% | <IP_ADDRESS> |
| 17 | 76 | 1.53% | 36 | 0.82% | 338 | 0.16% | 8 | 2.96% | <IP_ADDRESS> |
| 18 | 76 | 1.53% | 36 | 0.82% | 338 | 0.16% | 8 | 2.96% | <IP_ADDRESS> |
| 19 | 74 | 1.49% | 46 | 1.04% | 1250 | 0.57% | 0 | 0.00% | <IP_ADDRESS> |
| 20 | 67 | 1.35% | 64 | 1.45% | 7352 | 3.37% | 1 | 0.37% | <IP_ADDRESS> |
| 21 | 61 | 1.23% | 59 | 1.34% | 1776 | 0.81% | 1 | 0.37% | <IP_ADDRESS> |
| 22 | 59 | 1.19% | 54 | 1.22% | 2671 | 1.23% | 1 | 0.37% | <IP_ADDRESS> |
| 23 | 59 | 1.19% | 58 | 1.32% | 18110 | 8.31% | 1 | 0.37% | <IP_ADDRESS> |
| 24 | 58 | 1.17% | 55 | 1.25% | 18089 | 8.30% | 1 | 0.37% | <IP_ADDRESS> |
| 25 | 55 | 1.11% | 52 | 1.18% | 1420 | 0.65% | 1 | 0.37% | <IP_ADDRESS> |
| 26 | 55 | 1.11% | 48 | 1.09% | 1700 | 0.78% | 1 | 0.37% | <IP_ADDRESS> |
| 27 | 55 | 1.11% | 52 | 1.18% | 3931 | 1.80% | 1 | 0.37% | <IP_ADDRESS> |
| 28 | 51 | 1.03% | 48 | 1.09% | 1700 | 0.78% | 1 | 0.37% | <IP_ADDRESS> |
| 29 | 50 | 1.01% | 47 | 1.07% | 1693 | 0.78% | 1 | 0.37% | <IP_ADDRESS> |
| 30 | 46 | 0.93% | 43 | 0.98% | 6351 | 2.91% | 1 | 0.37% | <IP_ADDRESS> |
| Top 10 of 281 Total Sites By KBytes | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| # | Hits | Files | KBytes | Visits | Hostname | ||||
| 1 | 59 | 1.19% | 58 | 1.32% | 18110 | 8.31% | 1 | 0.37% | <IP_ADDRESS> |
| 2 | 58 | 1.17% | 55 | 1.25% | 18089 | 8.30% | 1 | 0.37% | <IP_ADDRESS> |
| 3 | 40 | 0.80% | 38 | 0.86% | 17807 | 8.17% | 1 | 0.37% | <IP_ADDRESS> |
| 4 | 168 | 3.38% | 161 | 3.65% | 17149 | 7.87% | 1 | 0.37% | <IP_ADDRESS> |
| 5 | 67 | 1.35% | 64 | 1.45% | 7352 | 3.37% | 1 | 0.37% | <IP_ADDRESS> |
| 6 | 46 | 0.93% | 43 | 0.98% | 6351 | 2.91% | 1 | 0.37% | <IP_ADDRESS> |
| 7 | 265 | 5.33% | 260 | 5.90% | 4019 | 1.84% | 1 | 0.37% | <IP_ADDRESS> |
| 8 | 55 | 1.11% | 52 | 1.18% | 3931 | 1.80% | 1 | 0.37% | <IP_ADDRESS> |
| 9 | 192 | 3.86% | 180 | 4.08% | 3393 | 1.56% | 2 | 0.74% | <IP_ADDRESS> |
| 10 | 88 | 1.77% | 82 | 1.86% | 3226 | 1.48% | 2 | 0.74% | <IP_ADDRESS> |
| Top 16 of 16 Total Search Strings | |||
|---|---|---|---|
| # | Hits | Search String | |
| 1 | 14 | 30.43% | class notes |
| 2 | 8 | 17.39% | class notes cornell |
| 3 | 5 | 10.87% | classnotes |
| 4 | 5 | 10.87% | cornell class notes |
| 5 | 2 | 4.35% | classnotes.com |
| 6 | 2 | 4.35% | the class notes |
| 7 | 1 | 2.17% | classnotes at cornell |
| 8 | 1 | 2.17% | classnotes music |
| 9 | 1 | 2.17% | co-ed acapella groups cornell |
| 10 | 1 | 2.17% | cornell a cappella |
| 11 | 1 | 2.17% | cornell class notes concert |
| 12 | 1 | 2.17% | cornell classnotes |
| 13 | 1 | 2.17% | cornell tickets class notes |
| 14 | 1 | 2.17% | jacob chamoun |
| 15 | 1 | 2.17% | the class notes cornel |
| 16 | 1 | 2.17% | www.theclass |
| Top 15 of 82 Total User Agents | |||
|---|---|---|---|
| # | Hits | User Agent | |
| 1 | 493 | 9.92% | Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:<IP_ADDRESS>) |
| 2 | 384 | 7.73% | Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4. |
| 3 | 364 | 7.32% | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1 |
| 4 | 257 | 5.17% | Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) Appl |
| 5 | 237 | 4.77% | Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; en) AppleW |
| 6 | 216 | 4.35% | Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:<IP_ADDRESS>) G |
| 7 | 213 | 4.29% | Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) Appl |
| 8 | 197 | 3.96% | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:<IP_ADDRESS>) |
| 9 | 172 | 3.46% | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/5 |
| 10 | 171 | 3.44% | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1) |
| 11 | 153 | 3.08% | Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_4; en-us) Appl |
| 12 | 153 | 3.08% | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:<IP_ADDRESS>) G |
| 13 | 144 | 2.90% | msnbot/2.0b (+http://search.msn.com/msnbot.htm) |
| 14 | 142 | 2.86% | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NE |
| 15 | 137 | 2.76% | Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; en-us) Appl |
| Top 1 of 1 Total Countries | |||||||
|---|---|---|---|---|---|---|---|
| # | Hits | Files | KBytes | Country | |||
| 1 | 4970 | 100.00% | 4415 | 100.11% | 218017 | 100.00% | Unresolved/Unknown |
| Generated by Webalizer Version 2.01 |


A Communication Plan
Earthquakes can strike at any time and without warning. Friends and families can cope with earthquakes by preparing in advance. Prepare a family contact sheet below and share with friends and family so that in event of an earthquake, you are able to reunite and know each other's emergency plan in advance.
Include at least one out-of-town contact that may be better able to reach family members in an emergency.


Find out more about our Trustees
Rev. Andy Keighley has a passion for healing and impartation. He desires to see people walking in all that Jesus paid for on the cross. He is the Senior Pastor of Holy Trinity Swiss Cottage, London.
Precious and Jane Omuku have a burden and work for a united and living body of Christ that operates in the power of the Holy Spirit; a Church which brings about change in the market place. Precious is an Anglican priest who serves as an Associate Priest in the Nigerian Chaplaincy, London, and St Lawrence Church, Morden, Surrey. Jane has a lay ministry.
Alero Ayida-Otobo is a Transformation Strategist with invaluable understanding of Sector-wide reforms in Africa. She is passionate about reforming educational and health systems and transforming individuals and institutions. She was also for four years, a Lead Specialist for Education Policy under the Education Sector Support Programme for Nigeria (ESSPIN), a programme funded by the United Kingdom Department for International development (DfID). She is the Founder of Incubator Africa, a Development Agency operating on the African Continent that mobilizes and equips Africans to collaborate and actively participate in strategic reform activities. She is passionate about establishing the Kingdom in the Marketplace. She is an author of Reformer Arise and loves to travel. Alero has three beautiful children whom she fondly calls her “Treasures”.
Gubby Ayida (GA) is a Consultant Obstetrician and Gynecologist at Chelsea and Westminster Hospital in London UK. With a background in NHS management and clinical leadership, Gubby Ayida is Associate Medical Director for Strategic Programmes for the Hospital. Gubby Ayida is also Founder/CEO of the Women’s Wellness Centre (WWC) a high end private healthcare facility that caters to all aspects of women’s health. She serves on the Board of Friendship Bible Fellowship Ministry (FBFM) and is dedicated to connecting women with each other, their community and God through evangelism, leadership, discipleship and prayer. GA has been partnering with Lapis Lazuli Ministries since its inception.


Joseph Salazar
Education
Skills
Experience
Projects
Contact
A1: Hello World
A2: Dance Dance Interactions
A3: "No Phones at the Table!"
A4: Vibe Cap


Spain's Socialists, Podemos sign government pact
MADRID (Reuters) - Spain’s Socialist acting Prime Minister Pedro Sanchez and the leader of far-left Unidas Podemos, Pablo Iglesias, signed a preliminary agreement on Tuesday aiming to form what they called a “progressive” coalition government.
However, the combination of their seats is not enough on its own to secure a majority in parliament and they will still need to seek support from other parties for such a government to be confirmed.


It must be some sort of warped critical nightmare: the best movie of the year would be a summer vehicle, a Jim Carrey vehicle at that. And so it is. _The Truman Show_ is the most perplexing, crazed, paranoid and rib-tickling morality play I've seen since I-don't-know-when.
Don't credit Carrey. It starts with Andrew Niccol (Gattaca), who created the script ten years ago. The story, replete with sublte religious and philisophical undertones, is about a man who discovers that every day of his existence has been televised for a mass audience. (Ironically, it was within these past ten years that "reality-based" television have become a predominant fixture into our culture. Who knew?)
One-upping Niccol, it was when unlikely candidate-director Peter Weir took the helm that things fell into place. Weir had the nearly impossible task to create the unimitible tone, deftly mixing Capra with Kafka, throwing George Bailey in a universe inhabited by Rod Serling. It was Weir's first stroke of genius to create Seahaven: a suburban paradise/prison that would make Spielberg cower in shame. For example, bystander-extras would walk around the block incessantly with flowers along with the latest issue of _Dog Fancy_. The nicest touch are the plethora of subtle hints for Truman to _not_ leave the island.
Credit Weir for his second stroke: the casting of Carrey. Carrey seems to be the type of character actor who would always turn "on" and act goofy whenever the camera is near. Not here. His performance is so subverted you sometimes wonder if he is ever aware the camera is on. And although Carrey does not deserve an Academy Award nomination (just as well, the Academy rarely honors goofy comedians, excepting Robin Williams), he stretches enough to alter his hyper-silly image considerably. Playing one who has the cameras constantly invading his most intimate moments turns to be quite the role of Jim Carrey's life. No pun intended.
Better in a smaller, more pivotal role is Ed Harris as Christof, who mixes the right amount of his Apollo 13 "work the problem, people" character with Dustin Hoffman's megaglomaniac producer in _Wag the Dog_, and then only slightly Svengalian. It is clear that he is torn between the Nielson ratings and Truman's well being. Yes, in his own misguided way he loves Truman as a father to a son, and has provided the best universe he could provide. He thinks.
Rounding out the cast is Natascha McElhone (Mrs. Dalloway) as Carrey's true "forbidden love", Sylvia, very effective in another pivotal small role. Laura Linney (Congo) and Noah Emmerich (Copland) have the unfortunate task of playing Truman's wife and best friend; their sitcom-ish dialogue allow little room for any authentic character development. The exception is at the very beginning, where they speak into the camera, wholeheartedly believing that their participation is truly good for Truman, and for society in general.
There are other little problems with the script. Are we to assume that toddler Truman had no recollection of hearing the construction of such a gigantic dome during his formative years? Was there any reason as to why in one scene, it rained solely on Truman, even though it never had to? How is it they hire hundreds of extras, and none of them could drive a boat, and yet Truman, fearful of water, is helming a sailboat effortlessly? And couldn't Christof have turned off the wind, to strand Truman at sea?
These little contrivances, however, do not hold a candle to the overall effect of the work. The audience gets the feeling that it is watching the actual show, and we are drawn to Truman's mundane existence for no other reason than it is there. The final result effortlessly combines the emotional happy ending of a mainstream picture with a gnawing discomfort that hits you square in the gut. Upon leaving the theater, I was looking up in the sky, wondering if it was nothing more than a gigantic dome. Just checking.
Nick Scale (1 to 10): 10
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


oxygen {border-style respiratory px;} #ffffff;} exhaled mask gas patients SARS acute px; syndrome {font-family droplets font-size port double; inhaled masks plume severe MD, administration border-color border-width exhalation filter solid; spread transmission {font-style {font-weight COVID- Chest Elsevier Venturi-type bold centre courier; em; health-care infections mist nonrebreathing nosocomial previously pt;} resource saline vents,


Yesterday I spent a couple of hours trying to find the best way of updating multiple records in MySQL db using Python. Unfortunately could not find any really elegant way, as a result I ended up with using 'INSERT ON DUPLICATE KEY UPDATE'
.
Sharing my code here, hope it will save you time. If you know any better way of updating multiple rows in mysql db with python, let me know in the comments.
So, let’s say I have a students
table wich looks like this:
| id | name |
|---|---|
| 1 | cate blanchett |
| 2 | sia furler |
| 3 | priyanka chopra |
And let’s say I want to capitalize each word in the name
column (in reality I needed to apply more complex transformation, but will be talking about capitalizing for simplicity).
Here is the code that is doing a bulk update:
Basically what I am doing here is:
sqlalchemy
pandas
)name
column using title()
function)(1, 'Cate Blanchett'), (2, 'Sia Furler'), (3, 'Priyanka Chopra')
)This is how the database table looks like after I ran my script:
| id | name |
|---|---|
| 1 | Cate Blanchett |
| 2 | Sia Furler |
| 3 | Priyanka Chopra |
Easy. But I still feel there should be a better way…


Student Management System
Institute of Technical Education (ITE) in Singapore was established on 1 April 1992 as a post-secondary school institution. An education from ITE provides graduates with good job and career advancement opportunities, as well as opportunities to go further education and training. Adopting a 'One ITE system, Three colleges' Education Model, ITE is ready to provide exciting, high quality, relevant and market-responsive learning for the global economy. ITE offers a wide range of courses to school leavers and working adults, with courses from the Schools of Applied & Health Sciences, Business & Services, Design & Media, Electronics & Info-comm Technology, Engineering and Hospitality.


What is Good Design?
So this is the Udacity blog part two, it seems I have been asked to talk about the same subject again regarding grid based design.. so I guess we can go into some more detail.
Dealing with front-end programming we have to be aware of how to make things functional, this goes beyond the initial “make it work” stage, user experience also adds to the functionality of a website, if you have no clear hierarchy and composition, the user will have no idea how to navigate your website, one of the easiest ways to create hierarchy and composition is with grids, not only do they make it functional for the user, it also creates good functionality as a website on the whole. Grid based design splits the page into a grid (usually 3, 4, 6, 8 or and puts boxes in those rows and columns to create a beautiful site!
Along with making it functional we have to think about how technological advances change the way we look at utilising the tools we are learning, a big one right now is the amount of different devices people are using for apps and to search the web. We as the developers need to make it easy for the user to use our site on whatever device they have, this is called ‘responsive design’ where the code is smart enough to change its layout depending on the resolution of the screen. Imagine setting up an online shop and it only being able to be used on a computer, how much business would you loose? so not only does ‘responsive design’ keep your design looking sharp everywhere, its also much better for business.
I am not going to lie, when I was asked “What is Semantic Structure” I completely blanked and went to the internet to help me out a little bit.. "Semantic structure is a fancy term for an organization that represents meaning.“ So basically its do with the way you structure something to get the best productive use out of it…
I struggle a little with these tutorials because I already have a solid foundation of design principles and what makes a good website, but I do enjoy the way they described such a simple way of using grids. I started with the bootstrap language and it has been a bit confusing so this has made the understanding a little clearer.


Now that MIMO can access your controller, choose which network you want the guest network to be added to.
Oh my, we're loading your CloudTrax networks, one second homie
We couldn't find any CloudTrax networks. Please create one now. Help
You can rename the SSID if you want. No biggie if you want to leave as is.


{{ buddy.name }}
cancel
{{ buddy.name }}
share
From facebook
email
Not there? Notify by email
Facebook Overlay - Under construction ; will be there very soon !
email
Notify your buddy and share your dive
Promise ; it will never be used for spam !
Buddy's nameBuddy's email


Disclaimer: Your neighborhood might have different rules than the municipality it's in. Make sure to check with them as well!
The purpose of this project is to better communicate chicken regulations by
municipality to the people of Saint Louis and Saint Louis County based on
local municipality zoning regulations.
This project was built by the Saint Louis Code for America Brigade, OpenSTL.
This project is open source and is free to be reused and distributed.
The files can be found on the OpenSTL Backyard Chickens GitHub Page


On this page we have a controller that contains a directive that uses
transclusion – i.e.,
transclude: true –
and specifies no additional scope – i.e., the default of
scope: false. The directive's template simply wraps the content
in a |div| and adds a class for some formatting.
- Click the #rb#, then click the #psb# to see the initial state.
|ng-transclude| creates a new "transclude" scope. However, the directive's
controller and link functions and the transcluded content (when reading
property values) use the parent ng-controller |$scope|.
This is proven by the fact that property |newProp| which is created in
the directive's controller function is created on the ng-controller
|$scope|.
- Click the "change name" link, then click the #psb#.
An ng-controller |$scope| function is called, which modifies property
|name|. t he transcluded content sees this change because it
prototypically inherits from this scope.
- Type something into both textboxes, then click the #psb#.
Because |name| is a primitive, the write creates a new local property on
the transcluded scope. This is probably not what you want because there
is no way to write Ctrl1 code or directive code to retrieve values from
the transcluded scope... because there is no way to get from the
controller scope or the directive to the transcluded scope.
Best Practice: from Angular docs: only use transclude: true
when you want to create a directive that wraps arbitrary content.
Don't use |ng-model| with primitives in your transcluded content.


This template is not yet finished, it may change. Please check the readme for more information.
Admin Dashboard
-
- Chrome: 49.77%
- Firefox: 16.09%
- IE 11: 11.33%
- Safari: 5.41%
- Android 4.4: 2%
- Opera: 1.62%
-
- Chrome: 54.11%
- Firefox: 15.00%
- IE 11: 14.16%
- Safari: 9.58%
- Other: 4.77%
- Opera: 1.86%


|
|
...read Section 1
double det = A1*B2 - A2*B1 if(det == 0){ //Lines are parallel }else{ double x = (B2*C1 - B1*C2)/det double y = (A1*C2 - A2*C1)/det }To see where this comes from, consider multiplying the top equation by B2, and the bottom equation by B1. This gives you A1B2x + B1B2y = B2C1 A2B1x + B1B2y = B1C2 Now, subtract the bottom equation from the top equation to get A1B2x - A2B1x = B2C1 - B1C2 Finally, divide both sides by A1B2 - A2B1, and you get the equation for x. The equation for y can be derived similarly. This gives you the location of the intersection of two lines, but what if you have line segments, not lines. In this case, you need to make sure that the point you found is on both of the line segments. If your line segment goes from (x1,y1) to (x2,y2), then to check if (x,y) is on that segment, you just need to check that min(x1,x2) ≤ x ≤ max(x1,x2), and do the same thing for y. You must be careful about double precision issues though. If your point is right on the edge of the segment, or if the segment is horizontal or vertical, a simple comparison might be problematic. In these cases, you can either do your comparisons with some tolerance, or else use a fraction class. Finding a Circle From 3 Points Given 3 points which are not colinear (all on the same line) those three points uniquely define a circle. But, how do you find the center and radius of that circle? This task turns out to be a simple application of line intersection. We want to find the perpendicular bisectors of XY and YZ, and then find the intersection of those two bisectors. This gives us the center of the circle. To find the perpendicular bisector of XY, find the line from X to Y, in the form Ax+By=C. A line perpendicular to this line will be given by the equation -Bx+Ay=D, for some D. To find D for the particular line we are interested in, find the midpoint between X and Y by taking the midpoint of the x and y components independently. Then, substitute those values into the equation to find D. If we do the same thing for Y and Z, we end up with two equations for two lines, and we can find their intersections as described above. Reflection Reflecting a point across a line requires the same techniques as finding a circle from 3 points. First, notice that the distance from X to the line of reflection is the same as the distance from X' to the line of reflection. Also note that the line between X and X' is perpendicular to the line of reflection. Now, if the line of reflection is given as Ax+By=C, then we already know how to find a line perpendicular to it: -Bx+Ay=D. To find D, we simply plug in the coordinates for X. Now, we can find the intersection of the two lines at Y, and then find X' = Y - (X - Y). Rotation Rotation doesn't really fit in with line intersection, but I felt that it would be good to group it with reflection. In fact, another way to find the reflected point is to rotate the original point 180 degrees about Y. Imagine that we want to rotate one point around another, counterclockwise by θ degrees. For simplicity, lets assume that we are rotating about the origin. In this case, we can find that x' = x Cos(θ) - y Sin(θ) and y' = x Sin(θ) + y Cos(θ). If we are rotating about a point other than the origin, we can account for this by shifting our coordinate system so that the origin is at the point of rotation, doing the rotation with the above formulas, and then shifting the coordinate system back to where it started. Convex Hull A convex hull of a set of points is the smallest convex polygon that contains every one of the points. It is defined by a subset of all the points in the original set. One way to think about a convex hull is to imagine that each of the points is a peg sticking up out of a board. Take a rubber band and stretch it around all of the points. The polygon formed by the rubber band is a convex hull. There are many different algorithms that can be used to find the convex hull of a set of points. In this article, I'm just going to describe one of them, which is fast enough for most purposes, but is quite slow compared to some of the other algorithms. First, loop through all of your points and find the leftmost point. If there is a tie, pick the highest point. You know for certain that this point will be on the convex hull, so we'll start with it. From here, we are going to move clockwise around the edge of the hull, picking the points on the hull, one at a time. Eventually, we will get back to the start point. In order to find the next point around the hull, we will make use of cross products. First, we will pick an unused point, and set the next point, N, to that point. Next, we will iterate through each unused points, X, and if (X-P) x (N-P) (where P is the previous point) is negative, we will set N to X. After we have iterated through each point, we will end up with the next point on the convex hull. See the diagram below for an illustration of how the algorithm works. We start with P as the leftmost point. Now, say that we have N and X as shown in the leftmost frame. In this case the cross product will be negative, so we will set N = X, and there will be no other unused points that make the cross product negative, and hence we will advance, setting P = N. Now, in the next frame, we will end up setting N = X again, since the cross product here will be negative. However, we aren't done yet because there is still another point that will make the cross product negative, as shown in the final frame. The basic idea here is that we are using the cross product to find the point which is furthest counterclockwise from our current position at P. While this may seem fairly straightforward, it becomes a little bit tricky when dealing with colinear points. If you have no colinear points on the hull, then the code is very straightforward. convexHull(point[] X){ int N = lengthof(X); int p = 0; //First find the leftmost point for(int i = 1; i<N; i++){ if(X[i] < X[p]) p = i; } int start = p; do{ int n = -1; for(int i = 0; i<N; i++){ //Don't go back to the same point you came from if(i == p)continue; //If there is no N yet, set it to i if(n == -1)n = i; int cross = (X[i] - X[p]) x (X[n] - X[p]); if(cross < 0){ //As described above, set N=X n = i; } } p = n; }while(start!=p); }Once we start to deal with colinear points, things get trickier. Right away we have to change our method signature to take a boolean specifying whether to include all of the colinear points, or only the necessary ones. //If onEdge is true, use as many points as possible for //the convex hull, otherwise as few as possible. convexHull(point[] X, boolean onEdge){ int N = lengthof(X); int p = 0; boolean[] used = new boolean[N]; //First find the leftmost point for(int i = 1; i<N; i++){ if(X[i] < X[p]) p = i; } int start = p; do{ int n = -1; int dist = onEdge?INF:0; for(int i = 0; i<N; i++){ //X[i] is the X in the discussion //Don't go back to the same point you came from if(i==p)continue; //Don't go to a visited point if(used[i])continue; //If there is no N yet, set it to X if(n == -1)n = i; int cross = (X[i] - X[p]) x (X[n] - X[p]); //d is the distance from P to X int d = (X[i] - X[p]) ⋅ (X[i] - X[p]); if(cross < 0){ //As described above, set N=X n = i; dist = d; }else if(cross == 0){ //In this case, both N and X are in the //same direction. If onEdge is true, pick the //closest one, otherwise pick the farthest one. if(onEdge && d < dist){ dist = d; n = i; }else if(!onEdge && d > dist){ dist = d; n = i; } } } p = n; used[p] = true; }while(start!=p); } ...continue to Section 3
|
|
|
Home |
About TopCoder |
Press Room |
Contact Us |
Careers |
Privacy |
Terms
Competitions | Cockpit |
| Copyright TopCoder, Inc. 2001-2011 |


Investment Portfolios
List
New
Name
Strategy
Next Review Date
70/30 Technology-Heavy
Aggressive
2013-10-3
Edit
Delete
60/40 Consumer Goods
Conservative
2013-9-1
Edit
Delete
50/50 Retailers
Conservative
2013-3-1
Edit
Delete
Create New


Minced Oaths
Minced oaths get a bad rap. To self-respecting swearologists, they’re often looked down upon as low-fat, sugar-free swear substitutes. To many of the prudes they’re supposed to placate, even minced oaths are too rude. But to me, an intellectual, minced swears are friggin’ cool as heck, and ruddy interesting to boot. The low-fat/sugar-free analogy is a bad one, actually. Whereas ersatz foods are designed to be almost indistinguishable from their full-flavored counterparts, minced oaths are specifically constructed to avoid being mistaken for the real deal. Consider “fuck” and its most commonly used alternatives:
- frig
- frick
- freak
- fudge
- flip
Undoubtedly there are phonological constructions much closer to the original word which we could use instead. But no one says “fub” or “fut”, and “fug” – while sometimes used – is rare. Notice that each of the words listed above has undergone at least two phonetic transformations in order to achieve its minced form. The vowel sounds in every example besides “fudge” have been altered. The ending consonants have often been shifted. Most interestingly, almost every example includes an alveolar approximant (r or l) inserted after the first, most identifiable letter.
Now go look up “food spelled wrong meme.” Notice that the exact same techniques have been used.
MERSHED PERDERDERS = Mashed Potatoes, with half the vowels shifted, t’s swapped for d’s, and r’s inserted. This is what we do when we want everyone to know we’re spelling something wrong on purpose. It’s also what we do when we want to make absolutely sure that we are pronouncing something incorrectly.
Now let’s look at some of the most common mincings of “damn”:
- Dang
- Deng
- Drat
- Darn
- Dag
Notice that all five have completely removed the “m” which dominates the ending of the original word. Without the “m” the “n” sound changes completely. But we don’t say “Dan” when we’re mad, unless we’re mad at a person named Dan. That’s still not enough of a misspelling. We’ve either got to insert an “r” (there’s that alveolar approximant again), or add a “g” to the end. “Ng” is a reasonably common phoneme in English, but “mg” is basically unheard-of. Nobody’s gonna be mistaking these words for their more-offensive cousin.
Ultimately, that’s the purpose of mincing oaths. It’s not just about technically obeying the rules of polite conversation – about convincing other people that we aren’t saying bad words. It’s also about convincing ourselves that what we’re saying isn’t that bad. Minced oaths allow us to enjoy the cathartic nature of swearing, while stripping the words of any taboo meaning or potential for abuse.  “Gosh darn it” sounds quaint, but “darn you to heck” sounds pretty silly.
There are plenty more minced oaths in English, and not all of them follow the phonological rules I’ve discussed above. Perhaps one day I’ll create a guide to mincing your own oaths, so that we can invent a whole new class of minced epithets. For now, however, my point is this: minced oaths aren’t low-fat cusses. They’re swears with the safety on. Just as a gun’s safety makes sure we only use it when we really mean to, minced oaths allow us to be intentional about our swear usage. So consider giving a few frigs and freaks instead of fucks, so that when only fucks will do, you still have some left to give.