The Coupon WebApp
login in as...
Admin
Company
Customer
Username
Password
Back to main page
Wrong login details, please try again.
Company
Create company
Update company
Delete company
View company
View all companies
Customer
Create customer
Update customer
Delete customer
View customer
View all customers
Logout
Find company by ID
Company ID
No such company, please try again.
Create Company
Company name
Password
Company Email
Delete Company
Company ID
Update Company
Name of the company you wish to update
Company name
Company parameters you wish to update
Company ID
Password
Company Email
Create Customer
Customer name
Password
Update Customer
Name of the customer you wish to update
Customer name
Customer parameters you wish to update
Customer ID
Password
Delete Customer
Customer ID
Find customer by ID
Customer ID
No such customer, please try again.
Logout
Are you sure you want to logout?
Customer
Menu
View all Coupons
Purchase Coupon
View Purchased Coupons
View Purchased Coupons
by Type
View Purchased Coupons
by Price
Logout
Purchase Coupon
Coupon ID
Purchased coupons by type
Restaurants
Electricity
Food
Health
Sports
Camping
Traveling
No coupons of such type
Find coupon by price
Coupon price
No coupons for selected price
Logout
Are you sure you want to logout?
Company
Menu
Create coupon
Delete coupon
Update coupon
Find coupon
View all coupons
View coupons
by type
Logout
Create coupon
Coupon title
Start-Date
End-Date
Amount
Type
Restaurants
Electricity
Food
Health
Sports
Camping
Traveling
Message
Price
Image
Delete coupon
Coupon ID
Update Coupon
Enter ID of coupon to update
Coupon ID
Enter parameters to update
End-Date
Price
Find company coupon by ID
Coupon ID
View coupons by type
Restaurants
Electricity
Food
Health
Sports
Camping
Traveling
No coupons of such type
Logout
Are you sure you want to logout?


