class: center, middle ### W4995 Applied Machine Learning # Preprocessing and Feature Engineering 02/07/18 Andreas C. Müller ??? Today we’ll talk about preprocessing and featureengineering. What we’re talking about today mostly applies to linear models, and not to tree-based models, but it also applies to neural nets and kernel SVMs. FIXME: Yeo-Johnson FIXME: box-cox fitting FIXME: move scaling motivation before scaling FIXME: add illustration of why one-hot is better than integer encoding FIXME: add rank scaler --- class: middle ![:scale 90%](images/boston_scatter.png) ??? Let’s go back to the boston housing dataset. The idea was to predict house prices. Here are the features on the x axis and the response, so price, on the y axis. What are some thing you can notice? (concentrated distributions, skewed distibutions, discrete variable, linear and non-linear effects, different scales) --- class: center, middle #Scaling ??? N/A --- class: center, middle .center[ ![:scale 70%](images/img_2.png) ] ??? Let’s start with the different scales. Many model want data that is on the same scale. KNearestNeighbors: If the distance in TAX is between 300 and 400 then the distance difference in CHArS doesn’t matter! Linear models: the different scales mean different penalty. L2 is the same for all! We can also see non-gaussian distributions here btw! --- class: center # Ways to Scale Data
![:scale 80%](images/img_3.png) ??? StandardScaler: subtract mean, divide by standard deviation. MinMaxScaler: subtract minimum, divide by range. Afterwards between 0 and 1. Robust Scaler: uses median and quantiles, therefore robust to outliers. Similar to StandardScaler. Normalizer: only considers angle, not length. Helpful for histograms, not that often used. StandardScaler is usually good, but doesn’t guarantee particular min and max values --- class: spacious # Sparse Data - Data with many zeros – only store non-zero entries. - Subtracting anything will make the data “dense” (no more zeros) and blow the RAM. - Only scale, don’t center (use MaxAbsScaler) ??? You have to be careful if you have sparse data. Sparse data is data where most entries of the data-matrix X are zero – often only 1% or less are not zero. You can store this efficiently by only storing the nonzero elements. Subtracting the mean results in all features becoming non-zero! So don’t subtract anything, but you can still scale. MaxAbsScaler scales between -1 and 1 by dividing with the maximum absolute value for each feature. --- # Standard Scaler Example ```python from sklearn.linear_model import Ridge X, y = boston.data, boston.target X_train, X_test, y_train, y_test = train_test_split( X, y, random_state=0) scaler = StandardScaler() scaler.fit(X_train) X_train_scaled = scaler.transform(X_train) ridge = Ridge().fit(X_train_scaled, y_train) X_test_scaled = scaler.transform(X_test) ridge.score(X_test_scaled, y_test) ``` ``` 0.634 ``` ??? Here’s how you do the scaling with StandardScaler in scikit-learn. Similar interface to models, but “transform” instead of “predict”. “transform” is always used when you want a new representation of the data. Fit on training set, transform training set, fit ridge on scaled data, transform test data, score scaled test data. The fit computes mean and standard deviation on the training set, transform subtracts the mean and the standard deviation. We fit on the training set and apply transform on both the training and the test set. That means the training set mean gets subtracted from the test set, not the test-set mean. That’s quite important. --- class: center, middle .center[ ![:scale 100%](images/img_5.png) ] ??? Here’s an illustration why this is important using the min-max scaler. Left is the original data. Center is what happens when we fit on the training set and then transform the training and test set using this transformer. The data looks exactly the same, but the ticks changed. Now the data has a minimum of zero and a maximum of one on the training set. That’s not true for the test set, though. No particular range is ensured for the test-set. It could even be outside of 0 and 1. But the transformation is consistent with the transformation on the training set, so the data looks the same. On the right you see what happens when you use the test-set minimum and maximum for scaling the test set. That’s what would happen if you’d fit again on the test set. Now the test set also has minimum at 0 and maximum at 1, but the data is totally distorted from what it was before. So don’t do that. --- # Sckit-Learn API Summary ![:scale 90%](images/img_6.png) Efficient shortcuts: ```python est.fit_transform(X) == est.fit(X).transform(X) # mostly est.fit_predict(X) == est.fit(X).predict(X) # mostly ``` ??? Here’s a summary of the scikit-learn methods. All models have a fit method which takes the training data X_train. If the model is supervised, such as our classification and regression models, they also take a y_train parameter. The scalers don’t use a y_train because they don’t use the labels at all – you could say they are unsupervised methods, but arguably they are not really learning methods at all. Models (also known as estimators in scikit-learn) to make a prediction of a target variable, you use the predict method, as in classification and regression. If you want to create a new representation of the data, a new kind of X, then you use the transform method, as we did with scaling. The transform method is also used for preprocessing, feature extraction and feature selection, which we’ll see later. All of these change X into some new form. There’s two important shortcuts. To fit an estimator and immediately transform the training data, you can use fit_transform. That’s often more efficient then using first fit and then transform. The same goes for fit_predict. --- # Scaling and Distances ![:scale 90%](images/knn_scaling.png) ??? Here is an example of the importance of scaling using a distance-based algorithm, K nearest neighbors. My favorite toy dataset with two classes in two dimensions. The scatter plots look identical, but on the left hand side, the two axes have very different scales. The x axis has much larger values than the y axis. On the right hand side, I used standard scaler and so both features have zero mean and unit variance. So what do you think will happen if I use k nearest neighbors here? Let's see --- # Scaling and Distances ![:scale 90%](images/knn_scaling2.png) ??? As you can see, the difference is quite dramatic. Because the X axis has such a larger magnitude on the left-hand side, only distances along the x axis matter. However, the important feature for this task is the y axis. So the important feature gets entirely ignored because of the different scales. And usually the scales don't have any meaning - it could be a matter of changing meters to kilometers. --- class: smaller, compact ```python from sklearn.model_selection import cross_val_score from sklearn.linear_model import RidgeCV scores = cross_val_score(RidgeCV(), X_train, y_train, cv=10) np.mean(scores), np.std(scores) ``` ``` (0.717, 0.125) ``` ```python scores = cross_val_score(RidgeCV(), X_train_scaled, y_train, cv=10) np.mean(scores), np.std(scores) ``` ``` (0.718, 0.127) ``` ```python from sklearn.neighbors import KNeighborsRegressor scores = cross_val_score(KNeighborsRegressor(), X_train, y_train, cv=10) np.mean(scores), np.std(scores) ``` ``` (0.499, 0.146) ``` ```python from sklearn.neighbors import KNeighborsRegressor scores = cross_val_score(KNeighborsRegressor(), X_train_scaled, y_train, cv=10) np.mean(scores), np.std(scores) ``` ``` (0.750, 0.106) ``` ??? Let’s apply the scaler to the Boston housing data. First I used the StandardScaler to scale the training data. Then I applied ten-fold cross-validation to evaluate the Ridge model on the data with and without scaling. I used RidgeCV which automatically picks alpha for me. With and without scaling we get an R^2 of about .72, so no difference. Often there is a difference for Ridge, but not in this case. If we use KneighborsRegressor instead, we see a big difference. Without scaling R^2 is about .5, and with scaling it’s .75. That makes sense since we saw that for distance calculations basically all features are dominated by the TAX feature. However, there is a bit of a problem with the analysis we did here. Can you see it? --- class: center, middle # A note on preprocessing # (and pipelines) ??? I want to talk a bit more about preprocessing and cross-validation here, and introduce pipelines. --- class: some-space #Leaking Information .left-column[ Information Leak ![:scale 100%](images/img_9.png) ] .right-column[ No Information leakage ![:scale 100%](images/img_10.png)] .reset-column[ Need to include preprocessing in cross-validation ! ] ??? What we did was we trained the scaler on the training data, and then applied cross-validation to the scaled data. Tha’s what’s show on the left. The problem is that we use the information of all of the training data for scaling, so in particular the information in the test fold. This is also known as information leakage. If we apply our model to new data, this data will not have been used to do the scaling, so our cross-validation will give us a biased result that might be too optimistic. On the right you can see how we should do it: we should only use the training part of the data to find the mean and standard deviation, even in cross-validation. That means that for each split in the cross-validation, we need to scale the data a bit differently. This basically means the scaling should happen inside the cross-validation loop, not outside. In practice, estimating mean and standard deviation is quite robust and you will not see a big difference between the two methods. But for other preprocessing steps that we’ll see later, this might make a huge difference. So we should get it right from the start. --- class: smaller ```python from sklearn.linear_model import Ridge X, y = boston.data, boston.target X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) scaler = StandardScaler() scaler.fit(X_train) X_train_scaled = scaler.transform(X_train) ridge = Ridge().fit(X_train_scaled, y_train) X_test_scaled = scaler.transform(X_test) ridge.score(X_test_scaled, y_test) ``` ``` 0.634 ``` ```python from sklearn.pipeline import make_pipeline pipe = make_pipeline(StandardScaler(), Ridge()) pipe.fit(X_train, y_train) pipe.score(X_test, y_test) ``` ``` 0.634 ``` ??? Now I want to show you how to do preprocessing and crossvalidation right with scikit-learn. At the top here you see the workflow for scaling the data and then applying ridge again. Fit the scaler on the training set, transform on the training set, fit ridge on the training set, transform the test set, and evaluate the model. Because this is such a common pattern, scikit-learn has a tool to make this easier, the pipeline. The pipeline is an estimator that allows you to chain multiple transformations of the data before you apply a final model. You can build a pipeline using the make_pipeline function. Just provide as parameters all the estimators. All but the last one need to have a transform method. Here we only have two steps: the standard scaler and ridge. make_pipeline returns an estimator that does both steps at once. We can call fit on it to fit first the scaler and then ridge on the scaled data, and when we call score, it transforms the data and then evaluates the model. The code below is exactly equivalent to the code above, only shorter. --- class: left, middle .center[ ![:scale 70%](images/img_13.png) ] ??? Let’s dive a bit more into the pipeline. Here is an illustration of what happens with three steps, T1, T2 and Classifier. Imagine T1 to be a scaler and T2 to be any other transformation of the data. If we call fit on this pipeline, it will first call fit on the first step with the input X. Then it will transform the input X to X1, and use X1 to fit the second step, T2. Then it will use T2 to transform the data from X1 to X2. Then it will fit the classifier on X2. If we call predict on some data X’, say the test set, it will call transform on T1, creating X’1. Then it will use T2 to transform X’1 into X’2, and call the predict method of the classifier on X’2. This sounds a bit complicated, but it’s really just doing “the right thing” to apply multiple transformation steps. --- .padding-top[ ```python from sklearn.neighbors import KNeighborsRegressor knn_pipe = make_pipeline(StandardScaler(), KNeighborsRegressor()) scores = cross_val_score(knn_pipe, X_train, y_train, cv=10) np.mean(scores), np.std(scores) ``` ``` (0.745, 0.106) ``` ] ??? How does that help with the cross-validation problem? Because now all steps are contain in pipeline, we can simply pass the whole pipeline to crossvalidation, and all processing will happen inside the cross-validation loop. That solve the data leakage problem. Here you can see how we can build a pipeline using a standard scaler and kneighborsregressor and pass it to cross-validation. --- # Naming Steps ```python from sklearn.pipeline import make_pipeline knn_pipe = make_pipeline(StandardScaler(), KNeighborsRegressor()) print(knn_pipe.steps) ``` ``` [('standardscaler', StandardScaler(with_mean=True, with_std=True)), ('kneighborsregressor', KNeighborsRegressor(algorithm='auto', ...))] ``` ```python from sklearn.pipeline import Pipeline pipe = Pipeline((("scaler", StandardScaler()), ("regressor", KNeighborsRegressor))) ``` ??? But let’s talk a bit more about pipelines, because they are great. The pipeline has an attribute called steps, which --- contains its steps. Steps is a list of tuples, where the first entry is a string and the second is an estimator (model). The string is the “name” that is assigned to this step in the pipeline. You can see here that our first step is called “standardscaler” in all lower case letters, and the second is called kneighborsregressor, also all lower case letters. By default, step names are just lowercased classnames. You can also name the steps yourself using the Pipeline class directly. Then you can specify the steps as tuples of name and estimator. make_pipeline is just a shortcut to generate the names automatically. --- # Pipeline and GridSearchCV .small-padding-top[ ```python from sklearn.model_selection import GridSearchCV knn_pipe = make_pipeline(StandardScaler(), KNeighborsRegressor()) param_grid = {'kneighborsregressor__n_neighbors': range(1, 10)} grid = GridSearchCV(knn_pipe, param_grid, cv=10) grid.fit(X_train, y_train) print(grid.best_params_) print(grid.score(X_test, y_test)) ``` ``` {'kneighborsregressor__n_neighbors': 7} 0.60 ``` ] ??? These names are important for using pipelines with gridsearch. Recall that for using GridSearchCV you need to specify a parameter grid as a dictionary, where the keys are the parameter names. If you are using a pipeline inside GridSearchCV, you need to specify not only the parameter name, but also the step name – because multiple steps could have a parameter with the same name. The way to do this is to use the stepname, then two underscores, and then the parameter name, as the key for the param_grid dictionary. You can see that the best_params_ will have this same format. This way you can tune the parameters of all steps in a pipeline at once! And you don’t have to worry about leaking information, since all transformations are contained in the pipeline. You should always use pipelines for preprocessing. Not only does it make your code shorter, it also makes it less likely that you have bugs. --- class: left, middle # Feature Distributions ??? Now that we discussed scaling and pipelines, let’s talk about some more preprocessing methods. One important aspect is dealing with different input distributions. --- class: left, middle .center[ ![:scale 85%](images/img_17.png) ] ??? Here is a box plot of the boston housing data after transforming it with the standard scaler. Even though the mean and standard deviation are the same for all features, the distributions are quite different. You can see very concentrated distributions like Crim and B, and very skewed distribuations like RAD and Tax (and also crim and B). Many models, in particular linear models and neural networks, work better if the features are approximately normal distributed. Let’s also check out the histograms of the data to see a bit better what’s going on. --- class: left, middle .center[ ![:scale 90%](images/boston_hist.png) ] ??? Clearly CRIM and ZN and B are very peaked, and LSTAT and DIS and Age are very asymmetric. Sometimes you can use a hack like applying a logarithm to the data to get better behaved values. There is slightly more rigorous technique though. --- # Box-Cox Transform .left-column[ $$bc_{\lambda}(x) = \cases{\frac{x^\lambda - 1}{\lambda} & \text{if } \lambda \neq 0\cr log(x) & \text{if } \lambda = 0 }$$ Only applicable for positive x! ] .right-column[ ![:scale 90%](images/img_19.png) ] .reset-column[ ```python # sklearn 0.20-dev from sklearn.preprocessing import PowerTransformer pt = PowerTransformer(method='box-cox') # soon: Yeo-Johnson pt.fit(X) ``` ] ??? The Box-Cox transformation is a family of univariate functions to transform your data, parametrized by a parameter lambda. For lamda=1 the function is the identity, for lambda = 2 it is square, lambda =0 is log and there is many other functions in between. For a given dataset, a separate parameter lambda is determined for each feature, by minimizing the skewdness of the data (making skewdness close to zero, not close to -inf), so it is more “gaussian”. The skewdness of a function is a measure of the asymmetry of a function and is 0 for functions that are symmetric around their mean. Unfortunately the Box-Cox transformation is only applicable to positive features. --- .wide-left-column[ ![:scale 85%](images/boston_hist.png) ] .narrow-right-column[Before] .clear-column[] .wide-left-column[![:scale 85%](images/boston_hist_boxcox.png)] .narrow-right-column[After] ??? Here are the histograms of the original data and the transformed data. The title of each subplot shows the estimated lambda. If the lambda is close to 1, the transformation didn’t change much. If it is away from 1, there was a significant transformation. You can clearly see the effect on “CRIM” which was approximately log-transformed, and lstat and nox which were approximately transformed by sqrt. For the binary CHAS the transformation doesn’t make a lot of sense, though. --- .wide-left-column[ ![:scale 85%](images/boston_scatter.png) ] .narrow-right-column[Before] .clear-column[] .wide-left-column[![:scale 85%](images/boston_bc_scaled_scatter.png)] .narrow-right-column[After] ??? Here is a comparison of the feature vs response plot before and after the box-cox transformation. The dis, lstat and crim relationships now look a bit more obvious and linear. --- class: left, middle # Discrete features --- class: center, middle # Categorical Variables .larger[ $$ \lbrace 'red', 'green', 'blue' \rbrace \subset ℝ^p ? $$ ] ??? Before we can apply a machine learning algorithm, we first need to think about how we represent our data. Earlier, I said x \in R^n. That’s not how you usually get data. Often data has units, possibly different units for different sensors, it has a mixture of continuous values and discrete values, and different measurements might be on totally different scales. First, let me explain how to deal with discrete input variables, also known as categorical features. They come up in nearly all applications. Let’s say you have three possible values for a given measurement, whether you used setup1 setup2 or setup3. You could try to encode these into a single real number, say 0, 1 and 2, or e, \pi, \tau. However, that would be a bad idea for algorithms like linear regression --- class: center, middle # Categorical Variables .center[![:scale 60%](images/img_24.png)] ??? If you encode all three values using the same feature, then you are imposing a linear relation between them, and in particular you define an order between the categories. Usually, there is no semantic ordering of the categories, and so we shouldn’t introduce one in our representation of the data. Instead, we add one new feature for each category, And that feature encodes whether a sample belongs to this category or not. That’s called a one-hot encoding, because only one of the three features in this example is active at a time. You could actually get away with n-1 features, but in machine learning that usually doesn’t matter --- class: center, middle .center[![:scale 60%](images/img_25.png)] .center[![:scale 60%](images/img_26.png)] ??? N/A --- class: center, middle .center[![:scale 50%](images/img_27.png)] .left-column[![:scale 30%](images/img_28.png)] .right-column[![:scale 50%](images/img_29.png)] ??? N/A --- class: center, middle .center[![:scale 70%](images/img_30.png)] ??? N/A --- class: smaller #Pandas Categorical Columns ```python import pandas as pd df = pd.DataFrame({'salary': [103, 89, 142, 54, 63, 219], 'boro': ['Manhattan', 'Queens', 'Manhattan', 'Brooklyn', 'Brooklyn', 'Bronx']}) df['boro'] = pd.Categorical( df.boro, categories=['Manhattan', 'Queens', 'Brooklyn', 'Bronx', 'Staten Island']) pd.get_dummies(df) ``` ``` salary boro_Manhattan boro_Queens boro_Brooklyn boro_Bronx boro_Staten Island 0 103 1 0 0 0 0 1 89 0 1 0 0 0 2 142 1 0 0 0 0 3 54 0 0 1 0 0 4 63 0 0 1 0 0 5 219 0 0 0 1 0 ``` ??? N/A --- #OneHotEncoder ```python from sklearn.preprocessing import OneHotEncoder df = pd.DataFrame({'salary': [103, 89, 142, 54, 63, 219], 'boro': [0, 1, 0, 2, 2, 3]}) ohe = OneHotEncoder(categorical_features=[0]).fit(df) ohe.transform(df).toarray() ``` ``` array([[ 1., 0., 0., 0., 103.], [ 0., 1., 0., 0., 89.], [ 1., 0., 0., 0., 142.], [ 0., 0., 1., 0., 54.], [ 0., 0., 1., 0., 63.], [ 0., 0., 0., 1., 219.]]) ``` - Only works for integers right now, not strings. ??? N/A - Fit-transform paradigm ensures train and test-set categories correspond. --- # CategoricalEncoder ```python import pandas as pd df = pd.DataFrame({'salary': [103, 89, 142, 54, 63, 219], 'boro': ['Manhattan', 'Queens', 'Manhattan', 'Brooklyn', 'Brooklyn', 'Bronx']}) ce = CategoricalEncoder().fit(df) ce.transform(df).toarray() ``` ``` array([[ 0., 0., 1., 0., 0., 0., 0., 1., 0., 0.], [ 0., 0., 0., 1., 0., 0., 1., 0., 0., 0.], [ 0., 0., 1., 0., 0., 0., 0., 0., 1., 0.], [ 0., 1., 0., 0., 1., 0., 0., 0., 0., 0.], [ 0., 1., 0., 0., 0., 1., 0., 0., 0., 0.], [ 1., 0., 0., 0., 0., 0., 0., 0., 0., 1.]]) ``` - Always transforms all columns ??? - Fit-transform paradigm ensures train and test-set categories correspond. --- # The Future ## CategoricalEncoder + ColumnTransformer ```python categorical = df.dtypes == object preprocess = make_column_transformer( (StandardScaler(), ~categorical), (CategoricalEncoder(), categorical)) model = make_pipeline(preprocess, LogisticRegression()) ``` --- class: some-space #OneHot vs Statisticians - One-hot is redundant (last one is 1 – sum of others) - Can introduce co-linearity - Can drop one - Choice which one matters for penalized models - Keeping all can make the model more interpretable ??? N/A --- class: some-space #Models Supporting Discrete Features - In principle: - All tree-based models, naive Bayes - In scikit-learn: - None - In scikit-learn soon: - Decision trees, random forests ??? N/A --- class: some-space #Count-Based Encoding - For high cardinality categorical features - Example: US states, given low samples - Instead of 50 one-hot variables, one “response encoded” variable. - For regression: - "people in this state have an average response of y” - Binary classification: – “people in this state have likelihood p for class 1” - Multiclass: – One feature per class: probability distribution ??? N/A --- class: compact # Example: Adult census, native-country .smallest[ ```python data = pd.read_csv("adult.csv") data.columns ``` ``` Index(['age', 'workclass', 'education', 'education-num', 'marital-status', 'occupation', 'relationship', 'race', 'gender', 'capital-gain', 'capital-loss', 'hours-per-week', 'native-country', 'income'], dtype='object') ``` ```python data['native-country'].value_counts() ``` .left-column[ ``` United-States 29170 Mexico 643 ? 583 Philippines 198 Germany 137 Canada 121 Puerto-Rico 114 El-Salvador 106 India 100 Cuba 95 England 90 Jamaica 81 South 80 China 75 Italy 73 Dominican-Republic 70 ``` ] .right-column[ ``` Vietnam 67 Guatemala 64 Japan 62 Poland 60 Columbia 59 Taiwan 51 Haiti 44 Iran 43 Portugal 37 Nicaragua 34 Peru 31 France 29 Greece 29 Ecuador 28 Ireland 24 Hong 20 Trinadad&Tobago 19 Cambodia 19 Thailand 18 Laos 18 Yugoslavia 16 Outlying-US(Guam-USVI-etc) 14 Hungary 13 Honduras 13 Scotland 12 Holand-Netherlands 1 Name: native-country, dtype: int64 ``` ] ] ???  N/A --- class: center #Interaction Features ![:scale 70%](images/img_33.png) ??? N/A --- class: center #Interaction Features ![:scale 50%](images/img_34.png) ![:scale 70%](images/img_35.png) ??? N/A --- class: center, middle ![:scale 50%](images/img_36.png) ![:scale 70%](images/img_37.png) ??? N/A --- .center[ ![:scale 60%](images/img_38.png) ] .smaller[ ```python X_i_train, X_i_test, y_train, y_test = train_test_split( X_interaction, y, random_state=0) logreg3 = LogisticRegressionCV().fit(X_i_train, y_train) logreg3.score(X_i_test, y_test) ``` ] ``` 0.960 ``` ??? N/A --- .center[![:scale 80%](images/img_40.png)] - One model per gender! - Keep original: common model + model for each gender to adjust. - Product of multiple categoricals: common model + multiple models to adjust for combinations ??? N/A --- # More interactions .padding-top[ ``` age articles_bought gender spend$ time_online + Male * (age articles_bought spend$ time_online ) + Female * (age articles_bought spend$ time_online ) + (age > 20) * (age articles_bought gender spend$ time_online) + (age <= 20) * (age articles_bought gender spend$ time_online) + (age <= 20) * Male * (age articles_bought gender spend$ time_online) ``` ] ??? N/A --- class: center # Polynomial Features ![:scale 60%](images/img_41.png) ??? N/A --- class: center # Polynomial Features ![:scale 60%](images/img_42.png) ??? N/A --- class: spacious # Polynomial Features .small-padding-top[ - PolynomialFeatures() adds polynomials and interactions. - Transformer interface like scalers etc. - Create polynomial algorithms with make_pipeline! ] ??? N/A --- class: smaller # Polynomial Features ```python from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures() X_bc_poly = poly.fit_transform(X_bc_scaled) print(X_bc_scaled.shape) print(X_bc_poly.shape) ``` ``` (379, 13) (379, 105) ``` ```python scores = cross_val_score(RidgeCV(), X_bc_scaled, y_train, cv=10) np.mean(scores), np.std(scores) ``` ``` (0.759, 0.081) ``` ```python scores = cross_val_score(RidgeCV(), X_bc_poly, y_train, cv=10) np.mean(scores), np.std(scores) ``` ``` (0.865, 0.080) ``` ??? N/A --- class: spacious # Other Features? - Plot the data, see if there are periodic patterns! ??? N/A --- class: spacious # Discretization and Binning - Loses data. - Target-independent might be bad - Powerful combined with interactions to create new features! ??? N/A


