MUMFORD RATING: 4 / 10 --> This movie sucks
For more reviews and movie screensavers, visit http://www.joblo.com/
Writer/director Lawrence Kasdan had a hand in penning some of the biggest film successes of the 1980s. Yes, that's right, he co-wrote RAIDERS OF THE LOST ARK (9/10), THE EMPIRE STRIKES BACK (8.5/10) and RETURN OF THE JEDI (8/10). Now with this film, it looks as though he has decided to test his skills at mediocre screenwriting and bland directing. And guess what? He succeeds once again!
PLOT: A man with a shady and regrettable past decides to run away and into a small American town, where he pretends to be a licensed psychologist to an open-armed swarm of people with problems. It isn't long before he befriends the small-town billionaire, folks become suspicious and he falls for one of his own patients.
CRITIQUE: This film is not a comedy! It is a drama. I say this right up front because from the looks of the trailer, you would think that this film secures its base in humor, but unfortunately for us, it does not. It is a serious film (seriously flawed if you ask me, but I digress) which offers a couple of witty quips to keep you awake, but overall, just sits there. Now on to my review.  I have no idea what Lawrence Kasdan was trying to accomplish with this picture, but whatever it was...he missed! Anyone without his name could never have made this film because it is an extremely generic puff-piece, which on a good day, might be described as predictably digestible. It's no wonder that the studio is trying to sell it as a comedy! It sucks as a drama, and bored my movie cohort right to sleep.
I've given it four points on four extremely shallow yet distinguishable marks. First of all, I couldn't help but think about how much the lead actor, Loren Dean, looked like a young Charles Grodin. He even acted like him, save for the dry, sardonic wit. This kept me interested in watching him at least. Number two, and this one is really shallow (seemed to be geared that way as well), there were quite a few "titshots", as they would say back in high school. And God help me if I can't get enough of those in an aimless drama. And three, and this one surprised me the most, actor Ted Danson's cameo (yes, he will always be Sam Malone to us real fans!) was the best part about this movie and actually made me see him as a different person.  If ever you rent this movie one day (promise you won't throw away your hard-earned money at the theaters?!), wait for his scene because it's actually pretty good. Other than that, drab, drab, drab and drab. Even Jason Lee, a personal favorite of mine, was left out to dry with lame dialogue and one of the phoniest romances to hit the big screen in a while. Well, at least he finally "came out" and did some real skateboarding in this movie! Oh yeah, and I guess that's the fourth point in my rating.
Anyway, if you enjoy watching boring patients babble on about their boring problems to an uninteresting psychologist...this film's your bag! Otherwise, skip it and see ANALYZE THIS (8/10) again...now there's a great shrink movie!
Little Known Facts about this film and its stars: "Three's Company" fans alert!!! Terri from the TV show, also known as actress Priscilla Barnes, plays a small but pivotal part as the landlady in this film. The scene is actually a fantasy sequence and does feature cleavage, so stay tuned, kids! Also, it is to note that the actress was once named "Penthouse Pet of the Month" in March of 1976. She was known as one Joann Witty back then. She's originally from Jersey.  You got me, but all I know is that he was born in Las Vegas in 1969 and played the character of Billy Bathgate in the 1991 film of the same name. Jason Lee was born in the state of California in the year of 1971. He was a professional skateboarder before his acting career took off after MALLRATS (6/10), and even owns his own skateboarding company called Stereo Manufacturing Corp. He's been in every Kevin Smith film except for CLERKS (8.5/10). Listen closely and you will hear the pharmacist in this film (the ballooning actor formerly known as Pruit Taylor Vince) make a reference to the "lost ark", which is obviously an in-joke, considering that it is the writer/director of this film, Lawrence Kasdan, who co-wrote RAIDERS OF THE LOST ARK (9/10). Kasdan also played the part of Dr. Green in 1997's AS GOOD AS IT GETS (8/10). Ted Danson also played the role of lawyer Peter Lowenstein in Kasdan's 1981 directorial debut BODY HEAT starring a sexy Kathleen Turner and William Hurt.
Review Date: September 22, 1999 Director: Lawrence Kasdan Writer: Lawrence Kasdan Producers: Lawrence Kasdan and Charles Okun Actors: Loren Dean as Mumford Hope Davis as Sofie Crisp Jason Lee as Skip Skipperton Genre: Drama Year of Release: 1999 --------------------------------------- JoBlo's Movie Emporium http://www.joblo.com --------------------------------------- (c) 1999 Berge Garabedian
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


This page was generated from docsrc/notebooks/spatialautocorrelation.ipynb. Interactive online version:
Exploratory Analysis of Spatial Data: Spatial Autocorrelation¶
In this notebook we introduce methods of exploratory spatial data analysis that are intended to complement geovizualization through formal univariate and multivariate statistical tests for spatial clustering.
Imports¶
[1]:
import esda
import pandas as pd
import geopandas as gpd
from geopandas import GeoDataFrame
import libpysal as lps
import numpy as np
import matplotlib.pyplot as plt
from shapely.geometry import Point
%matplotlib inline
Our data set comes from the Berlin airbnb scrape taken in April 2018. This dataframe was constructed as part of the GeoPython 2018 workshop by Levi Wolf and Serge Rey. As part of the workshop a geopandas data frame was constructed with one of the columns reporting the median listing price of units in each neighborhood in Berlin:
[2]:
gdf = gpd.read_file('data/berlin-neighbourhoods.geojson')
[3]:
bl_df = pd.read_csv('data/berlin-listings.csv')
geometry = [Point(xy) for xy in zip(bl_df.longitude, bl_df.latitude)]
crs = {'init': 'epsg:4326'}
bl_gdf = GeoDataFrame(bl_df, crs=crs, geometry=geometry)
[4]:
bl_gdf['price'] = bl_gdf['price'].astype('float32')
sj_gdf = gpd.sjoin(gdf, bl_gdf, how='inner', op='intersects', lsuffix='left', rsuffix='right')
median_price_gb = sj_gdf['price'].groupby([sj_gdf['neighbourhood_group']]).mean()
median_price_gb
[4]:
neighbourhood_group
Charlottenburg-Wilm. 58.556408
Friedrichshain-Kreuzberg 55.492809
Lichtenberg 44.584270
Marzahn - Hellersdorf 54.246754
Mitte 60.387890
Neukölln 45.135948
Pankow 60.282516
Reinickendorf 43.682465
Spandau 48.236561
Steglitz - Zehlendorf 54.445683
Tempelhof - Schöneberg 53.704407
Treptow - Köpenick 51.222004
Name: price, dtype: float32
[5]:
gdf = gdf.join(median_price_gb, on='neighbourhood_group')
gdf.rename(columns={'price': 'median_pri'}, inplace=True)
gdf.head(15)
[5]:
| neighbourhood | neighbourhood_group | geometry | median_pri | |
|---|---|---|---|---|
| 0 | Blankenfelde/Niederschönhausen | Pankow | (POLYGON ((13.411909 52.614871, 13.411826 52.6... | 60.282516 |
| 1 | Helmholtzplatz | Pankow | (POLYGON ((13.414053 52.549288, 13.414222 52.5... | 60.282516 |
| 2 | Wiesbadener Straße | Charlottenburg-Wilm. | (POLYGON ((13.307476 52.467882, 13.307434 52.4... | 58.556408 |
| 3 | Schmöckwitz/Karolinenhof/Rauchfangswerder | Treptow - Köpenick | (POLYGON ((13.709727 52.396299, 13.709263 52.3... | 51.222004 |
| 4 | Müggelheim | Treptow - Köpenick | (POLYGON ((13.737622 52.408498, 13.737734 52.4... | 51.222004 |
| 5 | Biesdorf | Marzahn - Hellersdorf | (POLYGON ((13.566433 52.535103, 13.566974 52.5... | 54.246754 |
| 6 | Nord 1 | Reinickendorf | (POLYGON ((13.336686 52.622651, 13.336632 52.6... | 43.682465 |
| 7 | West 5 | Reinickendorf | (POLYGON ((13.281381 52.59958, 13.281575 52.59... | 43.682465 |
| 8 | Frankfurter Allee Nord | Friedrichshain-Kreuzberg | (POLYGON ((13.453201 52.51682, 13.453212 52.51... | 55.492809 |
| 9 | Buch | Pankow | (POLYGON ((13.464495 52.650553, 13.464566 52.6... | 60.282516 |
| 10 | Kaulsdorf | Marzahn - Hellersdorf | (POLYGON ((13.621353 52.527041, 13.621956 52.5... | 54.246754 |
| 11 | None | None | (POLYGON ((13.616591 52.58154, 13.614579 52.58... | NaN |
| 12 | None | None | (POLYGON ((13.616681 52.57868, 13.607031 52.57... | NaN |
| 13 | nördliche Luisenstadt | Friedrichshain-Kreuzberg | (POLYGON ((13.444305 52.500656, 13.442658 52.5... | 55.492809 |
| 14 | Nord 2 | Reinickendorf | (POLYGON ((13.306802 52.586062, 13.30667 52.58... | 43.682465 |
We have an nan
to first deal with:
[6]:
pd.isnull(gdf['median_pri']).sum()
[6]:
2
[7]:
gdf['median_pri'].fillna((gdf['median_pri'].mean()), inplace=True)
[8]:
gdf.plot(column='median_pri')
[8]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f03d25dfbe0>
[9]:
fig, ax = plt.subplots(figsize=(12,10), subplot_kw={'aspect':'equal'})
gdf.plot(column='median_pri', scheme='Quantiles', k=5, cmap='GnBu', legend=True, ax=ax)
#ax.set_xlim(150000, 160000)
#ax.set_ylim(208000, 215000)
[9]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f03d0938b38>
Spatial Autocorrelation¶
Visual inspection of the map pattern for the prices allows us to search for spatial structure. If the spatial distribution of the prices was random, then we should not see any clustering of similar values on the map. However, our visual system is drawn to the darker clusters in the south west as well as the center, and a concentration of the lighter hues (lower prices) in the north central and south east.
Our brains are very powerful pattern recognition machines. However, sometimes they can be too powerful and lead us to detect false positives, or patterns where there are no statistical patterns. This is a particular concern when dealing with visualization of irregular polygons of differning sizes and shapes.
The concept of spatial autocorrelation relates to the combination of two types of similarity: spatial similarity and attribute similarity. Although there are many different measures of spatial autocorrelation, they all combine these two types of simmilarity into a summary measure.
Let’s use PySAL to generate these two types of similarity measures.
Spatial Similarity¶
We have already encountered spatial weights in a previous notebook. In spatial autocorrelation analysis, the spatial weights are used to formalize the notion of spatial similarity. As we have seen there are many ways to define spatial weights, here we will use queen contiguity:
[10]:
df = gdf
wq = lps.weights.Queen.from_dataframe(df)
wq.transform = 'r'
/home/serge/anaconda3/envs/esda/lib/python3.7/site-packages/libpysal/weights/weights.py:170: UserWarning: The weights matrix is not fully connected. There are 2 components
warnings.warn("The weights matrix is not fully connected. There are %d components" % self.n_components)
Attribute Similarity¶
So the spatial weight between neighborhoods \(i\) and \(j\) indicates if the two are neighbors (i.e., geographically similar). What we also need is a measure of attribute similarity to pair up with this concept of spatial similarity. The spatial lag is a derived variable that accomplishes this for us. For neighborhood \(i\) the spatial lag is defined as:
[11]:
y = df['median_pri']
ylag = lps.weights.lag_spatial(wq, y)
[12]:
ylag
[12]:
array([56.9625061 , 60.28251648, 56.37749926, 51.22200394, 51.22200394,
50.52180099, 43.6824646 , 45.63422012, 52.65491422, 60.28251648,
53.64180374, 52.73586273, 52.73586273, 56.47182541, 47.83247757,
58.58870177, 60.33520317, 59.60296903, 60.38788986, 60.02159348,
51.80624199, 57.94034958, 52.84482813, 53.40314266, 57.90522512,
60.28251648, 60.28251648, 55.79730334, 56.79401737, 50.81182589,
59.01427841, 60.29756982, 60.28251648, 50.86356888, 60.3220315 ,
60.28251648, 55.48057556, 54.42881557, 60.32466583, 59.50179418,
54.42846909, 58.55640793, 58.55640793, 57.73426285, 57.47818544,
57.74774106, 56.13040733, 48.23656082, 48.23656082, 53.74621709,
55.11957245, 45.95951271, 51.67650986, 54.1985906 , 51.45368042,
52.36880302, 54.44568253, 54.44568253, 50.84825389, 56.50104523,
53.92108345, 55.9956289 , 50.49590378, 49.14499828, 48.61369433,
49.70049 , 49.32550866, 51.22200394, 51.22200394, 47.80509822,
49.70049 , 51.22200394, 45.13594818, 47.57037048, 51.22200394,
51.22200394, 51.22200394, 51.22200394, 49.60257785, 51.57007762,
51.42743301, 51.22200394, 51.22200394, 52.43339348, 49.41551208,
51.58891296, 44.58427048, 51.58891296, 51.42743301, 49.82624902,
48.947686 , 48.40726217, 45.95951271, 47.57037048, 43.6824646 ,
47.02354965, 45.95951271, 58.55640793, 56.30865606, 58.09966066,
47.34497997, 46.40236028, 58.05298805, 59.24321365, 58.55640793,
47.83247757, 49.49497332, 50.74955784, 48.6149381 , 55.97644615,
57.95624052, 57.87081385, 58.75619634, 60.37283652, 48.23656082,
49.389711 , 54.00091705, 54.26036358, 57.54238828, 55.61980756,
51.97116137, 48.92101212, 50.97179985, 54.07504463, 47.45824547,
49.42017746, 45.13594818, 45.13594818, 48.61369433, 49.41551208,
51.22200394, 50.20766131, 48.72533471, 54.24675369, 54.24675369,
54.24675369, 53.23850377, 56.1851902 , 49.23337746, 43.6824646 ])
[13]:
import mapclassify as mc
ylagq5 = mc.Quantiles(ylag, k=5)
[14]:
f, ax = plt.subplots(1, figsize=(9, 9))
df.assign(cl=ylagq5.yb).plot(column='cl', categorical=True, \
k=5, cmap='GnBu', linewidth=0.1, ax=ax, \
edgecolor='white', legend=True)
ax.set_axis_off()
plt.title("Spatial Lag Median Price (Quintiles)")
plt.show()
The quintile map for the spatial lag tends to enhance the impression of value similarity in space. It is, in effect, a local smoother.
[15]:
df['lag_median_pri'] = ylag
f,ax = plt.subplots(1,2,figsize=(2.16*4,4))
df.plot(column='median_pri', ax=ax[0], edgecolor='k',
scheme="quantiles", k=5, cmap='GnBu')
ax[0].axis(df.total_bounds[np.asarray([0,2,1,3])])
ax[0].set_title("Price")
df.plot(column='lag_median_pri', ax=ax[1], edgecolor='k',
scheme='quantiles', cmap='GnBu', k=5)
ax[1].axis(df.total_bounds[np.asarray([0,2,1,3])])
ax[1].set_title("Spatial Lag Price")
ax[0].axis('off')
ax[1].axis('off')
plt.show()
However, we still have the challenge of visually associating the value of the prices in a neighborhod with the value of the spatial lag of values for the focal unit. The latter is a weighted average of homicide rates in the focal county’s neighborhood.
To complement the geovisualization of these associations we can turn to formal statistical measures of spatial autocorrelation.
Global Spatial Autocorrelation¶
We begin with a simple case where the variable under consideration is binary. This is useful to unpack the logic of spatial autocorrelation tests. So even though our attribute is a continuously valued one, we will convert it to a binary case to illustrate the key concepts:
Binary Case¶
[16]:
y.median()
[16]:
53.704407
[17]:
yb = y > y.median()
sum(yb)
[17]:
68
We have 68 neighborhoods with list prices above the median and 70 below the median (recall the issue with ties).
[18]:
yb = y > y.median()
labels = ["0 Low", "1 High"]
yb = [labels[i] for i in 1*yb]
df['yb'] = yb
The spatial distribution of the binary variable immediately raises questions about the juxtaposition of the “black” and “white” areas.
[19]:
fig, ax = plt.subplots(figsize=(12,10), subplot_kw={'aspect':'equal'})
df.plot(column='yb', cmap='binary', edgecolor='grey', legend=True, ax=ax)
[19]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f03c3d7deb8>
Join counts¶
One way to formalize a test for spatial autocorrelation in a binary attribute is to consider the so-called joins. A join exists for each neighbor pair of observations, and the joins are reflected in our binary spatial weights object wq
.
Each unit can take on one of two values “Black” or “White”, and so for a given pair of neighboring locations there are three different types of joins that can arise:
Black Black (BB)
White White (WW)
Black White (or White Black) (BW)
Given that we have 68 Black polygons on our map, what is the number of Black Black (BB) joins we could expect if the process were such that the Black polygons were randomly assigned on the map? This is the logic of join count statistics.
We can use the esda
package from PySAL to carry out join count analysis:
[20]:
import esda
yb = 1 * (y > y.median()) # convert back to binary
wq = lps.weights.Queen.from_dataframe(df)
wq.transform = 'b'
np.random.seed(12345)
jc = esda.join_counts.Join_Counts(yb, wq)
[[ 89.03626943<PHONE_NUMBER>7]
[ 89.96373057<PHONE_NUMBER>3]]
The resulting object stores the observed counts for the different types of joins:
[21]:
jc.bb
[21]:
164
[22]:
jc.ww
[22]:
149
[23]:
jc.bw
[23]:
73
Note that the three cases exhaust all possibilities:
[24]:
jc.bb + jc.ww + jc.bw
[24]:
386
and
[25]:
wq.s0 / 2
[25]:
386.0
which is the unique number of joins in the spatial weights object.
Our object tells us we have observed 121 BB joins:
[26]:
jc.bb
[26]:
164
The critical question for us, is whether this is a departure from what we would expect if the process generating the spatial distribution of the Black polygons were a completely random one? To answer this, PySAL uses random spatial permutations of the observed attribute values to generate a realization under the null of complete spatial randomness (CSR). This is repeated a large number of times (999 default) to construct a reference distribution to evaluate the statistical significance of our observed counts.
The average number of BB joins from the synthetic realizations is:
[27]:
jc.mean_bb
[27]:
90
which is less than our observed count. The question is whether our observed value is so different from the expectation that we would reject the null of CSR?
[28]:
import seaborn as sbn
sbn.kdeplot(jc.sim_bb, shade=True)
plt.vlines(jc.bb, 0, 0.075, color='r')
plt.vlines(jc.mean_bb, 0,0.075)
plt.xlabel('BB Counts')
[28]:
Text(0.5, 0, 'BB Counts')
The density portrays the distribution of the BB counts, with the black vertical line indicating the mean BB count from the synthetic realizations and the red line the observed BB count for our prices. Clearly our observed value is extremely high. A pseudo p-value summarizes this:
[29]:
jc.p_sim_bb
[29]:
0.001
Since this is below conventional significance levels, we would reject the null of complete spatial randomness in favor of spatial autocorrelation in market prices.
Continuous Case¶
The join count analysis is based on a binary attribute, which can cover many interesting empirical applications where one is interested in presence and absence type phenomena. In our case, we artificially created the binary variable, and in the process we throw away a lot of information in our originally continuous attribute. Turning back to the original variable, we can explore other tests for spatial autocorrelation for the continuous case.
First, we transform our weights to be row-standardized, from the current binary state:
[30]:
wq.transform = 'r'
[31]:
y = df['median_pri']
Moran’s I is a test for global autocorrelation for a continuous attribute:
[32]:
np.random.seed(12345)
mi = esda.moran.Moran(y, wq)
mi.I
[32]:
0.6563069331329718
Again, our value for the statistic needs to be interpreted against a reference distribution under the null of CSR. PySAL uses a similar approach as we saw in the join count analysis: random spatial permutations.
[33]:
import seaborn as sbn
sbn.kdeplot(mi.sim, shade=True)
plt.vlines(mi.I, 0, 1, color='r')
plt.vlines(mi.EI, 0,1)
plt.xlabel("Moran's I")
[33]:
Text(0.5, 0, "Moran's I")
Here our observed value is again in the upper tail, although visually it does not look as extreme relative to the binary case. Yet, it is still statistically significant:
[34]:
mi.p_sim
[34]:
0.001
Local Autocorrelation: Hot Spots, Cold Spots, and Spatial Outliers¶
In addition to the Global autocorrelation statistics, PySAL has many local autocorrelation statistics. Let’s compute a local Moran statistic for the same d
[35]:
np.random.seed(12345)
import esda
[36]:
wq.transform = 'r'
lag_price = lps.weights.lag_spatial(wq, df['median_pri'])
[37]:
price = df['median_pri']
b, a = np.polyfit(price, lag_price, 1)
f, ax = plt.subplots(1, figsize=(9, 9))
plt.plot(price, lag_price, '.', color='firebrick')
# dashed vert at mean of the price
plt.vlines(price.mean(), lag_price.min(), lag_price.max(), linestyle='--')
# dashed horizontal at mean of lagged price
plt.hlines(lag_price.mean(), price.min(), price.max(), linestyle='--')
# red line of best fit using global I as slope
plt.plot(price, a + b*price, 'r')
plt.title('Moran Scatterplot')
plt.ylabel('Spatial Lag of Price')
plt.xlabel('Price')
plt.show()
Now, instead of a single \(I\) statistic, we have an array of local \(I_i\) statistics, stored in the .Is
attribute, and p-values from the simulation are in p_sim
.
[38]:
li = esda.moran.Moran_Local(y, wq)
/home/serge/Dropbox/p/pysal/src/subpackages/esda/esda/moran.py:886: RuntimeWarning: invalid value encountered in true_divide
self.z_sim = (self.Is - self.EI_sim) / self.seI_sim
/home/serge/anaconda3/envs/esda/lib/python3.7/site-packages/scipy/stats/_distn_infrastructure.py:901: RuntimeWarning: invalid value encountered in greater
return (a < x) & (x < b)
/home/serge/anaconda3/envs/esda/lib/python3.7/site-packages/scipy/stats/_distn_infrastructure.py:901: RuntimeWarning: invalid value encountered in less
return (a < x) & (x < b)
/home/serge/anaconda3/envs/esda/lib/python3.7/site-packages/scipy/stats/_distn_infrastructure.py:1807: RuntimeWarning: invalid value encountered in greater_equal
cond2 = (x >= _b) & cond0
[39]:
li.q
[39]:
array([1, 1, 1, 3, 3, 4, 3, 3, 4, 1, 1, 3, 3, 1, 3, 1, 1, 1, 1, 1, 4, 1,
1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 3, 3, 1, 1, 4, 1, 1, 1, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 1, 1, 1, 3, 3, 4, 3, 1,
1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 4, 3, 4, 1, 3, 3, 3, 3, 3, 4, 3, 3,
4, 1, 1, 1, 1, 2, 3, 3])
We can again test for local clustering using permutations, but here we use conditional random permutations (different distributions for each focal location)
[40]:
(li.p_sim < 0.05).sum()
[40]:
63
We can distinguish the specific type of local spatial association reflected in the four quadrants of the Moran Scatterplot above:
[41]:
sig = li.p_sim < 0.05
hotspot = sig * li.q==1
coldspot = sig * li.q==3
doughnut = sig * li.q==2
diamond = sig * li.q==4
[42]:
spots = ['n.sig.', 'hot spot']
labels = [spots[i] for i in hotspot*1]
[43]:
df = df
from matplotlib import colors
hmap = colors.ListedColormap(['red', 'lightgrey'])
f, ax = plt.subplots(1, figsize=(9, 9))
df.assign(cl=labels).plot(column='cl', categorical=True, \
k=2, cmap=hmap, linewidth=0.1, ax=ax, \
edgecolor='white', legend=True)
ax.set_axis_off()
plt.show()
[44]:
spots = ['n.sig.', 'cold spot']
labels = [spots[i] for i in coldspot*1]
[45]:
df = df
from matplotlib import colors
hmap = colors.ListedColormap(['blue', 'lightgrey'])
f, ax = plt.subplots(1, figsize=(9, 9))
df.assign(cl=labels).plot(column='cl', categorical=True, \
k=2, cmap=hmap, linewidth=0.1, ax=ax, \
edgecolor='white', legend=True)
ax.set_axis_off()
plt.show()
[46]:
spots = ['n.sig.', 'doughnut']
labels = [spots[i] for i in doughnut*1]
[47]:
df = df
from matplotlib import colors
hmap = colors.ListedColormap(['lightblue', 'lightgrey'])
f, ax = plt.subplots(1, figsize=(9, 9))
df.assign(cl=labels).plot(column='cl', categorical=True, \
k=2, cmap=hmap, linewidth=0.1, ax=ax, \
edgecolor='white', legend=True)
ax.set_axis_off()
plt.show()
[48]:
spots = ['n.sig.', 'diamond']
labels = [spots[i] for i in diamond*1]
[49]:
df = df
from matplotlib import colors
hmap = colors.ListedColormap(['pink', 'lightgrey'])
f, ax = plt.subplots(1, figsize=(9, 9))
df.assign(cl=labels).plot(column='cl', categorical=True, \
k=2, cmap=hmap, linewidth=0.1, ax=ax, \
edgecolor='white', legend=True)
ax.set_axis_off()
plt.show()
[50]:
sig = 1 * (li.p_sim < 0.05)
hotspot = 1 * (sig * li.q==1)
coldspot = 3 * (sig * li.q==3)
doughnut = 2 * (sig * li.q==2)
diamond = 4 * (sig * li.q==4)
spots = hotspot + coldspot + doughnut + diamond
spots
[50]:
array([1, 1, 0, 0, 0, 0, 3, 3, 0, 1, 0, 3, 3, 0, 3, 1, 1, 1, 1, 1, 0, 1,
0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1,
1, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 3, 0,
0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
0, 0, 0, 3, 3, 3, 3, 3, 3, 1, 0, 1, 3, 3, 1, 1, 1, 0, 0, 0, 3, 0,
1, 1, 1, 1, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 3, 3, 3, 0, 0, 0,
4, 0, 0, 0, 0, 0, 0, 3])
[51]:
spot_labels = [ '0 ns', '1 hot spot', '2 doughnut', '3 cold spot', '4 diamond']
labels = [spot_labels[i] for i in spots]
[52]:
from matplotlib import colors
hmap = colors.ListedColormap([ 'lightgrey', 'red', 'lightblue', 'blue', 'pink'])
f, ax = plt.subplots(1, figsize=(9, 9))
df.assign(cl=labels).plot(column='cl', categorical=True, \
k=2, cmap=hmap, linewidth=0.1, ax=ax, \
edgecolor='white', legend=True)
ax.set_axis_off()
plt.show()


Rampfox Repo
Rampfox repo
is a private Cydia repository
Add to Cydia
Featured Packages
in-App purchase
This is a package for buy iAP things, just tap buy and CANCEL IT
some might not working
compatible for iOS 11.x ~ 12.x
More info
Instagram++
Instagram++
Need uasharedtools
compatible for iOS 11.x ~ 12.x
More info
crackplus ++
crack for unlimapps tweaks
More info


Ocala events
-
spunky angels melanie peachyforum
Las Vegas Fire Station 5 - Las Vegas, Nevada
Las Vegas Fire Station 5 General Information: 1020 Hinson St Las Vegas, NV 89107 Dial 911 for emergencies! www.lasvegasnevada.gov/Government/fire.htm .
http://wikimapia.org/13945671/Las-Vegas-Fire-Station-5City of Las Vegas Fire Station Number 5, NV
City of Las Vegas Fire Station Number 5, Nevada - Area map, satellite view, local search, photos, videos, traffic, bike trails, weather and street views (where .
http://itouchmap.com/?d=2473008&s=NV&f=buildingFire and Rescue (Official City of Las Vegas Web Site)
General information about Las Vegas Fire & Rescue · Frequently Asked Questions . Classes; Schedule tours of fire stations and speakers, and coordinate fire truck visits . Las Vegas, NV 89101. Phone:<PHONE_NUMBER>. Fax: (<PHONE_NUMBER>. E-mail. Business Hours: Monday to Thursday 8 a.m. to 5:00 p.m., CLOSED Friday .
http://www.lasvegasnevada.gov/government/fire.htm
home Upcoming events in Ocala
seige of darkness drizzt Hottest Tickets
-
Apr 11indian river mi denise grabowski
Amway Center -
Apr 28blackbeard's house in elizabeth city nc
Amway Center -
Jun 25the cliffs in princville hawaii
Bob Carr Performing Arts Center -
Mar 30fairbanks-morse engine weights what
Amway Center -
Aug 27marion county georgia tax assessment
Amway Center -
Jun 21newcastle amsterdam cheap flights
Amway Center -
Sep 13c bickham dickson park
Francis Field -
Mar 17imperial university glen walington
St Augustine Amphitheatre -
Oct 8gamble roof garage plans
Amway Center -
May 4green river community college stress management
Bob Carr Performing Arts Center
Ocala's best venues
-
Las Vegas Fire & Rescue - City of Las Vegas
(702) 383-2888<EMAIL_ADDRESS>. 5. Respect We treat other as we want to be treated; we comply with our policies and . 18 Fire Stations .
http://www.lasvegasnevada.gov/files/Fire_General_Info.pdf -
Fire Station 66 Clark County - Mountain Edge - Las Vegas, NV
36 visitors have checked in at Fire Station 66 Clark County. See photos . 7929 Mountains Edge Pkwy (Buffalo), Las Vegas, NV 89178 . 5:00 AM9:00 AM. Fri .
https://foursquare.com/v/fire-station-66-clark-county/4dd951ac45ddced820b4ee03 -
Las Vegas and Nevada News - 8 News NOW
Latest local news for Las Vegas and Nevada, I-Team investigative reports, Las Vegas gaming news, green . A propane truck crashed into a ravine on Lake Mead Boulevard near Pabco Road, Clark County fire officials said. . Updated: Mar 11, 2013 5:50 PM PDT . KLAS-TV Station Profile and Public Inspection Files .
http://www.8newsnow.com/Global/category.asp?C=5548&nav=menu102_2the value of visual arts education
98 people's favorite
-
Fire Department - City of North Las Vegas, Nevada
Jul 2, 2012 . North Las Vegas, Nevada 89030. Office<PHONE_NUMBER>. Fax<PHONE_NUMBER>. Hours of Operations: Monday - Thursday 7:00AM - 5:00PM. Fire .
https://www.cityofnorthlasvegas.com/Departments/Fire/Fire.shtm -
Las Vegas Fire Rescue Station 6 - Westside - Las Vegas, NV
Jan 7, 2012 . 2 Reviews of Las Vegas Fire Rescue Station 6 "This is THE place to call . http:// www.lasvegasnevada.gov/Gove . Useful; Funny (5); Cool .
http://www.yelp.com/biz/las-vegas-fire-rescue-station-6-las-vegas


PICKUP
Section: Maintenance Commands (8)Index Return to Main Contents
NAME
pickup - Postfix local mail pickupSYNOPSIS
pickup [generic Postfix daemon options]
DESCRIPTION
The pickup(8) daemon waits for hints that new mail has been dropped into the maildrop directory, and feeds it into the cleanup(8) daemon. Ill-formatted files are deleted without notifying the originator. This program expects to be run from the master(8) process manager.STANDARDS
None. The pickup(8) daemon does not interact with the outside world.
SECURITY
The pickup(8) daemon is moderately security sensitive. It runs with fixed low privilege and can run in a chrooted environment. However, the program reads files from potentially hostile users. The pickup(8) daemon opens no files for writing, is careful about what files it opens for reading, and does not actually touch any data that is sent to its public service endpoint.
DIAGNOSTICS
Problems and transactions are logged to syslogd(8).BUGS
The pickup(8) daemon copies mail from file to the cleanup(8) daemon. It could avoid message copying overhead by sending a file descriptor instead of file data, but then the already complex cleanup(8) daemon would have to deal with unfiltered user data.CONFIGURATION PARAMETERS
As the pickup(8) daemon is a relatively long-running process, up to an hour may pass before a main.cf change takes effect. Use the command "postfix reload" command to speed up a change.
The text below provides only a parameter summary. See postconf(5) for more details including examples.
CONTENT INSPECTION CONTROLS
- content_filter (empty)
- The name of a mail delivery transport that filters mail after it is queued.
- receive_override_options (empty)
- Enable or disable recipient validation, built-in content filtering, or address mapping.
MISCELLANEOUS CONTROLS
- config_directory (see 'postconf -d' output)
- The default location of the Postfix main.cf and master.cf configuration files.
- ipc_timeout (3600s)
- The time limit for sending or receiving information over an internal communication channel.
- line_length_limit (2048)
- Upon input, long lines are chopped up into pieces of at most this length; upon delivery, long lines are reconstructed.
- max_idle (100s)
- The maximum amount of time that an idle Postfix daemon process waits for an incoming connection before terminating voluntarily.
- max_use (100)
- The maximal number of incoming connections that a Postfix daemon process will service before terminating voluntarily.
- process_id (read-only)
- The process ID of a Postfix command or daemon process.
- process_name (read-only)
- The process name of a Postfix command or daemon process.
- queue_directory (see 'postconf -d' output)
- The location of the Postfix top-level queue directory.
- syslog_facility (mail)
- The syslog facility of Postfix logging.
- syslog_name (see 'postconf -d' output)
- The mail system name that is prepended to the process name in syslog records, so that "smtpd" becomes, for example, "postfix/smtpd".
SEE ALSO
cleanup(8), message canonicalization sendmail(1), Sendmail-compatible interface postdrop(1), mail posting agent postconf(5), configuration parameters master(5), generic daemon options master(8), process manager syslogd(8), system logging
LICENSE
The Secure Mailer license must be distributed with this software.
AUTHOR(S)
Wietse Venema IBM T.J. Watson Research P.O. Box 704 Yorktown Heights, NY 10598, USA
Index
- NAME
- SYNOPSIS
- DESCRIPTION
- STANDARDS
- SECURITY
- DIAGNOSTICS
- BUGS
- CONFIGURATION PARAMETERS
- CONTENT INSPECTION CONTROLS
- MISCELLANEOUS CONTROLS
- SEE ALSO
- LICENSE
- AUTHOR(S)
This document was created by man2html, using the manual pages.
Time: 05:34:28 GMT, December 24, 2015


| Introduction | |
|---|---|
|
shellUnit is a unit-test framework for bash-style and csh-style shells. It provides a way to separate the tests from the scripts, test functions main procedure and code blocks from a shell script. |
|
|
A set os exaples will we shown now. This document is automatically generated by the mkdoc.sh script in the documents directory so commands and outputs match. |
|
| Sample | |
|
A test script is a plain shell script with a few characteristics. Test functions are declared csh-style and start with 'test', also, to be recogniced by automatic directory testing, its extension must be '.shu' |
|
| Running | |
|
To execute a test file we use the 'shu' command. It needs at least one parameter, indicating either a test file: |
|
|
# shu sample-01.shu |
|
|
Or a directory containing various .shu files |
|
|
# shu ./sample-dir/ |
|
| Targetting | |
|
To provide a target we use the 'shu_loadTarget' function which as a parameter has the path to the shell script to be tested. At pressent, loading a target executes its 'main' procedure (all commands not in a function) so be careful with that. |
|
|
The sample target file: |
|
|
The output of shu ./sample-02/ |
|
|
The test asserts that 'a_function' will echo the string 'TEST'. shellUnit provides many assertions for different situations. here is a test using all the 'basic' asserts. |
|
|
The result of executing this test file is: |
|
|
shellUnit works as a preprocessor for test files. This means that to provide meaningful messages and dispatch tests it reads a test file and its targets and produces a single shell script which is executed. Because of that, some variables won't be accesible from a shell script, most notably the return-value variable$?. To access the return value, the SHU_RV variable is provided. |
|
|
Executing the test will yield the following output. Notice that an assert, wether failed or not, will print the line it is located preceded by an '@', and if failed, a reason why will be provided. Also, any function not starting with 'test' will be ignored by shellUnit, this way we can make self-contained tests if wanted. |
|
|
For testing the 'main' function, as if we called the script from the shell, shellUnit provided the 'shu_main' function, which will behave like the shell script. |
|
| Results | |
|
shellUnit results can be formatted in different ways, the results shown so far being the default output formatter. So far, all samples were using the default 'pretty' formatter. |
|
|
The 'raw' output formatter present the test result as CSV. Raw output can be activated by passing the --raw option to shellUnit. This format is intended to be used by other programs as its input. It provides various information about the tests and asserts being run. |
|
|
An example of the raw output, using the basic asserts files: |
|
|
# shu --raw basic-asserts.shu |
|
|
The CSV format is not yet frozen so no information on what each column is will be provided until then. |
|
| Setup/Teardown | |
|
Test scripts may optionally have a 'setup' and 'teardown' function, which will be executed before and after every test respectively. |
|
| Groups | |
| Parametrizing |


1
Toggle Navigation
Home
Games
Wheel
Let the Wheel Decide Your Game or Prompt!
Make your selection, press the "Spin" button, and play!
Wheel Type
Players
1
2
3
4
5+
Prompts
Things
Locations
Occupations
Relationships


Welcome to the smallest Pizza Company
Choose the pizza you would like :
Pizza :
Cheese
Pepperoni
Size :
small
medium
large
Submit
Your choice :
at $
.


Celebrity Dead or Alive is brought to you by talented students at Lambda School.
Replace with relevant info
Veterinary Assistant turned Full-stack Web Developer, learning to code 1 div at a time.
Travel blogger turned software development student in Atlanta. She splits her time between work, Lambda School, and planning her next adventure! Former Lambda School Team lead and now part of the WP Tasty Support team, helping customers with technical issues.
Born and raised in Albuquerque, New Mexico. 18 Yrs old. Aspiring web developer currently attending lambda school and employed with Active Life Orthotics and prosthetics.
Web Developer in training. Passion for technology and working with people.
Aspiring web developer and code cruncher.


Bench Configuration
Select a bench configuration
Devices
Procedure
Select a section
Select an action
Give this run a name (Defaults to date/time)
Start
Procedure state
Status:
Ready
Section:
None
Action:
None
Troubleshooting
Action isn't starting?
Reset
Results
Select a run name to filter the results
Clear


Welcome to KivEnt’s documentation!¶
If you are just starting you may be interested in the tutorials.
KivEnt is a framework for building performant, dynamic real-time scenes in Kivy. While not as powerful as something like the Unreal engine or Unity3d, KivEnt is capable of creating games that handle several thousands to tens of thousands of entities, depending on what type of processing we are doing on them. You can easily have a hundreds thousand static sprites rendered in the background if they do not have any dynamic processing. At the same time, almost the entire API is accessible through Python, with a more performant cythonic API for those looking to get closer to the metal. Even without creating any cython gamesystems, you ought to be able to create games that feature up to several thousand game objects at once.
The only dependency for the kivent_core module is Kivy itself. Additional modules may have other requirements, such as kivent_cymunk module being based on Chipmunk2d and its cymunk wrapper.
An entity-component architecture is used to control game object state and the logic of processing the game objects. This means that your game objects will be made up of collections of independent components that stricly hold data; each component corresponds to a GameSystem that will perform all data processing on the components, in the update loop each frame, and as a result of user interaction or other programmaticaly generated events. All memory for the built-in components is allocated statically: if you would like learn more about memory management, read here.
KivEnt is built with a modular architecture and designed to have both a python api and a c-level cython api that allows more performant access to your game data. This makes it suitable for quickly prototyping a mechanic completely in python, and relatively trivial to then deeply cythonize that GameSystem if you find it to be performance sensitive. This process has already been done for the built-in components meaning they are ready for you to build new, performant game systems on top of them.


Custom Challenge Coins
Get your free quote in minutes.
Built to last a lifetime.
Our quality challenge coins are produced with industry-leading techinques. Veterans and collectors alike love our products for their authenticity.
We use 100% stainless steel molds, and individually print each coin. Decades of experience in both lapel pins and challenge coins allows us to ship your order with both quality & speed.
Our designers are ready to make your challenge coin.
Your free art proof is just a few clicks away. Get started by filling out our Free Quote Request.
Challenge Coin Plating Options
Custom Edges
Add-Ons and Extras
Pricing Table
Colorless Coin Pricing
| Size | 50 | 100 | 300 | 500 | 1000 | 2000 |
|---|---|---|---|---|---|---|
| 1.5" | $4.85 | $2.96 | $2.50 | $2.44 | $2.40 | $2.35 |
| 1.75" | $5.35 | $3.22 | $2.80 | $2.73 | $2.70 | $2.64 |
| 2.0" | $5.80 | $3.52 | $3.06 | $2.97 | $2.94 | $2.88 |
| 2.25" | $6.85 | $4.37 | $3.69 | $3.49 | $3.42 | $3.37 |
| 2.5" | $7.26 | $4.95 | $3.95 | $3.91 | $3.75 | $3.70 |
| 2.75" | $8.29 | $5.66 | $5.10 | $4.88 | $4.66 | $4.61 |
| 3.0" | $9.19 | $6.37 | $6.25 | $5.86 | $5.53 | $5.48 |
Single Side Color
| Size | 50 | 100 | 300 | 500 | 1000 | 2000 |
|---|---|---|---|---|---|---|
| 1.5" | $5.25 | $3.17 | $2.73 | $2.68 | $2.63 | $2.58 |
| 1.75" | $5.83 | $3.49 | $3.13 | $3.07 | $3.03 | $2.97 |
| 2.0" | $6.40 | $3.93 | $3.54 | $3.49 | $3.40 | $3.37 |
| 2.25" | $7.22 | $4.63 | $4.21 | $4.18 | $4.13 | $4.08 |
| 2.5" | $8.24 | $5.66 | $5.20 | $4.70 | $5.25 | $4.33 |
| 2.75" | $8.97 | $6.11 | $5.78 | $5.41 | $5.15 | $5.10 |
| 3.0" | $9.95 | $6.45 | $6.34 | $6.09 | $5.90 | $5.85 |
Double Sided Color
| Size | 50 | 100 | 300 | 500 | 1000 | 2000 |
|---|---|---|---|---|---|---|
| 1.5" | $5.58 | $3.39 | $3.00 | $2.93 | $2.85 | $2.80 |
| 1.75" | $6.32 | $3.85 | $3.46 | $3.42 | $3.37 | $3.32 |
| 2.0" | $7.05 | $4.29 | $3.97 | $3.92 | $3.87 | $3.82 |
| 2.25" | $7.67 | $4.85 | $4.51 | $4.45 | $4.38 | $4.33 |
| 2.5" | $8.61 | $5.75 | $5.41 | $5.29 | $5.28 | $5.23 |
| 2.75" | $9.51 | $6.32 | $6.00 | $5.77 | $5.62 | $5.57 |
| 3.0" | $10.56 | $6.88 | $6.59 | $6.22 | $5.98 | $5.93 |
3D Mold Fees
| Size | Single Sided Coin | Double Sided Coin | 300+ Order Quantity |
|---|---|---|---|
| 1.5" | $50.00 | $100.00 | Free |
| 1.75" | $62.50 | $125.00 | Free |
| 2.0" | $75.00 | $150.00 | Free |
| 2.25" | $87.50 | $175.00 | Free |
| 2.5" | $100.00 | $200.00 | Free |
| 2.75" | $112.50 | $225.00 | Free |
| 3.0" | $125.00 | $250.00 | Free |
Crafted with Pride & Tradition.
The challenge coin is rooted in military tradition, providing a keepsake for brave individuals to reminisce on
the important events they were a part of: joining a unit, completing parts of training, or any other special
occasion.
These coins
have a long and rich history that makes them the perfect gift of commemoration in our everyday lives.
We create custom coins for veterans, law enforcement, and more.


MessagingService class
The MessagingService
is the facade to send any kind of message.
Developer should use only MessagingService.send()
method.
The actual work is then internally delegated to sender implementations
and template engine integrations that is not visible by the developer.
Even if internal implementations are not visible to the developer,
Ogham behavior is fully adaptable thanks to Builder
classes.
Builder classes
Ogham is fully configurable and extensible.
To adapt the behavior to the application needs, Ogham
provides Builder
classes. Their purpose is to separate the concerns:
-
Implementations are simple and do the actual work.
-
Builders create implementation instances according to the application needs.
Builders hide complexity by offering methods that simplifies the construction of the implementations.
This follows the builder design pattern principles.
MessagingConfigurer classes
A MessagingConfigurer
is responsible to provide the best behavior by default.
Each MessagingConfigurer
calls the Builder
methods to configure implementations
to provide a consistent behavior. They also register configuration properties that
can be configured externally by the developer to adapt the default behavior.
Each MessagingConfigurer
may be automatically found and registered by Ogham using
@ConfigurerFor
annotation. If the automatic class scanning is not enabled,
each MessagingConfigurer
can be registered manually.
MessagingConfigurer
classes are central for the automatic configuration.
MessagingBuilder
The purpose of MessagingBuilder
is to provide to the developer a single entrypoint to
configure and get a MessagingService
instance. MessagingBuilder
can automatically scan classpath to find MessagingConfigurer
classes and
instantiate them.
MessagingBuilder
provides static methods to ease MessagingBuilder
creation and automatic registration:
-
MessagingBuilder.empty()
methods: Instantiate aMessagingBuilder
with no auto-configuration at all (no class scanning to discoverMessagingConfigurer
classes). -
MessagingBuilder.minimal()
methods: Instantiate aMessagingBuilder
that runs classpath scanning to findMessagingConfigurer
classes that are annotated with@ConfigurerFor
annotation. OnlyMessagingConfigurer
classes that targetminimal
static factory are instantiated. This is useful to benefit for general Ogham behavior and features (such as template engines, automatic mimetype detection, auto-filling of messages, …). Sender implementations are not automatically registered yet. -
MessagingBuilder.standard()
methods: Instantiate aMessagingBuilder
that runs classpath scanning to findMessagingConfigurer
classes that are annotated with@ConfigurerFor
annotation. OnlyMessagingConfigurer
classes that targetstandard
static factory are instantiated. All Ogham features are registered including all available sender implementations.
|
A |


Language
English
Nederlands
Francais
Your browser does not support HTML5 video.
Other quote?
Contact


There are two ways to reanalyze previously acquired holdup measurements.
One is by selecting Acquire | Holdup, and then selecting “Database” as the data source. If you do this, only the raw data from the original measurement will be used, and all the parameters currently in effect, for example calibration, background, detector, etc., will be used to analyze the data and calculate a mass.
The other way is to use this feature by selecting Reanalyze | Holdup. Using this technique, you can analyze a previous measurement, and only change one or a few selected parameters. The parameters you can change are shown in the “Holdup Measurement Reanalysis” dialog box, and are material type (which would also affect the calibration), item id, stratum id, declared mass, normalization constant and error, comment, ending comment, isotopics and background. You can also choose whether to use the original calibration or the current calibration for the selected material type and analysis methods. You also have the option of creating a new measurement and saving the original, or overwriting the original measurement.


Secured Content
Spring Security Demo
User is Logged In
username
User is Logged Out
User Has Role Admin
User Has Role User


clear() # erase the canvas clear(all) # erase the canvas and reset drawing state clear(*grobs) # remove specific objects from the canvas
Erases any prior drawing to the canvas and can optionally reset the graphics state (transform, colors, and compositing) when called with the all
argument. Calling clear() with one or more references to previously-drawn objects will remove just those objects without otherwise affecting the drawing state.
r = rect(0,0, 100,10) # add a rectangle t = poly(50,50, 25) # add a square c = arc(125,125, 50) # add a circle clear(r, c) # remove the rectangle & circle


vignettes/abmidata01-introduction.Rmd
abmidata01-introduction.Rmd
This article describes the scope and application of the data and information provided by the Alberta Biodiversity Monitoring Institute.
Historically, ecological monitoring has occurred over small areas and short time periods, providing limited information to managers and policy analysts. Thus in Alberta, as elsewhere, natural resource management has proceeded without sufficient feedback on ecological change, making it difficult to gauge success in meeting land-use objectives. Large-scale, long-term monitoring is the most certain means of obtaining information to support natural resource policy development and evaluation.
The Alberta Biodiversity Monitoring Institute (ABMI) is a large-scale, long-term monitoring program designed to support natural resource decision-making. The ABMI provides relevant, timely and credible scientific knowledge on the state of provincial biodiversity. Services offered by the Institute include: public access to raw data, and public access to value-added information products. These two services are designed to encourage:
However providing public access to information products creates opportunity for the inappropriate analysis and/or interpretation of ABMI information. This report provides general guidance for the analysis, interpretation, and application of ABMI data and information products.
The ABMI’s information has significant application to the following regional and provincial management areas:
Where is the application of the ABMI’s information most relevant? The ABMI is a key component in achieving the vision of the sustainable resource management. Under sustainable resource management systems, monitoring information is needed to assess the effectiveness of policies and programs. Monitoring may confirm effective action or may provide insight into what changes might be needed when desired outcomes are not being attained. As applied to biodiversity, monitoring should assess the effectiveness of resource management and support its improvement. The ABMI’s information can be used to support the preparation of management plans and responses, as well as identification of any gaps in understanding relationships associated with changes in biodiversity.
This description of the ABMI’s strengths is not meant to be restrictive. The ABMI recognizes, and encourages, the innovative use of the Institute’s information. However, we strongly encourage that practitioners making use of ABMI information consider the guidance provided below.
The ABMI collects abiotic and biotic data using numerous filed and remote sensing protocols. After undergoing quality control by the ABMI, the data is publicly available without further modification. Raw and compiled data is publicly accessible at the scale of individual points. When using the ABMI’s raw data the following guidance is further suggested:
Statistical power, defined as the ability to detect a significant change or trend, is influenced by many factors including: type of statistics used, magnitude of change that occurred, desired significance level (\(\alpha\)), number of samples, frequency of samples through time, detectability of the indicator, spatial and temporal variability in the indicator, and measurement error. Drawing valid statistical inference from ABMI data is conditional on the clear and reasonable treatment of each of these factors.
The ABMI uses a large-scale, systematic sampling design to collect unbiased data on variety of biodiversity indicators and human land-use practices. This sampling design was implemented in order to draw inference about the provincial and regional state of these indicators. In general, the ABMI considers a “region” as a continuous or discontinuous area encompassing 50 or more sampling points. The ABMI is not optimally designed to provide results at the scale of individual points or very small regions (e.g., less than 50 points).
Knowing that there are changes in biodiversity is of limited management value if the potential causes of the changes are not understood. Thus, the ABMI is designed to identify correlative associations between changes in biota, changes in habitat and changes in human land-use activities. The ABMI’s data can be used to establish correlations and enable research hypotheses to be developed about the potential cause-and-effect relationships between biota, habitat, and human land-use activities. Applied research is necessary to more effectively evaluate hypotheses and establish cause-and-effect relationships. The ABMI sampling design cannot be used to replace basic or applied research.
The ABMI is designed to sample and report on the state of common species, habitats, and human land-use activities. The ABMI is not designed to survey very uncommon elements as large-scale systematic sampling designs are not an optimal strategy for sampling highly patchy or uncommon resources.
Many species and habitats present in the ABMI’s data will only occur one or several times. This may be because the element is rare to Alberta’s landscapes – as is the case with species listed as Rare and Endangered. In addition, many elements may occur one or several times in the ABMI’s data because the Institutes protocols are not optimally designed to sample all species. For example, owl species are expected to be under represented in the Institutes data because the sampling protocols employed by the institute are not optimally designed to survey this group. Data on rare or under-represented species should be analyzed and interpreted cautiously.
The responsible analysis and interpretation of data requires honesty and conscientiousness. The ABMI holds itself to the highest ethical standards including operational transparency, honesty, conscientiousness and integrity. The Institute strongly encourages the responsible and ethical evaluation and interpretation of program information. For a complete discussion of the ethical behaviour endorsed by the ABMI please see Honor in Science published by Sigma Xi.
It is strongly recommended that any use of ABMI information products include the following statements of disclosure:
The value of biodiversity information is increased through the responsible analysis, interpretation and application within the context of resource management and policy. Participants in decision- making must recognize both the strengths and limitations of the knowledge used to facilitate these processes. The guidance provided in this report is meant to encourage the responsible and ethical application of knowledge generated through the use of ABMI data and information products.


ParamConverter¶
ParamConverter is a tool used to avoid having to repeat code to pull GraphObjects out of databases in response to user input.
It can be used as a view decorator to convert a parameter in the URL route, to the relevant py2neo.ogm.Graph object, or a list of such objects, which correspond to the value passed from the user in the URL. The best way to understand the behaviour of the decorator is to see an example such as that below.
The examples below are taken from the testing suite, and all refer to Widget nodes, which have an integer ID (Widget.unique_id), a name (Widget.name) and a colour (Widget.colour). Whilst widget IDs and names are unique, colours are not.
The following boiler plate code is omitted from all examples.
Argument Reference¶
-
ParamConverter.
__init__
(graph_object=None, constructor=None, param=None, select_on=None, on_not_found=404, bind=None, check_unique=False, on_more_than_one=None, single=True, inject_old_kwarg_as=None)[source]¶ Decorator for Flask controllers. Will convert a parameter to either a GraphObject or a collection of GraphObject based on a query to the graph. If no object is found, it will act as instructed, by default returning a 404. Use graph_object and/or constructor arguments to specify a callable which will take the kwarg[param], and use it to search for a node based on its value.
Parameters: - graph_object – Class to return instances of, usually a py2neo.ogm.GraphObject but can be custom class, or a string referencing that object (e.g., src.models.Widget). If a string is set for constructor, ParamConverter will look for a method on this object with that name, if constructor is None, then the DEFAULT_CONSTRUCTOR_METHOD (set as select) will be used instead. If graph_object is None, then constructor must be specified.
- constructor – A callable, or reference to a callable to query the graph and return an iterable of GraphObjects. If graph_object is specified, and this value is a string, ParamConverter will search for a method named after this string on graph_object.
- param – The key of the keyword argument to act on. ParamConverter will pass the value of this arg to the constructor, and replace it with what is returned by the constructor.
- select_on – If graph_object is if specified, and this value is a string, the param will not be passed to the constructor when called, but handed to the query using the where() method, i.e. for select_on=’name’:` Widget.select(graph).where(name=x)
- on_not_found – What to return when no objects are found, can be callable, int (HTTP status) or str. If None, will return 404.
- on_more_than_one – If check_unique is True and single is False, what to return if >1 match is returned by the constructor. If None then will return status 500.
- single – Bool, whether to return a the first result from constructor, or all results as a list (constructor must return an iterable). Can be used in conjunction with check_unique and on_more_than_one to ensure values are unique in the graph.
- bind – the bind to search using with ogm.get_connection(), ogm.graph is used if None.
- check_unique – if True when single is True, will check that only 1 object is returned. If >1 object, then will act according to on_more_than_one
- inject_old_kwarg_as – if a string, the original value of param will be injected into the decorated function. The string must relate to a kwarg in the decorated function.
Returns: the function it is decorating
Example Usage¶
Boilerplate Used in Examples¶
The following boilerplate code (setting up the example app, connecting to the database, and importing ParamConverter and Widget model) should be assumed in all examples.
from flask import Flask, jsonify
from flask_ogm import OGM
from flask_ogm.param_converter import ParamConverter
from tests.fixtures import Widget
app = Flask(__name__)
app.config.update(
OGM_GRAPH_HOST='localhost',
OGM_GRAPH_USER='neo4j',
OGM_GRAPH_PASSWORD='password'
)
ogm = OGM(app)
The Widget object is taken from the unit tests for the module.
Quick Start: Pull Node from Graph using Primary Key¶
You need only specify the name of your parameter and a callable to find it. By default, the py2neo.ogm.GraphObject.select() is used if only a GraphObject is specified. By default, if a node if not found, an HTTP 404 NOT FOUND error will be raised.
@app.route('/widget_by_id/<int:widget>') # IDs are integers
@ParamConverter(graph_object=Widget, param='widget')
def get_widget_by_id(widget):
"""Pull node using Widget.__primarykey__, in our case
`Widget.unique_id`"""
return jsonify({'widget': widget.as_dict()})
Pull Node From Graph Using Specified Property¶
Specify select_on to search on a given node property.
@app.route('/widget_by_name/<widget>') # names are strings
@ParamConverter(graph_object=Widget, param='widget', select_on='name')
def get_widget_by_name(widget):
"""Select a widget by name, using default controller and custom
attr."""
return jsonify({'widget': widget.as_dict()})
Specify Object Using Import Reference and/or Attribute Name¶
Rather than importing the graph object, or a constructor, you can specify the graph object using an import reference, with an optional string to select by an attribute.
@app.route('/widget_by_id2/<widget>') # names are strings
@ParamConverter(graph_object='tests.fixtures.Widget',
param='widget',
constructor='select')
def get_widget_by_id2(widget):
"""Specify graph_object.constructor using import strings"""
return jsonify({'widget': widget.as_dict()})
Use a Custom Constructor Method¶
You can also create or specify custom constructor methods, which again can be passed either as callables, or strings containing import references.
def get_widget_by_composite_id(graph, composite_id):
"""Example constructor method, if for some reason you needed to
perform an operation on the input before searching for the node in
the database.
"""
# composite id takes form widget:1
unique_id = int(composite_id.split(':')[-1])
# constructors must return an iterable
return Widget.select(graph, unique_id)
@app.route('/widget_by_composite_id/<widget>')
@ParamConverter(param='widget',
constructor=get_widget_by_composite_id)
def get_widget_by_id2(widget):
"""Specify graph_object.constructor using import strings"""
return jsonify({'widget': widget.as_dict()})
Not Found: Specify Callable¶
By default, ParamConverter will raise an HTTP 404 NOT FOUND exception if the node is not found, but custom behaviours can be specified in a callable, or as a string or integer.
def custom_not_found_callable():
return 'Whoops! Widget not found!'
@app.route('/widget_by_id4/<int:widget>')
@ParamConverter(graph_object=Widget,
param='widget',
on_not_found=custom_not_found_callable)
def not_found_specify_custom_callable(widget):
return jsonify({'widget': widget.as_dict()})
Not Found: Specify String / Non-HTTP Status Code Integer Response¶
Not found responses can also be plain strings. If an integer is passed which does not relate to an exception in the werkzeug.exceptions library (e.g. -1 or 0), then it will be cast to a string and returned as the response.
@app.route('/widget_by_id5/<int:widget>')
@ParamConverter(graph_object=Widget,
param='widget',
on_not_found='Sorry, no widget found!')
def not_found_specify_string(widget):
return jsonify({'widget': widget.as_dict()})
Not Found: Specify HTTP Status Code¶
If an http status code is supplied as an integer, this response will be returned, so long as the status code is found within werkzeug.exceptions
@app.route('/widget_by_id6/<int:widget>')
@ParamConverter(graph_object=Widget,
param='widget',
on_not_found=418)
def not_found_specify_http_status(widget):
"""On not found: HTTP 418 I'M A TEAPOT"""
return jsonify({'widget': widget.as_dict()})
Returning More than One Node¶
ParamConverter can also return a list of widgets, for example searching on a given property, in this case colour.
@app.route('/widgets_by_colour/<widgets_by_colour>')
@ParamConverter(graph_object=Widget,
param='widgets_by_colour',
select_on='colour',
single=False)
def get_widgets_by_colour(widgets_by_colour):
"""Return a list of nodes"""
return jsonify({
'widgets': [w.as_dict() for w in widgets_by_colour]
})
Checking Only One Node Is Returned¶
If you need to be confident that only one node was found, you can check this using the check_unique option. If more than one node is found when this option is set to True, then on_more_than_one will be called, if nothing is specified for on_more_than_one, then an HTTP 500 INTERNAL ERROR will be returned. on_more_than_one takes the same form as on_not_found.
@app.route('/only_widget_with_colour/<widget>')
@ParamConverter(graph_object=Widget,
param='widget',
select_on='colour',
single=True,
check_unique=True)
def get_widgets_by_colour_unique(widget):
"""Return a list of nodes"""
return jsonify({
'widget': widget.as_dict()
})
Reinjecting Old Param¶
Often it is helpful to know the original value of param, since you may not be able to know it from the graph objects returned. In such instances you can specify a keyword argument for the search term to be reinjected as. Presently, this must be specified as a defailt in the route of the view, this will be changed in future versions.
@app.route('/search_widgets_by_name/<searched_widgets>',
defaults={'search_term': None})
@ParamConverter(graph_object=Widget,
constructor='search_on_name',
param='searched_widgets',
single=False,
inject_old_kwarg_as='search_term')
def search_widgets_by_name(searched_widgets=None, search_term=None):
"""Return both the search term and the widgets"""
return jsonify({
'search_term': search_term,
'widgets': [w.as_dict() for w in searched_widgets]
})


The transition animations (including transforms) were tested and should work in all modern mobile browsers - Mobile Safari, Android's all kinds of WebKit browsers, Firefox Mobile 4 betas, Opera Mobile 10+ and even IE9 (though it doesn't support transitions so will only show the last state directly, let's hope this will change for the mobile version).


---
layout: post
title: 8/30 progress report
date: '2013-08-30T23:52:00.001-06:00'
author: Jacob .
tags:
- progress-reports
- front-page
modified_time: '2013-08-31T00:00:15.681-06:00'
blogger_id: tag:blogger.com,1999:blog-6400085873105072120.post-1021299436676493274
blogger_orig_url: http://www.svlark.com/2013/08/830-progress-report.html
---
28 minutes until our twice-extended inspection objection deadline passes. At this point it's basically insignificant since we've already executed resolution to the objections, but I'll still feel better when it's passed.
What to do with ourselves now? The moment is not really right to move to the coast. That will probably be in spring. We'd love to get ourselves a gracefully aging (read cheap) RV to bridge the gap until we find our boat. But what about winter in Colorado? Where can we park ourselves, and how do we not freeze?
We'll continue trying to figure it all out...
April and the girls kicked butt for our first full school week. We decided to go ahead and throw Rosetta Stone Spanish into the mix, because math, biology, history, handwriting, spelling, grammar, composition, and ancient literature just isn't a sufficient course-load for a kindergartener.


{% extends "saas/base_dashboard.html" %} {% block saas_title %} {{organization.printable_name}} Subscriptions {% endblock %} {% block saas_content %} Subscribed to Until {% if plans %} Select a plan... {% for choice in plans %} {{choice.title}} {% endfor %} Subscribe {% endif %} No subcriptions [[params.q]] [[entry.plan.title]] [[entry.ends_at ? ($options.filters.formatDate(entry.ends_at, 'MMM D, Y')) : "Never"]] [[entry.ends_at | relativeDate]] Unsubscribe Now Deny Accept Request pending approval ... × Unsubscribe ... You are about to delete the profile and account for {{organization.printable_name}}. This operation cannot be reversed. Are you sure you want to continue? {% endblock %}
You are about to delete the profile and account for {{organization.printable_name}}. This operation cannot be reversed.
Are you sure you want to continue?


BUT I'M A CHEERLEADER
Reviewed by Harvey Karten Lions Gate Director: Jamie Babbitt Writer: Jamie Babbitt Cast: Natasha Lyonne, Ru Paul Charles, Cathy Moriarty, Clea DuVall, Michelle Williams, Mink Stole, Bud Cort, Julie Delpy
If we accept the premise that most parents want some day to be grandparents, we'd have to go along with the view that most parents would be disappointed to discover that their only son or daughter is gay. What should they do about the situation? The psychologically healthy folks would accept reality and not make an issue of their frustration.  Neither of these situations would make for an amusing movie, so in her directorial debut, Jamie Babbit plays with a bright premise, then proceeds to make a hash of her film.
"But I'm a Cheerleader" shows the influence of the eminent John Waters on Ms. Babbitt, who even uses a Waters favorite, Mink Stole, in the role of an Edith Bunker- like parent. But Babbitt repeatedly pulls back when her story is on the verge of laugh-out-loud antics with the result that her satire is at once too amiable and too obvious.
The best thing about the movie is the casting of young Natasha Lyonne ("Slums of Beverly Hills," "American Pie") in the key role of Megan, a teenaged cheerleader whom her parents suspect of being a lesbian. What seems to give her away to her folks is her fondness for tofu and vegetarianism-- yet despite her posting of a female pin-up in her high-school locker, she is yet unaware of her own tendencies.  The young men and women who share bunks in the lodge are all gay, all sent by their parents to be "straightened" out by homophobic director Mary (Cathy Moriarty)--who employs ex-gay Mike (drag performer Ru Paul Charles) to assign manly chores like repairing cars to the guys while she dispenses classes like diaper changing to the young women.
Production designer Rachel Kamerman has conceived the girls' rooms in bright pastel colors as befits this candy-coated, emasculated satire, making the thoroughly obvious point that traditional America wants its women to be pretty in pink. Stereotypes abound, the homophobic Mary contrived as a fundamentalist Christian while the boys and girls under her tutelage with the exception of Graham and Megan are nerdish, dull, even androgynous. The picture has just a few unintentional laughs, the enterprise coming not even close in quality to Rose Troche's 1994 intelligently funny "Go Fish."
Rated R. Running time: 81 minutes. (C) 2000 by Harvey Karten<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Best Practices
: Visual Hierarchy
Someone Something
email
<EMAIL_ADDRESS>phone
+989123456789
website
somewhere.something
Toggle Status


RELEASE NOTES: COLLECTIONS 3.1
This release adds various new classes and fixes a number of bugs.
All feedback should be directed to commons-user at jakarta.apache.org.
COMPATABILITY
This release is fully source and binary compatible with v3.0.
(Checks performed using JDiff and Clirr, thanks).
The only new deprecations are in AbstractDualBidiMap.
These only impact non commons-collections subclasses, and existing code will still work.
This release also enables a workaround of the binary compatability issue with IteratorUtils in v3.0.
Collections v2.1.1 (with deprecations solved) and v3.1 are compatible with regards to iterators.
NEW CLASSES
- TreeList - A list implementation that is faster than ArrayList for insertions and removals
- MultiKeyMap - A map that allows multiple keys to be used to map the value
- SingletonMap - fully featured singleton Map implementation
- ObjectGraphIterator - An iterator that can iterate over a graph of objects
- MapBackedSet - Set created by decorating a map
- ReferenceIdentityMap - Similar to ReferenceMap, but matching keys and values by identity [26503]
- AbstractReferenceMap - New base class for reference maps [26503]
- Empty*Iterator - Iterators over empty collections
- TransformedPredicate - A predicate where the input object is transformed [26946]
- PredicateDecorator - An interface to provide a uniform interface to the decorated predicates
- AbstractSerializable*Decorator - Abstract classes for decorators that are Serializable
ENHANCEMENTS
- ReferenceMap - Changed to extend AbstractReferenceMap, thus gaining a mapIterator() and subclassability [26503]
- Fast3Map - Add clone() method
- MultiKey - Add getKey(index) and size() methods and make constructor public
- MultiHashMap - Add five methods to improve the API
- AbstractHashedMap,AbstractLinkedMap - Add methods to access entry methods when protected scope blocks
- Functors - Add get methods to retrieve internal state [27515]
- Functors - Add additional getInstance() methods for consistency [27856,27857]
- CollectionUtils - get(Object,int) method now supports primitive arrays
- CollectionUtils - cardinality() now works faster for Set and Bag instances [28629]
- CollectionUtils - Add size(Object) method to find the size of various collection-like objects [27909]
- SingletonIterator - make remove() functionality optional
- AbstractLinkedList/NodeCachingLinkedList - added getValue() and setValue() to Node, and made everything use them
- LRUMap - The addMapping() method now uses isFull() to determine whether it is full
- LRUMap - Add boolean flag, scanUntilRemovable, giving the removeLRU() method more power [28887]
- InvokerTransformer - Add additional getInstance() method
- Reduced inter-class and inter-package dependencies, especially via *Utils classes
- ListOrderedSet - Add new factory method decorate(Set,List)
- ListOrderedSet - Add public constructor that uses a HashSet and ArrayList
- ListOrderedMap - Add public constructor that uses a HashMap and ArrayList
Made Serializable
- Fast3Map [27946]
- ReferenceMap
- UnboundedFifoBuffer
- BoundedFifoBuffer
- CircularFifoBuffer
- TiedMapEntry
- FixedSize* [18815]
- Predicated* [18815]
- Synchronized* [18815]
- Transformed* [18815]
- Typed* [18815]
- Unmodifiable* [18815]
- Lazy* [18815]
- ListOrdered* [18815]
- SetUniqueList [18815]
BUG FIXES
- Map/BidiMap implementations only checked key and not value in entry set contains(Object) and remove(Object)
- AbstractHashedMap subclasses failed to clone() correctly [27159]
- ExtendedProperties - Close input stream in constructor [27737]
- ExtendedProperties - Handle comma separated data in multiple keys
- Flat3Map - Handle infinite loops in toString
- LRUMap - The removeLRU() method was passed the wrong LinkEntry [28433]
- EnumIterator/MapUtils - Changed enum references to enable JDK 1.5 compliance
- UnmodifiableSortedBag - Fix to ensure unmodifiable
- MultiHashMap - Fix copy constructor and clone to work properly [28972]
- ListOrderedSet - Fix to throw IllegalArgumentException instead of NPE on null factory decorate(List)
- *Dual*BidiMap - Fix poorly designed subclass method call from superclass constructor [29519]
JAVADOC
- Bag - Indicate that no changes are likely to the interface despite its problems
- TreeBidiMap - Add javadoc about requiring Comparable entries [26470]
- MultiKey - Add extra explanatations, examples and warnings
- MultiMap,MultiHashMap - Add extra documentation to clarify the interface and implementation
- XxxUtils - Clarify the internal workings of the predicated decorator classes [28115]
- BidiMap - Clarify 1 to 1 nature of the map
- AbstractHashedMap - Fix isEqualValue() javadoc to refer to value not key
- LRUMap - Added extra javadoc about method implementations
- BoundedCollection/UnmodifiableBoundedCollection - reword to avoid misunderstandings
- Closure/Predicate/Transformer/Factory - Additional javadoc with links
- ClosureUtils/PredicateUtils/TransformerUtils/FactoryUtils - Additional links to implementations
- Predicated* - Additional usage explanation [29018]


Diagnostic
Creating and configuring Unity container is a complicated process. A lot of things could go wrong and finding where it was misconfigured could be rather involved. To simplify debugging and to help fix issues Unity offers Diagnostic extension.
Performance considerations
The Unity container uses reflection for most of its operations. It gathers information about types, creates pipelines to create these types, and verifies everything all based on reflected data. Because of that it is rather resource extensive and relatively slow.
To optimize performance, Unity engine does not do any runtime validation and only performs absolute minimum checks, just enough to be able to run. As result a lot of irregular conditions might go unnoticed. To remedy this, the container exposes Diagnostic extension which does thorough examination of all registration data and throws exceptions on any irregularities.
Unity Diagnostic Extension
Diagnostic extension, among other things, verifies the following conditions:
- Cyclical references (The famous Stack Overflow Exception)
- Validity of provided Injection Members
- Improper referencing to itself
- Invalid parameters in constructors and invoked methods
Enabling Diagnostics
The extension could be enabled in few different ways:
Add Extension
The most basic case is when extension is added via AddExtension(...)
call. It works with either regular or generic methods.
var container = new UnityContainer()
.AddExtension(new Diagnostic());
or
var container = new UnityContainer()
.AddExtension<Diagnostic>();
The first method, one with AddExtension(new Diagnostic())
is a bit faster.
Using extension method
For convenience, Unity container exposes EnableDiagnostic() extension method. This method is equal to adding extension to the container.
var container = new UnityContainer()
.EnableDiagnostic();
Enabling extension only in Debug
The container provides conditional extension EnableDebugDiagnostic(). This method will only enable diagnostics in DEBUG
mode. In this example
var container = new UnityContainer();
container.EnableDebugDiagnostic();
the extension is enabled only if calling method is compiled in Debug configuration.
Important
Extension methods will not work on IUnityContainer interface. It is only available on the UnityContainer itself.


LayerSwipe Dijit
Scope with 2 Graphics Layers
Change Properties
Type
Vertical
Horizontal
Scope
Other
invertPlacement
Visibility
Enabled/Disabled
Destroy
Other Examples
TiledLayer
All Options


HTML - main type of document on the web.
Files on the Web
- Plain Text
- HTML
- Images
- Videos
- Music
Basics of the web
- The Web - Collection of HTML docs and links
- HTML - Heart of the web
- URLs
- HTTP - main communication protocol
- Web Applications
This is my website
Special Note - multiple space line will be ignored


KubeProxyConfiguration contains everything necessary to configure the Kubernetes proxy server.
| Field | Description |
|---|---|
apiVersion string |
kubeproxy.config.k8s.io/v1alpha1 |
kind string |
KubeProxyConfiguration |
featureGates
*
map[string]bool
|
featureGates is a map of feature names to bools that enable or disable alpha/experimental features. |
bindAddress
*
string
|
bindAddress is the IP address for the proxy server to serve on (set to <IP_ADDRESS> for all interfaces) |
healthzBindAddress
*
string
|
healthzBindAddress is the IP address and port for the health check server to serve on, defaulting to <IP_ADDRESS>:10256 |
metricsBindAddress
*
string
|
metricsBindAddress is the IP address and port for the metrics server to serve on, defaulting to <IP_ADDRESS>:10249 (set to <IP_ADDRESS> for all interfaces) |
bindAddressHardFail
*
bool
|
bindAddressHardFail, if true, kube-proxy will treat failure to bind to a port as fatal and exit |
enableProfiling
*
bool
|
enableProfiling enables profiling via web interface on /debug/pprof handler. Profiling handlers will be handled by metrics server. |
clusterCIDR
*
string
|
clusterCIDR is the CIDR range of the pods in the cluster. It is used to bridge traffic coming from outside of the cluster. If not provided, no off-cluster bridging will be performed. |
hostnameOverride
*
string
|
hostnameOverride, if non-empty, will be used as the identity instead of the actual hostname. |
clientConnection
*
ClientConnectionConfiguration
|
clientConnection specifies the kubeconfig file and client connection settings for the proxy server to use when communicating with the apiserver. |
iptables
*
KubeProxyIPTablesConfiguration
|
iptables contains iptables-related configuration options. |
ipvs
*
KubeProxyIPVSConfiguration
|
ipvs contains ipvs-related configuration options. |
oomScoreAdj
*
int32
|
oomScoreAdj is the oom-score-adj value for kube-proxy process. Values must be within the range [-1000, 1000] |
mode
*
ProxyMode
|
mode specifies which proxy mode to use. |
portRange
*
string
|
portRange is the range of host ports (beginPort-endPort, inclusive) that may be consumed in order to proxy service traffic. If unspecified (0-0) then ports will be randomly chosen. |
conntrack
*
KubeProxyConntrackConfiguration
|
conntrack contains conntrack-related configuration options. |
configSyncPeriod
*
meta/v1.Duration
|
configSyncPeriod is how often configuration from the apiserver is refreshed. Must be greater than 0. |
nodePortAddresses
*
[]string
|
nodePortAddresses is the --nodeport-addresses value for kube-proxy process. Values must be valid IP blocks. These values are as a parameter to select the interfaces where nodeport works. In case someone would like to expose a service on localhost for local visit and some other interfaces for particular purpose, a list of IP blocks would do that. If set it to "<IP_ADDRESS>/8", kube-proxy will only select the loopback interface for NodePort. If set it to a non-zero IP block, kube-proxy will filter that down to just the IPs that applied to the node. An empty string slice is meant to select all network interfaces. |
winkernel
*
KubeProxyWinkernelConfiguration
|
winkernel contains winkernel-related configuration options. |
showHiddenMetricsForVersion
*
string
|
ShowHiddenMetricsForVersion is the version for which you want to show hidden metrics. |
detectLocalMode
*
LocalMode
|
DetectLocalMode determines mode to use for detecting local traffic, defaults to LocalModeClusterCIDR |
detectLocal
*
DetectLocalConfiguration
|
DetectLocal contains optional configuration settings related to DetectLocalMode. |
(Appears in: KubeProxyConfiguration)
DetectLocalConfiguration contains optional settings related to DetectLocalMode option
| Field | Description |
|---|---|
bridgeInterface
*
string
|
BridgeInterface is a string argument which represents a single bridge interface name. Kube-proxy considers traffic as local if originating from this given bridge. This argument should be set if DetectLocalMode is set to LocalModeBridgeInterface. |
interfaceNamePrefix
*
string
|
InterfaceNamePrefix is a string argument which represents a single interface prefix name. Kube-proxy considers traffic as local if originating from one or more interfaces which match the given prefix. This argument should be set if DetectLocalMode is set to LocalModeInterfaceNamePrefix. |
(Appears in: KubeProxyConfiguration)
KubeProxyConntrackConfiguration contains conntrack settings for the Kubernetes proxy server.
| Field | Description |
|---|---|
maxPerCore
*
int32
|
maxPerCore is the maximum number of NAT connections to track per CPU core (0 to leave the limit as-is and ignore min). |
min
*
int32
|
min is the minimum value of connect-tracking records to allocate, regardless of conntrackMaxPerCore (set maxPerCore=0 to leave the limit as-is). |
tcpEstablishedTimeout
*
meta/v1.Duration
|
tcpEstablishedTimeout is how long an idle TCP connection will be kept open (e.g. '2s'). Must be greater than 0 to set. |
tcpCloseWaitTimeout
*
meta/v1.Duration
|
tcpCloseWaitTimeout is how long an idle conntrack entry in CLOSE_WAIT state will remain in the conntrack table. (e.g. '60s'). Must be greater than 0 to set. |
(Appears in: KubeProxyConfiguration)
KubeProxyIPTablesConfiguration contains iptables-related configuration details for the Kubernetes proxy server.
| Field | Description |
|---|---|
masqueradeBit
*
int32
|
masqueradeBit is the bit of the iptables fwmark space to use for SNAT if using the pure iptables proxy mode. Values must be within the range [0, 31]. |
masqueradeAll
*
bool
|
masqueradeAll tells kube-proxy to SNAT everything if using the pure iptables proxy mode. |
localhostNodePorts
*
bool
|
LocalhostNodePorts tells kube-proxy to allow service NodePorts to be accessed via localhost (iptables mode only) |
syncPeriod
*
meta/v1.Duration
|
syncPeriod is the period that iptables rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0. |
minSyncPeriod
*
meta/v1.Duration
|
minSyncPeriod is the minimum period that iptables rules are refreshed (e.g. '5s', '1m', '2h22m'). |
(Appears in: KubeProxyConfiguration)
KubeProxyIPVSConfiguration contains ipvs-related configuration details for the Kubernetes proxy server.
| Field | Description |
|---|---|
syncPeriod
*
meta/v1.Duration
|
syncPeriod is the period that ipvs rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0. |
minSyncPeriod
*
meta/v1.Duration
|
minSyncPeriod is the minimum period that ipvs rules are refreshed (e.g. '5s', '1m', '2h22m'). |
scheduler
*
string
|
ipvs scheduler |
excludeCIDRs
*
[]string
|
excludeCIDRs is a list of CIDR's which the ipvs proxier should not touch when cleaning up ipvs services. |
strictARP
*
bool
|
strict ARP configure arp_ignore and arp_announce to avoid answering ARP queries from kube-ipvs0 interface |
tcpTimeout
*
meta/v1.Duration
|
tcpTimeout is the timeout value used for idle IPVS TCP sessions. The default value is 0, which preserves the current timeout value on the system. |
tcpFinTimeout
*
meta/v1.Duration
|
tcpFinTimeout is the timeout value used for IPVS TCP sessions after receiving a FIN. The default value is 0, which preserves the current timeout value on the system. |
udpTimeout
*
meta/v1.Duration
|
udpTimeout is the timeout value used for IPVS UDP packets. The default value is 0, which preserves the current timeout value on the system. |
(Appears in: KubeProxyConfiguration)
KubeProxyWinkernelConfiguration contains Windows/HNS settings for the Kubernetes proxy server.
| Field | Description |
|---|---|
networkName
*
string
|
networkName is the name of the network kube-proxy will use to create endpoints and policies |
sourceVip
*
string
|
sourceVip is the IP address of the source VIP endoint used for NAT when loadbalancing |
enableDSR
*
bool
|
enableDSR tells kube-proxy whether HNS policies should be created with DSR |
rootHnsEndpointName
*
string
|
RootHnsEndpointName is the name of hnsendpoint that is attached to l2bridge for root network namespace |
forwardHealthCheckVip
*
bool
|
ForwardHealthCheckVip forwards service VIP for health check port on Windows |
string
alias)(Appears in: KubeProxyConfiguration)
LocalMode represents modes to detect local traffic from the node
string
alias)(Appears in: KubeProxyConfiguration)
ProxyMode represents modes used by the Kubernetes proxy server.
Currently, two modes of proxy are available on Linux platforms: 'iptables' and 'ipvs'. One mode of proxy is available on Windows platforms: 'kernelspace'.
If the proxy mode is unspecified, the best-available proxy mode will be used (currently this
is iptables
on Linux and kernelspace
on Windows). If the selected proxy mode cannot be
used (due to lack of kernel support, missing userspace components, etc) then kube-proxy
will exit with an error.
(Appears in: KubeProxyConfiguration, KubeSchedulerConfiguration, KubeSchedulerConfiguration, KubeSchedulerConfiguration, GenericControllerManagerConfiguration)
ClientConnectionConfiguration contains details for constructing a client.
| Field | Description |
|---|---|
kubeconfig
*
string
|
kubeconfig is the path to a KubeConfig file. |
acceptContentTypes
*
string
|
acceptContentTypes defines the Accept header sent by clients when connecting to a server, overriding the default value of 'application/json'. This field will control all connections to the server used by a particular client. |
contentType
*
string
|
contentType is the content type used when sending data to the server from this client. |
qps
*
float32
|
qps controls the number of queries per second allowed for this connection. |
burst
*
int32
|
burst allows extra queries to accumulate when a client is exceeding its rate. |
(Appears in: KubeSchedulerConfiguration, KubeSchedulerConfiguration, KubeSchedulerConfiguration, GenericControllerManagerConfiguration)
DebuggingConfiguration holds configuration for Debugging related features.
| Field | Description |
|---|---|
enableProfiling
*
bool
|
enableProfiling enables profiling via web interface host:port/debug/pprof/ |
enableContentionProfiling
*
bool
|
enableContentionProfiling enables lock contention profiling, if enableProfiling is true. |
(Appears in: KubeSchedulerConfiguration, KubeSchedulerConfiguration, KubeSchedulerConfiguration, GenericControllerManagerConfiguration)
LeaderElectionConfiguration defines the configuration of leader election clients for components that can run with leader election enabled.
| Field | Description |
|---|---|
leaderElect
*
bool
|
leaderElect enables a leader election client to gain leadership before executing the main loop. Enable this when running replicated components for high availability. |
leaseDuration
*
meta/v1.Duration
|
leaseDuration is the duration that non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate. This is only applicable if leader election is enabled. |
renewDeadline
*
meta/v1.Duration
|
renewDeadline is the interval between attempts by the acting master to renew a leadership slot before it stops leading. This must be less than or equal to the lease duration. This is only applicable if leader election is enabled. |
retryPeriod
*
meta/v1.Duration
|
retryPeriod is the duration the clients should wait between attempting acquisition and renewal of a leadership. This is only applicable if leader election is enabled. |
resourceLock
*
string
|
resourceLock indicates the resource object type that will be used to lock during leader election cycles. |
resourceName
*
string
|
resourceName indicates the name of resource object that will be used to lock during leader election cycles. |
resourceNamespace
*
string
|
resourceName indicates the namespace of resource object that will be used to lock during leader election cycles. |
Generated with genref
on git commit 4247aac7


Get the latest build artifact from a GitHub repository:
https://tinyurl.com/github-artifact?repo=user:token@owner/repo
List all the build artifacts:
https://tinyurl.com/github-artifact?repo=user:token@owner/repo&num=0
Get the second most recent build artifact:
https://tinyurl.com/github-artifact?repo=user:token@owner/repo&num=2
Get the second oldest build artifact:
https://tinyurl.com/github-artifact?repo=user:token@owner/repo&num=-2
Get the latest build artifact with a certain name:
https://tinyurl.com/github-artifact?repo=user:token@owner/repo&file=name
List all the build artifacts with a certain name:
https://tinyurl.com/github-artifact?repo=user:token@owner/repo&file=name&num=0
Get the second most recent build artifact with a certain name:
https://tinyurl.com/github-artifact?repo=user:token@owner/repo&file=name&num=2
Get the second oldest build artifact with a certain name:
https://tinyurl.com/github-artifact?repo=user:token@owner/repo&file=name&num=-2
For example, get the most recent build artifact named "hobnob-release-windows-x86_64"
from the GitHub repository https://github.com/defcronyke/hobnob:
https://tinyurl.com/github-artifact?repo=defcronyke:Yjk1MzA1ZTgwMDdmZGIwM2MyMjA1ZGU0MGRkZDNjNjM1OGJjZTFiNQ==@defcronyke/hobnob&file=hobnob-release-windows-x86_64
NOTE: You can supply your GitHub token as either base64 (as above) or plain text.
These GitHub tokens need the "public_repo" scope to work properly, and unfortunately that scope gives read/write access to the application making the GitHub API calls, so if you want to use this to make any public links that you'll be sharing anywhere, you need to run the Docker container in this project on your own server, and when building the container you can supply default `user` and `token` values by setting a docker build argument like this: --build-arg artifact_auth="user:token"
After setting that, you'll be able to omit the "user:token@" portion of the urls above, and it will use those values by default. For example:
https://tinyurl.com/github-artifact?repo=defcronyke/hobnob&file=hobnob-release-windows-x86_64
Take a look at the `build.sh` script for an example of how to build the Docker container, and see the `Dockerfile` for more details.
If you prefer, you can use this website's URL https://defcronyke.github.io/github-artifact as the base path for your links instead of https://tinyurl.com/github-artifact. For example:


This module converts a 2D quad or tri input mesh to a polytri strip for faster rendering.
Name Type Description out Mesh 2D tri or quad mesh to be converted
Name Type Description out PolyTri Mesh Geometry data of the converted mesh. out_obj DataObject Directly Renderable Output Object.
This project contains a definition of a module which converts an input mesh to a polytri strip for faster rendering. It requires 2D quad or tri data.
out
Mesh data output that contains the nodal coordinates and a single poly triangle cell-set that describes the connectivity of the data.
out_obj
The directly renderable output of the Convert2TriStrip macro. This output contains the geometry data read from the field file in a form that can be rendered by the standard data viewers.
The Convert2TriStripFunc functional macro uses the Convert2TriStripCore low-level module. The Convert2TriStrip user macro uses this functional macro.
An example application Convert2TriStripEg is provided with the Convert2TriStrip project. This application reads a field file, converts the mesh to tri strip, and then shows the originally read data and converted data in two Viewer windows.
xp_comm_proj/cvt2tri/c2t_mods.v contains the V definitions of the Convert2TriStripCore module.
xp_comm_proj/cvt2tri/c2t_macs.v contains the V definitions of the Convert2TriStripFunc functional macro and the Convert2TriStrip user macro.
xp_comm_proj/cvt2tri/c2t_apps.v contains the V definitions of the Convert2TriStripEg example application.
Dave Goughnour, Advanced Visual Systems, Inc.
Mary McDerby, Manchester Visualization Centre Tobias Schiebeck, International AVS Centre


Core Projects
Workflow
The basic workflow for working with the core component repositories is as follows.
- Individual Github acccount for each team member
- Single fork of official Sana repository under one team members account
- Add all of the team members as collaborators
- All team members should make contributions to the fork.
- Add any documentation to the Github wiki of your fork
- At the end of the course, submit a pull request to the Sana repository from your fork
Detailed Instructions for creating a fork
- Login to Github
- Open the Sana Github Site
- Select the repository page of the component you are working on
- Create a fork of the repository.
- Open the Collaborators tab of your new repository's Settings
- Add each of your team members as a collaborator
- Clone the repository and checkout the
hst936
branch to your workstation either through the command linegit clone https https://github.com/[Github username]/[Repository Path]
or through Git integration of your IDE. Important Verify the branch with your mentor.
- Each team member should edit, test, commit, and push any changes to the hst936 branch of the fork. Mentors will provide additional instructions on frequency of expected commits and any milestones.
- At the end of the semester, create a pull request. This can be done ether through the command line or Github web interface.
Please see see the
Reference section for more information on working with Git if you are not familiar with it.
Code Conventions
The coding conventions for the Sana repositories in general follow standard best practices for Java and Python. To assist with making your changes adhere to the conventions as the original source, please import the following code formatting styles into your IDE.
Instructions
Alternative Code Projects
For code based projects not based on the core Sana platform components, please perform the following:
- Create a Github account if you do not have one
- Create a private repository for the code using your Github account.
- Add any other students who are working with you on the project as collaborators using their Github account info.
- Add Github user
hst936
as a collaborator
- Fill in the HST.936 Project Github Information form with your Github information and url of the repository.
Please see the
Reference section if you have additional questions on working with Git or Github.


Hi, {{loggedUser?.dataContent?.firstName}} ACE-ian. You can:
ColaboFlow Audits
If you have account please:
or register first if you do not have account:


Font Size:
Font Family:
Text Align:
Font Color:
BackGround Color:
Active Logs
Recent Change Logs (Your User Name :
)


Class SimpleWorksheet
java.lang.Object
com.nuix.superutilities.reporting.SimpleWorksheet
public class SimpleWorksheet
extends java.lang.Object
Wrapper class around Aspose Cells Worksheet object which simplifies some of the
more common operations.
- Author:
- Jason Wells
-
Method Summary
Modifier and Type Method Description void
appendRow(java.util.List<? extends java.lang.Object> rowValues)
void
appendRow(java.util.List<java.lang.Object> rowValues, com.aspose.cells.Style defaultStyle)
void
autoFitColumns()
void
autoFitRow(int row)
void
eachCell(int startRow, int endRow, int startCol, int endCol, java.util.function.Consumer<com.aspose.cells.Cell> activity)
com.aspose.cells.Worksheet
getAsposeWorksheet()
Gets the underlying Aspose Cells Worksheet object.com.aspose.cells.Cell
getCell(int row, int col)
Gets a particular Cell object from this work sheet.int
getCurrentRow()
com.aspose.cells.Style
getStyle(int row, int col)
Gets the style of a particular cell in this work sheetjava.lang.Object
getValue(int row, int col)
Gets the value of a particular cell in this work sheetvoid
mergeCols(int row, int col, int colCount)
Merges a series of cells horizontallyvoid
setCurrentRow(int currentRow)
void
setStyle(int row, int col, com.aspose.cells.Style style)
Sets the style of of a particular cell in this work sheetvoid
setValue(int row, int col, java.lang.Object value)
Sets the value of a particular cell in this work sheet
-
Method Details
-
getAsposeWorksheet
public com.aspose.cells.Worksheet getAsposeWorksheet()Gets the underlying Aspose Cells Worksheet object.- Returns:
- The underlying Aspose Cells Worksheet object.
-
getCell
public com.aspose.cells.Cell getCell(int row, int col)Gets a particular Cell object from this work sheet.- Parameters:
row
- The 0 based row indexcol
- The 0 based column index- Returns:
- The underlying Aspose Cells Cell object at the given indices
-
getValue
public java.lang.Object getValue(int row, int col)Gets the value of a particular cell in this work sheet- Parameters:
row
- The 0 based row indexcol
- The 0 based column index- Returns:
- The value of the cell at the given indices
-
setValue
public void setValue(int row, int col, java.lang.Object value)Sets the value of a particular cell in this work sheet- Parameters:
row
- The 0 based row indexcol
- The 0 based column indexvalue
- The value to assign to the cell at the given indices
-
setStyle
public void setStyle(int row, int col, com.aspose.cells.Style style)Sets the style of of a particular cell in this work sheet- Parameters:
row
- The 0 based row indexcol
- The 0 based column indexstyle
- The Style to apply to the cell at the given indices
-
getStyle
public com.aspose.cells.Style getStyle(int row, int col)Gets the style of a particular cell in this work sheet- Parameters:
row
- The 0 based row indexcol
- The 0 based column index- Returns:
- The Style of the cell at the given indices
-
mergeCols
public void mergeCols(int row, int col, int colCount)Merges a series of cells horizontally- Parameters:
row
- The 0 based row indexcol
- The 0 based column index of the first column in the merged group of cells.colCount
- How many cells total to merge, so if you want the 2 cells following the first cell specified by the indices, provide a value of 3.
-
autoFitColumns
public void autoFitColumns() throws java.lang.Exception- Throws:
java.lang.Exception
-
autoFitRow
public void autoFitRow(int row) throws java.lang.Exception- Throws:
java.lang.Exception
-
appendRow
public void appendRow(java.util.List<? extends java.lang.Object> rowValues) -
appendRow
public void appendRow(java.util.List<java.lang.Object> rowValues, com.aspose.cells.Style defaultStyle) -
eachCell
public void eachCell(int startRow, int endRow, int startCol, int endCol, java.util.function.Consumer<com.aspose.cells.Cell> activity) -
getCurrentRow
public int getCurrentRow() -
setCurrentRow
public void setCurrentRow(int currentRow)
-