--- layout: post esbma_id: 1169 title: Closing the Gap, Part 1 date: 2004-03-24 16:56:41 keywords: bos teaser: Any sales guy who is offended by all the vicious jokes in this article is probably not competent. A sales guy simply must have a thick skin. If he can't handle my caricature, how will he cope when a customer tells him "no"? Even the best sales guy is going to hear "no" more often than "yes". If he can't accept all that rejection without getting discouraged, he's probably in the wrong job. ---
Summary: Eric talks about the function of proactive sales in a small ISV.
At some point in the many activities of a small independent software vendor (ISV), the customer trades money for software. No column on "The Business of Software" could be complete without some discussion of this magical event.
I'll start by defining some of my terminology. Before the customer makes the purchase, I like to say that there is a "gap". This gap is the distance between the prospective customer and your product, and it looks something like this:
Product -------------------------------- Customer
In order for the sale to occur, this gap must be closed. Until that happens, the gap represents all of the issues and obstacles that are preventing the customer from making the purchase:
To continue to exist as a business, your small ISV must find a way to close this gap, over and over again. There are exactly two ways to close the gap:
We will begin by talking about the challenge of moving your customer toward your product.
Let's define some more terminology. The word "sales" is somewhat overloaded, but in the context of a job function, I prefer to reserve this term for the process of proactively finding new prospective customers and working with them individually to try and convince them to make a purchase. A person who performs this job function is called a "sales guy".
#ifdef apology
I confess that the gender implication of this label is a bit inappropriate, but I've been calling these people "sales guys" for so long that I can't break the habit. Early in my career, it just so happened that all the sales professionals I knew were men. For years, I wondered if excellence in proactive selling required a level of obnoxiousness that simply isn't present in most females. More recently, I have come to know a number of women who are excellent "sales guys". (One in particular has a disturbingly successful track record of selling me advertising, which is something I truly hate to buy.) Anyway, if you will forgive the apparent political incorrectness, I'm going to stick with my usual terminology for this article.
#endif
To sharpen the definition, I need to clarify two things which are not included in "sales":
A defining characteristic of a sales guy is the way he is paid. The compensation package of a sales guy includes commissions. He gets a percentage of every sale he closes. The percentages vary widely based on all kinds of factors, so I'm not even going to mention any ballpark figures. However, I will point out that these commissions can really add up to a lot of money. In many organizations, the highest paid individual is a sales guy, often making more than the CEO herself.
It is quite common for people in other job functions to have some resentment of the sales guy because of these commissions. For example, the lead architect who designed your product will be wondering why the sales guy gets a cut of every sale when she does not. Is the sales guy more valuable than the person who actually created the product?
Good sales guys understand this problem and work very hard to counteract it by "sucking up" to the developers at every opportunity. For example, in any situation where your sales guys and developers end up together in a bar, there should be absolutely no question about who is buying the drinks.
On the other hand, you can't allow your sales guy to spend too much time with your developers. Left without limits, a sales guy will start to routinely bring a developer with him on his customer visit. Suddenly, your overpaid coder has become an extremely overpaid sales assistant. The usual solution to this problem is to put your sales guys in a separate office, preferably in a different city. Sales guys need to be very close to a major airport anyway.
A sales guy needs a special set of skills. They tend to be extraverts. They are usually excellent communicators with incredible interpersonal skills. They are self-confident, sometimes to a fault. They're usually very good-looking and snappy dressers. Sales guys know enough about technology to be dangerous. They know how to handle themselves well in surprising situations. They know exactly when to move toward closure and ask for the deal.
A certain amount of variation from the sales guy stereotype is acceptable, but there is one trait that is absolutely a requirement: A good sales guy is someone who is motivated only by money. One of the most dangerous personnel mistakes is to hire a sales guy who cares about anything else.
A good sales guy will do only those things for which you have provided him a financial incentive (a commission). Everything else is a waste of time, and he is essentially immune to management influence through any other means.
Note that every coin has two sides. Although I consider this mercenary nature to be an important trait for a sales guy, there is a downside that accompanies this benefit. A good sales guy has incredible listening skills that only seem to work when he is working on a deal. When listening to a prospective customer, he will catch and understand every single detail, never missing something that might help close the sale.
On the other hand, when that sales guy's manager walks in and says:
"Fred, we need to talk. I heard a rumor from the developers that a couple of them had to buy their own beer at the pub last night even though you were right there. What's the problem here? Those beers are only going to cost you a few bucks. With the kind of money you make, I certainly think you can afford to pick up the check in situations like that."
A truly excellent sales guy will hear this:
"Blah, blah blah blah blah.  Blah's blah blah blah?
So while the greed gene can obviously create some challenges, the pros definitely outweigh the cons. Managing a money-driven sales guy ends up being simple and largely devoid of surprises. You don't have to spend all kinds of time figuring out what motivates your sales guy like you do with your developers. All you have to do is make sure his compensation is carefully correlated with the set of things you want him to accomplish.
The corollary to this principle is this: If your sales guy is doing something that you don't want him to do, there are only two possible explanations:
For example, suppose your sales guy is rapidly closing deals with customers, but a lot of those customers end up unhappy shortly after buying the product. This usually happens when the sales guy is selling products to people who don't really need them. By the time the customer has realized this, the sales guy has already collected his commission and has moved on to his next victim. You forgot to make customer satisfaction part of his incentive, so he spends no time on it. Luckily, the solution to this particular example is rather simple. For example, you can just hold back the majority of his commission until you verify that the customer is still happy 90 days after the purchase.
Similarly, if the sales guy is spending too much time with your developers, you can just start charging him for it. Deduct $100 from his commission for every hour he spends with a coder. To be fair, give him a few hours for free, since he needs technical information to get his deals closed.
Any sales guy who is offended by all the vicious jokes in this article is probably not competent.
A sales guy simply must have a thick skin. If he can't handle my caricature, how will he cope when a customer tells him "no"? Even the best sales guy is going to hear "no" more often than "yes". If he can't accept all that rejection without getting discouraged, he's probably in the wrong job.
A good sales guy is worth his weight in silicon. Yes, he gets paid an awful lot of money in commissions, but he brings in even more, by definition.
Still, not every organization needs a sales guy. The decision to hire one is a toughie, and needs to be considered very carefully. Hiring a sales guy will forever change your company. Don't do it unless you really need to. Here are a few common reasons why you do:
By their very nature, some products require a lot more effort to sell. Some products are just basically not any fun. For example, nobody really wants to buy life insurance. People buy life insurance, but not with the same enthusiasm they show when buying a hot new movie just released on DVD. This is why you can't swing a 5-iron anywhere in America without hitting an insurance salesman. Without these guys, far less insurance would ever get sold.
Similarly, some products are targeted at people who don't realize they have a problem.
If your product solves a problem that is not a strongly felt need, you've got to have a sales guy to help your prospective customers realize how miserable they really are. This tactic is called "creating dissatisfaction with the status quo".
If by chance you are just getting started with a new small ISV, now is the time to avoid these bugs. Start out with a small gap. Choose a product that people know how to get excited about.
More expensive products are far more likely to require a sales guy to help the customer through the decision. Cars and houses are usually (but not always) sold by sales guys. Expensive software products face a similar cycle. Big purchase orders are big decisions, and most organizations will need a lot of hand-holding before they finally pull the trigger.
As a software product matures over the years, it tends to gain sales guys and lose developers. For a product that is nearing its twilight, it is not uncommon to see a company with lots of sale guys and no developers at all. The reason for this is reasonably intuitive: The product is no longer moving toward the customer. Closing the gap requires us to constantly be dragging customers over to the product.
(I am dying to name a few examples of this phenomenon, but my editors at Microsoft have been working very hard to teach me some manners. I'd like them to get the impression that their efforts are having some sort of an effect.)
Most small ISVs are better off not having any sales guys at all.
I realize that this opinion will be considered heresy in the church of conventional business wisdom, but I'm sticking to it. The bishops of that denomination already don't like me very much anyway. If I could ever find out where their cathedral is located, I plan to grab some Groucho Marx glasses and go dance on the altar.
As usual, I am happy to admit that there are exceptions to my rule. However, too many companies start looking to hire a sales guy before they should do so.
Moving customers is very difficult to do, especially for a small company with very little clout. Customers are heavy and unwieldy. They don't want to be moved, and they often get offended when somebody tries. It is easy to spend a lot of effort trying to push the customer toward the product without ever successfully closing the gap.
All that effort is better spent on the other side of the gap. Improve your product. Moving your product toward the customer is a lot easier. Listen to your customers and give them what they want. Keep your customers happy (they'll tell all their friends how great you are).
Focusing your efforts on the product side of the gap is an approach with two very nice features:
Somewhere along the way, somebody is going to tell you that you're not a real company because you don't have any sales guys. Horse hockey. Don't get forced into this until you're ready.
Next month, in Part 2 of my "Closing the Gap" miniseries, we'll talk about the importance of making it easy to buy your product.
Eric Sink is the non-legendary founder of SourceGear, a developer tools ISV located in Illinois. Eric is not a sales guy, although he has at times tried to imitate one. Eric's weblog is at https://ericsink.com/.
This article originally appeared on the MSDN website.


3D Shape Display
December 2015A cam-driven robotic mechanism for displaying 3D content through a matrix of tiles.
This robotic 3D shape display was built as part of the ME 379M Robot Mechanism Design course at the University of Texas at Austin. Our goal was to create a robotic mechanism that could display various images and shapes with a single degree of freedom (i.e. with a single actuator). This 3D display was inspired by inFORM, a dynamic shape display with a much higher resolution and functionality developed at MIT. Unlike inFORM, all of the motions of this 3D display are driven by internal cams, and are thus ‘hardcoded’ into the design.
Internal cam structure of the mechanism. Each cam drives the motion of one tile on the surface.
In its current form, the mechanism is capable of displaying 4 different images, shown below. Due to its small resolution (5x5 pixel display), we were limited by the types of images we could show. Below are also some alternative images we considered but that were ultimately not chosen for the final design.
Almost every component in our mechanism was laser cut from 1/4” birch wood or 1/8” acrylic plastic sheets. The only components not cut out with the laser cutter were the camshafts, which were 3/8” Delrin rods machined with a mill to have a keyway.
All the cams were designed to follow a modified sine wave motion during the rising and falling from one image position to the next. Using this type of cam design allowed our displacement, velocity, and acceleration functions to be continuous across all angles of rotation, which allows for smoother motion. The sizes of the cams were designed to keep all pitch angles below 30 degrees to avoid creating high lateral forces on the output roller shaft. We also utilized an online graphing calculator to visualize our cam designs, which you can interact with here.
Graphing calculator used to visualize and design the cam profiles of our mechanism.
Below is a video of our robot in action. Let me know in the comments if you would like to see more pictures or if you have any questions! :)
Team members:
Bruno De Hoyos
Matthew Brady
Paria Esmatloo
Instructor:
Dr. Ashish Deshpande


Fans turn on I’m A Celeb’s Andrew Maxwell amid ‘shouting’ row
He clashed heads with Ian Wright yet again
by Clodagh MeaneyIrish fans of I’m A Celebrity Get Me Out of Here were thrilled when not one, but two Irish contestants were announced for the brand new series of the ITV show.
Derry’s sweetheart Nadine Coyle was joined in the line-up with Irish comedian, Andrew Maxwell.
Last week, Ian Wright snapped at the 44-year-old comic and fans on Twitter quickly jumped to the funnyman’s defence.
On last night’s show, he came to blows his fellow campmate once again, and fans opinions changed very fast.
One viewer even branded the star “the first Irish reality TV participant to let the whole country down.”
During a task, campmates were asked to create a queue system for who would get to eat first.
During this task, Andrew accused Ian of “shouting” at him.

“Who is shouting, when did I shout?” asked Ian.
Andrew quickly told him it happened “just then” to which Ian claimed: “I wasn’t even talking to you, what did I say?”
Even though the pair quickly made up, with Andrew saying “I’m sorry, I’m really tired, I don’t know, I’m really tired,” fans were quick to take to social media to express annoyance at his antics.
I’m A Celebrity, Get Me Out of Here continues on Virgin Media One tonight at 9pm.


LightBox Slide Show Part 2
Utilities for presenting a slide show in a single page as a series of clickable thumbnails.
The slide show code works great for scattering slides all over the place in a given web page and grouping all of those slides into a single LightBox collection. You have full control over where your slides are located and how they are floated. Sometimes though, you just want to display every slide in the group a one big clump. One container element that holds all of the thumbnails without anything else. Of course that is easy to do yourself using the slide show tools but the slide deck part of these tools simplifies things even more to the point where the only HTML you need is the container itself. That, along with the file slides.json and the image files on disk is enough to make it all work.slides.json
All of the data for the slides must be put into a file called "slides.json" for the slide deck to work. The format for the JSON is exactly like the format in the gp.slideshow discussion. In the slide deck however, it is best not to use the "float" property for any of your slides.The HTML
With the slide deck, you no longer need to create elements in your HTML for each slide. For this to work, it is simply a matter of placing a container element for the entire collection.

Like with the slide show code, we will automatically call "fromJSON" to load up the file
"slides.json" on document load. That code will look for an element with the id
"gp-slide-deck" though and automatically create the individual slide elements in order
within that container. So there's nothing else for you to do here.
Customization
The included CSS file gp.tools.css contains a style definition for anything with the id "gp-slide-deck". The default implementation is:
#gp-slide-deck
{
text-align : center;
}
Like anything else, you are free to override and customize however you see fit. In the sample
shown below, we added the following properties to the style.
#gp-slide-deck
{
margin : 16px auto;
max-width : 800px;
}
Here we set the margins for a bit of padding above and below as well as centering the container
in the page. Lastly, we set a max width so the container can never go above 800 pixels but will
shrink for a smaller window or a mobile device.


| Cockpit Guide |
|---|
cockpit.confcockpit.conf — Cockpit configuration file |
Cockpit can be configured via /etc/cockpit/cockpit.conf. That file has a INI file syntax and thus contains key / value pairs, grouped into topical groups. For example, to set the "group" key in the "login" group to the value "adm", place this into /etc/cockpit/cockpit.conf:
[login] group = adm
Note: The port that cockpit listens on cannot be changed in this file. To change the port change the systemd cockpit.socket
file.


tesseract
OCR (Optical Character Recognition) engine.
More information: home page
- Recognize text in an image and save it to `output.txt` (the `.txt` extension is added automatically):
tesseract image.png output
- Specify a custom language (default is English) with an ISO 639-2 code (e.g. deu = Deutsch = German):
tesseract -l deu image.png output
- List the ISO 639-2 codes of available languages:
tesseract --list-langs
- Specify a custom page segmentation mode (default is 3):
tesseract -psm 0_to_10 image.png output
- List page segmentation modes and their descriptions:
tesseract --help-psm


@ui5/webcomponents
<ui5-menu>
Basic Menu
Open Menu
Open Menu
Menu with Sub-menu items
Open Menu
Open Menu
Menu with additional text on menu items
Open Menu
Open Menu
Menu with simulated menu item texts fetching from a database
Menu with initial menu items and additional menu items fetching from a database
Sub-menu with items fetching from a database


21 cars and motorcycles from Paul Walker's collection are headed to auction
Photos of all the cars are now available
by Autoblog StaffBarrett-Jackson will auction 21 vehicles from the late Paul Walker's car collection at its massive event in Scottsdale, Arizona, that runs from January 11-19, 2020. The vehicles cover a wide range of years and styles — everything from a 1963 Chevy Nova Wagon to a 2013 Ford Mustang Boss 302S race car — but the highlights of the auction are five 1995 BMW M3 Lightweight models.
BMW produced only 125 of the M3 Lightweights. Each one features an aggressive rear wing, front spoiler and an immediately recognizable Alpine White paint scheme highlighted by checkered flag livery. According to the auction house, this will be the largest collection of E36 Lightweights ever sold at a single auction. In addition to the Lightweights, Walker's collection includes a pair of E30 M3s that will also be auctioned.
Not every vehicle in the collection is particularly noteworthy. A 1995 Ford Bronco, 2004 GMC Sierra 1500 and a 2006 Toyota Tundra are included, as are a trio of motorcycles. See the full list below:
- 1963 Chevrolet Nova Wagon
- 1964 Chevrolet Chevelle Wagon
- 1967 Chevrolet II Nova
- 1988 BMW M3 E30
- 1989 Nissan R32 Skyline Race Car
- 1991 BMW M3 E30 Coupe
- 1995 BMW M3 E36 Lightweight
- 1995 BMW M3 E36 Lightweight
- 1995 BMW M3 E36 Lightweight
- 1995 BMW M3 E36 Lightweight
- 1995 BMW M3 E36 Lightweight – Factory LTW wing and race-livery delete
- 1995 Ford Bronco SUV
- 2000 Audi S4
- 2003 Ford F250 Pickup
- 2004 GMC Sierra 1500 Pickup
- 2005 Harley-Davidson RS Motorcycle
- 2006 Toyota Tundra Pickup
- 2008 Suzuki Motorcycle
- 2009 Nissan 370Z
- 2011 BMW Motorcycle
- 2013 Ford Mustang Boss 302S Race Car
The 2009 Nissan 370Z was a movie car that appeared in “Fast Five,” which may be of particular interest to fans of the “Fast and the Furious” franchise.


Zoltan performs graph partitioning when the LB_METHOD
parameter is set to GRAPH.
Zoltan provides three packages capable of partitioning a graph. The
package is chosen by setting the GRAPH_PACKAGE parameter.
Two packages (ParMetis and Scotch) are external packages and not
part of Zoltan but accessible via Zoltan. The last package is
PHG, Zoltan's native hypergraph partitioner. PHG will treat
the graph as a regular hypergraph with edge size two.
Since PHG was designed for general hypergraphs, it is usually
slower than graph partitioners but often produces better quality.
| Method String: | GRAPH |
| Parameters: | |
| GRAPH_PACKAGE | The software package to use in partitioning the graph.
PHG (default) ParMETIS Scotch/PT-Scotch |


Templates¶
View¶
-
class
dragonfly.template.template.
View
(template, **kwargs)¶ Bases:
object
Returns a HTML version (view) of the requested template. The class first attempts to locate the deisred view. If a pre-compiled python version of the template does not exist or is out of date, the class will generate one. Otherwise it imports the compiled python file and runs the
get_html
method, passing in any variables that the user.py has given to the constructor (via**kwargs
). It then returns aResponse
with this HTML. :param template: The view to return :type template: str
Warning
The following classes should not be called directly.


Start
Made with ❤ By
Mark S. Shenouda
Seconds left:
20
You Lose!
Play again
You Win! 🎉🎉🎉
Play again
Made with ❤ By
Mark S. Shenouda


As System Executive
Improved an existing Human Resource and Management System for University Malaysia Sabah by adding new module of functionality: Academic Profile.
Improved an existing Human Resource and Management System for University Malaysia Sabah by adding new module of functionality: Academic Profile.


Clustering via parsimonious Gaussian Mixtures of Experts using the MoEClust models introduced by Murphy and Murphy (2017) <arXiv:1711.05632>. This package fits finite Gaussian mixture models with a formula interface for supplying gating and/or expert network covariates using a range of parsimonious covariance parameterisations via the EM/CEM algorithm. Visualisation of the results of such models using generalised pairs plots is also facilitated.
| Version: | 1.2.1 |
| Depends: | R (≥ 3.3.0) |
| Imports: | lattice, matrixStats, mclust (≥ 5.1), mvnfast, nnet, vcd |
| Suggests: | cluster, clustMD, geometry, knitr, rmarkdown |
| Published: | 2018-12-11 |
| Author: | Keefe Murphy [aut, cre], Thomas Brendan Murphy [ctb] |
| Maintainer: | Keefe Murphy <keefe.murphy at ucd.ie> |
| BugReports: | https://github.com/Keefe-Murphy/MoEClust |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| URL: | https://cran.r-project.org/package=MoEClust |
| NeedsCompilation: | no |
| Citation: | MoEClust citation info |
| Materials: | README NEWS |
| In views: | Cluster |
| CRAN checks: | MoEClust results |
| Reference manual: | MoEClust.pdf |
| Vignettes: |
MoEClust |
| Package source: | MoEClust_1.2.1.tar.gz |
| Windows binaries: | r-devel: MoEClust_1.2.1.zip, r-release: MoEClust_1.2.1.zip, r-oldrel: MoEClust_1.2.1.zip |
| OS X binaries: | r-release: MoEClust_1.2.1.tgz, r-oldrel: MoEClust_1.2.1.tgz |
| Old sources: | MoEClust archive |
Please use the canonical form https://CRAN.R-project.org/package=MoEClust to link to this page.


-
Prize title
-
Prize title
-
Prize title
-
Prize title
-
Prize title
-
Prize title
-
Prize title
-
Prize title
-
Prize title
-
Prize title
-
Prize title
-
Prize title


public class Subdivision extends java.lang.Object implements Graph<PointD>
In addition to edges and vertices, Subdivision
also stores the faces formed by
all edges. Faces are any polygonal regions that are bounded by edges, whether on the inside,
on the outside, or both. Edges are represented by the SubdivisionEdge
class,
and faces are represented by the SubdivisionFace
class.
Subdivision
supports generic graph algorithms through its Graph
implementation.
The graph nodes are the PointD
coordinates of all vertices. Two nodes are considered
connected if an edge exists between their corresponding vertices. The distance measure is the
Euclidean distance between vertices.
The planar subdivision is implemented as the doubly-connected edge list described by Mark de Berg et al., Computational Geometry (3rd ed.), Springer-Verlag 2008, p.29-43. This implementation represents edges as “twin” pairs of half-edges.
| Modifier and Type | Field and Description |
|---|---|
double |
epsilon
The epsilon used for coordinate comparisons within the
vertices() collection. |
| Constructor and Description |
|---|
Subdivision(double epsilon)
Creates an empty
Subdivision . |
| Modifier and Type | Method and Description |
|---|---|
AddEdgeResult |
addEdge(PointD start,
PointD end)
Adds a new edge to the
Subdivision that connects the specified PointD
vertices, and returns additional information on any changed and added faces() . |
int |
connectivity()
Gets the maximum number of direct neighbors for any
Graph node. |
boolean |
contains(PointD node)
Determines whether the
Graph contains the specified node. |
Subdivision |
copy()
Creates a deep copy of the
Subdivision . |
java.util.NavigableMap<java.lang.Integer,SubdivisionEdge> |
edges()
Gets all
SubdivisionEdge instances in the Subdivision . |
java.util.NavigableMap<java.lang.Integer,SubdivisionFace> |
faces()
Gets all
SubdivisionFace instances in the Subdivision . |
SubdivisionElement |
find(PointD q,
double epsilon)
Finds the
SubdivisionElement at the specified PointD coordinates. |
SubdivisionEdge |
findEdge(PointD origin,
PointD destination)
Finds the
SubdivisionEdge with the specified PointD origin and destination. |
SubdivisionFace |
findFace(PointD q)
Finds the smallest
SubdivisionFace that contains the specified PointD coordinates. |
SubdivisionFace |
findFace(PointD[] polygon,
boolean verify)
Finds the
SubdivisionFace whose outer boundary equals the specified PointD polygon. |
FindEdgeResult |
findNearestEdge(PointD q)
Finds the
SubdivisionEdge in the Subdivision that is
nearest to and facing the specified PointD coordinates. |
PointD |
findNearestNode(PointD location)
|
PointD |
findNearestVertex(PointD q)
|
static Subdivision |
fromLines(LineD[] lines,
double epsilon)
Creates a
Subdivision from the specified LineD segments. |
static Subdivision |
fromPolygons(PointD[][] polygons,
double epsilon)
Creates a
Subdivision from the specified PointD polygons. |
double |
getDistance(PointD source,
PointD target)
Gets the distance between two specified
Graph nodes. |
SubdivisionEdge[] |
getEdgesByOrigin()
Gets all
SubdivisionEdge instances in the Subdivision ,
lexicographically sorted by SubdivisionEdge.origin() . |
java.util.List<PointD> |
getNeighbors(PointD node)
Gets all direct neighbors of the specified
Graph node. |
PointD |
getWorldLocation(PointD node)
Gets the world location of the specified
Graph node. |
PointD[] |
getWorldRegion(PointD node)
Gets the world region covered by the specified
Graph node. |
java.util.List<SubdivisionEdge> |
getZeroAreaCycles()
Gets all
SubdivisionEdge cycles in the Subdivision that enclose no area. |
static SubdivisionIntersection |
intersection(Subdivision division1,
Subdivision division2)
Creates a
Subdivision from the intersection of two specified instances,
and returns additional information on the corresponding faces() . |
boolean |
isEmpty()
Indicates whether the
Subdivision is empty. |
boolean |
moveVertex(PointD oldVertex,
PointD newVertex)
|
int |
nodeCount()
|
java.util.Set<PointD> |
nodes()
Gets all nodes in the
Graph . |
RemoveEdgeResult |
removeEdge(int edgeKey)
Removes the specified edge from the
Subdivision , and returns
additional information on any changed and removed faces() . |
boolean |
removeVertex(PointD vertex)
Removes the specified
PointD vertex by joining both incident edges. |
boolean |
renumberEdges()
Renumbers all
edges() so that each SubdivisionEdge.key()
equals the iterator position of the corresponding SubdivisionEdge . |
boolean |
renumberFaces()
Renumbers all
faces() so that each SubdivisionFace.key()
equals the iterator position of the corresponding SubdivisionFace . |
SubdivisionEdge |
splitEdge(int edgeKey)
Splits the specified edge in half.
|
boolean |
structureEquals(Subdivision division)
Determines whether the specified
Subdivision and this instance are structurally equal. |
LineD[] |
toLines()
Converts all edges in the
Subdivision to LineD instances. |
PointD[][] |
toPolygons()
|
void |
validate()
Validates the structure of the
Subdivision . |
java.util.Map<PointD,PointD[]> |
vertexRegions()
Gets a mapping of
vertices() to Graph world regions. |
java.util.NavigableMap<PointD,SubdivisionEdge> |
vertices()
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getNeighbors
public final double epsilon
vertices()
collection.
Defines the maximum absolute difference at which vertex coordinates should be considered
equal. Always equals the PointDComparator.epsilon
of the PointDComparator
responsible for ordering the keys of the vertices()
collection.public Subdivision(double epsilon)
Subdivision
.
All collections are empty, except for faces()
which contains
only the unbounded SubdivisionFace
.epsilon
- the epsilon used for coordinate comparisons within vertices()
java.lang.IllegalArgumentException
- if epsilon
is less than zeropublic java.util.NavigableMap<java.lang.Integer,SubdivisionEdge> edges()
SubdivisionEdge
instances in the Subdivision
.
Always contains an even number of elements since every edge in the Subdivision
is comprised of two SubdivisionEdge
instances.
This collection is provided for convenience, unit testing, and faster edge scanning.
It is not strictly needed since a list of all SubdivisionEdge
instances can be
obtained by iterating over all vertices()
, e.g. using getEdgesByOrigin()
.
Maintaining the edges()
collection consumes little extra runtime but a significant
amount of memory, so an alternative Subdivision
implementation might choose to
remove this collection and create new SubdivisionEdge
collections on demand.
NavigableMap
mapping the SubdivisionEdge.key()
of each SubdivisionEdge
instance to the corresponding instancepublic java.util.NavigableMap<java.lang.Integer,SubdivisionFace> faces()
SubdivisionFace
instances in the Subdivision
.
Always contains at least one element which is the unbounded face. The unbounded
SubdivisionFace
always has a SubdivisionFace.key()
of zero.NavigableMap
mapping the SubdivisionFace.key()
of each SubdivisionFace
instance to the corresponding instancepublic boolean isEmpty()
Subdivision
is empty.
Returns true
exactly if the edges()
collection is empty. For any valid
Subdivision
, that is the case exactly if the vertices()
collection is
also empty, and the faces()
collection contains only the unbounded face.true
if the Subdivision
is empty except for the
unbounded SubdivisionFace
, else false
public java.util.Map<PointD,PointD[]> vertexRegions()
vertices()
to Graph
world regions.
Always returns an empty collection by default, as Subdivision
does not inherently
associate world regions with vertices()
. Clients must explicitly add any desired
key-and-value pairs. This collection is therefore modifiable.
getWorldRegion(org.kynosarges.tektosyne.geometry.PointD)
attempts to return the polygonal region that vertexRegions()
associates with a specified vertices()
key, i.e. Graph
node, and returns
null
if no association is found.
Map
of vertices()
keys, representing Graph
nodes,
to the corresponding Graph
world regionspublic java.util.NavigableMap<PointD,SubdivisionEdge> vertices()
PointD
vertices with an incident SubdivisionEdge
in the Subdivision
.
Sorted lexicographically by PointD
keys, using the ordering established
by PointDComparatorY
. That is, keys are sorted first by PointD.y
and then by PointD.x
coordinates.
Every vertices()
key is associated with a valid SubdivisionEdge
.
That is, a Subdivision
never contains isolated points, only edges. If multiple
SubdivisionEdge
instances originate from the same vertex, one is selected
arbitrarily for the vertices()
collection, depending on the construction
order of the Subdivision
.
NavigableMap
mapping each PointD
vertex in the
Subdivision
to a SubdivisionEdge
that originates at the vertexpublic AddEdgeResult addEdge(PointD start, PointD end)
Subdivision
that connects the specified PointD
vertices, and returns additional information on any changed and added faces()
.
First checks if the new edge would intersect any existing edges()
, except
at the specified start
and end
coordinates, and fails if so.
Otherwise, creates two new edges()
elements, from start
to end
and vice versa. If start
and/or end
are not found in the vertices()
collection, the corresponding vertices()
elements are added as well.
If the added edge connects an inner cycle of the containing SubdivisionFace
with
its outer cycle, the inner cycle is removed. If the added edge connects two inner cycles,
one of them is arbitrarily chosen for removal.
If the added edge connects two half-edges within the same inner cycle, a new
SubdivisionFace
for the resulting enclosed area is created. If the added edge
connects two half-edges within the outer cycle, a new SubdivisionFace
for the
part enclosing the smaller area is created.
start
- the PointD
coordinates of the first vertex to connectend
- the PointD
coordinates of the second vertex to connectAddEdgeResult
containing the result of the operationjava.lang.NullPointerException
- if start
or end
is null
public Subdivision copy()
Subdivision
.
Replicates the entire structure of the Subdivision
, creating a new
SubdivisionEdge
and SubdivisionFace
with identical keys
for each corresponding instance found in the current structure.
structureEquals(org.kynosarges.tektosyne.subdivision.Subdivision)
will succeed for comparing both instances.Subdivision
public SubdivisionElement find(PointD q, double epsilon)
SubdivisionElement
at the specified PointD
coordinates.
First calls findFace(org.kynosarges.tektosyne.geometry.PointD)
to determine the smallest faces()
element that
contains q
, then checks all its SubdivisionFace.outerEdge()
and
SubdivisionFace.innerEdges()
cycles to determine whether q
coincides
with an incident edges()
or vertices()
element.
find
performs a slow brute-force search. For better performance, create a
SubdivisionSearch
for repeated searches within the same Subdivision
,
or examine the edges()
and vertices()
collections directly if you expect
q
to coincide with one of their elements.
q
- the PointD
coordinates to examineepsilon
- the maximum absolute difference at which coordinates should be considered equal,
or zero to use exact coordinate comparisonsSubdivisionElement
that coincides with q
java.lang.IllegalArgumentException
- if epsilon
is less than zerojava.lang.NullPointerException
- if q
is null
public SubdivisionEdge findEdge(PointD origin, PointD destination)
SubdivisionEdge
with the specified PointD
origin and destination.
First attempts to find origin
in the vertices()
collection, then calls
SubdivisionEdge.findEdgeTo(org.kynosarges.tektosyne.geometry.PointD)
to find the SubdivisionEdge
leading from
origin
to destination
.
This is an O(ld n + m) operation, where n is the number of vertices()
and m is
the number of half-edges originating from origin
. All coordinate comparisons
use the current epsilon
of the Subdivision
.
origin
- the SubdivisionEdge.origin()
of the SubdivisionEdge
destination
- the SubdivisionEdge.destination()
of the SubdivisionEdge
SubdivisionEdge
with the specified origin
and destination
,
or null
if edges()
contains no matching elementjava.lang.NullPointerException
- if origin
or destination
is null
public SubdivisionFace findFace(PointD q)
SubdivisionFace
that contains the specified PointD
coordinates.
Performs a linear search through all bounded faces()
for an
SubdivisionFace.outerEdge()
boundary that contains q
, i.e. one for
which SubdivisionEdge.locate(org.kynosarges.tektosyne.geometry.PointD)
does not return PolygonLocation.OUTSIDE
.
The first containing face that has no SubdivisionFace.innerEdges()
is immediately
returned. If all containing faces have one or more SubdivisionFace.innerEdges()
,
the one with the smallest outer SubdivisionEdge.cycleArea()
is returned.
If no containing face was found, the unbounded face is returned.
findFace
has an average runtime of O(n/2) where n is the number of bounded
faces()
, unless faces()
elements with SubdivisionFace.innerEdges()
are frequent in which case the runtime approaches O(n).
q
- the PointD
coordinates to examineSubdivisionFace
that contains q
java.lang.NullPointerException
- if q
is null
public SubdivisionFace findFace(PointD[] polygon, boolean verify)
SubdivisionFace
whose outer boundary equals the specified PointD
polygon.
Calls findEdge(org.kynosarges.tektosyne.geometry.PointD, org.kynosarges.tektosyne.geometry.PointD)
on each pair of consecutive polygon
elements, and
immediately returns null
if no SubdivisionEdge
is found for any such pair.
Otherwise, the SubdivisionEdge.face()
links of both twin half-edges are examined.
If the SubdivisionFace
on the same side of the polygon
ever changes,
all half-edges on that side are eliminated from the search.
If verify
is false
, the SubdivisionFace
on the remaining side when
the other has been eliminated is immediately returned. Otherwise, findFace
continues
checking the half-edges on the remaining side, verifying that they form a cycle around a
single SubdivisionFace
which also contains its SubdivisionFace.outerEdge()
.
The specified polygon
may begin with any incident vertex, and the sequence of vertices
may follow either the chain of SubdivisionEdge.next()
or SubdivisionEdge.previous()
links around the incident half-edges.
Depending on the verify
flag, findFace
has a runtime between O(ld n + 2m)
and O(ld n + km), where n is the number of vertices()
, m is the number of half-edges
originating from each vertex, and k is the number of polygon
vertices. All coordinate
comparisons use the current epsilon
of the Subdivision
.
polygon
- an array whose PointD
coordinates represent the consecutive
vertices of the outer boundary of the SubdivisionFace
verify
- true
to verify that the outer boundary is fully congruent with
polygon
; false
to return a result as soon as all potential
alternatives have been eliminatedSubdivisionFace
whose outer boundary equals polygon
,
or null
if no matching faces()
element was foundjava.lang.IllegalArgumentException
- if polygon
has fewer than three elementsjava.lang.NullPointerException
- if polygon
is null
public FindEdgeResult findNearestEdge(PointD q)
SubdivisionEdge
in the Subdivision
that is
nearest to and facing the specified PointD
coordinates.
First calls findFace(PointD)
to determine the faces()
element
that contains q
, and then calls SubdivisionFace.findNearestEdge(org.kynosarges.tektosyne.geometry.PointD)
on that SubdivisionFace
to determine the nearest facing SubdivisionEdge
and its distance from q
.q
- the PointD
coordinates to examineFindEdgeResult
containing the values described abovejava.lang.NullPointerException
- if q
is null
public PointD findNearestVertex(PointD q)
PointD
vertex in the Subdivision
that is nearest to the specified PointD
coordinates.
Returns the result of PointDComparator.findNearest(java.util.List<org.kynosarges.tektosyne.geometry.PointD>, org.kynosarges.tektosyne.geometry.PointD)
for q
, executing
on the PointDComparatorY
used to sort the vertices()
collection.q
- the PointD
coordinates to examinevertices()
key with the smallest Euclidean distance to q
java.lang.NullPointerException
- if q
is null
public static Subdivision fromLines(LineD[] lines, double epsilon)
Subdivision
from the specified LineD
segments.
Also determines the faces()
that are formed by the edges()
of the new
Subdivision
, and sets its comparison epsilon
to the specified
epsilon
. The new Subdivision
is empty if lines
is empty.
Caution: The specified lines
must not intersect or overlap anywhere except
in their LineD.start
and LineD.end
points. fromLines
does not
check this condition. If violated, the returned Subdivision
will be invalid.
lines
- an array of LineD
instances representing the edges()
in the new Subdivision
epsilon
- the maximum absolute difference at which coordinates should be considered equal,
or zero to use exact coordinate comparisonsSubdivision
whose edges()
are the specified lines
,
and whose vertices()
are their LineD.start
and LineD.end
pointsjava.lang.IllegalArgumentException
- if lines
contains an element whose LineD.start
point equals its LineD.end
point, or if epsilon
is less than zerojava.lang.NullPointerException
- if lines
is null
public static Subdivision fromPolygons(PointD[][] polygons, double epsilon)
Subdivision
from the specified PointD
polygons.
Sets the comparison epsilon
of the new Subdivision
to the specified
epsilon
. The new Subdivision
is empty if polygons
is empty.
Caution: The specified polygons
may share common edges and vertices,
and may be fully contained within one another, but must not otherwise intersect
or overlap. fromPolygons
does not check this condition. If violated, the
returned Subdivision
will be invalid.
polygons
- an array of PointD
arrays representing the outer boundaries
of all bounded faces()
in the new Subdivision
epsilon
- the maximum absolute difference at which coordinates should be considered equal,
or zero to use exact coordinate comparisonsSubdivision
whose bounded faces()
are the specified polygons
java.lang.IllegalArgumentException
- if polygons
contains an array with less than three
elements or two consecutive identical elements, or if epsilon
is less than zerojava.lang.NullPointerException
- if polygons
or any of its elements is null
public SubdivisionEdge[] getEdgesByOrigin()
SubdivisionEdge
instances in the Subdivision
,
lexicographically sorted by SubdivisionEdge.origin()
.
Does not use the edges()
collection but rather scans the vertices()
collection by lexicographically ascending coordinates. All SubdivisionEdge
instances originating from the same vertex are stored in consecutive index positions,
proceeding clockwise around the vertex.edges()
, but sorted lexicographically by
SubdivisionEdge.origin()
rather than by SubdivisionEdge.key()
public java.util.List<SubdivisionEdge> getZeroAreaCycles()
SubdivisionEdge
cycles in the Subdivision
that enclose no area.
Returns all SubdivisionFace.innerEdges()
of all faces()
for which SubdivisionEdge.isCycleAreaZero()
succeeds.List
containing one SubdivisionEdge
from each cycle
in the Subdivision
that encloses no areapublic static SubdivisionIntersection intersection(Subdivision division1, Subdivision division2)
Subdivision
from the intersection of two specified instances,
and returns additional information on the corresponding faces()
.
First intersects the edges()
of division1
with those of division2
,
and then creates the resulting faces()
with consecutive keys that equal their index
positions. The original faces()
that equal or contain the new faces()
are
indicated by key collections in the returned SubdivisionIntersection
.
intersection(org.kynosarges.tektosyne.subdivision.Subdivision, org.kynosarges.tektosyne.subdivision.Subdivision)
uses the epsilon
of division1
to compare
vertices()
for equality. Therefore, division2
must use the same or a greater
epsilon
; otherwise, some of its edges()
might not be representable in the
new Subdivision
. Moreover, the comparison epsilon used to detect edge intersections
is raised to a minimum of 1e-10 for better numerical stability.
intersection(org.kynosarges.tektosyne.subdivision.Subdivision, org.kynosarges.tektosyne.subdivision.Subdivision)
performs best if either division1
or division2
is empty,
and worst if both instances are of equal size. That is because the algorithm intersects the
edges()
of division1
with those of division2
, rather than intersecting
all edges()
of the combined Subdivision
with each other.
division1
- the first Subdivision
to intersectdivision2
- the second Subdivision
to intersectSubdivisionIntersection
representing the result of the intersectionjava.lang.IllegalArgumentException
- if the epsilon
of division1
is greater than that
of division2
, or division1
or division2
is structurally invalidjava.lang.NullPointerException
- if division1
or division2
is null
public boolean moveVertex(PointD oldVertex, PointD newVertex)
PointD
vertex to the specified PointD
coordinates.
First checks whether vertices()
already contains newVertex
, or whether
moving the SubdivisionEdge.origin()
of any incident SubdivisionEdge
to
newVertex
would create an intersection with any non-incident SubdivisionEdge
on any boundary of any incident SubdivisionFace
.
If so, moveVertex
returns false
. Otherwise, oveVertex
updates
the vertices()
collection and the SubdivisionEdge.origin()
of all incident
edges()
and returns true
.
public RemoveEdgeResult removeEdge(int edgeKey)
Subdivision
, and returns
additional information on any changed and removed faces()
.
Fails immediately if edgeKey
is not found in the edges()
collection.
If the removed SubdivisionEdge
and its SubdivisionEdge.twin()
bound two
different faces, the faces()
element whose outer boundary contains a removed
half-edge is also removed. If both removed half-edges constitute outer boundaries,
the faces()
element with the greater SubdivisionFace.key()
is removed.
If the SubdivisionEdge.origin()
or SubdivisionEdge.destination()
of a removed
SubdivisionEdge
does not terminate any other edges()
, the corresponding
vertices()
element(s) are also removed.
edgeKey
- the SubdivisionEdge.key()
of one SubdivisionEdge
to remove,
with its SubdivisionEdge.twin()
implicitly removed as wellRemoveEdgeResult
containing the result of the operationpublic boolean removeVertex(PointD vertex)
PointD
vertex by joining both incident edges.
First checks whether vertices()
does not contain vertex
, or whether
vertex
has not exactly two distinct incident full edges, or whether joining
them would disturb vertex chains or create an intersection with any non-incident
SubdivisionEdge
on any boundary of the incident SubdivisionFace
.
If so, removeVertex
returns false
. Otherwise, removeVertex
links the twins of the incident edges()
into a new SubdivisionEdge
pair,
updates the vertices()
and edges()
collections, and returns true
.
vertex
- the PointD
vertex to removetrue
if vertex
and both incident edges were removed, else false
java.lang.NullPointerException
- if vertex
is null
public boolean renumberEdges()
edges()
so that each SubdivisionEdge.key()
equals the iterator position of the corresponding SubdivisionEdge
.
Deleting edges()
from an existing Subdivision
may leave gaps in the
SubdivisionEdge.key()
sequence. renumberEdges()
eliminates any such gaps,
restoring the original equivalence of SubdivisionEdge.key()
value and iterator
position in the edges()
collection.
renumberEdges()
does not change the sequence of SubdivisionEdge
instances
in the edges()
collection, only their SubdivisionEdge.key()
values.
true
if any SubdivisionEdge.key()
was changed, else false
public boolean renumberFaces()
faces()
so that each SubdivisionFace.key()
equals the iterator position of the corresponding SubdivisionFace
.
Deleting edges()
from an existing Subdivision
may leave gaps in the
SubdivisionFace.key()
sequence of the faces()
collection.
renumberFaces()
eliminates any such gaps, restoring the original equivalence of
SubdivisionFace.key()
value and iterator position in the faces()
collection.
renumberFaces()
does not change the sequence of SubdivisionFace
instances
in the faces()
collection, only their SubdivisionFace.key()
values.
Note that this invalidates any existing SubdivisionMap
face mappings.
true
if any SubdivisionEdge.key()
was changed, else false
public SubdivisionEdge splitEdge(int edgeKey)
null
if edgeKey
was not found in the edges()
collection, or if the new vertex would equal an existing vertices()
key,
given the current epsilon
.
Otherwise, creates a new vertices()
element in the center of the split edge,
and two new SubdivisionEdge
instances that originate from the new vertex.
Each is paired with one of the original SubdivisionEdge
twins, effectively
shortening them to end at the new vertex.
edgeKey
- the SubdivisionEdge.key()
of one SubdivisionEdge
to split,
implicitly splitting its SubdivisionEdge.twin()
as welledges()
that originate from the new vertices()
element if the split was successful, else null
public boolean structureEquals(Subdivision division)
Subdivision
and this instance are structurally equal.
Compares the number, order, and internal structure of all edges()
and faces()
in the two Subdivision
instances to test for structural equality. Individual objects
are compared using their own Object.equals(java.lang.Object)
methods.
Intended for testing the copy()
method which duplicates keys but not objects.
division
- the Subdivision
to compare to this instancetrue
if division
and this instance are structurally equal, else false
java.lang.NullPointerException
- if division
is null
public LineD[] toLines()
Subdivision
to LineD
instances.
The returned array has half as many elements as the edges()
collection since
each LineD
corresponds to a twin pair of SubdivisionEdge
instances.
The returned array is sorted by the smaller SubdivisionEdge.key()
of the two SubdivisionEdge
instances that constitute each full edge,
yielding the same ordering as the edges()
collection but excluding the
higher-keyed twin of each SubdivisionEdge
pair.
LineD
instances representing all edges in the Subdivision
public PointD[][] toPolygons()
faces()
in the Subdivision
to PointD
polygons.
Each nested PointD
array within the returned array contains the
SubdivisionEdge.cyclePolygon()
for the SubdivisionFace.outerEdge()
of one bounded faces()
element.
The PointD
arrays are sorted by the SubdivisionFace.key()
of the
corresponding SubdivisionFace
, yielding the same ordering as the
faces()
collection but excluding the unbounded face.
PointD
polygons representing
all bounded faces()
in the Subdivision
public void validate()
Subdivision
.
Uses assert
statements to verify the structural invariants of the Subdivision
.
Assertions must be enabled at runtime for validate()
to have any effect.java.lang.AssertionError
- if the structure of the Subdivision
is invalidpublic int connectivity()
Graph
node.
Always greater than zero. Returns the maximum number of SubdivisionEdge
instances
that originate from any single vertex. Scans the entire vertices()
collection on
first access, then returns a cached value on subsequent accesses. The scan is repeated
whenever the structure of the Subdivision
changes.connectivity
in interface Graph<PointD>
Graph
nodepublic int nodeCount()
nodes()
in the Graph
.
Never less than zero. Returns the current number of vertices()
.public java.util.Set<PointD> nodes()
Graph
.
Always contains nodeCount()
elements. Returns all PointD
keys
in the vertices()
collection, using its current sorting order.public boolean contains(PointD node)
Graph
contains the specified node.
Returns true
exactly if the vertices()
collection contains
a PointD
key that equals the specified node
. This is an O(ld n)
operation, where n is the number of vertices()
.public PointD findNearestNode(PointD location)
Graph
node nearest to the specified PointD
world location.
Returns the result of findNearestVertex(org.kynosarges.tektosyne.geometry.PointD)
for the specified location
.findNearestNode
in interface Graph<PointD>
location
- the PointD
location, in world coordinates, to examineGraph
node whose getWorldLocation(org.kynosarges.tektosyne.geometry.PointD)
result
is nearest to the specified location
java.lang.NullPointerException
- if location
is null
public double getDistance(PointD source, PointD target)
Graph
nodes.
Returns zero if the specified source
and target
are equal,
and the Euclidean distance between source
and target
otherwise.
This is equivalent to the absolute length of the edge that connects these vertices.
getDistance
does not check whether the Subdivision
actually contains
source
and target
, or whether they are connected by an edge.
getDistance
in interface Graph<PointD>
source
- the source node in the Graph
target
- the target node in the Graph
source
and target
java.lang.NullPointerException
- if source
or target
is null
public java.util.List<PointD> getNeighbors(PointD node)
Graph
node.
Returns an empty List
if node
is not a vertices()
key. Otherwise,
returns the destinations of all SubdivisionEdge
instances that originate from
node
. This is an O(ld n + m) operation, where n is the total number of
vertices()
and m is the number of half-edges originating from node
.getNeighbors
in interface Graph<PointD>
node
- the Graph
node whose direct neighbors to collectList
of all Graph
nodes that are directly connected
with node
, numbering from zero to connectivity()
java.lang.NullPointerException
- if node
is null
public PointD getWorldLocation(PointD node)
Graph
node.
Simply returns the specified node
, without checking
whether it is actually part of the Subdivision
.getWorldLocation
in interface Graph<PointD>
node
- the Graph
node whose world location to findPointD
location of node
, in world coordinatesjava.lang.NullPointerException
- if node
is null
public PointD[] getWorldRegion(PointD node)
Graph
node.
Returns the polygonal region that the user-defined vertexRegions()
collection
associates with the specified node
, if found, else, null
.getWorldRegion
in interface Graph<PointD>
node
- the Graph
node whose world region to findPointD
vertices defining the polygonal region
covered by node
, in world coordinatesjava.lang.NullPointerException
- if node
is null


--- title: "BOO-tanically Wicked Plants" layout: "default" published: true ---
As its name suggests, Yellow Horned Poppy is adorned with bright yellow or orange flowers. The thick, leathery, wavy, bluish-grey leaves are coated in a layer of water retaining wax. The flowers give way to long, upright, thin, distinctive horn-shaped capsules.
Similar to its family member, the Opium Poppy, Yellow Horned Poppy toxicity is high. All parts of this plant, including the seeds are poisonous. In high doses, it produces a sensation of initial euphoria much like being drunk. If dangerous doses are consumed, symptoms include brain damage and respiratory failure, resulting in death.
Glaucium flavum Flower
Glaucium flavum Flower Bud


Encryption
Input:
Input text:
Input key:
Power:
Encrypt
Decrypt
Output:
{{finish}}
"How does it work?"
Made by Quinten Cabo © 2018. All rights reserved.


Getting Started with Qt Purchasing in C++
This guide assumes that you have registered the in-app products for your application in the external store. For more information about registering products, see Registering Products in Google Play, Registering Products in App Store, and Registering Products in Windows Store.
Preparing the Application
Use the following include statement to access the C++ classes:
#include <QtPurchasing>
Before building your application, add the following statement to your .pro
file to link against the Qt Purchasing library:
QT += purchasing
Registering Products
In order to allow in-app purchases in your application, register the products in your application. Start by creating an application-global instance of QInAppStore, and use the registerProduct() function to register each product.
The following example is a hypothetical role-playing game, which provides two in-app products to the user.
MyApplication::MyApplication(QObject *parent) : QObject(parent) { m_myStore = new QInAppStore(this); setupConnections(); m_myStore->registerProduct(QInAppProduct::Consumable, QStringLiteral("healthPotion")); m_myStore->registerProduct(QInAppProduct::Unlockable, QStringLiteral("dlcForestOfFooBar")); }
As you can see, there are consumable products and unlockable products. The former can be purchased any number of times by the same user, whereas the latter can only be purchased once.
In our example, the "healthPotion"
is a consumable product, because the user should be able to buy any number of health potions and add them to their in-game inventory.
The "dlcForestOfFooBar"
is downloadable content, which unlocks a new part of the game, and once it is bought, the purchase should be persistent across the user's devices and across reinstallations.
Making Connections
Registering a product is an asynchronous operation, as are all operations supported by Qt Purchasing. Before you start registering a product, you must listen to the QInAppStore::productRegistered() and QInAppStore::productUnknown() signals in QInAppStore to know the status of your registration.
If the application intends to allow users to purchase products, it also needs to listen for the QInAppStore::transactionReady() signal to be notified when a transaction is pending.
void MyApplication::setupConnections() { connect(m_myStore, SIGNAL(productRegistered(QInAppProduct*)), this, SLOT(markProductAvailable(QInAppProduct*))); connect(m_myStore, SIGNAL(productUnknown(QInAppProduct*)), this, SLOT(handleErrorGracefully(QInAppProduct*))); connect(m_myStore, SIGNAL(transactionReady(QInAppTransaction*)), this, SLOT(handleTransaction(QInAppTransaction*))); }
Purchasing A Product
When the user wants to purchase a product, call QInAppProduct::purchase() on the product. This launches a platform-specific, asynchronous process to purchase the product, for example by requesting the user's password and confirmation of the purchase. In most cases, you must make sure that the application UI is not accepting input while the purchase request is being processed, as this is not handled automatically on all platforms.
void MyApplication::purchaseHealthPotion() { QInAppProduct *product = m_myStore->registeredProduct(QStringLiteral("healthPotion")); // Should not get here if product is not registered Q_ASSERT(product != 0); product->purchase(); }
When this function is called, the purchase process is initiated. At some point during the process, the QInAppStore::transactionReady() signal is emitted, and the slot registered earlier is called. In this function, you can save data about a successful purchase so that it survives across application runs. After verifying that the data has been stored, finalize the transaction. If the transaction fails, display information about the failure to the user and finalize the transaction.
void MyApplication::handleTransaction(QInAppTransaction *transaction) { if (transaction->status() == QInAppTransaction::PurchaseApproved && transaction->product()->identifier() == QStringLiteral("healthPotion")) { if (!hasAlreadyStoredTransaction(transaction->orderId()) { ++m_healthPotions; if (!addHealthPotionToPersistentStorage(transaction->orderId()) popupErrorDialog(tr("Unable to write to persistent storage. Please make sure there is sufficient space and restart.")) else transaction->finalize(); } } else if (transaction->status() == QInAppTransaction::PurchaseFailed) { popupErrorDialog(tr("Purchase not completed.")); transaction->finalize(); } }
If a transaction is not finalized, the transactionReady() signal is emitted again for the same transaction the next time the product is registered, providing another chance to store the data. The transaction for a consumable product must be finalized before the product can be purchased again.
Restoring Previously Purchased Products
If the application is uninstalled and subsequently reinstalled (or installed by the same user on a different device), you must provide a way to restore the previously purchased unlockable products.
To start the process of restoring purchases, call the QInAppStore::restorePurchases() function. This emits the QInAppStore::transactionReady() signal for each of the application's unlockable products that were purchased previously by the current user. The status of these transactions will be QInAppTransaction::PurchaseRestored.
Continuing on the example from earlier, lets imagine that the game has downloadable content that you can buy to extend the game further. This must be an unlockable product, because the user need not purchase it more than once.
void MyApplication::handleTransaction(QInAppTransaction *transaction) { if ((transaction->status() == QInAppTransaction::PurchaseApproved || transaction->status() == QInAppTransaction::PurchaseRestored) && transaction->product()->identifier() == QStringLiteral("dlcForestOfFooBar")) { if (!hasMap(QStringLiteral("forestOfFooBar.map")) { if (!downloadExtraMap(QStringLiteral("forestOfFooBar.map"))) popupErrorDialog(tr("Unable to download The Forest of FooBar map. Please make sure there is sufficient space and restart.")) else transaction->finalize() } } else if (transaction->status() == QInAppTransaction::PurchaseApproved && transaction->product()->identifier() == QStringLiteral("healthPotion")) { // ... handle healthPotion purchase } else { popupErrorDialog(tr("Purchase not completed.")); transaction->finalize(); } }
If a user buys the downloadable content and later either installs the game on another device or uninstalls and reinstalls the game, you can provide a way to restore the purchase by calling QInAppStore::restorePurchases(). Purchases must be restored in response to a user input, as it may present a password dialog on some platforms.
Note: While the function behaves as documented on Android, this functionality is technically not needed there. Android manages all unlockable purchases with no intervention from the application. If an application is uninstalled and reinstalled (or installed on a different Android device), QInAppStore::transactionReady() is emitted at application start-up for each previously purchased unlockable product, with the QInAppTransaction::PurchaseApproved status.


subject
DOCS REPOSITORY 238XKAZTNSM
0375503889-dumb-money-adventures-of-a-day-trader.pdf
January 18, 2017
Filetype: PDF
|
1893 views
system_update_alt
Download
subject
Read
123690222X-the-pennsylvania-german-volume-5-6-paperback.pdf
September 18, 2016
Filetype: PDF
|
752 views
system_update_alt
Download
subject
Read
1500306568-blank-recipe-book-your-own-cookbook-journal-reci.pdf
September 25, 2016
Filetype: PDF
|
1547 views
system_update_alt
Download
subject
Read
144476473X-tell-me.pdf
September 22, 2016
Filetype: PDF
|
805 views
system_update_alt
Download
subject
Read
1776500512-lip-smacking-smoothie.pdf
September 24, 2016
Filetype: PDF
|
2948 views
system_update_alt
Download
subject
Read
1484886593-coaching-football-principles-of-the-sprint-draw-.pdf
September 24, 2016
Filetype: PDF
|
3029 views
system_update_alt
Download
subject
Read
0825614953-practical-pentatonics-compact-reference-library.pdf
November 12, 2016
Filetype: PDF
|
2509 views
system_update_alt
Download
subject
Read
1586857029-essence-and-alchemy-paperback.pdf
December 27, 2016
Filetype: PDF
|
1125 views
system_update_alt
Download
subject
Read
1555912966-yank-the-army-weekly-reporting-the-greatest-gene-1.pdf
January 02, 2017
Filetype: PDF
|
3049 views
system_update_alt
Download
subject
Read
1633847357-fantastic-stories-of-the-imagination-paperback.pdf
January 29, 2017
Filetype: PDF
|
2475 views
system_update_alt
Download
subject
Read
0324183305-managerial-economics-10th.pdf
November 15, 2016
Filetype: PDF
|
789 views
system_update_alt
Download
subject
Read
1522662634-bridge-of-shadows.pdf
November 24, 2016
Filetype: PDF
|
593 views
system_update_alt
Download
subject
Read
1498753760-zeroing-dynamics-gradient-dynamics-and-newton-it.pdf
August 06, 2016
Filetype: PDF
|
2420 views
system_update_alt
Download
subject
Read
1493612344-is-unity-a-cult-paperback.pdf
December 05, 2016
Filetype: PDF
|
2584 views
system_update_alt
Download
subject
Read
0373133928-ravensdale-x27-s-defiant-captive-christmas-at-th.pdf
December 17, 2016
Filetype: PDF
|
1655 views
system_update_alt
Download
subject
Read
0521099846-the-dramatic-experience-paperback.pdf
October 12, 2016
Filetype: PDF
|
2643 views
system_update_alt
Download
subject
Read
0747587213-bethany-x27-s-song-stage-school.pdf
December 30, 2016
Filetype: PDF
|
875 views
system_update_alt
Download
subject
Read
0812407571-a-dog-called-kitty-hardback.pdf
September 23, 2016
Filetype: PDF
|
773 views
system_update_alt
Download
subject
Read
1259253155-software-engineering-international-student-edito.pdf
October 25, 2016
Filetype: PDF
|
3078 views
system_update_alt
Download
subject
Read
1234330482-verhandlungen-10.pdf
September 10, 2016
Filetype: PDF
|
2664 views
system_update_alt
Download
subject
Read
0805853839-the-american-journalist-in-the-21st-century-u-s-.pdf
November 01, 2016
Filetype: PDF
|
2775 views
system_update_alt
Download
subject
Read
098491420X-charity-kills.pdf
August 07, 2016
Filetype: PDF
|
1014 views
system_update_alt
Download
subject
Read
0413737403-our-country-x27-s-good-based-on-the-novel-the-qu.pdf
November 18, 2016
Filetype: PDF
|
393 views
system_update_alt
Download
subject
Read
0310342228-breaking-busy-how-to-find-peace-and-purpose-in-a-2.pdf
October 08, 2016
Filetype: PDF
|
2757 views
system_update_alt
Download
subject
Read
0764124617-my-new-family-a-first-look-at-adoption-first-loo.pdf
August 28, 2016
Filetype: PDF
|
2074 views
system_update_alt
Download
subject
Read
1616894393-paper-zoo-hardback.pdf
December 28, 2016
Filetype: PDF
|
2512 views
system_update_alt
Download
subject
Read
1554567300-2014-bulldogs-american-kennel-club-wall.pdf
August 22, 2016
Filetype: PDF
|
2403 views
system_update_alt
Download
subject
Read
152321760X-a-practical-guide-to-teen-business-and-cybersecu-1.pdf
October 08, 2016
Filetype: PDF
|
744 views
system_update_alt
Download
subject
Read
1259060586-business-ethics-decision-making-for-personal-int-3.pdf
October 14, 2016
Filetype: PDF
|
2080 views
system_update_alt
Download
subject
Read
0521846781-an-introduction-to-programming-with-mathematica-.pdf
January 29, 2017
Filetype: PDF
|
1573 views
system_update_alt
Download
subject
Read
133157546X-an-appeal-to-the-people-of-the-northern-and-east.pdf
October 23, 2016
Filetype: PDF
|
900 views
system_update_alt
Download
subject
Read
1507666098-autumn-tales-a-crow-a-pumpkin-and-a-mouse.pdf
August 31, 2016
Filetype: PDF
|
2464 views
system_update_alt
Download
subject
Read
935152230X-forensic-medicine-solved-question-papers-seventh.pdf
September 29, 2016
Filetype: PDF
|
2954 views
system_update_alt
Download
subject
Read
0133698548-interactive-science-interdisciplinary-activities.pdf
August 27, 2016
Filetype: PDF
|
2633 views
system_update_alt
Download
subject
Read
0486275426-the-devil-s-dictionary-paperback.pdf
January 23, 2017
Filetype: PDF
|
2367 views
system_update_alt
Download
subject
Read
1847885993-fashion-and-orientalism-dress-textiles-and-cultu.pdf
August 25, 2016
Filetype: PDF
|
1790 views
system_update_alt
Download
subject
Read
0008161887-year-4-fractions-and-decimals-pupil-book-maths-k.pdf
August 28, 2016
Filetype: PDF
|
2939 views
system_update_alt
Download
subject
Read
1355982162-the-green-coat-a-comedy-in-one-act-hardback.pdf
December 11, 2016
Filetype: PDF
|
2843 views
system_update_alt
Download
subject
Read
0030542995-algebra-1-student-technology-guide.pdf
November 28, 2016
Filetype: PDF
|
943 views
system_update_alt
Download
subject
Read
0375501916-faith-of-my-fathers.pdf
August 15, 2016
Filetype: PDF
|
2213 views
system_update_alt
Download
subject
Read
1505410428-best-of-communities-iv-good-meetings-paperback.pdf
January 29, 2017
Filetype: PDF
|
2965 views
system_update_alt
Download
subject
Read
1500313955-the-evil-inside-polygamy-i-am-writing-this-book-.pdf
December 21, 2016
Filetype: PDF
|
1132 views
system_update_alt
Download
subject
Read
1566997216-reconstructing-church-tools-for-turning-your-con.pdf
November 30, 2016
Filetype: PDF
|
1003 views
system_update_alt
Download
subject
Read
0198387296-read-write-inc-home-phonics-high-on-a-hill-book-.pdf
January 26, 2017
Filetype: PDF
|
2991 views
system_update_alt
Download
subject
Read
1236481364-cms-sra-volume-1-29.pdf
October 28, 2016
Filetype: PDF
|
2754 views
system_update_alt
Download
subject
Read
1535222530-personal-finance-control-your-money-directions-a.pdf
October 05, 2016
Filetype: PDF
|
359 views
system_update_alt
Download
subject
Read
0603565476-thomas-and-the-ghost-engine-and-other-stories.pdf
September 17, 2016
Filetype: PDF
|
2401 views
system_update_alt
Download
subject
Read
1909823201-lost-lines-cambrian-coast-line-paperback.pdf
September 28, 2016
Filetype: PDF
|
2431 views
system_update_alt
Download
subject
Read
7533659880-multi-level-sprint-volume-language-grade-7-the-n-1.pdf
December 02, 2016
Filetype: PDF
|
1993 views
system_update_alt
Download
subject
Read
8181287541-physical-therapy-of-cerebral-palsy-cd-rom-includ.pdf
August 19, 2016
Filetype: PDF
|
1099 views
system_update_alt
Download
subject
Read
8184954360-the-execution-of-sherlock-homes.pdf
December 04, 2016
Filetype: PDF
|
1363 views
system_update_alt
Download
subject
Read
1479865257-the-television-will-be-revolutionized-second-edi.pdf
October 28, 2016
Filetype: PDF
|
480 views
system_update_alt
Download
subject
Read
1477475540-the-classical-poetry-of-japan-paperback.pdf
August 10, 2016
Filetype: PDF
|
2193 views
system_update_alt
Download
subject
Read
0134435788-revel-for-texts-and-contexts-writing-about-liter.pdf
January 27, 2017
Filetype: PDF
|
2643 views
system_update_alt
Download
subject
Read
1780190174-the-complete-rock-climber-the-complete-practical.pdf
December 31, 2016
Filetype: PDF
|
2912 views
system_update_alt
Download
subject
Read
8121943361-business-ethics-and-communication.pdf
August 09, 2016
Filetype: PDF
|
1226 views
system_update_alt
Download
subject
Read
8416004196-el-marino-el-libro-de-la-uci-paperback.pdf
October 16, 2016
Filetype: PDF
|
1850 views
system_update_alt
Download
subject
Read
1230374396-the-secret-of-the-old-masters-paperback.pdf
November 28, 2016
Filetype: PDF
|
2359 views
system_update_alt
Download
subject
Read
1932360328-the-age-of-sinatra.pdf
November 13, 2016
Filetype: PDF
|
3209 views
system_update_alt
Download
subject
Read
7040209160-chemistry-2-semesters-high-school-grade-3-abilit.pdf
November 14, 2016
Filetype: PDF
|
1512 views
system_update_alt
Download
subject
Read
1517480981-emma-goldman-the-life-and-legacy-of-the-famous-f.pdf
December 20, 2016
Filetype: PDF
|
1082 views
system_update_alt
Download
subject
Read
1449427243-pocket-posh-codewords-3-100-puzzles.pdf
November 26, 2016
Filetype: PDF
|
1926 views
system_update_alt
Download
subject
Read
1118072650-the-mobile-academy.pdf
November 05, 2016
Filetype: PDF
|
1683 views
system_update_alt
Download
subject
Read
1421404370-mathematical-expeditions-exploring-word-problems-1.pdf
December 16, 2016
Filetype: PDF
|
2865 views
system_update_alt
Download
subject
Read
1424190789-essence-of-life.pdf
January 15, 2017
Filetype: PDF
|
1651 views
system_update_alt
Download
subject
Read
1347262180-lichtentag-paragon-shorthand-a-vast-improvement--3.pdf
December 13, 2016
Filetype: PDF
|
2447 views
system_update_alt
Download
subject
Read
1634498356-holding-on-to-god-s-hand-paperback.pdf
November 28, 2016
Filetype: PDF
|
2670 views
system_update_alt
Download
subject
Read
007143187X-opportunities-in-biological-science-careers-new-.pdf
November 23, 2016
Filetype: PDF
|
2168 views
system_update_alt
Download
subject
Read
0321432517-introduction-to-econometrics-brief-edition.pdf
October 26, 2016
Filetype: PDF
|
3024 views
system_update_alt
Download
subject
Read
8131204545-coulson-and-richardson-x27-s-chemical-engineerin-1.pdf
September 04, 2016
Filetype: PDF
|
1263 views
system_update_alt
Download
subject
Read
0974667005-libel-by-new-york-times.pdf
November 27, 2016
Filetype: PDF
|
2173 views
system_update_alt
Download
subject
Read
1412075505-diary-of-a-man-paperback.pdf
September 14, 2016
Filetype: PDF
|
2888 views
system_update_alt
Download
subject
Read
7546389283-genuine-teachers-x27-self-cultivation-books-lear.pdf
January 11, 2017
Filetype: PDF
|
1463 views
system_update_alt
Download
subject
Read
1783060263-secrets-of-the-paradox-solving-the-liar-and-othe.pdf
August 18, 2016
Filetype: PDF
|
1139 views
system_update_alt
Download
subject
Read
1481418432-katherines-story-1848.pdf
October 26, 2016
Filetype: PDF
|
3091 views
system_update_alt
Download
subject
Read
1910449067-fishnet.pdf
November 17, 2016
Filetype: PDF
|
3179 views
system_update_alt
Download
subject
Read
031034770X-survey-of-israel-x27-s-history-a.pdf
November 19, 2016
Filetype: PDF
|
1027 views
system_update_alt
Download
subject
Read
129525669X-house-hearing-109th-congress-to-prevent-certain-.pdf
December 12, 2016
Filetype: PDF
|
2231 views
system_update_alt
Download
subject
Read
150782825X-the-last-2000-years-was-the-great-tribulation-re.pdf
January 14, 2017
Filetype: PDF
|
2909 views
system_update_alt
Download
subject
Read
1498738494-mastering-the-five-tiers-of-audit-competency-the.pdf
September 07, 2016
Filetype: PDF
|
3084 views
system_update_alt
Download
subject
Read
1600341349-longing-for-you-paperback.pdf
October 31, 2016
Filetype: PDF
|
1617 views
system_update_alt
Download
subject
Read
7040168405-mental-health-education-student-book-paperback.pdf
November 18, 2016
Filetype: PDF
|
3168 views
system_update_alt
Download
subject
Read
0064405788-wringer-trophy-newbery.pdf
January 09, 2017
Filetype: PDF
|
1935 views
system_update_alt
Download
subject
Read
0340651407-zeus-perkins-and-the-exploding-planet-zptv.pdf
August 10, 2016
Filetype: PDF
|
1438 views
system_update_alt
Download
subject
Read
7513572224-national-college-german-professional-four-test-q.pdf
September 11, 2016
Filetype: PDF
|
513 views
system_update_alt
Download
subject
Read
1331696135-savannah-and-boston-account-of-the-supplies-sent.pdf
October 14, 2016
Filetype: PDF
|
2409 views
system_update_alt
Download
subject
Read
160746120X-don-t-just-sit-there-do-something-grief-s-wake-u.pdf
November 12, 2016
Filetype: PDF
|
1092 views
system_update_alt
Download
subject
Read
8187966793-global-nuclear-challenges-energy-proliferation-a.pdf
October 07, 2016
Filetype: PDF
|
788 views
system_update_alt
Download
subject
Read
1330859553-community-civics-classic-reprint-paperback.pdf
December 14, 2016
Filetype: PDF
|
2338 views
system_update_alt
Download
subject
Read
1489092099-criminal-psychology-format-audiobook-mp3.pdf
September 02, 2016
Filetype: PDF
|
3207 views
system_update_alt
Download
subject
Read
Other Files
description
1533224234-a-narrative-of-the-life-of-david-crockett-of-the-1.pdf
[47.96 KB]
description
0198486227-oxford-reading-tree-read-with-biff-chip-and-kipp-2.pdf
[47.96 KB]
description
0714839485-india-modern-traditional-forms-and-contemporary-.pdf
[47.96 KB]
description
7530375466-the-language-basics-eighth-grade-pep-wsd-chinese.pdf
[47.96 KB]
description
078603310X-creed-of-the-mountain-man.pdf
[47.96 KB]
description
014250050X-point-blank-alex-rider-series-2.pdf
[47.96 KB]
description
1471129861-bad-santas-disquieting-winter-folk-tales-for-gro.pdf
[47.96 KB]
description
0618040323-five-little-monkeys-with-nothing-to-do-paperback.pdf
[47.96 KB]
description
0521294878-textbook-of-disaster-psychiatry-paperback.pdf
[47.96 KB]
description
0711944571-6-chords-for-christmas-paperback.pdf
[47.96 KB]
description
0613272358-cranky-day-and-other-thomas-the-tank-engine-stor.pdf
[47.96 KB]
description
7541746967-why-do-thousands-of-interesting-questions-about--2.pdf
[47.96 KB]
description
030795031X-penelope-vintage-contemporaries.pdf
[47.96 KB]
description
0749040084-a-dirty-death.pdf
[47.96 KB]
description
1130014312-new-england-medical-monthly-volume-27-no-6-paper.pdf
[47.96 KB]
description
1856176347-the-finite-element-method-for-solid-and-structur.pdf
[47.96 KB]
description
0195679830-snapshots.pdf
[47.96 KB]
description
0141329823-the-wind-in-the-willows-hardback.pdf
[47.96 KB]
description
1553375947-first-phonics-kids-can-learn-with-franklin.pdf
[47.96 KB]
description
1331141397-bulletin-of-the-california-teachers-association-.pdf
[47.96 KB]
description
1848492561-specimen-aural-tests-grades-1-3-with-2-cds-from-.pdf
[47.96 KB]
description
704036767X-college-physics-experiment-teaching-demonstratio.pdf
[47.96 KB]
description
1118982630-trading-options-for-dummies.pdf
[47.96 KB]
description
0319242587-howgill-fells-amp-upper-eden-valley-may-2015-ed.pdf
[47.96 KB]
description
1130720055-humboldt-library-of-science-volume-8-paperback.pdf
[47.96 KB]
description
1472744241-acca-f7-financial-reporting-study-text.pdf
[47.96 KB]
description
1500575267-algebra-i-common-core-regents-course-workbook.pdf
[47.96 KB]
description
1507683715-the-hittites-the-history-and-legacy-of-the-bronz.pdf
[47.96 KB]
description
1518805299-the-old-nurse-s-story-paperback.pdf
[47.96 KB]
description
1477628789-the-science-of-tornadoes-understanding-weather-j.pdf
[47.96 KB]
description
0820704539-facing-nature-levinas-amp-environmental-thought.pdf
[47.96 KB]
description
1477491732-the-joy-of-teaching-reading-with-color-styles-fo-1.pdf
[47.96 KB]
description
0309076382-secret-agents-the-menace-of-emerging-infections.pdf
[47.96 KB]
description
1482772639-the-holy-war-made-by-shaddai-upon-diabolus-for-t.pdf
[47.96 KB]
description
8472105008-bona-lletra-3.pdf
[47.96 KB]
description
162153393X-mastering-the-business-of-photography-what-the-p.pdf
[47.96 KB]
description
0486997421-women-advertising-cuts-of-the-20s-and-30s-mixed-.pdf
[47.96 KB]
description
123660072X-informe-anual-del-secretario-de-justicia-al-gobe.pdf
[47.96 KB]
description
1118509935-islamic-banking-in-indonesia-new-perspectives-on.pdf
[47.96 KB]
description
1563086085-folktale-themes-and-activities-for-children-volu.pdf
[47.96 KB]
description
7119053108-high-school-physics-and-chemistry-students-formu.pdf
[47.96 KB]
description
1236011058-the-first-sixth-part-of-miscellany-poems-volume-.pdf
[47.96 KB]
description
1432762974-blurred-paperback.pdf
[47.96 KB]
description
7502944192-inner-mongolia-meteorological-disasters-and-thei.pdf
[47.96 KB]
description
1552857913-florida.pdf
[47.96 KB]
description
1503144208-internet-business-shortcuts-make-decent-money-on.pdf
[47.96 KB]
description
1405373490-mary-berry-x27-s-how-to-cook-easy-recipes-and-fo.pdf
[47.96 KB]
description
0471143235-physics-of-semiconductor-devices-3rd-ed.pdf
[47.96 KB]
description
1332342930-cotton-spinning-the-questions-set-at-the-may-exa.pdf
[47.96 KB]
description
1592123643-red-death-over-china-paperback.pdf
[47.96 KB]
description
0944475272-bluebird-rescue-a-harrowsmith-country-life-natur.pdf
[47.96 KB]
description
1234465205-theophron-oder-der-erfahrne-rathgeber-fur-die-un.pdf
[47.96 KB]
description
0071269339-advanced-financial-accounting-updated-edition.pdf
[47.96 KB]
description
1503203786-money-saving-tips-cut-unnecessary-spending-and-s.pdf
[47.96 KB]
description
034542252X-rose-paperback.pdf
[47.96 KB]
description
1502347946-botswana-in-depth-a-peace-corps-publication-pape.pdf
[47.96 KB]
description
1609052722-learn-a-language-flash-cards-animals.pdf
[47.96 KB]
description
0446534927-the-liar-in-your-life-the-way-to-truthful-relati.pdf
[47.96 KB]
description
1289245592-large-engine-technology-let-short-haul-civil-til.pdf
[47.96 KB]
description
0195076419-aids-epidemiology-a-quantitative-approach-monogr.pdf
[47.96 KB]
description
1511546662-recipe-book-blank-recipe-book-to-write-your-reci.pdf
[47.96 KB]
description
8131908046-evolution-of-homoeopathic-repertories-amp-repert.pdf
[47.96 KB]
description
0802413463-radical-prayer-the-power-of-being-bold-and-persi.pdf
[47.96 KB]
description
1846040140-iran-awakening-a-memoir-of-revolution-and-hope.pdf
[47.96 KB]
description
1409345084-maths-made-easy-decimals-ages-9-11-key-stage-2-a.pdf
[47.96 KB]
description
1496953045-otter-tales-paperback.pdf
[47.96 KB]
description
1514852136-a-journal-of-the-plague-year-1665-the-great-plag.pdf
[47.96 KB]
description
0217175007-ancient-symbol-worship-influence-of-the-phallic-.pdf
[47.96 KB]
description
1170221483-the-tryal-of-king-charles-i-of-ever-blessed-memo.pdf
[47.96 KB]
description
938115936X-financial-management-and-investment-decisions.pdf
[47.96 KB]
description
0007285922-the-courier.pdf
[47.96 KB]
description
7542229400-grade-on-the-language-2-pep-materials-analysis.pdf
[47.96 KB]
description
1515323870-classic-christmas-recipes-blank-recipe-book-pape.pdf
[47.96 KB]
description
8182901421-monuments-of-lucknow.pdf
[47.96 KB]
description
0263912086-the-ransomes-matt-nick-and-katherine.pdf
[47.96 KB]
description
1780720904-the-white-lie.pdf
[47.96 KB]
description
1500966932-juicing-detox-recipes-100-green-smoothie-recipes.pdf
[47.96 KB]
description
133208205X-the-inauguration-of-clifton-daggett-gray-as-pres.pdf
[47.96 KB]
description
1170184634-an-act-for-dividing-and-inclosing-the-open-and-c-8.pdf
[47.96 KB]
description
1591852900-descending-like-a-dove-the-truth-about-the-holy-.pdf
[47.96 KB]
description
0198302592-project-x-origins-lime-book-band-oxford-level-11-6.pdf
[47.96 KB]
description
1847622844-gcse-french-revision-guide-foundation.pdf
[47.96 KB]
description
1490225870-studyguide-for-new-foundations-in-therapeutic-ma-1.pdf
[47.96 KB]
description
1934030570-run-the-mind-body-method-of-running-by-feel.pdf
[47.96 KB]
description
1455855812-shadow-chaser-format-audiobook-cd-unabridged.pdf
[47.96 KB]
description
1404874178-messy-one-hardback.pdf
[47.96 KB]
description
0545594782-shoe-la-la.pdf
[47.96 KB]
description
1440190461-success-with-ethics-your-road-to-a-brighter-futu.pdf
[47.96 KB]
description
1535103426-fifty-shades-of-adult-coloring.pdf
[47.96 KB]
description
0760987890-ready-common-core-2014-english-language-arts-pra-1.pdf
[47.96 KB]
description
1416534741-kidnapped-enriched-classic.pdf
[47.96 KB]
description
1771430427-abr-you-can-read-adult-beginning-reader-program-.pdf
[47.96 KB]
description
1559360550-three-sisters-a-new-translation-paperback.pdf
[47.96 KB]
description
1594712115-ten-commandments-for-the-environment-pope-benedi.pdf
[47.96 KB]
description
0921912951-going-to-town-architectural-walking-tours-in-sou.pdf
[47.96 KB]
description
0701184884-cooking-with-coco-family-recipes-to-cook-togethe.pdf
[47.96 KB]
description
7508526406-genuine-books-9787508526409-dalai-lama-reincarna.pdf
[47.96 KB]
description
1844480054-card-and-thread-greetings-cards-handmade-greetin.pdf
[47.96 KB]
description
0892817976-chinese-massage-for-infants-and-children-traditi.pdf
[47.96 KB]
description
0415502306-performance-studies-an-introduction-hardback.pdf
[47.96 KB]
description
1591027586-it-happens-every-day-inside-the-world-of-a-sex-c.pdf
[47.96 KB]
description
0373772270-hawks-way-faron-garth-the-cowboy-and-the-princes.pdf
[47.96 KB]
description
1421534886-library-wars-love-amp-war-volume-1.pdf
[47.96 KB]
description
1330679245-the-american-encyclopaedia-of-commerce-manufactu.pdf
[47.96 KB]
description
1523993324-the-christian-and-money-paperback.pdf
[47.96 KB]
description
1849754241-fiona-beckett-x27-s-cheese-course-award-winning-.pdf
[47.96 KB]
description
1401950175-eliminating-stress-finding-inner-peace.pdf
[47.96 KB]
description
1429019891-the-laos-of-north-siam.pdf
[47.96 KB]
description
0113501013-ofsted-handbook-guidance-on-the-inspection-of-nu.pdf
[47.96 KB]
description
0582325269-cutting-edge-upper-intermediate-students-book.pdf
[47.96 KB]
description
1629143626-yoga-for-pregnancy-poses-meditations-and-inspira.pdf
[47.96 KB]
description
1614611890-studyguide-for-advanced-health-assessment-of-wom.pdf
[47.96 KB]
description
1236846583-the-reliquary-volume-5-paperback.pdf
[47.96 KB]
description
1511819642-you-can-get-pregnant-over-40-naturally-ii-overco.pdf
[47.96 KB]
description
111778763X-the-whole-booke-of-psalmes-collected-into-englis-2.pdf
[47.96 KB]
description
0793549361-50-years-movie-music-alto-sax-format-softcover.pdf
[47.96 KB]
description
0874413117-the-many-faces-of-judaism-orthodox-conservative-.pdf
[47.96 KB]
description
1289002355-employment-development-of-the-classification-sta.pdf
[47.96 KB]
description
0470721383-sex-stress-and-reproductive-success-paperback.pdf
[47.96 KB]
description
0840054777-microsoft-expression-web-3-comprehensive.pdf
[47.96 KB]
description
1236858824-musical-courier-volume-23.pdf
[47.96 KB]
description
0553286374-classic-stories-1-the-grand-master-editions-pape.pdf
[47.96 KB]
description
1743147449-baby-magic-mp3-audio-book.pdf
[47.96 KB]
description
1780044356-berlitz-language-cantonese-for-your-trip.pdf
[47.96 KB]
description
812033194X-financial-accounting-a-dynamic-approach.pdf
[47.96 KB]
description
0486634019-the-absolute-differential-calculus-calculus-of-t.pdf
[47.96 KB]
description
0521893097-antimatter-the-ultimate-mirror-paperback.pdf
[47.96 KB]
description
7512701888-genuine-national-women-x27-s-20th-anniversary-of.pdf
[47.96 KB]
description
0313268169-a-nathaniel-hawthorne-encyclopedia-hardback.pdf
[47.96 KB]
description
8492919000-los-fantasmas-de-belfast.pdf
[47.96 KB]
description
1400202426-nothing-is-impossible-a-women-of-faith-devotiona.pdf
[47.96 KB]
description
1447465601-the-jesuits-church-in-g-fantasy-and-horror-class.pdf
[47.96 KB]
description
0595170315-one-brief-shining-moment-1.pdf
[47.96 KB]
description
1782690751-fuzz-mcflops.pdf
[47.96 KB]
description
1847484352-essays-on-hindu-philosophy.pdf
[47.96 KB]
description
1852335734-essential-dreamweaver-reg-4-0-fast.pdf
[47.96 KB]
description
1236162994-scrap-book-recitation-series-volume-4-a-miscella.pdf
[47.96 KB]
description
1841123439-global-hr.pdf
[47.96 KB]
description
1503192849-the-anonymous-story-paperback.pdf
[47.96 KB]
description
1935588176-navigating-assessment-and-collaboration-with-the.pdf
[47.96 KB]
description
1236178564-the-reformed-presbyterian-and-covenanter-volume--3.pdf
[47.96 KB]
description
1483811212-academic-vocabulary-practice-grade-4.pdf
[47.96 KB]
description
1287245870-national-defense-military-and-federal-civilian-d.pdf
[47.96 KB]
description
0810837609-breaking-away-from-the-textbook-creative-ways-to.pdf
[47.96 KB]
description
0761528385-star-wars-episode-1-jedi-power-battles-prima-x27.pdf
[47.96 KB]
description
0761138005-guitars-a-celebration-of-pure-mojo.pdf
[47.96 KB]
description
8175965622-revise-igcse-business-studies.pdf
[47.96 KB]
description
1234320568-erbauliche-betrachtungen-uber-die-heiligen-zehn-.pdf
[47.96 KB]
description
0061451509-mom-x27-s-little-angel.pdf
[47.96 KB]
description
3640562038-the-representation-of-veblen-x27-s-concepts-from.pdf
[47.96 KB]
description
0767920112-the-butcher-of-beverly-hills-paperback.pdf
[47.96 KB]
description
1932841156-the-player-slayer-the-pocket-guide-to-jamming-th.pdf
[47.96 KB]
description
1331495423-tokens-of-the-divine-displeasure-in-the-late-con.pdf
[47.96 KB]
description
1288918917-the-sustainability-of-homeownership-factors-affe.pdf
[47.96 KB]
description
0981310400-no-canadian-experience-eh.pdf
[47.96 KB]
description
9812683852-berlitz-cairo-pocket-guide-berlitz-pocket-guide.pdf
[47.96 KB]
description
1530623715-how-to-become-a-modern-viking-a-man-s-guide-to-u.pdf
[47.96 KB]
description
1440193304-voices-of-our-veterans-honoring-the-war-veterans.pdf
[47.96 KB]
description
1331119286-protestants-from-france-in-their-english-home-cl.pdf
[47.96 KB]
description
1514842351-minecraft-diary-of-a-minecraft-adventure-book-1-.pdf
[47.96 KB]
description
9400794215-critical-analysis-of-science-textbooks-evaluatin.pdf
[47.96 KB]
description
1289861366-crs-report-for-congress-japan-u-s-relations-issu-16.pdf
[47.96 KB]
description
0538973021-man-sim-key-ortega-c21-mc-8e-by-lehman-gilbertso.pdf
[47.96 KB]
description
1494945711-a-problem.pdf
[47.96 KB]
description
0060571411-god-and-ronald-reagan-a-spiritual-life-1.pdf
[47.96 KB]
description
7500834764-wc-14-with-new-curriculum-classwork-mathematics-.pdf
[47.96 KB]
description
0764820729-c-atilde-mo-perdonar-a-los-dem.pdf
[47.96 KB]
description
0307460541-the-vintage-table-personal-treasures-and-standou.pdf
[47.96 KB]
description
1522909117-sally-dows-paperback.pdf
[47.96 KB]
description
080589814X-information-infrastructure-for-enterprise-coordi.pdf
[47.96 KB]
description
363932417X-annual-report-for-drinking-water-analysis-2009-l.pdf
[47.96 KB]
description
184794714X-superforecasting-the-art-and-science-of-predicti-3.pdf
[47.96 KB]
description
1130751244-the-register-of-the-kentucky-state-historical-so-5.pdf
[47.96 KB]
description
1610624041-kaffir-boy-shmoop-literature-guide.pdf
[47.96 KB]
description
1406328596-the-buttons-family-going-to-the-dentist.pdf
[47.96 KB]
description
1508806756-death-and-afterward-paperback-1.pdf
[47.96 KB]
description
123104828X-a-first-course-in-statistics-paperback.pdf
[47.96 KB]
description
1481413724-the-house.pdf
[47.96 KB]
description
8178242788-imagining-the-urban-sanskrit-and-the-city-in-ear.pdf
[47.96 KB]
description
0525951016-blank-spots-on-the-map-the-dark-geography-of-the.pdf
[47.96 KB]
description
1440063044-definite-medication-containing-therapeutic-facts.pdf
[47.96 KB]
description
1356915442-harvey-s-essentials-of-arithmetic-with-everyday--3.pdf
[47.96 KB]
description
2251799184-le-bien-et-le-mal-de-finibus-iii.pdf
[47.96 KB]
description
8177227424-comdex-computer-course-kit-windows-vista-with-of.pdf
[47.96 KB]
description
0062353942-crossing-the-chasm-marketing-and-selling-disrupt.pdf
[47.96 KB]
description
1461055245-this-is-our-time.pdf
[47.96 KB]
description
0812696727-led-zeppelin-and-philosophy.pdf
[47.96 KB]
description
1595722572-the-cats-of-mrs-calamari.pdf
[47.96 KB]
description
9814303305-carbon-based-superconductors-towards-high-tc-sup.pdf
[47.96 KB]
description
1478252154-neoexodus-a-house-divided-campaign-setting-paper.pdf
[47.96 KB]
description
1489080635-stumbling-stones-audio-book.pdf
[47.96 KB]
description
1236418999-unity-volume-21-paperback.pdf
[47.96 KB]
description
055327418X-startide-rising.pdf
[47.96 KB]
description
146691520X-in-my-mothers-arms-real-life-poetry.pdf
[47.96 KB]
description
1270444581-ada-j-vant-et-al-petitioners-v-mutual-benefit-li.pdf
[47.96 KB]
description
1522604200-the-magic-hunt.pdf
[47.96 KB]
description
0711991006-making-the-grade-grade-one-revised-edition-piano.pdf
[47.96 KB]
description
0595284116-the-many-faces-of-creation-a-history-of-mans-sea.pdf
[47.96 KB]
description
1130299961-the-life-and-works-of-alfred-lord-tennyson-volum-1.pdf
[47.96 KB]
description
117077718X-another-tongue-brought-in-to-confess-the-great-s.pdf
[47.96 KB]
description
0553493469-close-to-you-sweet-valley-high-senior-year-no-30.pdf
[47.96 KB]
description
3193710032-erste-hilfe-deutsch-x2f-erste-hilfe-deutsch-ausg.pdf
[47.96 KB]
description
0007358385-went-the-day-well-witnessing-waterloo.pdf
[47.96 KB]
description
0446509450-god-is-not-great.pdf
[47.96 KB]
description
0802429939-how-to-get-out-of-debt-and-into-praise.pdf
[47.96 KB]
description
0345498321-one-night-at-the-call-center-paperback.pdf
[47.96 KB]
description
1573354880-irish-cooking-classic-and-modern-recipes-x2f-eth.pdf
[47.96 KB]
description
1681790165-looking-for-trouble-the-adventures-of-the-george.pdf
[47.96 KB]
description
7542847910-save-the-small-black-chinese-edition.pdf
[47.96 KB]
description
1561012165-conflict-and-a-christian-life-spirituality-minis.pdf
[47.96 KB]
description
1478197927-the-chronicles-of-a-lost-soul-paperback.pdf
[47.96 KB]
description
1447262816-the-circus-of-adventure-new-ed.pdf
[47.96 KB]
description
1249123976-administration-and-management-strategic-plan-pap.pdf
[47.96 KB]
description
720906754X-9787209067546-linyi-a-university-based-teaching-.pdf
[47.96 KB]
description
0230241522-online-child-safety-law-technology-and-governanc.pdf
[47.96 KB]
description
0984243534-the-new-investor-s-guide-to-owning-a-mobile-home.pdf
[47.96 KB]
description
0395920744-the-americans-reconstruction-through-the-20th-ce-6.pdf
[47.96 KB]
description
0819490210-field-guide-to-image-processing.pdf
[47.96 KB]
description
3843037884-k-ouml-nig-richard-ii.pdf
[47.96 KB]
description
1515326454-recent-object-lessons-in-penal-science-with-a-bi.pdf
[47.96 KB]
description
0812977246-gorky-park-arkady-renko-no-1.pdf
[47.96 KB]
description
1931873321-arabic-in-10-minutes-a-day-paperback.pdf
[47.96 KB]
description
0415557534-learning-and-work-and-the-politics-of-working-li.pdf
[47.96 KB]
description
1330009487-recent-investigations-concerning-the-constitutio-1.pdf
[47.96 KB]
description
0517037858-the-personality-of-the-horse.pdf
[47.96 KB]
description
1593631057-math-warm-ups-developing-fluency-in-math-grade-4.pdf
[47.96 KB]
description
1500635839-history-of-the-conflict-between-religion-and-sci.pdf
[47.96 KB]
description
0741407477-memoirs-of-an-american-housewife-in-japan.pdf
[47.96 KB]
description
0006861725-the-later-roman-empire-paperback.pdf
[47.96 KB]
description
0349124396-a-grimm-warning.pdf
[47.96 KB]
description
1452633452-your-teacher-said-what-library-edition-defending.pdf
[47.96 KB]
description
1285081951-java-programming-paperback.pdf
[47.96 KB]
description
0764142275-essays-that-will-get-you-into-medical-school-ess.pdf
[47.96 KB]
description
0470540966-ipad-portable-genius.pdf
[47.96 KB]
description
0735202885-the-complete-home-health-advisor-instant-access-.pdf
[47.96 KB]
description
1479278912-the-mps-tales-enhanced-print.pdf
[47.96 KB]
description
0062059971-the-elite-the-selection.pdf
[47.96 KB]
description
1232378402-atlanta-university-publications-volume-5-paperba.pdf
[47.96 KB]
description
1235905276-removal-of-the-lighter-hydrocarbons-from-petrole.pdf
[47.96 KB]
description
1330118901-the-essentials-of-arithmetic-oral-and-written-vo.pdf
[47.96 KB]
description
3656884013-the-picture-of-dorian-gray-a-comparison-of-the-t.pdf
[47.96 KB]
description
1500776645-the-grey-brethren-and-other-fragments-in-prose-a.pdf
[47.96 KB]
description
2090338717-tests-d-x27-eacute-valuation-du-vocabulaire-prog.pdf
[47.96 KB]
description
1231230789-excerptum-totius-italicae-nec-non-helveticae-lit.pdf
[47.96 KB]
description
1849053677-personalised-learning-for-young-people-with-prof.pdf
[47.96 KB]
description
1287211194-va-and-dod-health-care-progress-made-on-implemen.pdf
[47.96 KB]


{% extends "learn/pages/level-1-base.html" %} {% import "partials/_utils.html" as utils %} {% block lhs_toc %} Table of contents
{% endblock %} {% block learn_content %}Ever wanted to learn to program but not sure where to begin? This class will help guide you through some topics you might learn about in a first semester CS course.
No prior programming experience required or expected.
At a minimum, you should install Python 3 and a text editor. If you're using a mac, there's a good chance you have these by default. Open a terminal (search for Terminal in finder) and type python3. If you don't get an error message, you have Python 3! For a text editor, I personally enjoy Atom, but there are many different options.
If you're on Windows, you will likely have to install these yourself. Check out the link above to install Python 3 and for a text editor, I highly recommend Notepad++, but again, there are many viable options.
1. Install a text editor
You only need to install one of these. I personally recommend Atom, but any one of them will work fine. Just take a look and choose the one you think looks best.
For Mac: Atom, Sublime Text 2 or 3, TextMate
For Windows: Notepad++, Crimson Editor, Sublime Text 2 or 3, Atom
2. Read this command line tutorial
Read this short tutorial: https://tutorial.djangogirls.org/en/intro_to_command_line/
Please note that even if you're on Windows, you should follow the instructions for OS X and Linux since you will be using powershell.
Again, if you're on Windows, you should follow the instructions for OS X and Linux since you will be using powershell.
For Mac: iTerm or Terminal (both already installed by default)
For Windows: powershell (already installed by default)
From now on, we will call the command line window "the terminal".
3. Install Python 3
There's a small chance that Python 3 may already installed on your machine. To test this, open Terminal on Mac (or powershell on Windows) and run python3
. If you see a message like "python3: command not found" you do not have it installed.
If it is not installed already, navigate to https://www.python.org/downloads/ and follow the instructions to install the latest version of Python 3 on your machine.
IMPORTANT: You will not be able to perform the exercises without this setup!
We will loosely follow the textbook "Think Python - How to Think Like a Computer Scientist"
It is available for free online: http://greenteapress.com/thinkpython2/thinkpython2.pdf
{% endblock %} {% block pagination_next %} {{ utils.paginate_next("level-1-lesson-1.html", msg="Lesson 1") }} {% endblock %}