Common signs of infection include respiratory symptoms, fever, cough, shortness of breath and breathing difficulties. In more severe cases, infection can cause pneumonia, severe acute respiratory syndrome, kidney failure and even death.
Standard recommendations to prevent infection spread include regular hand washing, covering mouth and nose when coughing and sneezing, thoroughly cooking meat and eggs. Avoid close contact with anyone showing symptoms of respiratoryillness such as coughing and sneezing.
Because it's a new illness, we do not know exactly how coronavirus spreads from person to person. Similar viruses are spread in cough droplets.
The coronavirus is thought to spread mainly from person to person. This can happen between people who are in close contact with one another.
A person can get COVID-19 by touching a surface or object that has the virus on it and then touching their own mouth, nose, or possibly their eyes.
The coronavirus is thought to spread mainly from person to person. This can happen between people who are in close contact with one another.
The most common symptoms of COVID-19 are fever, tiredness, and dry cough. Some patients may have aches and pains, nasal congestion, runny nose, sore throat or diarrhea. These symptoms are usually mild and begin gradually. Also the symptoms may appear 2-14 days after exposure.
High Fever – this means you feel hot to touch on your chest or back (you do not need to measure your temperature). It is a common sign and also may appear in 2-10 days if you affected.
Continuous cough – this means coughing a lot for more than an hour, or 3 or more coughing episodes in 24 hours (if you usually have a cough, it may be worse than usual).
Difficulty breathing – Around 1 out of every 6 people who gets COVID-19 becomes seriously ill and develops difficulty breathing or shortness of breath.
Stay at home and call your doctor: If you think you have been exposed to COVID-19 and develop a fever and any symptoms, such as cough or difficulty breathing, call your healthcare provider as soon as possible for medical advice.
There is currently no vaccine to prevent coronavirus disease 2019 (COVID-19). The best way to prevent illness is to avoid being exposed to this virus. Stay aware of the latest information on the COVID-19 outbreak, available on the WHO website and through your national and local public health authority.
Regularly and thoroughly clean your hands with an alcohol-based hand rub or wash them with soap and water for at least 20 seconds.
Maintain at least 1 metre (3 feet) distance between yourself & anyone who is coughing or sneezing. If you are too close, get chance to infected.
Hands touch many surfaces and can pick up viruses.

Clean the dirty surfaces– Use detergent or soap and water prior to disinfection.
Stay informed about the local COVID-19 situation – Get up-to-date information about local COVID-19 activity from public health officials.
Dedicated, lined trash can – If possible, dedicate a lined trash can for the ill person.
To date, there is no vaccine and no specific antiviral medicine to prevent or treat COVID-2019To date, there is no vaccine and no specific antiviral medicine to prevent or treat COVID-2019. However, those affected should receive care to relieve symptoms. People with serious illness should be hospitalized. Most patients recover thanks to supportive care.
Antibiotics do not help, as they do not work against viruses. Treatment aims to relieve the symptoms while your body fights the illness. You'll need to stay in isolation, away from other people, until you have recovered.
If you have mild symptoms, stay at home until you’ve recovered. You can relieve your symptoms if you:
Rest and sleep
Keep Warm
Drink plenty of liquids
Use a room humidifier or take a hot shower to help ease a sore throat and cough
If you develop a fever, cough, and have difficulty breathing, promptly seek medical care. Call in advance and tell your health provider of any recent travel or recent contact with travelers.
The best thing you can do now is plan for how you can adapt your daily routine. Take few steps to protect yourself as Clean your hands often, Avoid close contact, Cover coughs and sneezes, clean daily used surfaces etc. The best way to prevent illness is to avoid being exposed to this virus.
On February 11, 2020 the World Health Organization announced an official name for the disease that is causing the 2019 novel coronavirus outbreak, first identified in Wuhan China. The new name of this disease is coronavirus disease 2019, abbreviated as COVID-19. In COVID-19, ‘CO’ stands for ‘corona,’ ‘VI’ for ‘virus,’ and ‘D’ for disease. Formerly, this disease was referred to as “2019 novel coronavirus” or “2019-nCoV”.
A novel coronavirus is a new coronavirus that has not been previously identified. The virus causing coronavirus disease 2019 (COVID-19), is not the same as the coronaviruses that commonly circulate among humans and cause mild illness, like the common cold.
On February 11, 2020 the World Health Organization announced an official name for the disease that is causing the 2019 novel coronavirus outbreak, first identified in Wuhan China. The new name of this disease is coronavirus disease 2019, abbreviated as COVID-19. In COVID-19, ‘CO’ stands for ‘corona,’ ‘VI’ for ‘virus,’ and ‘D’ for disease. Formerly, this disease was referred to as “2019 novel coronavirus” or “2019-nCoV”.
There are many types of human coronaviruses including some that commonly cause mild upper-respiratory tract illnesses. COVID-19 is a new disease, caused be a novel (or new) coronavirus that has not previously been seen in humans. The name of this disease was selected following the World Health Organization (WHO) best practiceexternal icon for naming of new human infectious diseases.
People can fight stigma and help, not hurt, others by providing social support. Counter stigma by learning and sharing facts. Communicating the facts that viruses do not target specific racial or ethnic groups and how COVID-19 actually spreads can help stop stigma.
People in the U.S. may be worried or anxious about friends and relatives who are living in or visiting areas where COVID-19 is spreading. Some people are worried about the disease. Fear and anxiety can lead to social stigma, for example, towards Chinese or other Asian Americans or people who were in quarantine.
Stigma is discrimination against an identifiable group of people, a place, or a nation. Stigma is associated with a lack of knowledge about how COVID-19 spreads, a need to blame someone, fears about disease and death, and gossip that spreads rumors and myths.
Stigma hurts everyone by creating more fear or anger towards ordinary people instead of the disease that is causing the problem.
 Some cause illness in people, and others, such as canine and feline coronaviruses, only infect animals. Rarely, animal coronaviruses that infect animals have emerged to infect people and can spread between people. This is suspected to have occurred for the virus that causes COVID-19. Middle East Respiratory Syndrome (MERS) and Severe Acute Respiratory Syndrome (SARS) are two other examples of coronaviruses that originated from animals and then spread to people. More information about the source and spread of COVID-19 is available on the Situation Summary: Source and Spread of the Virus.
This virus was first detected in Wuhan City, Hubei Province, China. The first infections were linked to a live animal market, but the virus is now spreading from person-to-person. It’s important to note that person-to-person spread can happen on a continuum. Some viruses are highly contagious (like measles), while other viruses are less so.
The virus that causes COVID-19 seems to be spreading easily and sustainably in the community (“community spread”) in some affected geographic areas. Community spread means people have been infected with the virus in an area, including some who are not sure how or where they became infected.
Learn what is known about the spread of newly emerged coronaviruses.
The virus that causes COVID-19 is spreading from person-to-person. Someone who is actively sick with COVID-19 can spread the illness to others. That is why CDC recommends that these patients be isolated either in the hospital or at home (depending on how sick they are) until they are better and no longer pose a risk of infecting others.
How long someone is actively sick can vary so the decision on when to release someone from isolation is made on a case-by-case basis in consultation with doctors, infection prevention and control experts, and public health officials and involves considering specifics of each situation including disease severity, illness signs and symptoms, and results of laboratory testing for that patient.
Current CDC guidance for when it is OK to release someone from isolation is made on a case by case basis and includes meeting all of the following requirements:
The patient is free from fever without the use of fever-reducing medications.
The patient is no longer showing symptoms, including cough.
The patient has tested negative on at least two consecutive respiratory specimens collected at least 24 hours apart.
Someone who has been released from isolation is not considered to pose a risk of infection to others.
On February 11, 2020 the World Health Organization announced an official name for the disease that is causing the 2019 novel coronavirus outbreak, first identified in Wuhan China. The new name of this disease is coronavirus disease 2019, abbreviated as COVID-19. In COVID-19, ‘CO’ stands for ‘corona,’ ‘VI’ for ‘virus,’ and ‘D’ for disease. Formerly, this disease was referred to as “2019 novel coronavirus” or “2019-nCoV”.
There are many types of human coronaviruses including some that commonly cause mild upper-respiratory tract illnesses. COVID-19 is a new disease, caused be a novel (or new) coronavirus that has not previously been seen in humans. The name of this disease was selected following the World Health Organization (WHO) best practiceexternal icon for naming of new human infectious diseases.
People can fight stigma and help, not hurt, others by providing social support. Counter stigma by learning and sharing facts. Communicating the facts that viruses do not target specific racial or ethnic groups and how COVID-19 actually spreads can help stop stigma.
People in the U.S. may be worried or anxious about friends and relatives who are living in or visiting areas where COVID-19 is spreading. Some people are worried about the disease. Fear and anxiety can lead to social stigma, for example, towards Chinese or other Asian Americans or people who were in quarantine.
Stigma is discrimination against an identifiable group of people, a place, or a nation. Stigma is associated with a lack of knowledge about how COVID-19 spreads, a need to blame someone, fears about disease and death, and gossip that spreads rumors and myths.
Stigma hurts everyone by creating more fear or anger towards ordinary people instead of the disease that is causing the problem.
Stay aware of the latest information on the COVID-19 outbreak, available on the WHO website and through your national and local public health authority. Many countries around the world have seen cases of COVID-19 and several have seen outbreaks. Authorities in China and some other countries have succeeded in slowing or stopping their outbreaks. However, the situation is unpredictable so check regularly for the latest news.
You can reduce your chances of being infected or spreading COVID-19 by taking some simple precautions:
Regularly and thoroughly clean your hands with an alcohol-based hand rub or wash them with soap and water.
Why? Washing your hands with soap and water or using alcohol-based hand rub kills viruses that may be on your hands.
Maintain at least 1 metre (3 feet) distance between yourself and anyone who is coughing or sneezing.
Why? When someone coughs or sneezes they spray small liquid droplets from their nose or mouth which may contain virus. If you are too close, you can breathe in the droplets, including the COVID-19 virus if the person coughing has the disease.
Avoid touching eyes, nose and mouth.
Why? Hands touch many surfaces and can pick up viruses. Once contaminated, hands can transfer the virus to your eyes, nose or mouth. From there, the virus can enter your body and can make you sick.
Make sure you, and the people around you, follow good respiratory hygiene.  Then dispose of the used tissue immediately.
Why? Droplets spread virus. By following good respiratory hygiene you protect the people around you from viruses such as cold, flu and COVID-19.
Stay home if you feel unwell. If you have a fever, cough and difficulty breathing, seek medical attention and call in advance. Follow the directions of your local health authority.
Why? National and local authorities will have the most up to date information on the situation in your area. Calling in advance will allow your health care provider to quickly direct you to the right health facility. This will also protect you and help prevent spread of viruses and other infections.
Keep up to date on the latest COVID-19 hotspots (cities or local areas where COVID-19 is spreading widely). If possible, avoid traveling to places – especially if you are an older person or have diabetes, heart or lung disease.
Why? You have a higher chance of catching COVID-19 in one of these areas.
Household members, intimate partners, and caregivers in a nonhealthcare setting may have close contact2 with a person with symptomatic, laboratory-confirmed COVID-19 or a person under investigation. Close contacts should monitor their health; they should call their healthcare provider right away if they develop symptoms suggestive of COVID-19 (e.g., fever, cough, shortness of breath)
Close contacts should also follow these recommendations:
Make sure that you understand and can help the patient follow their healthcare provider’s instructions for medication(s) and care. You should help the patient with basic needs in the home and provide support for getting groceries, prescriptions, and other personal needs.
Monitor the patient’s symptoms. If the patient is getting sicker, call his or her healthcare provider and tell them that the patient has laboratory-confirmed COVID-19. This will help the healthcare provider’s office take steps to keep other people in the office or waiting room from getting infected. Ask the healthcare provider to call the local or state health department for additional guidance. If the patient has a medical emergency and you need to call 911, notify the dispatch personnel that the patient has, or is being evaluated for COVID-19.
Household members should stay in another room or be separated from the patient as much as possible. Household members should use a separate bedroom and bathroom, if available.
Prohibit visitors who do not have an essential need to be in the home.
Household members should care for any pets in the home. Do not handle pets or other animals while sick. For more information, see COVID-19 and Animals.
Make sure that shared spaces in the home have good air flow, such as by an air conditioner or an opened window, weather permitting.
Perform hand hygiene frequently. Wash your hands often with soap and water for at least 20 seconds or use an alcohol-based hand sanitizer that contains 60 to 95% alcohol, covering all surfaces of your hands and rubbing them together until they feel dry. Soap and water should be used preferentially if hands are visibly dirty.
Avoid touching your eyes, nose, and mouth with unwashed hands.
The patient should wear a facemask when you are around other people. If the patient is not able to wear a facemask (for example, because it causes trouble breathing), you, as the caregiver, should wear a mask when you are in the same room as the patient.
Wear a disposable facemask and gloves when you touch or have contact with the patient’s blood, stool, or body fluids, such as saliva, sputum, nasal mucus, vomit, urine.
Throw out disposable facemasks and gloves after using them. Do not reuse.
When removing personal protective equipment, first remove and dispose of gloves. Then, immediately clean your hands with soap and water or alcohol-based hand sanitizer. Next, remove and dispose of facemask, and immediately clean your hands again with soap and water or alcohol-based hand sanitizer.
Avoid sharing household items with the patient. You should not share dishes, drinking glasses, cups, eating utensils, towels, bedding, or other items. After the patient uses these items, you should wash them thoroughly (see below “Wash laundry thoroughly”).
Clean all “high-touch” surfaces, such as counters, tabletops, doorknobs, bathroom fixtures, toilets, phones, keyboards, tablets, and bedside tables, every day. Also, clean any surfaces that may have blood, stool, or body fluids on them.
Use a household cleaning spray or wipe, according to the label instructions. Labels contain instructions for safe and effective use of the cleaning product including precautions you should take when applying the product, such as wearing gloves and making sure you have good ventilation during use of the product.
Wash laundry thoroughly.
Immediately remove and wash clothes or bedding that have blood, stool, or body fluids on them.
Wear disposable gloves while handling soiled items and keep soiled items away from your body. Clean your hands (with soap and water or an alcohol-based hand sanitizer) immediately after removing your gloves.
Read and follow directions on labels of laundry or clothing items and detergent. In general, using a normal laundry detergent according to washing machine instructions and dry thoroughly using the warmest temperatures recommended on the clothing label.
Place all used disposable gloves, facemasks, and other contaminated items in a lined container before disposing of them with other household waste. Clean your hands (with soap and water or an alcohol-based hand sanitizer) immediately after handling these items. Soap and water should be used preferentially if hands are visibly dirty.
Discuss any additional questions with your state or local health department or healthcare provider. Check available hours when contacting your local health department.
Older adults and people of any age who have serious underlying medical conditions may be at higher risk for more serious complications from COVID-19. These people who may be at higher risk of getting very sick from this illness, includes:
Older adults
People who have serious underlying medical conditions like:
Heart disease
Diabetes
Lung disease
If you are at higher risk of getting very sick from COVID-19, you should: stock up on supplies; take everyday precautions to keep space between yourself and others; when you go out in public, keep away from others who are sick; limit close contact and wash your hands often; and avoid crowds, cruise travel, and non-essential travel. If there is an outbreak in your community, stay home as much as possible. Watch for symptoms and emergency signs. If you get sick, stay home and call your doctor. More information on how to prepare, what to do if you get sick, and how communities and caregivers can support those at higher risk is available on People at Risk for Serious Illness from COVID-19.
Only wear a mask if you are ill with COVID-19 symptoms (especially coughing) or looking after someone who may have COVID-19. Disposable face mask can only be used once. If you are not ill or looking after someone who is ill then you are wasting a mask. There is a world-wide shortage of masks, so WHO urges people to use masks wisely.
WHO advises rational use of medical masks to avoid unnecessary wastage of precious resources and mis-use of masks ( Advice on the use of masks).
The most effective ways to protect yourself and others against COVID-19 are to frequently clean your hands, cover your cough with the bend of elbow or tissue and maintain a distance of at least 1 meter (3 feet) from people who are coughing or sneezing. See basic protective measures against the new coronavirus for more information.
The most common symptoms of COVID-19 are fever, tiredness, and dry cough. Some patients may have aches and pains, nasal congestion, runny nose, sore throat or diarrhea. These symptoms are usually mild and begin gradually. Some people become infected but don’t develop any symptoms and don't feel unwell. Most people (about 80%) recover from the disease without needing special treatment. Around 1 out of every 6 people who gets COVID-19 becomes seriously ill and develops difficulty breathing. Older people, and those with underlying medical problems like high blood pressure, heart problems or diabetes, are more likely to develop serious illness. People with fever, cough and difficulty breathing should seek medical attention.
Read about COVID-19 Symptoms from CDC.gov.
Not everyone needs to be tested for COVID-19. For information about testing, see for COVID-19.
The process and locations for testing vary from place to place. Contact your state, local, tribal, or territorial department for more information, or reach out to a medical provider. State and local public health departments have received tests from CDC while medical providers are getting tests developed by commercial manufacturers. While supplies of these tests are increasing, it may still be difficult to find someplace to get tested.
Using the CDC-developed diagnostic test, a negative result means that the virus that causes COVID-19 was not found in the person’s sample. In the early stages of infection, it is possible the virus will not be detected.
For COVID-19, a negative test result for a sample collected while a person has symptoms likely means that the COVID-19 virus is not causing their current illness.
During an outbreak, stay calm and put your preparedness plan to work. Follow the steps below:
Protect yourself and others.
 Keep away from people who are sick. Limit close contact with others as much as possible (about 6 feet).
Put your household plan into action.
Stay informed about the local COVID-19 situation. Be aware of temporary school dismissals in your area, as this may affect your household’s daily routine.
Continue practicing everyday preventive actions. Cover coughs and sneezes with a tissue and wash your hands often with soap and water for at least 20 seconds. If soap and water are not available, use a hand sanitizer that contains 60% alcohol. Clean frequently touched surfaces and objects daily using a regular household detergent and water.
Notify your workplace as soon as possible if your regular work schedule changes.  Learn how businesses and employers can plan for and respond to COVID-19.
Stay in touch with others by phone or email. If you have a chronic medical condition and live alone, ask family, friends, and health care providers to check on you during an outbreak. Stay in touch with family and friends, especially those at increased risk of developing severe illness, such as older adults and people with severe chronic medical conditions.
Outbreaks can be stressful for adults and children. Talk with your children about the outbreak, try to stay calm, and reassure them that they are safe. If appropriate, explain to them that most illness from COVID-19 seems to be mild.
Children respond differently to stressful situations than adults
This is a new virus and we are still learning about it, but so far, there does not seem to be a lot of illness in children. Most illness, including serious illness, is happening in adults of working age and older adults. If there cases of COVID-19 that impact your child’s school, the school may dismiss students. Keep track of school dismissals in your community. Read or watch local media sources that report school dismissals. If schools are dismissed temporarily, use alternative childcare arrangements, if needed.
 Talk with teachers about classroom assignments and activities they can do from home to keep up with their schoolwork.
Discourage children and teens from gathering in other public places while school is dismissed to help slow the spread of COVID-19 in the community.
Depending on the situation, public health officials may recommend community actions to reduce exposures to COVID-19, such as school dismissals. Read or watch local media sources that report school dismissals or and watch for communication from your child’s school. If schools are dismissed temporarily, discourage students and staff from gathering or socializing anywhere, like at a friend’s house, a favorite restaurant, or the local shopping mall.
Coronaviruses are generally thought to be spread from person-to-person through respiratory droplets. Currently there is no evidence to support transmission of COVID-19 associated with food. Before preparing or eating food it is important to always wash your hands with soap and water for 20 seconds for general food safety. Throughout the day wash your hands after blowing your nose, coughing or sneezing, or going to the bathroom.
It may be possible that a person can get COVID-19 by touching a surface or object that has the virus on it and then touching their own mouth, nose, or possibly their eyes, but this is not thought to be the main way the virus spreads.
In general, because of poor survivability of these coronaviruses on surfaces, there is likely very low risk of spread from food products or packaging that are shipped over a period of days or weeks at ambient, refrigerated, or frozen temperatures.
Learn what is known about the spread of COVID-19.
Follow the advice of your local health officials. Stay home if you can. Talk to your employer to discuss working from home, taking leave if you or someone in your household gets sick with COVID-19 symptoms, or if your child’s school is dismissed temporarily. Employers should be aware that more employees may need to stay at home to care for sick children or other sick family members than is usual in case of a community outbreak.
From the evidence so far, the COVID-19 virus can be transmitted in ALL AREAS, including areas with hot and humid weather. Regardless of climate, adopt protective measures if you live in, or travel to an area reporting COVID-19. The best way to protect yourself against COVID-19 is by frequently cleaning your hands. By doing this you eliminate viruses that may be on your hands and avoid infection that could occur by then touching your eyes, mouth, and nose.
There is no reason to believe that cold weather can kill the new coronavirus or other diseases. The normal human body temperature remains around 36.5°C to 37°C, regardless of the external temperature or weather. The most effective way to protect yourself against the new coronavirus is by frequently cleaning your hands with alcohol-based hand rub or washing them with soap and water.
To date there has been no information nor evidence to suggest that the new coronavirus could be transmitted by mosquitoes. The new coronavirus is a respiratory virus which spreads primarily through droplets generated when an infected person coughs or sneezes, or through droplets of saliva or discharge from the nose. To protect yourself, clean your hands frequently with an alcohol-based hand rub or wash them with soap and water. Also, avoid close contact with anyone who is coughing and sneezing.
Most people who get sick with COVID-19 will have only mild illness and should recover at home. Care at home can help stop the spread of COVID-19
Most people who get sick with COVID-19 will have only mild illness and should recover at home. Care at home can help stop the spread of COVID-19
If you are sick with COVID-19 or think you might have it, follow the steps below to help protect other people in your home and community


Hotel Metropolitan Tokyo
Tokyo, Japan
Use securing confined his shutters. Delightful as he it acceptance an solicitude
discretion reasonably. Carriage we husbands advanced an perceive greatest expense on
demesne ye he.


This Guide is basically a landing guide that helps you to create and customize your first IONICV4 project.


Mosquitto Websockets
Subscribed to
Status:
Problemes :
Led ON
Led OFF
Arming
Quel jour voulez-vous surveiller ?
Search


Limited coverage plan provides the basic protection,
and may not be adequate. It may cost you less, but the coverage
is limited to pre defined clause of fixed amount of charges.
Must read policy details for benefit and coverage details.
Comprehensive Coverage
These plans offer much better and flexible coverage.
Most of these plans work like PPO type of 80-20% plan.
Means insured have to pay 20% of the cost for the first
$5,000 per policy period policy pays rest 80%.
Limited Coverage
Limited Plan A
Limited Plan A
Limited Plan A provides basic medical coverage for non-US citizens,
who come to the U.S. for business, pleasure, study or to immigrate with
a maximum coverage of $120,000.
Limited Plan B
Limited Plan B
Limited Plan B provides basic medical coverage for non-US citizens,
who come to the U.S. for business, pleasure, study or to immigrate with
a maximum coverage of $140,000.
Comprehensive Coverage
Comprehensive Plan A
Comprehensive Plan A
Plan A offers medical coverage and emergency services to individuals
and families travelling outside their home countries.
Comprehensive Plan B
Comprehensive Plan B
Plan B offers medical coverage and emergency services to individuals
and families travelling outside their home countries.
Comprehensive Plan C
Comprehensive Plan C
Plan C offers medical coverage and emergency services to individuals
and families travelling outside their home countries.


Home
Blog
About
Contact
D
e
k
h
o
D
e
k
h
o
This is my first set of webpages, where I am trying to implement my learnigs.


Application development
I don’t think they tried to market it to the billionaire, spelunking, base-jumping crowd. i did the same thing to gandhi, he didn’t eat for three weeks. i once heard a wise man say there are no perfect men.
I don’t think they tried to market it to the billionaire, spelunking, base-jumping crowd. i did the same thing to gandhi, he didn’t eat for three weeks. i once heard a wise man say there are no perfect men.


public interface RestClientBuilder
Invoking newBuilder()
is intended to always create a new instance,
not use a cached version.
The RestClientBuilder
is a Configurable
class as defined
by JAX-RS. This allows a user to register providers, implementation specific
configuration.
Implementations are expected to implement this class and provide the instance
via the mechanism in RestClientBuilderResolver.instance()
.
| Modifier and Type | Method and Description |
|---|---|
default RestClientBuilder |
baseUri(java.net.URI uri)
Specifies the base URI to be used when making requests.
|
RestClientBuilder |
baseUrl(java.net.URL url)
Specifies the base URL to be used when making requests.
|
<T> T |
build(java.lang.Class<T> clazz)
Based on the configured RestClientBuilder, creates a new instance of the
given REST interface to invoke API calls against.
|
RestClientBuilder |
connectTimeout(long timeout,
java.util.concurrent.TimeUnit unit)
Set the connect timeout.
|
RestClientBuilder |
executorService(java.util.concurrent.ExecutorService executor)
Specifies the
ExecutorService to use when invoking
asynchronous Rest Client interface methods. |
RestClientBuilder |
followRedirects(boolean follow)
Specifies whether client built by this builder should follow HTTP
redirect responses (30x) or not.
|
RestClientBuilder |
hostnameVerifier(javax.net.ssl.HostnameVerifier hostnameVerifier)
Set the hostname verifier to verify the endpoint's hostname
|
RestClientBuilder |
keyStore(java.security.KeyStore keyStore,
java.lang.String keystorePassword)
Set the client-side key store.
|
static RestClientBuilder |
newBuilder() |
RestClientBuilder |
proxyAddress(java.lang.String proxyHost,
int proxyPort)
Specifies the HTTP proxy hostname/IP address and port to use for requests from client instances.
|
RestClientBuilder |
queryParamStyle(QueryParamStyle style)
Specifies the URI formatting style to use when multiple query parameter values are passed to the client.
|
RestClientBuilder |
readTimeout(long timeout,
java.util.concurrent.TimeUnit unit)
Set the read timeout.
|
RestClientBuilder |
sslContext(javax.net.ssl.SSLContext sslContext)
Specifies the SSL context to use when creating secured transport connections to server endpoints
from web targets created by the client instance that is using this SSL context.
|
RestClientBuilder |
trustStore(java.security.KeyStore trustStore)
Set the client-side trust store.
|
static RestClientBuilder newBuilder()
RestClientBuilder baseUrl(java.net.URL url)
@Path("/api")
at the interface level and a
url
is given with
http://my-service:8080/service
then all REST calls will be
invoked with a url
of
http://my-service:8080/service/api
in addition to any
@Path
annotations included on the method.
Subsequent calls to this method will replace the previously specified
baseUri/baseUrl.url
- the base Url for the service.default RestClientBuilder baseUri(java.net.URI uri)
@Path("/api")
at the interface level and a
uri
is given with
http://my-service:8080/service
then all REST calls will be
invoked with a uri
of
http://my-service:8080/service/api
in addition to any
@Path
annotations included on the method.
Subsequent calls to this method will replace the previously specified
baseUri/baseUrl.uri
- the base URI for the service.java.lang.IllegalArgumentException
- if the passed in URI is invalidRestClientBuilder connectTimeout(long timeout, java.util.concurrent.TimeUnit unit)
Like JAX-RS's javax.ws.rs.client.ClientBuilder
's
connectTimeout
method, specifying a timeout of 0 represents
infinity, and negative values are not allowed.
If the client instance is injected via CDI and the "fully.qualified.InterfaceName/mp-rest/connectTimeout" property is set via MicroProfile Config, that property's value will override, the value specified to this method.
timeout
- the maximum time to wait.unit
- the time unit of the timeout argument.java.lang.IllegalArgumentException
- - if the value of timeout is negative.RestClientBuilder readTimeout(long timeout, java.util.concurrent.TimeUnit unit)
Like JAX-RS's javax.ws.rs.client.ClientBuilder
's
readTimeout
method, specifying a timeout of 0 represents
infinity, and negative values are not allowed.
Also like the JAX-RS Client API, if the read timeout is reached, the
client interface method will throw a javax.ws.rs.ProcessingException
.
If the client instance is injected via CDI and the "fully.qualified.InterfaceName/mp-rest/readTimeout" property is set via MicroProfile Config, that property's value will override, the value specified to this method.
timeout
- the maximum time to wait.unit
- the time unit of the timeout argument.java.lang.IllegalArgumentException
- - if the value of timeout is negative.RestClientBuilder executorService(java.util.concurrent.ExecutorService executor)
ExecutorService
to use when invoking
asynchronous Rest Client interface methods. By default, the executor
service used is determined by the MP Rest Client implementation runtime.executor
- the executor service for the runtime to use when invoking
asynchronous Rest Client interface methods - must be non-null.java.lang.IllegalArgumentException
- if the executor
parameter is
null.RestClientBuilder sslContext(javax.net.ssl.SSLContext sslContext)
sslContext
- the ssl contextjava.lang.NullPointerException
- if the sslContext
parameter is
null.RestClientBuilder trustStore(java.security.KeyStore trustStore)
trustStore
- key storejava.lang.NullPointerException
- if the trustStore
parameter is
null.RestClientBuilder keyStore(java.security.KeyStore keyStore, java.lang.String keystorePassword)
keyStore
- key storekeystorePassword
- the password for the specified keyStore
java.lang.NullPointerException
- if the keyStore
parameter is
null.RestClientBuilder hostnameVerifier(javax.net.ssl.HostnameVerifier hostnameVerifier)
hostnameVerifier
- the hostname verifierjava.lang.NullPointerException
- if the hostnameVerifier
parameter is
null.RestClientBuilder followRedirects(boolean follow)
follow
- - true if the client should follow HTTP redirects, false if not.RestClientBuilder proxyAddress(java.lang.String proxyHost, int proxyPort)
proxyHost
- - hostname or IP address of proxy server - must be non-nullproxyPort
- - port of proxy serverjava.lang.IllegalArgumentException
- if the proxyHost
is null or the proxyPort
is invalidRestClientBuilder queryParamStyle(QueryParamStyle style)
style
- - the URI formatting style to use for multiple query parameter values<T> T build(java.lang.Class<T> clazz) throws java.lang.IllegalStateException, RestClientDefinitionException
T
- the type of the interfaceclazz
- the interface that defines REST API methods for usejava.lang.IllegalStateException
- if not all pre-requisites are satisfied for
the builder, this exception may get thrown. For instance, if the base
URI/URL has not been set.RestClientDefinitionException
- if the passed-in interface class is
invalid.


{% extends "base.html" %} {% block content %}
The Flesh-Network currently hosts {{ file_count }} files:


Pokémon battles appear in most forms of Pokémon media, being the central gameplay aspect of the core series games, as well as being a constant focus of the anime.
Pokémon Go's pok-Types are exactly the same as those in the main Pokémon games, but the effect of those type matchups is slightly different: in brief, things like effective or resisted attacks have slightly different multipliers to the main Pokémon games - although a December 2018 update brought them slightly closer in line.
| Type | Strong Against | Weak Against | Resistant To |
|---|---|---|---|
| Normal | None | Rock, Ghost, Steel | Ghost |
| Fighting | Normal, Rock, Steel, Ice, Dark | Flying, Poison, Psychic, Bug, Ghost, Fairy | Rock, Bug, Dark |
| Flying | Fighting, Bug, Grass | Rock, Steel, Electric | Fighting, Ground, Bug, Grass |
| Poison | Grass, Fairy | Poison, Ground, Rock, Ghost, Steel | Fighting, Poison, Grass, Fairy |
| Ground | Poison, Rock, Steel, Fire, Electric | Flying, Bug, Grass | Poison, Rock, Electric |
Pokémon Go in 2020 continues to add new features, such the arrival of the Go Battle League, Remote Raids and the trade evolution feature. There are also planned changes to PokéCoins on the way. Meanwhile, coming soon is the Johto Throwback quest.
It is the final evolution of Froakie, the Water-type starter from Kalos.
(1996–1999)
The original Pokémon games are Japanese role-playing video games (RPGs) with an element of strategy, and were created by Satoshi Tajiri for the Game Boy. The Pokémon series began with the release of Pocket Monsters Red and Green for the Game Boy in Japan. When these games proved popular, an enhanced Blue version was released sometime after, and the Blue version was reprogrammed as Pokémon Red and Blue for international release. The original Green version was not released outside Japan
(1999–2002)
The second generation of Pokémon video games began in 1999 with the Japanese release of Pokémon Gold and Silver for the Game Boy Color, with Australia and North America getting the game in October 2000 and European release date of April 2001. Like the previous generation, an enhanced version, titled Pokémon Crystal, was later released.
(2002–2006)
Pokémon entered its third generation with the 2002 release of Pokémon Ruby and Sapphire for Game Boy Advance and continued with the Game Boy Advance remakes of Pokémon Red and Green, Pokémon FireRed and LeafGreen (Red and Green representing the original Japanese first generation games; territories outside Japan instead saw releases of Red and Blue). An enhanced remake of Pokémon Ruby and Sapphire titled Pokémon Emerald followed after.
(2006–2010)
In 2006, Japan began the fourth generation of the franchise with the release of Pokémon Diamond and Pearl for Nintendo DS. The games were released in North America on April 22, 2007 and in Australia on June 21, 2007. The game was released in the UK and Europe on July 27, 2007. Other main series games in the fourth generation include Pokémon Platinum, a director's cut version of Diamond and Pearl in the same vein as Pokémon Yellow, Crystal, and Emerald.It was released for the Nintendo DS in Japan on September 13, 2008, in North America on March 22, 2009, and in Australia and Europe on May 14, 2009 and May 22, 2009
Pokémon Sleep is an upcoming mobile game for Android and iOS, as part of the Pokémon series.
Publisher: The Pokémon Company
Take a Pokémon™ journey to the Kanto region with your energetic partner, Pikachu!
Publishers: Nintendo, The Pokémon Company
Pokémon Go is a 2016 augmented reality mobile game developed.
Developer: Niantic
Japanese video game designer
Junichi Masuda is a Japanese video game composer, director, designer, producer, singer, and programmer best known for his work in the Pokémon franchise. He is a member of the Game Freak board of directors, and has been employed at the company since 1989 when he founded it along Satoshi Tajiri and Ken Sugimori
Game designer
Shigeki Morimoto is a game designer and programmer currently working at Game Freak. He has been involved in nearly every main series Pokémon game, since Pokémon Red and Blue Versions where he was a programmer, and the creator of the battle system and the Pokémon "Mew".
Japanese video game designer
Ken Sugimori is a Japanese video game designer, illustrator, manga artist, and director. He is most famous as the character designer and art director for the Pokémon franchise. Sugimori is also credited with the art direction for other titles, including Pulseman


--- layout: post title: "Training a Robust Classifier using Invariance by design Approach" subtitle: "Putting invariance be design approach to practice in an image classification setting." date: 2021-05-23 10:45:13 -0400 background: '/img/grey.png' ---
This article is a part of series that address Robust Deep Learning. We have talked about model generalization, robustness invariance and causality in details in previous articles. In this article, we provide empirical demonstration of how invariance based approach can help ensure model robustness. To best appreciate the content read these articles:
This article explores a case study where we apply the systematic approach discussed in article 4 above to a sign classification problem.
Read complete article here.


TFrameViewer component
procedure LoadTargetFromFile(const Target, Filename: String);
The LoadTargetFromFile method loads an HTML document into a target frame. Target is the name of the frame where the document is to be displayed, and Filename is the name of the file to be loaded.
Filename may optionally contain a document position identifier separated from the actual filename by a # sign.
Filenames with extensions .bmp, .gif,.jpg, .jpeg,.png, are loaded as images. Filenames with the extension .txt are loaded as text files.
FrameViewer.LoadTargetFromFile('RightWin', 'MyHTML.htm#Contents');
would load MyHTML.htm into the frame named RightWin and position the view to the location where the "Contents" position was defined.
See also:


eventd.py ExtremeXOS SNMP Event Monitor¶
Disclaimer¶
This script is provided free of charge by Extreme. We hope such scripts are helpful when used in conjunction with Extreme products and technology; however, scripts are provided simply as an accommodation and are not supported nor maintained by Extreme.  IN NO EVENT SHALL EXTREME OR ITS THIRD PARTY LICENSORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE USE OR DISTRIBUTION OF SUCH SCRIPTS.
Minimum ExtremeXOS Required¶
15.7.1
Files¶
| File | Description |
|---|---|
| eventd.py | the Python module |
| eventd.cfg | the configuration file |
Introduction¶
eventd.py is a Python application, which may be installed on an EXOS switch, which monitors SNMP notifications (traps) sent from other systems. When a trap is received, the trap is compared to entries in a configuration file. If a match is found, EXOS CLI command(s) are performed.
eventd.py can receive SNMP notifications from any number of remote systems allowing for a user to create custom behavior depending on the source of the SNMP notification.
eventd.py can be configured to monitor and react to local SNMP notifications as well by using the loopback address <IP_ADDRESS>.
In the figure below, there are three switches. The top two switches, Switch A <IP_ADDRESS> and Switch B <IP_ADDRESS>, send SNMP notifications to Switch C <IP_ADDRESS>.
Switch <IP_ADDRESS> can take local action depending on the SNMP notification information sent from the other switches.
For example, Switch C could take some action if Switch A had a link go down.
Getting Started¶
The eventd.cfg file must be configured with the local switches IP address that is monitored for incoming SNMP traps. Additionally, the action(s) taken on the local switch when it receives an SNMP trap from another system need to be configured as well.
%configuration Section¶
- The configuration file, eventd.cfg, must be set up with the local system IP address and optionally the local system virtual router::
- %configuration -i <ipaddress> [-v <virtual_router> [-d]
-
-i
<ipaddress>
,
--ip_address
<ipaddress>
¶ the IP address to monitor for incomming SNMP trap notifications
-
-v
<virtual_router>
,
--virtual_router
<virtual_router>
¶ the, optional, virtual router for the <ipaddress>
-
-d
,
--debug
¶
Enable debug. This parameter should not be used in a production environment
Examples:
-i <IP_ADDRESS> -v VR-Mgmt
-i <IP_ADDRESS> -v VR-Default
-i <IP_ADDRESS> -v VR-Mgmt -d
%map Section¶
The %map section translates SNMP OIDs into easy to use names for the %action section (described below).
To get started, some OID.s have already been mapped to names. Any OID received from an SNMP notification may be mapped to a name. Once the OID to name mapping is in place, the name may be used in the %action section as a matching field.
Examples:
<IP_ADDRESS>.<IP_ADDRESS>.5.1=coldStart
<IP_ADDRESS>.<IP_ADDRESS>.5.2=warmStart
<IP_ADDRESS>.<IP_ADDRESS>.5.3=linkDown
<IP_ADDRESS>.<IP_ADDRESS>.5.4=linkUp
<IP_ADDRESS>.<IP_ADDRESS>.5.5=authenticationFailure
%action Section¶
The %action section is used to define entries that match incoming SNMP notifications and the resulting EXOS CLI action to take. Any name defined in the %map section can be used to qualify the entry.
Once all of the fields have matched the incoming SNMP notification, the cmd list is given to EXOS
Example:
fromIP=<IP_ADDRESS>, linkUp, ifIndex=1001, cmd='disable port 2'
In this example, when an SNMP notification is received:
- did it come from IP address <IP_ADDRESS>
- is it a linkup notification
- is it from ifIndex 1001
If all of these are true, the cmd ‘disable port 2’ is given to EXOS.
Loading the Files¶
To load the files onto a switch, put eventd.py and customized eventd.cfg on a tftp server.
- Example:
For this example we will use <IP_ADDRESS> as the IP address of the tftp server. We will also use <IP_ADDRESS> as the management IP address for the switch
To transfer the files to the switch, at the EXOS CLI enter:
tftp <IP_ADDRESS> -g -r eventd.py tftp <IP_ADDRESS> -g -r eventd.cfg
To start the eventd process, at the EXOS CLI enter:
create process eventd python-module eventd start auto
The switch is now ready to receive SNMP notifications and take the actions you.ve defined in the eventd.cfg file.
You only need to perform this operation once. eventd will be restarted if EXOS reboots.
Updating eventd.cfg¶
If you would like to update the information in eventd.cfg, it will be necessary to restart eventd after the new eventd.cfg is loaded on the switch:
Example:
tftp <IP_ADDRESS> -g -r eventd.cfg
restart process eventd
Configuring SNMP trap receivers¶
For any EXOS switch that should forward SNMP notifications (traps) to eventd, you will configure the SNMP agent on that switch.
- Example:
In this example we configure Switch A (<IP_ADDRESS>), and Switch B (<IP_ADDRESS>) to send SNMP traps to <IP_ADDRESS>
On switch A:
configure snmp add trapreceiver <IP_ADDRESS> community public
- On switch B::
- configure snmp add trapreceiver <IP_ADDRESS> community public
Switch A and B are now sending SNMP notifications (traps) to eventd on <IP_ADDRESS>.
Example: eventd with MLAG¶
This section illustrates how eventd can be used with MLAG to have two switch react to events on the other switch.
Throughout this example, we will use the following configuration information for an existing MLAG 2 switch configuration.
Below is the output from show mlag peer
:
**************************************************************************
* Switch 1 *
**************************************************************************
Multi-switch Link Aggregation Peers:
MLAG Peer : m00049697D184
VLAN : isc_mlag Virtual Router : VR-MLAGISC
Local IP Address : <IP_ADDRESS> Peer IP Address : <IP_ADDRESS>
MLAG ports : 3 Tx-Interval : 1000 ms
Checkpoint Status : Up Peer Tx-Interval : 1000 ms
Rx-Hellos : 98380 Tx-Hellos : 98748
Rx-Checkpoint Msgs: 4867 Tx-Checkpoint Msgs: 4872
Rx-Hello Errors : 0 Tx-Hello Errors : 0
Hello Timeouts : 2 Checkpoint Errors : 0
Up Time : 1d:2h:8m:14s Peer Conn.Failures: 2
Local MAC : 00:04:96:97:e9:ee Peer MAC : 00:04:96:97:d1:84
Config'd LACP MAC : None Current LACP MAC : 00:04:96:97:e9:ee
Authentication : None
Alternate path information: None
**************************************************************************
* Switch 2 *
**************************************************************************
Multi-switch Link Aggregation Peers:
MLAG Peer : m00049697E9EE
VLAN : isc_mlag Virtual Router : VR-MLAGISC
Local IP Address : <IP_ADDRESS> Peer IP Address : <IP_ADDRESS>
MLAG ports : 3 Tx-Interval : 1000 ms
Checkpoint Status : Up Peer Tx-Interval : 1000 ms
Rx-Hellos : 96018 Tx-Hellos : 96513
Rx-Checkpoint Msgs: 4715 Tx-Checkpoint Msgs: 4713
Rx-Hello Errors : 0 Tx-Hello Errors : 0
Hello Timeouts : 0 Checkpoint Errors : 0
Up Time : 1d:2h:8m:14s Peer Conn.Failures: 0
Local MAC : 00:04:96:97:d1:84 Peer MAC : 00:04:96:97:e9:ee
Config'd LACP MAC : None Current LACP MAC : 00:04:96:97:e9:ee
Authentication : None
Alternate path information: None
On Switch 1:
Edit the eventd.cfg file:
%configuration
-i <IP_ADDRESS> -v VR-MLAGISC
Transfer the file to the switch:
tftp <tftpserver> -g -r eventd.cfg
Start eventd:
create process eventd python-module eventd start auto
Tell SNMP to send traps to the other switch: configure snmp add trapreceiver <IP_ADDRESS> community public
On Switch 2:
Edit the eventd.cfg file:
%configuration
-i <IP_ADDRESS> -v VR-MLAGISC
Transfer the file to the switch:
tftp <tftpserver> -g -r eventd.cfg
Start eventd:
create process eventd python-module eventd start auto
Tell SNMP to send traps to the other switch:
configure snmp add trapreceiver <IP_ADDRESS> community public


Developer's Guide
It is assumed developers will use Docker for the stack, other than the relatively simple process of compiling binaries.
 See Not Compiling Locally.
Docker
Install Docker CE, which will give you the
docker
and docker compose
commands.
As mentioned before, Docker is the preferred method for development. Manual setup instructions would be needlessly complicated to handle installing the lower-level libraries you’ll need, like a very specific version of poppler-utils, openjpeg with PNG support, and so forth.
If you choose not to use Docker, you’re on your own. Look at the docker files
included in the repository, and the service/deploy files under rhel7
. These
are the only references for doing a manual installation.
Application
Grab the NCA repository
git clone git@github.com:uoregon-libraries/newspaper-curation-app.git nca
cd nca
You don’t have to specify “nca” as the destination; I just find it easier to use than the full name. When reading the documentation, if you don’t call it “nca”, make sure you mentally replace references to that directory / app name.
Copy docker configuration
cp docker-compose.override.yml-example docker-compose.override.yml
The override file specifies useful things like automatically mounting your local binaries to speed up the edit+compile+test loop, mounting in your local templates and static files, mapping the proxy service’s port, and running in debug mode.
cp env-example .env
vim .env
.env
sets up default environment variables which docker compose
commands
will use. A sample file might look like this:
APP_URL="https://jechols.uoregon.edu"
NCA_NEWS_WEBROOT="https://oregonnews.uoregon.edu"
This would say that all app URLs should begin with
https://jechols.uoregon.edu
(the default is localhost
, which is usually
fine for simple dev work), and that the live issues are found on
https://oregonnews.uoregon.edu
. The live newspaper server is expected to
have the legacy chronam JSON handlers, as described in
Services.
Compile
make
Binaries have to be built before starting up docker if you are mounting them into the container.
Get all images
docker compose build
docker compose pull
Building the NCA application image will take a long time. Grab some coffee. And maybe a nap….
Note that once it’s been built, further builds will be quick as docker will cache the expensive operations (compiling custom versions of poppler and openjpeg) and only update what has changed (e.g., NCA source code).
Start the stack
Run docker compose up
, and the application will be available at
$APP_URL/nca
. Note that on the first run it will take a while to respond as
the system is caching all known issues - including those on the defined live
site.
Test Data
You won’t get far without setting up some test issues. NCA has a rudimentary setup for grabbing issues from a live server and turning them into testable data for local use.
The process is detailed on the Testing page.
Coding
All source code lives under src/
and is broken up by “local” packages.
Everything which compiles into a standalone binary lives in src/cmd/
.
Comprehensive documentation exists only in the source code, but can be viewed
with go doc
; e.g.:
# Read the entire "issuefinder" package's documentation
go doc ./src/issuefinder
# Read the Finder type's documentation
go doc ./src/issuefinder Finder
Validation
make
will do basic linting and then compile the code if there were no
compiliation / linter errors.
There are a few unit tests which can be executed via make test
. Coverage is
spotty at best, but some level of sanity-checking does exist. More
comprehensive end-to-end testing is explained in the
Testing page.
Edit + Compile + Test Loop
Here’s a nice shortcut one can use to speed up the process since, unlike PHP, this project requires compilation before it starts up:
alias dc='docker compose'
make fast
dc restart web proxy workers
dc logs -f web proxy workers
The alias just makes it easier to work with docker in general, and can be put
into a .bash_aliases
file or similar.
General Development Notes
- If you make a database schema change (e.g., a new migration), or other major
changes (e.g., changing your
docker-compose.override.yml
file), you should bring the whole stack down and back up - If things seem “weird”, bring the whole stack down and back up
- Only run
make fast
for quick test loops, as it skips static analysis validations like code formatting and linting - Run
make clean
if you don’t trust what you’re seeing; it’ll remove all cached compiler output - Run
make distclean
if you want to delete all cached / downloaded dependencies. This should rarely be necessary, if ever.
Advanced Users
A handy script, scripts/localdev.sh
, has been provided for advanced
users. Using it via source
will expose several useful functions for easing
a more local development environment. Docker is still expected for the IIIF
server and the database, but the NCA applications will be completely local.
This can be a much faster way to do development if you don’t mind a more
complicated setup.
For this to work, however:
- You must understand how the Docker image works and replicate it locally. This means all the dependencies, like poppler utils and openjpeg, must be installed locally. Don’t pursue this avenue if you don’t know how or aren’t comfortable locally installing these things.
- You must have a strong understanding of how NCA works: which binaries do what, the overall workflow both at a high-level and a technical level, etc.
- You must have a pretty thorough understanding of bash so you can read through
localdev.sh
and figure out which commands make sense. They won’t be documented very carefully here. - You must be comfortable working with docker on the command line.
Settings:
- All paths need to point to your local filesystem, e.g.,
APP_ROOT="/home/jechols/nca"
. WEBROOT="http://localhost:8080"
IIIF_BASE_URL="http://localhost:12415/images/iiif"
- Paths to commands must match the path on your local system:
GHOSTSCRIPT
,OPJ_COMPRESS
, etc.
Additionally, docker-compose.override.yml
needs to expose RAIS (“iiif”) on
12415 and mysql (“db”) on 3306.
The rest is left as an exercise for the reader. Really, if you made it this far, and you grasp bash, reading the localdev script should get you the rest of the way.


{% extends "base.html" %}
{% load static %}
{% block nav_title %}
Application Status
{% endblock %}
{% block nav_title_responsive %}
Application Status
{% endblock %}
{% block title %}
Application Status
{% endblock %}
{% block content %}
{% if status == "Application Not Started" %}
{% if over_application_deadline %}
We are no longer accepting applications for Uncommon Hacks 2019. Apply again next year!
{% else %}
Welcome! Please submit an application for Uncommon Hacks 2019 by following the link below.
{% endif %}
{% endif %}
{% if status == "Awaiting Decision" %}
Submitted! Thank you for your applying. We are excited to review your application,
and will notify you via email regarding your decision.
If you have any questions in the mean time,
email us:
celery AT uncommonhacks.com or shoot us a
facebook message.
{% endif %}
{% if status == "Waitlist" %}
Waitlisted. At this time we cannot offer you a spot.
If one opens up we will notify you. Feel free to
email us:
celery AT uncommonhacks.com or shoot us a
facebook message.
{% endif %}
{% if status == "Not Admitted" %}
We are not able to offer you a spot at Uncommon Hacks this year.
We hope that you will apply again next year!
{% endif %}
{% if status == "Admitted" %}
{% if over_confirmation_deadline %}
The confirmation deadline for Uncommon Hacks 2019 has passed. Apply again next year!
{% else %}
Admitted! We are excited to have you at Uncommon Hacks 2019. Please fill out the
form below before {{ conf_deadline }} to confirm your attendance. Should you have any questions
email us:
celery AT uncommonhacks.com or shoot us a
facebook message.
{% endif %}
{% endif %}
{% if status == "Confirmed" %}
Confirmed! See you in Chicago. If you have any lingering questions
email us:
celery AT uncommonhacks.com or shoot us a
facebook message.
{% endif %}
{% if open_application %}
Apply Here!
{% endif %}
{% if open_confirmation %}
Confirm Here!
{% endif %}


Development plans data fields
When publishing your development plan data, follow this guidance on how to format each field in each data file.
development-plan-document
| Field | Description |
|---|---|
| development-plan-document | a unique identifier for the document |
| description | an optional description of the document |
| development-plan-types | a list of document types e.g. local-plans |
| development-policies | a list of references for all the policies in the document |
| document-url | a URL to the document |
| geographies | a list of references to the areas covered in the document. Use the statistical geography code if the document covers the whole local authority area. If it is a small area use references for each shape from your GIS |
| name | the name of the document |
| notes | an optional notes field |
| organisations | a list of organisation identifiers |
| entry-date | the date you add the record in the format YYYY-MM-DD |
| start-date | the beginning of the period the document covers. Can be an estimated date in the future. Format YYYY-MM-DD |
| end-date | the end of the period the document covers. Can be an estimated date in the future. Format YYYY-MM-DD |
development-plan-timetable
| Field | Description |
|---|---|
| development-plan-status | the status of the document. Allowable values are: emerging or adopted |
| development-plan-document | the identifier for the document the status applies to |
| notes | an optional notes field |
| entry-date | the date you add the record in the format YYYY-MM-DD |
| start-date | the date the document entered the status. Format YYYY-MM-DD |
| end-date | the date the document finished having the status. Format YYYY-MM-DD |
development-policy
| Field | Description |
|---|---|
| development-policy | a unique identifier for the policy |
| description | an optional description of the policy |
| development-policy-categories | a list of categories the policy belongs to |
| geographies | a list of references to areas the policy covers |
| name | the name of the policy |
| notes | an optional field to put notes about the policy |
| organisation | an identifier for the organisation that owns the policy |
| entry-date | the date the record was added, in the format YYYY-MM-DD |
| start-date | the date the policy came into force, in the format YYYY-MM-DD |
| end-date | the date the policy ceased, whether it has been superseded or it no longer applies. Format YYYY-MM-DD |