7 Loading Data and Data Cleaning
Screening and cleaning your data to identify and fix any potential errors (missing data, typos, errors, etc.) is an important step before conducting any analyses. This is known as Quality Assurance/Quality Control, or QA/QC. This section includes an overview of steps that should be taken to properly screen your data and introduces some functions that can come in handy when cleaning your data. If you have a small dataset that won’t be updated often, screening and cleaning your data may be easiest in Microsoft Excel by sorting and filtering your data columns. However, we recommend performing your data cleaning using R. This has the advantage that all changes made to a raw dataset will be recorded in a script that is reproducible, which may be especially useful when working with large datasets, if you want to quickly modify any steps of your cleaning process, or if you receive additional data.
7.1 Loading Data
Throughout this section and the following fisheries analysis and plotting sections, we’ll use a common data set. First, create a new folder in your working directory called “_data“. Next, download the following file onto your computer. Right click on the link, and save it in your”_data" folder.
Right click and save-link-as to download landings data
Let’s read this dataset into R and determine the structure of the dataset. The landings_data
data frame is from a fishery-dependent landing site survey. The species included in this data set is Caesio cuning, a yellowtail fusilier. We’ll be able to use these data to create length-frequency histograms that describe the size structure of the population, as well as trends in catch and CPUE.
We can look at the raw data just by typing landings_data
.
landings_data <- read_csv("_data/sample_landings_data_raw.csv")
landings_data
## # A tibble: 7,214 x 8
## yy dat trip effort gr sp l_cm w_cm
## <int> <chr> <int> <int> <chr> <chr> <dbl> <dbl>
## 1 2003 4/30/03 1 10 Trap Caesoi cunning 36 1089.1402
## 2 2003 4/30/03 1 10 trap Caesio cuning 29 565.3879
## 3 2003 4/30/03 1 10 Trap Caesio cuning 34 915.8276
## 4 2003 4/30/03 1 10 Trap Caesio cuning 36 1089.1402
## 5 2003 4/30/03 1 10 Trap Caesio cuning 34 915.8276
## 6 2003 4/30/03 1 10 Trap Caesoi cunning 28 508.3185
## 7 2003 4/30/03 1 10 Trap Caesio cuning 30 626.6000
## 8 2003 4/30/03 1 10 Trap Caesio cuning 27 455.2443
## 9 2003 4/30/03 1 10 Trap Caesio cuning 33 836.5681
## 10 2003 4/30/03 1 10 Trap Caesio cuning 35 999.9688
## # ... with 7,204 more rows
You’ll first notice that R calls this data frame a tibble
, which is just another word for a nice clean version of a landings_data frame. This format is automatically used when you read in data using read_csv
, which we always recommend. e can see that there are [7214] individual fish catch observations (rows) in our data frame and [8] variables (columns). The columns include the year and date when the measurement was collected, the fishing trip ID, how many hours were fished for each trip, what gear was used, the species, the length of the fish, and the weight of the fish.
7.2 Data Structure
First, let’s give our columns more descriptive column headings. We can rename columns using the rename
function from the dplyr
package. Let’s also convert the Date
variable to a date format using the mdy
function from the lubridate
package. We start by taking the landings data frame we loaded into R, and working through a series of “pipes”, designated by the %>%
operation, which progressively analyzes the data from one step to the next. Essentially, the output of one line is fed into the input of the next line.
# Start with the landings_data data frame
landings_data <- landings_data %>%
# Rename the columns
rename(Year = yy,
Date = dat,
Trip_ID = trip,
Effort_Hours = effort,
Gear = gr,
Species = sp,
Length_cm = l_cm,
Weight_g = w_cm) %>%
# Turn the date column into a date format that R recognizes
mutate(Date = mdy(Date))
landings_data
## # A tibble: 7,214 x 8
## Year Date Trip_ID Effort_Hours Gear Species Length_cm
## <int> <date> <int> <int> <chr> <chr> <dbl>
## 1 2003 2003-04-30 1 10 Trap Caesoi cunning 36
## 2 2003 2003-04-30 1 10 trap Caesio cuning 29
## 3 2003 2003-04-30 1 10 Trap Caesio cuning 34
## 4 2003 2003-04-30 1 10 Trap Caesio cuning 36
## 5 2003 2003-04-30 1 10 Trap Caesio cuning 34
## 6 2003 2003-04-30 1 10 Trap Caesoi cunning 28
## 7 2003 2003-04-30 1 10 Trap Caesio cuning 30
## 8 2003 2003-04-30 1 10 Trap Caesio cuning 27
## 9 2003 2003-04-30 1 10 Trap Caesio cuning 33
## 10 2003 2003-04-30 1 10 Trap Caesio cuning 35
## # ... with 7,204 more rows, and 1 more variables: Weight_g <dbl>
7.3 Missing values
Next, let’s check our data frame to determine if there are any missing values by subsetting observations (rows) in our dataframe that have missing values using the complete_cases
function and the logical operator for negation, !
.
landings_data[!complete.cases(landings_data),]
## # A tibble: 3 x 8
## Year Date Trip_ID Effort_Hours Gear Species Length_cm
## <int> <date> <int> <int> <chr> <chr> <dbl>
## 1 2003 2003-05-01 10 10 <NA> Caesio cuning 19.000
## 2 2003 2003-05-01 10 10 Handline Caesio cuning 19.000
## 3 2004 2004-12-18 NA 9 Trap Caesio cuning 20.104
## # ... with 1 more variables: Weight_g <dbl>
There are 3 rows in our dataframe with missing values. If we want to remove observations with missing data from our dataset we can use the na.omit
function which will remove any rows with missing values from our dataset:
landings_data <- na.omit(landings_data)
landings_data
## # A tibble: 7,211 x 8
## Year Date Trip_ID Effort_Hours Gear Species Length_cm
## <int> <date> <int> <int> <chr> <chr> <dbl>
## 1 2003 2003-04-30 1 10 Trap Caesoi cunning 36
## 2 2003 2003-04-30 1 10 trap Caesio cuning 29
## 3 2003 2003-04-30 1 10 Trap Caesio cuning 34
## 4 2003 2003-04-30 1 10 Trap Caesio cuning 36
## 5 2003 2003-04-30 1 10 Trap Caesio cuning 34
## 6 2003 2003-04-30 1 10 Trap Caesoi cunning 28
## 7 2003 2003-04-30 1 10 Trap Caesio cuning 30
## 8 2003 2003-04-30 1 10 Trap Caesio cuning 27
## 9 2003 2003-04-30 1 10 Trap Caesio cuning 33
## 10 2003 2003-04-30 1 10 Trap Caesio cuning 35
## # ... with 7,201 more rows, and 1 more variables: Weight_g <dbl>
Checking the data structure again, we can see that the 3 rows containing NA
values have been removed from our dataframe. You may not always wish to remove NA
values from a dataset, if you still want to keep other values in that observation. Even if you want to keep observations with NA
values in the dataset, it is still good to identify NA
s and know where they occur to ensure they don’t create problems during analyses.
7.4 Typos
We can check for typos by using the unique
function, which will tell us all of the unique values found within a particular column. As an example, let’s look at the Gear
variable.
unique(landings_data$Gear)
## [1] "Trap" "trap" "Muroami" "Handline" "Gillnet" "Trolling"
## [7] "Speargun"
The gear variable has 7 unique values, however, we know there should only be 6 gears present in the dataset. We can see that “trap” appears twice because capitalization was inconsistent. The lower case ‘t’ causes R to read it as a unique value gear type. We can fix this by making sure all of our values in the Gear
variable are consistent and have all lowercase letters using the tolower
function. Alternatively, we could change them to all uppercase using the toupper
function.
landings_data <- landings_data %>%
mutate(Gear = tolower(Gear))
unique(landings_data$Gear)
## [1] "trap" "muroami" "handline" "gillnet" "trolling" "speargun"
Now we have the correct number (6) of unique gears in our dataset.
Now, let’s check another our Species
variable for typos:
unique(landings_data$Species)
## [1] "Caesoi cunning" "Caesio cuning"
The species
is showing 2 unique values, but we know there should only be one species in our dataset. It appears there is a spelling error on one of our species names. We can check how many times each of the 2 species spellings occurs in our dataset by using the nrow
function on a filtered subset of data for each of the two Species
values:
landings_data %>%
filter(Species == "Caesoi cunning") %>%
nrow()
## [1] 2
landings_data %>%
filter(Species == "Caesio cuning") %>%
nrow()
## [1] 7209
It looks like “Caesoi cunning” likely the typo because it only appears twice in our dataset, while “Caesio cunning” appears (7209) times. We can fix this by replacing the misspelled Species
value and replacing it with the value that is spelled correctly. We do this using mutate
and replace
.
landings_data <- landings_data %>%
mutate(Species = replace(Species,Species == "Caesoi cunning", "Caesio cuning"))
unique(landings_data$Species)
## [1] "Caesio cuning"
Now we have only one species value in our Species
variable in our dataset, which is correct. The unique values of all categorical columns (i.e., gear type, species name, etc) should be examined during the data screening and cleaning process.
7.5 Errors
Errors in numeric/integer values may be caused from typos during data entry or from an error during the data collection process (for example, maybe the scale was broken or not zeroed out before weighing). To look at the range and distribution of a numeric variable, the summary
function can be used.
summary(landings_data$Length_cm)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.00 23.00 25.00 25.81 27.00 2400.00
Looks like we have a max Length_cm
value that is order of magnitude higher than the mean and median values. Visualizing numeric data is another great way to screen continuous data and identify data outlines that may be caused from errors in the dataset:
plot(landings_data$Length_cm)
We can clearly see there is an outlier in our data (upper left corner of the plot). We are not sure how this error occurred, but we know that this is not correct. In fact, we know that the maximum possible size of our species 100 cm. We know that a measurement or typo error must have occurred for any Length_cm
values that are over 100 cm We can remove these erroneous data by only including observations in our dataset with values over 100 cm (species maximum size) using the filter
function:
landings_data <- landings_data %>%
filter(Length_cm < 100)
plot(landings_data$Length_cm)
Now all of our data contains accurate length observations that are in the range of our species length. This process of plotting and examining should be conducted for each of our numeric variables before conducting any analyses to identify any outliers and to remove any erroneous data. In this example, we will skip this step for the Weight_g
and Effort_Hours
column, although you may wish to do this as a learning exercise on your own.
7.6 Saving clean data
Now that we have completed our data cleaning and screening, let’s examine the structure of our data frame again:
landings_data
## # A tibble: 7,208 x 8
## Year Date Trip_ID Effort_Hours Gear Species Length_cm
## <int> <date> <int> <int> <chr> <chr> <dbl>
## 1 2003 2003-04-30 1 10 trap Caesio cuning 36
## 2 2003 2003-04-30 1 10 trap Caesio cuning 29
## 3 2003 2003-04-30 1 10 trap Caesio cuning 34
## 4 2003 2003-04-30 1 10 trap Caesio cuning 36
## 5 2003 2003-04-30 1 10 trap Caesio cuning 34
## 6 2003 2003-04-30 1 10 trap Caesio cuning 28
## 7 2003 2003-04-30 1 10 trap Caesio cuning 30
## 8 2003 2003-04-30 1 10 trap Caesio cuning 27
## 9 2003 2003-04-30 1 10 trap Caesio cuning 33
## 10 2003 2003-04-30 1 10 trap Caesio cuning 35
## # ... with 7,198 more rows, and 1 more variables: Weight_g <dbl>
We now have [7208] observations, with [8] variables, and with each variable being the correct data type. We can compare this to our raw dataset and see that we removed 6 observations (3 observations had missing values and 3 had error). This script may come in handy if, for example, we realize that the maximum size of our species is actually 200 cm (not 100 cm). We will know that our dataset does not include any length observations over 100 cm because we have documented our cleaning process and can easily go back to this script and change the 100 to a 200 and rerun this script. If we receive more data, we can also simply re-run this script, and all data cleaning steps will be performed again automatically.
We can save this dataset using a new name so that we have a copy of both the raw, and clean data. Now, we are ready to summarize and analyze our clean dataset.
write_csv(landings_data,"_data/sample_landings_data_clean.csv")


Sin
bad
Home
Book Flight
Reservations
Story
About us
Sinbad Team
Mohammad Alzoubi
Leen Duafi
Amneh Al-momany
Raghad Al-boriny
Tariq Zeadeh


T-SQL to Transfer Data based on Periodic Date Ranges
I don’t think I’d be wrong in stating that almost all transactional and analytical systems store or make use of date, time, or parts of to achieve the respective functional targets. A task I had to complete once was to find a way to retrieve data based on the period...
[Read More]


Multi-Purpose Template with creative animation!
buy now!
creative design
parallax and animations
different color schemes
responsive
demos
For your convenience every template has many different elements combinations.
evio - app screens
default page
elements animation
evio - sidebar menu
default page
elements animation
evio welcome banner
default page
elements animation
evio banner with tabs
default page
elements animation
evio banner-slider
default page
elements animation
evio video banner
default page
elements animation
developed by UnionAgency


--- layout: post permalink: alltvstands.html Tags: Array NameOfCoupon: All TV Stands Cash Back Summary: See our All TV Stands Coupon Code, All TV Stands Rebate, All TV Stands Promo Code, All TV Stands Discount, All TV Stands Coupon Cash Back Rebate here. MetaKeywords: All TV Stands Coupon Code, All TV Stands Rebate, All TV Stands Promo Code, All TV Stands Cash Back Rebate, All TV Stands Discount, All TV Stands Coupon Image: images/PJ-4071.gif LinkURL: http://www.gopjn.com/t/8-4005-54128-41336 affiliate_url_link: http://www.icouponblog.com/jane.php?id=3535 thesis_readmore: See the All TV Stands Coupon thesis_thumb: http://www.icouponblog.com/tn.php?merchantURL=alltvstands.com Title: Save 3% - All TV Stands Coupon Code for alltvstands.com. All TV Stands Rebate & Discount thesis_description: Our All TV Stands Discount Coupon Code for alltvstands.com. We have the best All TV Stands Rebate anywhere. thesis_keywords: All TV Stands, All TV Stands Coupon Code, All TV Stands Discount, All TV Stands Rebate product_name: All TV Stands hop_url: http://www.icouponblog.com/hop.php?id=3535 ---
If you are looking for a television stand that is practical, attractive, has lots of storing places but does not take up too much space visit www.alltvstands.com and choose from a wide array of television stands entertainment centers and media storage items. Get the television stand and entertainment center that suits you best. Check out www.alltvstands.com for high quality television stands and entertainment centers at low, affordable prices. www.alltvstands.com is an exciting website where you will see hundreds of items to choose from. Use our discount coupons to get a great price.
www.alltvstands.com has a large selection of television stands, media storage and entertainment centers. You can get stands according to the size and shape of your television and sound systems. You can get modern, contemporary stands or traditional, classic ones. There are beautiful stands and entertainment centers in glass, wood and other materials. If you live in an apartment or a mansion, there is a TV stand or an entertainment center available for your room, family room that suits your home and budget. You can also get TV stands for your office, commercial center or school. You can find hundreds of items to choose from in one place. Find one that suits your budget and style. Check it out today.
www.alltvstands.com is the best place to buy high quality, low priced television stands and entertainment centers. You can visit the website at www.alltvstands.com. The user friendly website is easy to navigate; you can find products according to price, size, and category. Save money by using our discount coupons today and everyday.


Behind the Scenes
One of the main goals of Facebook Connect (FBC) is to allow your site visitors to log into your site as an EE member using their Facebook account. The advantage is that visitors to your site do not need to keep track yet another username and password - their Facebook account is all they need to know to log into your website.
- Passive Registration (new users with no EE account)
- Non-Passive Registration (new users with no EE account)
- Returning Users (after creating an EE account through FBC)
- Users with a Previous EE Member Account
Passive Registration (new users with no EE account)
Your site's registration can be automated using FBC's passive registration feature. New users automatically receive an EE member account and are automatically logged into your site. Behind the scenes, these are the chain of events that occur for a new user when passive registration is enabled:
- A new user (ex: no EE member account) visits your website and clicks the FBC Login button.
- If the user is not logged into Facebook, a popup window will appear asking them to first login to Facebook.
- A popup appears to ask the user to register your website as one of their apps in their Facebook account.
- The user allows the permissions mentioned in the popup and clicks Allow.
- For permissions, if email is allowed as a permission, for example, FBC will add the user's real Facebook email address in the EE member account's email field. This process is similar for the other permissions.
- Permissions are based on the allowed permissions set by the permissions parameter in the Login tag.
- (Background) FBC will create an EE account, based on one of the two following cases:
- FBC will create an EE member account from the users basic Facebook data, and then link the EE member account to the users Facebook account.
- The user is now logged into both Facebook and your EE site, using only their Facebook account. This is also known as being FBC logged in.
Non-Passive Registration (new users with no EE account)
You may also choose to allow registration on your website with a user's Facebook account through a more active registration approach. This option assumes you're using a member registration add-on such as Solspace User addon or similar. Behind the scenes, these are the chain of events that can occur for a new user when passive registration is disabled:
- A new user (ex: no EE member account) visits your website and clicks the FBC Login button.
- If the user is not logged into Facebook, a popup window will appear asking them to first login to Facebook.
- The user is sent to a page with a Register form based on FBC:Login's return_to_register parameter.
- The user fills out your Registration form (with Solspace User addon or similar) and successfully submits form.
- (Background) EE will create an EE member account as usual.
- User will need to be presented with FBC Login button again to sync newly created EE account with Facebook.
- Continue to Users with a Previous EE Member Account documentation for next steps.
Returning Users (after creating an EE account through FBC)
If the user revisits your site again later, they will be automatically logged in to your site as long as their browser remembers them. If not, they will only need to click on the FBC Login button to log into your website as an EE member. Here are the chain of events in that case:
- A user visits your website and clicks the FBC Login button.
- If the user is not logged into Facebook, a popup window will appear asking them to first login to Facebook.
- (Background) FBC compares the user's Facebook account information with the linked EE member account.
- (Background) FBC logs the user in to your website as an EE user.
- The user is now logged into both Facebook and EE. This is also known as being FBC logged in.
Users with a Previous EE Member Account
Users that have an EE member account created before FBC was installed, or created an EE member account using the native EE or Solspace User addon (or similar) registration form, will first need to log into EE before linking their account to their Facebook account. If a user with a previous EE member account does not log into EE, FBC will create a new EE member account when using the FBC Login button if Passive Registration is ON, effectively creating two accounts for this user (undesirable of course).
Here are the chain of events for users with a previous EE member account / already logged into EE but not yet synced to Facebook:
- A user first logs into EE using a standard login form or similar.
- The user then clicks the FBC Login button.
- If the user is not logged into Facebook, a popup window will appear asking them to first login to Facebook.
- A popup appears to ask the user to register your website as one of their apps in their Facebook account.
- The user allows the permissions mentioned in the popup and clicks Allow.
- For permissions, if email is allowed as a permission, for example, FBC will add the user's real Facebook email address in the EE member account's email field. This process is similar for the other permissions.
- Permissions are based on the allowed permissions set by the permissions parameter in the Login tag.
- (Background) FBC will create an EE account, based on one of the two following cases:
- If the Confirm Before Syncing Accounts? preference is set to NO (most common setting):
- FBC will create an EE member account from the users basic Facebook data, and then link the EE member account to the users Facebook account.
- If the Confirm Before Syncing Accounts? preference is set to YES:
- An EE member account will be created and linked with the user’s Facebook account only after they complete the FBC Account Sync Form.
- Access to the FBC Account Sync Form can be done using the return_to_confirm_account_sync parameter in Login tag.
- Once the FBC Account Sync Form is completed and submitted, FBC will create an EE member account from the users basic Facebook data, and then link the EE member account to the users Facebook account.
- If the Confirm Before Syncing Accounts? preference is set to NO (most common setting):
- The user is now logged into both Facebook and your EE site, using only their Facebook account. This is also known as being FBC logged in.


Pitches Thrown by {{pitcher}} in {{season}}
Repertoire
Selection
Increasing velocity →
Locations
Back


"Weverse Fairy" BTS' Jin received an Award and His reaction is hillarious
by memory-boxBTS' Jin Prove His Title 'Weverse Fairy' As He Received An Award.
BTS‘ Jin is a frequent visitor on Weverse, where he responds to ARMYs’ comments and engages in open communication with the fans. Recently BTS' Jin drops by weverse and decide to reply fans' post that leaves them laugh.
The story begin when one fan posted a recent photo of Jin that taken at airport before depature to Japan on Weverse and asking why he didnt get an award for his effort to visit weverse everyday dilligently. Fans write, “Seokjin-oppa, why haven’t you accept the perfectattendance award?“
...in response, Jin simply replied, “Because no one gave it to me.”
With Jin's replied, Weverse respond and presented a Perfect Attendance Certificate just for Jin. An award for his consistently visited BTS Weverse and frequently spends an enjoyable time with ARMY.
...To this, Jin added a response with playful tone to lighten the mood that he asked the prize money. Jin said, "Prize money please!".
His hillarious reply suddenly makes fans laugh and lots of them think Jin is cute. Aside form that, Jin also officially crowned as "Weverse Fairy" by fans because of this. Congratulation Jin~


--- layout: default ref: index lang: English ---
Computational Intelligence and its Applications, Evolutionary Computation, Optimization, Machine Learning
E-mail<EMAIL_ADDRESS><EMAIL_ADDRESS>Biography Publications Activities
Google Scholar GitHub


glow.ui.Focusable
Pre-test
The element below is focusable. However, some browsers do not let you focus such items by clicking
and/or tabbing. If you cannot tab to the item below, you can safely ignore tests to do with tabbing.
If you cannot focus the item below via clicking, you can safely ignore tests to do with clicking.
Plain focusable
- Check the line below can get focus via tabbing & clicking
Modal focusable
- Check the 'This is a focusable' line below can get focus via tabbing & clicking
- Turn modal on
- No other element should be able to gain focus, either by tabbing or clicking
- Turn modal off
- Other elements should be able to gain focus
This element can have focus
This is a focusable
This element can have focus
Modal: On | Off
Focusable with children
- Click the first 'This element can have focus' paragraph to give it focus
- Press tab, this should highlight (in yellow) the first non-heading row in the first table
- The arrow keys can now be used to cycle through the rows
- Pressing down on the last item should cause the first to become active
- Pressing up on the first item should cause the last to become active
- Highlight the third row and press tab again, this should highlight the 1st row on the 2nd table
- The arrow keys can now be used to cycle through the rows, but you cannot loop from start to finish as with the first table
- Pressing shift + tab should highlight the third row on the first table - the last row you had highlighted
- You should be able to highlight rows on the 2nd table by hovering over them with the mouse
- You should be able to highlight rows on the 1st table by clicking them with the mouse
This element can have focus
| 1 |
2 |
| 3 |
4 |
| 5 |
6 |
| 7 |
8 |
| 9 |
10 |
| 11 |
12 |
| 1 |
2 |
| 3 |
4 |
| 5 |
6 |
| 7 |
8 |
| 9 |
10 |
| 11 |
12 |
This element can have focus
Autosuggest style
- Click the text input, this should highlight the first non-heading row of the table
- You should now be able to use the up and down arrow keys to move highlight between the rows
- While doing this, the text input should remain focused
- You should be able to type into the input freely and use the left & right arrow keys
Reacting to changes
- Using the tab & arrow keys, highlight the third item in the list
- Tab onto 'Random list order' and press enter to move "Three" out of position
- Use shift & tab to re-focus the list, "Three" should be reactivated, despite moving
Reacting to changes 2
- Using the tab & arrow keys, highlight the third item in the list
- Tab onto 'Create random list' and press enter
- Use shift & tab to re-focus the list, the first item should be activated


The following graph shows the realtime power consumption as reported by the RAPL device. Power is in Watts.


West
This page contains an index of all the individuals in the database with the surname of West. Selecting the person’s name will take you to that person’s individual page.
| Given Name | Birth | Death | Partner | Parents |
|---|---|---|---|---|
| Alfred Cornelius Leary | 1891-10-26 | 1967-04-06 | Wallace, Margaret Bessie | Leary, Alfred William Zoeller, Elizabeth Catharina "Kate" |
| Alfred Cornelius Leary | 1891-10-26 | 1967-04-06 | ||
| Alfred F. | 1906 | 1907-05-19 | West, Benjamin Daniel Josiah Curran, Hannah | |
| Annie Leila | 1856 | 1919 | Hayne, Philip Vaughan | |
| Arthur Annesley White | 1883 | Parker, Mary Elizabeth | ||
| Arthur Reginald “Jack” White | 1900 | 1961-09-25 | Bowyer or Bowter, Winifred Edith | West, George White Nye, Ellen Rubener(Rubina) |
| Beatrice Winifred May L. | 1889-06-16 | Porter, Harry H. | West, Benjamin James Zoeller, Elizabeth Catharina "Kate" | |
| Benjamin Daniel Josiah | 1874-10-06 | 1945-06-23 | Curran, Hannah, Hinton, Evelyn | West, Benjamin James Zoeller, Elizabeth Catharina "Kate" |
| Benjamin J. | 1900 | West, Benjamin Daniel Josiah Curran, Hannah | ||
| Benjamin James | 1850-07-15 | Zoeller, Elizabeth Catharina “Kate” | West, Feroni (Prof.of Music) Hammond, Sarah | |
| Caroline Annie Leary | 1894-07-27 | 1977-10-24 | Dawson, Selwyn (Carpenter&Joiner) | Leary, Alfred William Zoeller, Elizabeth Catharina "Kate" |
| Christina Annie Learmouth | 1879-07-10 | 1956-01-04 | Leary, Alfred William | West, Benjamin James Zoeller, Elizabeth Catharina "Kate" |
| Christopher, & Mary Bignall | ||||
| Daniel Learmouth | 1877-02-06 | 1967-07-26 | Langley, Sarah Sabina “Ciss” | West, Benjamin James Zoeller, Elizabeth Catharina "Kate" |
| Edna W. | 1905 | Kelaher, Greville E. | West, Frank Ward Hayne, Sarah May | |
| Esma M. | 1904 | 1905-07-00 | West, Benjamin Daniel Josiah Curran, Hannah | |
| Feroni, (Prof.of Music) | Hammond, Sarah | |||
| Frank Ward | 1950 | Hayne, Sarah May | ||
| George White | 1877 | 1939-05-27 | Nye, Ellen Rubener(Rubina) | West, Arthur Annesley White Parker, Mary Elizabeth |
| Gladys E. | 1914 | 1914-06-02 | West, William Henry Fletcher, Alice | |
| Hannah Louisa | Wallace, William George | |||
| John M. | 1898 | West, Benjamin Daniel Josiah Curran, Hannah | ||
| Linda A. | 1901 | Cameron, Donald | West, Frank Ward Hayne, Sarah May | |
| Mary | about 1785 | 1855-01-13 | Geeves, William | |
| Priscilla | 1875 | Cook, John Leslie | West, Christopher & Mary Bignall | |
| Rosie Ida Margaret Imogen L. | 1881-11-01 | Jackson, William J | West, Benjamin James Zoeller, Elizabeth Catharina "Kate" | |
| Sarah M. | 1903 | Frazer, Hugh W. | West, Frank Ward Hayne, Sarah May | |
| William H. | 1902 | West, Benjamin Daniel Josiah Curran, Hannah | ||
| William Henry | 1872-07-29 | 1945-06-28 | Fletcher, Alice | West, Benjamin James Zoeller, Elizabeth Catharina "Kate" |
| [Living] | Russell, [Living] | |||
| [Living] | Johnston, Harry Benjamin | West, William Henry Fletcher, Alice | ||
| [Living] | West, William Henry Fletcher, Alice | |||
| [Living] | Dalziel, Lawrence G. | West, William Henry Fletcher, Alice | ||
| [Living] | Brodie, Lawrence P. | West, William Henry Fletcher, Alice | ||
| [Living] | Dawson, Harold | West, Alfred Cornelius Leary Wallace, Margaret Bessie | ||
| [Living] | ???, Hoyland | West, Alfred Cornelius Leary Wallace, Margaret Bessie | ||
| [Living] | Claxton, Neville | West, Alfred Cornelius Leary Wallace, Margaret Bessie |


109 Capen Hall
p:<PHONE_NUMBER> | f:<PHONE_NUMBER>
e<EMAIL_ADDRESS>{{button.date}}
{{button.aText}} (...more)
Schools and Colleges
>{{link.name}}
Research >
About UB >
Find People & Departments
Resources for
Visiting UB >
UB Social Media >
UB Mobile App
Contact Us | MyUB | Emergency Information
© 2015 University at Buffalo. All rights reserved. | Privacy | Accessibility | Comment Guidelines


I am currently a Year Up Student Ambassador and Dev Bootcamp student. I love learning to code new things every day and can't wait to make a positive impact in the world with my work. Let's change the world together!
I created this site to be a basic template for my portfolio that I can build upon over time. I am using the portoflio of another developer in Seattle to compare to. It was difficult to find any portfolios that were very similar because they are sites used to showcase skills, that I have not yet learned. I found Paul Calabrese's portfolio to be an excellent example, as it simple to navigate. I think in the future I would like to keep my portfolio on one page as well, as it will keep viewers engaged with my content longer. I see a lot of HTML in Paul's code, but I don't recognize most of the code. For example he links to many stylesheets, where I assume he uses CSS to add life to his page.


Google Earth Enterprise Documentation Home | Portable
Portable Developer Guide
Contents
Introduction
You can customize or extend GEE Portable, or create applications that work with it.
To help you get started, Google provides two Hello World!
files that you can copy and use as templates. These files (Hello_Maps.html
for 2D maps and Hello_Earth.html
for 3D globes) call the required scripts, load the globe or map, define the .css
file, and so on. The files include JSON and, if needed, KML polygons.
See the resources linked to below to learn how to edit and extend the Hello_Maps.html
and Hello_Earth.html
files.
Useful resources
Note: Clicking any of these links connects you to a site outside your network. If you’re not sure if your organization allows outside connections, check with your administrator first.
Hello_Maps.html
and Hello_Earth.html
are based on the Google Maps API and Google Earth API. More information about these APIs is linked to below. Also included are links to some resources for learning how to parse your JSON data and KML coordinates.
- Google Maps API help at https://developers.google.com/maps/. Examples that use the Maps API.
- Google Earth API help at https://developers.google.com/earth/. The Earth Plug-in and its API have been discontinued.
- jQuery help at http://api.jquery.com/jQuery.parseJSON/. A method for parsing JSON.
- geoxml3 at https://code.google.com/p/geoxml3/. A KML processor for use with the Google Maps API.
Hello Maps!
To write a script to display portable 2D maps, start with hello_maps.html
and edit as needed. hello_maps.html
is based on the Google Maps API.
To access the hello_maps.html
file:
- Launch GEE Portable on
localhost:9335
. - Enter
http://localhost:9335/local/preview/developers/hello_maps.html
in your browser. - View the page source. If you're not sure how to view the page source, see your browser's help.
Alternatively, click the link below:
Hello Earth!
To write a script to display portable 3D maps (globes), start with hello_earth.html
and edit as needed. The hello_earth.html
example is based on the discontinued Google Earth API. Take that into consideration when developing new applications.
To access the Hello_Earth
file:
- Launch GME Portable on
localhost:9335
. - Enter
http://localhost:9335/local/preview/developers/hello_earth.html
in your browser. - View the page source. If you're not sure how to view the page source, see your browser's help.
Alternatively, click the link below:
JSON documents
Whenever your Portable instance is running, multiple JSON documents are serving. The JSON finds information about all your available globes and maps, as well as your current globe or map. Below are some code snippets that show how the JSON works.
Globes JSON example
This code snippet is from the Globes JSON document, which provides information about each available globe.
Globes JSON: [yourhost]/?cmd=globes_info_json
[ { "name":"test.glb",
"timestamp":"2013-01-01 12:00:00",
"size":"20.00MB",
"description":"Some globe description.",
"path":"../../../../globes/test.glb",
"is_gee":true,
"is_2d":false,
"is_3d":true,
"has_polygon":true,
"is_mercator":false,
"is_being_served":false
},
{
some other globe
},...
]
2D JSON and 3D JSON examples
The 2D and 3D JSON documents contain layer information as well as information that helps the Search feature categorize the results.
If you’re currently serving a map, 2D JSON will be serving:
2D JSON: [yourhost]/query?request=Json&vars=geeServerDefs&is2d=t
If you’re currently serving a globe, 3D JSON will be serving:
3D JSON: [yourhost]/query?request=Json&vars=geeServerDefs
Layer Definition examples
Below are examples of layer definitions. The first is an imagery layer and the second is a vector layer.
Imagery layer example
[
...{
icon : "icons/1.png",
id : 1001,
initialState : true,
isPng : false,
label : "Imagery",
lookAt : "none",
opacity : 1,
requestType : "ImageryMaps", // A layer of imagery. version : 8
}...
]
Vector data example
[
...{
icon : "icons/2.png",
id : 1002,
initialState : true,
isPng : true,
label : "Tokyo",
lookAt : "none",
opacity : 1,
requestType : "VectorMapsRaster", // Vector data, such as roads, points, and borders. version : 4
}...
]
Polygon KML document
Some globes also serve a KML file that contains polygon coordinates, which define the initial display when the globe or map loads. Polygon KML files also let Google Earth and Google Maps draw a polygon on the globe or map. If a globe doesn’t have any polygon data, the Polygon KML file is empty.
Polygon KML example
This is an example of a KML document that contains a set of coordinates that define the bounds of your globe's cut.
Polygon KML: [your host]/earth/polygon.kml
<?xml version="1.0"
encoding="UTF-8"?>
<kml>
<Document>
<name>polygons</name>
<Placemark>
<Polygon>
<tessellate>1</tessellate>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-122.3185062675476,37.790043919799245,0
-122.3395950675476,37.84095511979925,0
-122.39050626754761,37.86204391979925,0
-122.44141746754761,37.84095511979925,0
-122.46250626754761,37.790043919799245,0
-122.44141746754761,37.739132719799244,0
-122.39050626754761,37.71804391979924,0
-122.3395950675476,37.739132719799244,0
-122.3185062675476,37.790043919799245,0
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
<Placemark>
<Polygon>
<tessellate>1</tessellate>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-122.01254132080078,37.42221919299647,0
-122.03363012080078,37.473130392996474,0
-122.08454132080078,37.494219192996475,0
-122.13545252080078,37.473130392996474,0
-122.15654132080078,37.42221919299647,0
-122.13545252080078,37.37130799299647,0
-122.08454132080078,37.35021919299647,0
-122.03363012080078,37.37130799299647,0
-122.01254132080078,37.42221919299647,0
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Document>
</kml>


Divselect
This plugin is primarily a HTML <select> replacement. The plugin
is flexible and customizable, so it can be used for other purposes, for example a dropdown menu
also can be implemented with this.
Engaging on a select element, it replaces this (by default) to a structure built with div elements,
that operation just like the original select. It places a hidden input inside the structure for
post the selected value. There is a CSS file for the plugin that used for customize the display
of the element.
The plugin possess all the comfort functions that the original select has, such as the stepping
with cursor keys, inline search with character key presses, etc. See also in the
keyboard controlling part.
- Current version: 1.0.0
- Dependencies jQuery, jQuery UI position
- Required: jQuery 1.6+, jQuery UI position 1.8+
- Browsers: IE7+, FF4+, Chrome, Opera11+, (IE6 if disable the keyboard control)
-
Download:
- full package (zip)
- jquery.divselect-1.0.0.js (development version)
- jquery.divselect-1.0.0.min.js (compressed version)
- divselect.css (basic CSS file)
With a jquery version below jQuery 1.6 some functions won't be operate appropriate.
Demo
Here you can only see the basic functions. Engage on a select element without configuration:
$("#select-1").divselect();
<select id="select-1" name="languages"> <option value="html">HTML</option> <option value="css">CSS</option> <option value="js">JavaScript</option> <option value="php">PHP</option> <option value="sql">SQL</option> <option value="asp">ASP</option> <option value="vb">VBScript</option> </select>
A select with optgroup tags:
$("#select-2").divselect();
<select id="select-2" name="languages"> <option value="c">C</option> <option value="cplusplus">C++</option> <optgroup label="WEB - client side"> <option value="html">HTML</option> <option value="css">CSS</option> <option value="js" selected="selected">JavaScript</option> <option value="vb">VBScript</option> </optgroup> <optgroup label="WEB - server side"> <option value="php">PHP</option> <option value="sql">SQL</option> <option value="asp">ASP</option> </optgroup> </select>
The most beneficial function of the divselect that exceed the select element functionality is you can insert any HTML elements inside the option tags. With one of the properties the inside of the options can be overwritable, while the original HTML code remain valid:
$("#select-3").divselect({ optiontags : { "0" : '#', "details" : ' #', "activate" : ' #', "inactivate" : ' #', "modify" : ' #', "delete" : ' #' } });
<select id="select-3" name="operations"> <option value="0" selected="selected">Operations</option> <option value="details">Details</option> <option value="activate">Activate</option> <option value="inactivate">Inactivate</option> <option value="modify">Modify</option> <option value="delete">Delete</option> </select>
Usage
Insert the following files:
- jQuery 1.6+
- jQuery UI position 1.8+
- The plugin: jquery.divselect.js
- CSS file: divselect.css
Example (supposed to be a HTML5 code):
<link rel="stylesheet" href="css/divselect.css" />
Create a select element in the HTML code. Here some attributes affect the divselect behavior, see
here.
Important: the value attributes of the option tags have to be unique.
<select id="example" name="webprog"> <option value="html">HTML</option> <option value="css">CSS</option> <option value="js">JavaScript</option> <option value="php">PHP</option> <option value="sql">SQL</option> </select>
And after the DOM loaded, we run the plugin on the select element (of course you can use any selector):

More usage examples are in the demo pages.
Properties
You can use properties to configure the divselect, which can be passed to the divselect() method in an object at the initialization:
$("#example").divselect({ cssprefix : 'divselect-sort', showeffect: function($elem){ $elem.slideDown(); }, ... });
The setting, getting and modifying of the parameters is similar to the jQuery UI widgets same functionality. The properties can be modified in runtime with the option or the regenerate method (methods are in here). The defined properties are the following ones:
Static properties (can be modified in runtime with the regenerate method):
| Property | Function | Type | Default value |
|---|---|---|---|
| htmltemplate | The template of the select replacement HTML structure. This describe the structure of the HTML code that built in the place of the original select element. The detailed description is here. | string | see here |
| cssprefix | The css classes of the built structure get this prefix with a hyphen. This is useful when you want to place several divselects at the same page with different styles. | string | "divselect" |
| optiontags |
Overwrite the option tags of the given value. The object property name must be the value
attribute of the option, and the innerHTML of the options will be replaced with the object
property values. E.g: { "data" : 'szöveg' } In this case, the innerHTML of the option tag (exactly the replacer tag) with the value "data" won't be the original innerHTML, but the given HTML code. Other options won't change. The original innerHTML of the option can be inserted by the # character, e.g: { "data" : '#' } Here the original innerHTML will be wrapped with  tags. The # character can be written with \\# escape form. |
object | {} |
| divattributes | The atributes that the main div (most outer div) inherits from the original select element. The class attribute value will be appended, the others will overwrite the attributes defined in the template. | array | ["id", "class", "dir", "lang", "style", "title"] |
| characters |
You can add keyCodes of accent letters and marks for the inline search. These can be defined
by browser types, because these keyCodes usually have browser-specific values. The object properties are also objects, like: "é": {"general": 186, "firefox": 59, "opera": 201} which means the keyCode of the "é" character is 59 in firefox, 201 in opera, and 186 in the other browsers. The defined browser types: "firefox", "chrome", "ie", "safari", "opera", "general" where "general" means: the other aren't given browsers. |
object | Hungarian accent character set |
| unbubble | This is a jQuery selector for the elements inside the options, that events won't be propagated to the option element. It is useful for example if we place checkboxes inside the option elements, in this case if we click on a checkbox, the list will remain open, and the option won't be selected. | string | "input,select,textarea" |
Dinamic properties (can be modified in runtime with the option method):
| Property | Function | Type | Default value |
|---|---|---|---|
| pagestep | The numer of steps on the list when PageUp and PageDown press. | number | 10 |
| keydownwait | When the inline search pressing a key in this time of milliseconds will accurate the search, a pressing beyond this time will start new search. Only the text without HTML tags participate in the inline search. | number | 1000 |
| disablekeys | Disable keyboard controlling (it should be disabled under IE6). | boolean | false |
| disabledropdown | Disable the default list opening functionality. This functionality is that the click event on the ".{cssprefix}-selector" element triggers the list opening. | boolean | false |
| disableclose | Disable the default list closing functionality. This functionality is that the click event on the ".{cssprefix}-background" element triggers the list closing. | boolean | false |
| disableselect | Disable the default listitem selecting functionality. This functionality is that the click event on a ".{cssprefix}-item" element triggers the listitem selecting. | boolean | false |
| position |
The positioning of the displayed list. With this property we can set the object parameter
of the jQuery UI position
method. Setting the "of" property is optional, by default it is the ".{cssprefix}-selector"
element, other properties are required if we want to overwrite the default positioning. In the "of" property overwriting, the $divelement variable is a jQuery object of the most outer div element, the cssprefix is the value of the cssprefix divselect property. The default "of" value is: $divelement.find("."+cssprefix+"-selector") |
object |
{ my: "left top", at: "left bottom", offset: "0 0", collision: "none flip" } |
| showeffect | The function that do the list opening. The $elem parameter is a jQuery object contains the list. It is useful for animated opening ($elem.slideDown(), $elem.fadeIn(), etc). | function |
function($elem){ $elem.show(); } |
| hideeffect | The function that do the list closing. The $elem parameter is a jQuery object contains the list. It is useful for animated closing ($elem.slideUp(), $elem.fadeOut(), etc). | function |
function($elem){ $elem.hide(); } |
Events
Some special events of the divselect event handler functions can be attached in this way:
// initializing: $("#example").divselect({ change : function(event, value, oldvalue){ // event handler }, ... }); // in runtime: $("#example").on("change.divselect", function(event, value, oldvalue){ // event handler });
Every event belongs to the divselect namespace, we have to use this in the attachment.
The default event handler is az empty function for all of the special events. If we set event handlers
with both of the above methods, the initializing form will run first. Event handler can be
attached for these events:
| Event | Trigger | Parameters |
|---|---|---|
| create |
It is triggered after the select element replaced by the divselect structure. It can be set only in the initialization! |
event |
| select | It is triggered when a value selected in the list. | event, value |
| change | It is triggered when the selected value changed (a special case of the above). | event, value, oldvalue |
| open | It is triggered when the list opened. | event |
| close | It is triggered when the list closed. | event |
event (object): the jQuery Event object,
value (string): the value attribute of the selected option.
oldvalue (string): in the change event it is the value attribute of the previously selected option.
Furthermore, in the event handler the this by default refers to the actually divselect element (most outer div as a DOM object).
Methods
With the divselect methods informations can be queried and the element can be manipulated in runtime. The call of the methods:
$("#example").divselect("methodname", parameters);
The methods that are chainable, return the jQuery object which we have engaged the method. On this, we can call the method again, so several methods can be call in one sequence. E.g:
$("#example").divselect("select", "name").divselect("setreadonly");
User methods
| Method | Description | Chain- able |
|---|---|---|
| create |
jQuery create([object]) This method creates the divselect. If the divselect() called without parameter, or an object passed to it, this method runs by default. It has an optional object parameter, that can be used to overwrite the default static and dinamic properties. The method returns with the created divselect element. The method returns with the created divselect element(s) in a jQuery object. E.g.: $("#example").divselect("create"); or $("#example").divselect(); Setting properties: $("#example").divselect("create", {"pagestep" : 5}); or $("#example").divselect({"pagestep" : 5}); |
yes |
| destroy |
Reduce the divselect to a select element which is equivalent with the current state.
This means the modifications on the divselect remain, therefore we may not get back
the original select element. The method returns with the created select element(s) in
a jQuery object. E.g.: $("#example").divselect("destroy"); |
no |
| regenerate |
With this function we can set static properties in runtime. The difference between these
and the dinamic properties is we have to rebuild the divselect to modify these, for this
we have to call an other method. The first parameter is the property name, the second is the new value, the returning value will be the divselect jQuery object. E.g.: $("#example").divselect("regenerate", "cssprefix", "divselect-smooth"); We can set multiple properties with one call if we pass an object, pl.: $("#example").divselect("regenerate", { "htmltemplate" : '...', "cssprefix" : "divselect-smooth" }); This method can modify dinamic properties also, but we should use for this only if in the above case we want to modify this dinamic property with an other static property, because to modify a dinamic property there isn't necessary to rebuild the divselect element. |
yes |
| option |
With this function we can get or set properties in runtime. To get a property, we have to
pass the property name as a string, the returning value will be the property value. The
get mode can be used to get static and dinamic parameters too. E.g.: var step = $("#example").divselect("option", "pagestep"); To modify a property we have to pass the new value in the second parameter, in this case the returning value will be the divselect jQuery object. Only dinamic properties can be modified with this method. E.g.: $("#example").divselect("option", "pagestep", 5); We can set multiple properties with one call if we pass an object, e.g.: $("#example").divselect("option", { "pagestep" : 5, "create" : function(){...} }); |
only in "setter" mode |
| getval |
The value attribute of the selected option. E.g.: var value = $("#example").divselect("getval"); |
no |
| getselected |
The inner HTML code of the selected option. E.g.: var html = $("#example").divselect("getselected"); |
no |
| open |
Open the list. E.g.: $("#example").divselect("open"); |
yes |
| close |
Close the list. E.g.: $("#example").divselect("close"); |
yes |
| select |
Select an option by the value attribute. Its parameter is a string with the value of the
selecting element. E.g.: $("#example").divselect("select", "php"); |
yes |
| isselected |
It has a sing parameter which is a value attribute of an option. The return value is true,
if that option is selected. E.g.: var answer = $("#example").divselect("isselected", "yes"); |
no |
| isreadonly |
Without parameter it returns true, if the select state is readonly. If we pass a string
parameter, it returns true, if the option with the given value is readonly. E.g.: var selectreadonly = $("#example").divselect("isreadonly"); var optionreadonly = $("#example").divselect("isreadonly", "php"); If the select is in readonly state, the selected option cannot be changed, if an option is readonly, the form elements inside this cannot be changed. |
no |
| isdisabled |
Without parameter it returns true, if the select state is disabled. If we pass a string
parameter, it returns true, if the option with the given value is disabled. E.g.: var selectdisabled = $("#example").divselect("isdisabled"); var optiondisabled = $("#example").divselect("isdisabled", "php"); If the select is in disabled state, the selected value won't be passed when the form posted, and the element doesn't respond to any user interaction. If an option is disabled, the option cannot be selected. |
no |
| setreadonly |
Without parameter it turns the select state to readonly. If we pass a string parameter,
it turns the option with the given value to readonly. If we want to do it with several
options, we can pass the values in an array. E.g.: $("#example").divselect("setreadonly"); $("#example").divselect("setreadonly", "php"); $("#example").divselect("setreadonly", ["php", "js"]); If the select is in readonly state, the selected option cannot be changed, if an option is readonly, the form elements inside this cannot be changed. |
yes |
|
unsetreadonly setwritable |
The setwritable is an alias for the unsetreadonly method, both of them
do the same. Without parameter it removes the select readonly state. If we pass a string parameter, it removes the readonly state from an option with the given value. If we want to do it with several options, we can pass the values in an array. E.g.: $("#example").divselect("unsetreadonly"); $("#example").divselect("unsetreadonly", "php"); $("#example").divselect("unsetreadonly", ["php", "js"]); If the select is in readonly state, the selected option cannot be changed, if an option is readonly, the form elements inside this cannot be changed. |
yes |
| setdisabled |
Without parameter it turns the select state to disabled. If we pass a string parameter,
it turns the option with the given value to disabled. If we want to do it with several
options, we can pass the values in an array. Pl.: $("#example").divselect("setdisabled"); $("#example").divselect("setdisabled", "php"); $("#example").divselect("setdisabled", ["php", "js"]); If the select is in disabled state, the selected value won't be passed when the form posted, and the element doesn't respond to any user interaction. If an option is disabled, the option cannot be selected. |
yes |
|
unsetdisabled setenabled |
The setenabled is an alias for the unsetdisabled method, both of them
do the same. Without parameter it removes the select disabled state. If we pass a string parameter, it removes the disabled state from an option with the given value. If we want to do it with several options, we can pass the values in an array. E.g.: $("#example").divselect("unsetdisabled"); $("#example").divselect("unsetdisabled", "php"); $("#example").divselect("unsetdisabled", ["php", "js"]); If the select is in disabled state, the selected value won't be passed when the form posted, and the element doesn't respond to any user interaction. If an option is disabled, the option cannot be selected. |
yes |
| getoptions |
It returns with the option list in an array. The array elements are objects or strings
depends on the parameter, that has to be "none", "object" or "html". The default is
"none". If the parameter is "none", the array elements are the value attributes of the options. E.g.: var options = $("#example").divselect("getoptions"); In this case the return value will be something like this: ["0", "html", "css", "js"] The return value in the other two cases is a compatible form with the add() method (see below) parameter. E.g.: var options = $("#example").divselect("getoptions", "object"); In this case the return value will be a array contains objects, and an object in this has this form: { value: "20", html: '<input type="checkbox" /> New' selected: true, readonly: false, disabled: false } The object properties: value (string; the value attribute) html (string; the option innerHTML) selected (boolean; the selected state of the option) readonly (boolean; the readonly state of the option) disabled (boolean; the disabled state of the option) var options = $("#example").divselect("getoptions", "html"); In this case the return value will be an array contains strings, and a string in this has this form: '<option value="20" selected="selected">PHP</option>' or e.g.: '<option value="new"><input type="checkbox" /> New</option>' Here we get the whole option tag, the properties (valueless attributes) are in this only if its value is true. |
no |
| getoptgroups |
It returns with the optgroups in an array. The array elements are objects or strings
depends on the parameter, that has to be "none", "options" or "surround". The default is
"none". If the parameter is "none", the array elements are the label attributes of the optgroups. E.g.: var optgroupions = $("#example").divselect("getoptgroups"); In this case the return value will be something like this: ["Client side", "Server side"] The return value in the other two cases is a compatible form with the addgroup() method (see below) parameter. E.g.: var optgroups = $("#example").divselect("getoptgroups", "options"); In this case the return value will be a array contains objects, and an object in this has this form: { label: "Client side", options: [ {option describer object}, {option describer object}, ... ] } The object properties: label (string; the label attribute) options (array; the options describer objects inside the optgroup, in the same form that the getoptions() method return if the parameter is "object") var options = $("#example").divselect("getoptions", "surround"); In this case the return value will be a array contains objects, and an object in this has this form: { label: "Client side", surround: ["html", "js"] }; The object properties: label (string; the label attribute) surround (array; the value attribute of the first and the last option which are bordered by the optgroup, if there is only one option in the optgroup, the two value are equal, if the optgroup is empty, both values are null) Note: we don't get the options that are outside of optgroups with this method. |
no |
| getselect |
It returns with a select element that equivalent with the divselect current state as an
object describes the structure or a HTML code. The format is determined by the first
parameter, which can be "object" or "html". The second parameter is a boolean value, if
it's true, the innerHTML-s of the option elements will be reconstructed to the original
form, if it's false, the actual innerHTML (generated by the optiontags or by other way)
will be remained. The default value is false. If the parameter is "object", the returned value is an object. E.g.: var select = $("#example").divselect("getselect", "object"); The structure of the object: { attributes: { id: "", title: "", ... }, readonly: true, disabled: false, structure : [ data of options and optgroups ] } The object properties: attributes (object; the attributes of the select, that are in the divattributes property) readonly (bool; the readonly state of the divselect) disabled (bool; the disabled state of the divselect) structure (array; objects that contain the data of the options and optgroups in the right order) An element of the structure property if that is an optgroup: { type: "optgroup", label: "Server side", options: [ options in the optgroup ] } The object properties: type (string; in this case it is "optgroup") label (string; the label attribute) options (array; array of the objects describe the option elements) The structure of an option describer object (even inside or outside an optgroup) is the following: { type: "option", value: "php", html: 'PHP', selected: true, readonly: false, disabled: false, tag: '<option value="php" attributes>PHP</option>', originalTag: '<option value="php" attributes>PHP</option>' } The object properties: type (string; in this case it is "option") value (string; the value attribute) html (string; the inside of the option) selected (bool; the selected state of the option) readonly (bool; the readonly state of the option) disabled (bool; the disabled state of the option) tag (string; the HTML code of the option tag) originalTag (string; the HTML code of the original option tag) In the structure property, the options and the optgroups are in the right order and hierarchy. With this method we get an object describes the entire divselect structure. If the first parameter of the method is "html", the returned value is a string, that is the whone option's HTML code. This is used by the destroy method for an utility function in this way: var select = $("#example").divselect("getselect", "html", true); This HTML code passed to the jQuery constructor, create the select element. |
no |
| add |
With this method we can add an option or more options to the list in runtime. Parameters: 1. (string|object|array) the describer element of the option(s) 2. (string; default value: "before") this is "before" or "after" depends on we want to insert the option(s) before or after the element determined by the third parameter 3. (string; default value: undefined) the value of the option which determine the inserting location In the first parameter we can pass the HTML code of the option or the option describer object. If we pass an array, we can add several options. With the second and third parameter we can determine the location of the insertion. If the second parameter is "before"/"after", the new option will be inserted before/after the option that value is given by the third parameter. If we don't pass the third parameter, in the "before" case the new option will be inserted at the end of the list, in the case of "after", it will be inserted to the beginning of the list. If we leave both of the two parameters, the insertion location will be the end of the list. If the first parameter is an array, the order of the new options will be the same order is given by the array, independent of the other parameters. Give the option with an object: var element = { value: "20", readonly: true, html: '<input type="checkbox" /> New' }; The object properties: value (string; default value: ""; the value attribute) html (string; default value: ""; the option innerHTML) selected (boolean; default value: false) readonly (boolean; default value: false) disabled (boolean; default value: false) If the selected is true, that results the new value will be the selected element. Give the option with HTML code: var html = '<option value="new" disabled="disabled">New</option>'; We have to write into the HTML code the occurrent inner elements, like the checkbox in the above example, because we cannot change the optiontags parameter in runtime. Usage $("#example").divselect("add", element); $("#example").divselect("add", html, "after"); $("#example").divselect("add", [element1, element2], "before", "php"); $("#example").divselect("add", [html1, html2], "after", "js"); In the examples the element will be inserted to the end of the list, the html will be at the beginning, the element1 and the element2 will be before the "php" value element, the html1 and the html2 will be after the "js" value element. |
yes |
| addgroup |
With this method we can add an optgroup or more optgroups to the list in runtime. With the
optgroup we can define the inner option elements also with the data structures we have
seen at the add() method above. We can use it to surround options which are already
in the list too. Parameters: 1. (string|array) the describer element of the optgroup(s) 2. (string; default value: "before") this is "before" or "after" depends on we want to insert the option(s) before or after the element determined by the third parameter 3. (string; default value: undefined) the value of the option which determine the inserting location In the first parameter we have to pass the describer object of the optgroup, in this we can use the label and the options or surround elements.If we pass an array, we can add several options. With the second and third parameter we can determine the location of the insertion just like in the case of the add() method. If the second parameter is "before"/"after", the new optgroup will be inserted before/after the option that value is given by the third parameter. If we don't pass the third parameter, in the "before" case the new optgroup will be inserted at the end of the list, in the case of "after", it will be inserted to the beginning of the list. If we leave both of the two parameters, the insertion location will be the end of the list. In the case of surrounding already exist options, the second and third parameters will be ignored. Insert new optgroup with new options: var element = { label: "Client side", options: [ option-definitions ] }; The object properties: label (string; default value: ""; the label of the optgroup) options (array; default value: undefined; the inner options) The options array is the same format as the add() method parameter. Surround options: var element = { label: "Client side", surround: ["html", "js"] }; The object properties: label (string; default value: ""; the label of the optgroup) surround (array; default value: undefined; the elements surrounded by the optgroup) In this case the list will be surrounded from the "html" value option to the "js" option (including the boundary elements). If we want to surround one element, we have to give both of the two array elements: surround: ["js", "js"] Usage: $("#example").divselect("addgroup", { label: "Client side languages", options: [ '<option value="html">HTML</option>', '<option value="css">CSS</option>', '<option value="js" selected="selected">JavaScript</option>' ] }, "before", "php"); $("#example").divselect("addgroup", { label: "Server side languages", options: [ { value: "php", html: '<input type="checkbox" /> PHP' }, { value: "sql", html: '<input type="checkbox" /> SQL' } ] }, "after", "js"); $("#example").divselect("addgroup", [ { label: "Client side languages", surround: ["html", "js"] }, { label: "Server side languages", surround: ["php", "asp"] } ]); |
yes |
| remove |
It removes an option from the list with the given value. If we pass an array, we can
remove several options. E.g.: $("#example").divselect("remove", "php"); $("#example").divselect("remove", ["php", "js"]); |
yes |
| removegroup |
It removes an optgroup from the list with the given label attribute. With the second
parameter we can control that the inner options will remain (false, this is default), or
removed also (true). E.g.: $("#example").divselect("removegroup", "Client side languages"); $("#example").divselect("removegroup", "Server side languages", true); |
yes |
| truncate |
This method can be used to empty the list. The parameter determine which elements we want
to remove: "all", "options", or "optgroups". The default value is "all". all: remove all the options and optgroups options: remove all the options, if there were optgroups, those will remain empty optgroups: remove all the optgroups, the options will remain E.g.: $("#example").divselect("truncate"); $("#example").divselect("truncate", "optgroups"); |
yes |
Utility methods
| Method | Description | Chain- able |
|---|---|---|
| getElementByValue |
This method returns an option element as a jQuery object by the value attribute. Its
parameter is a string with the value attribute. If there doesn't exist an option with
this value, it returns an empty jQuery object. Mostly the other methods use this for utility. E.g.: var $elem = $("#example").divselect("getElementByValue", "5"); |
no |
| getValueByElement |
This method returns the value of an option element. We can pass the element as a DOM object,
a jQuery object or a string that contains a segment of the option's innerHTML. In the last
case if there are several matches, only the first value will be returned. E.g.: var elem = $("#example").find(".divselect-item").get(3); var $elem = $("#example").find(".divselect-item").eq(3); var value = $("#example").divselect("getValueByElement", elem); var value = $("#example").divselect("getValueByElement", $elem); var value = $("#example").divselect("getValueByElement", "PHP"); |
no |
| getContainerOptgroup |
This method returns the container optgroup element from an option value. The first
argument is the value of the option element, the second is "label" or "element", that
determines the returning value is the label attribute of the optgroup (string), or the
optgroup element (jQuery object). The optgroup element is the {cssprefix}-group element
in the template, which is tipically a div element. If the option isn't inside an optgroup,
the returning value is null. E.g.: var label = $("#example").("getContainerOptgroup", "php", "label"); var optgr = $("#example").("getContainerOptgroup", "php", "element"); |
no |
Extension methods
| Method | Description | Chain- able |
|---|---|---|
| getplugin |
This function returns a reference to the divselect plugin object. The structure of the
returning object: { defaultoptions : default property values, optionData : inner data storage, Util : utility variables and functions, Creation : divselect creation functions, Interaction : divselect interaction functions, methods : public methods } With modify this object, we can overwrite and extend the divselect properties and methods. The returning value is this object, but we can optional set a variable name to the first parameter (as a string), which will get the same object reference. The second parameter is the context of the variable, default the window object, so if it's not set, the variable will be created in the "global namespace". Modify permanently a default property value: $().divselect("getplugin", "Divselect", window); Divselect.defaultoptions.cssprefix = "divselect-smooth"; Add a new method to the divselect: var DS = $().divselect("getplugin"); DS.methods.hide = function(){ this.hide(); return this; }; $("#example1").divselect("hide"); Add a new key event handler to the divselect (this functionality is only in experimental state): var DS = $().divselect("getplugin"); DS.Interaction.keyHandlers._DELETE = function(preselected, itemnum, pagestep, event, $menuitems){ var val = this.divselect("getValueByElement", $menuitems.eq(preselected)); this.divselect("remove", val); return (preselected + 1) % itemnum; } |
no |
HTML attributes
The divselect parse some attributes of the select, optgroup and option element, and automatically
set a property by them. The size and multiple attributes of the select element will be ignored.
The divselect always one-line independent of the size attribute, and it only allow one element
selection by default. We can find examples for selecting more than option in the demos.
The parsed attributes and their effects:
| HTML tag | Attribute | Effect |
|---|---|---|
| select | name | This name attribute will be given to the hidden input element, that is to be passing the selected value. |
| select | readonly |
If this has been set, the select state will be readonly.* This attribute isn't valid in HTML5, but we can use the appropriate method for the same effect: $("#example").divselect("setreadonly"); |
| select | disabled | If this has been set, the select state will be disabled.* |
| optgroup | label | The value of this attribute will be the optgroup label, more exactly this will replace the {optgroup.label} placeholder in the template. Furthermore, this is a unique id for the optgroups. |
| option | value | If the option is selected, this value will be in the hidden input value attribute. Furthermore, this is a unique id for the options. |
| option | selected | The option which has this attribute, will be the selected element by default. If it isn't set on any option, the first will be the selected. |
| option | readonly |
If this has been set, the option state will be readonly.* This attribute isn't valid in HTML5, but we can use the appropriate method for the same effect: $("#example").divselect("setreadonly", "php"); |
| option | disabled | If this has been set, the option state will be disabled.* |
If the select is in disabled state, the selected value won't be passed when the form posted, and the element doesn't respond to any user interaction. If an option is disabled, the option cannot be selected.
Template
The htmltemplate property describe the HTML structure of the divselect element. This is changable because the CSS code modification doesn't always enough for the purposed design, sometimes we have to change the HTML structure. Additionally, in this way is easy to add custom elements into the divselect. The template looks like this by default:

 <input class="{cssprefix}-input" type="hidden" name="{select.name}" value="{select.val}" />
{select.defhtml}

 {block} {optgroup_start}

{optgroup.label}
 {/optgroup_start} {optgroup_end}
 {/optgroup_end} {optiontags}
{option.html}
 {/optiontags} {/block}

The placeholders format is {...}, these are replaced to the appropriate value, or control the
HTML structure building. Only the placeholders there are in the above template are defined, other
placeholders have no effect. You should modify the template only if this is necessary,
and only with maintain the hierarchy! Some elements of a special CSS class have special
functions:
{cssprefix} : this is the conatiner element, this has to wrap the whole structure.
{cssprefix}-input : this form element contain the selected value.
{cssprefix}-selector : by clicking this element, the option list will open.
{cssprefix}-menu : the option list container.
{cssprefix}-item : an element of the list (one option), by clicking this the option will be selected.
{cssprefix}-background : by clicking this element, the option list will close.
The default functions that has been binded to the click event can be disable with set true the
disabledropdown, disableselect and disableclose properties. After this
we can overwrite the base functionality by binding new event handlers to this elements.
Keyboard controlling
The divselect can be control by the keyboard. The implemented functions:
| Key | Function | Triggered event |
|---|---|---|
| Tab | Tabbing between divselects (put focus on divselect or remove) | - |
| Cursor control keys | Up and Left step one on the list upward, Down and Right downward. It has effect on closed but focused list, in this case they change the selected element. | select, change (only closed list) |
| PageUp PageDown |
Jump upward or downward on the list, the jump size is defined by the pagestep property. It has effect on closed but focused list, in this case they change the selected element. | select, change (only closed list) |
| Home End |
Jump to the beginning or the end of the list. It has effect on closed but focused list, in this case they change the selected element. | select, change (only closed list) |
| Enter | It selects the highlighted element on an opened list. | select, change, close |
| Esc | It closes the list, the selected elment won't change. | close |
| Letter keys | We can do inline search with te keys in the a-z and 0-9 character sets, and the additionally defined keys in the characters property. With press a character, the highlighting will jump to the element that first character is match the pressed character (here the option innerHTML is checked without HTML tags). If we press a character again in the time given by the keydownwait property (in milliseconds) we accurate the search, the second character of the innerHTML will be in the checked string. A press beyond the keydownwait time will start a new search. The inline search works on closed but focused list, in this case it changes the selected element. | select, change (only closed list) |
The cursor control and letter keys of the list stepping keys are cyclic, so if they get to end of
the list, they continue from the beginning.
The keyboard controlling can be disable with set true the disablekeys property. After
this we can overwrite the base functionality by binding new event handlers to this elements. The
Tab key functionality will remain, because it is implemented by the browser, the plugin only
provide the divselect element to be focusable.


Imagick resize filters comparison
So you want to shrink images with php and imagemagick. Here's samples of all filters so you can select the one you like most.
Published at 2015-09-11
So you want to shrink images with php and imagemagick. Here's samples of all filters so you can select the one you like most.
Published at 2015-09-11
No one asked me about this for months. And now it's done. Gravacage has it's own documented php library and site.
Published at 2015-04-01
Published at 2014-09-29
I've heard about composer long before I started using it. I couldn't understand why it's so much cooler than downloading dependencies manually. I couldn't understand why it's worth running composer install
after every code fetch.
This article is for guys like me in the past. If you're already using composer you can stop reading.
Published at 2014-08-26


Author: Cosential, Inc.
Description: A Client library written in JS for Compass (Cosential's general purpose RESTful API).
It is highly recommended to test the library on the UAT Environment before moving to our production environment.
npm install compass-client-js --save
https://cosential.github.io/compass-client-js
import * as compass from 'compass-client-js';
let client = new compass.Client({
apiKey: '68BC02D5-5C17-4A40-8043-942B79DA34B7',
compassUrl: 'https://compass.uat.cosential.com/api',
firmId: 1234,
username: 'john',
password: 'P@sSw0rd!'
});
client.get<User[]>('/user').then(res => {
if (res.success) {
// The API call was successful
// This api endpoint always returns a single element array
let user = res.result[0];
// Because user is an API response object, properties are proper case, not camel case.
document.write('
Hi, ' + user.FirstName + '! You are authenticated
'); *
} else {
// Something went wrong
document.write('
Error

' + res.message + '
');
}
});
client.config.username = 'Jane';
client.config.password = '0th3Rp@Ss!';
client.get('/user').then( //... );
If tests pass, authentication and comunication with Compass was successful.
./src - Contains the source code (.ts) and unit test spec (.spec.ts) files. This is where developers should work.
./dist - Contains the compiled (.js) files (UMD Bundles). These files will be used for consumption.
./lib - Contains the compiled (.js) files (ES5 commonjs), along with typescript definitions.
./lib-esm - Contains the compiled (.js) files (ES5 esmodule), along with typescript definitions.
Generated using TypeDoc


tz1PeZx7FXy7QRuMREGXGxeipb24RsMMzUNe
We take a 10% dynamic fee
We pay the rewards every cycle
Minimum delegation amount is 100 XTZ
Starting from Cycle 58, if the delegator balance is less than this amount, the reward will not be paid| Cycle | Total Balance | Total Reward | Account | Delegated Balance | Account Reward | Reward Status |
|---|
To avoid possible overdelegation and to benefit our delegators, we will stop considering new delegates when staking balance will exceed 4,3 Mtz.
Cycle number, when we stop recording new delegations, will be announced at the start page of this website.
Starting from Cycle 58 we are changing our threshold model to 100 XTZ minimum balance, before we had a minimum 1 XTZ payout amount.
Payout threshold was introduced to prevent possible spam low-notional delegations.
Our calculations show that with 100 tz balance and 1 tz payout threshold delegator will wait more than a month between payouts. We see that most delegators prefer plain frequent payouts in comparison to complicated deferred payouts. And we agree that simple is better than complex.
Yes. You are only assigning your baking rights to Tezos Panda as delegator. You are not giving us your XTZs and we do not require your private keys. With reliable delegation service the only risk is the security of your private keys, same as with no delegation at all.
Our fee is 10%. We are using so called "dynamic" payout model which means that you get whatever you earn with your delegation minus our fee. Currently not all XTZ owners use delegation therefore current earnings are greater than 5.5% inflation rate in Tezos network.
Your earnings will look like this:
(Block Rewards + Endorsement Rewards + Block Fees)
* (100% - fee) * (Your Delegated Balance / Total Staking Balance)
With Ledger wallet you can do it using Ledger Live following this instruction.
Another option is to delegate with Galleon software wallet for the Tezos blockchain, which runs on Cryptonomic infrastructure.
You can also use Magnum multi-currency decentralized web Wallet. Follow this simple instructions to delegate Tezzies in 2 steps.
Advanced users can prefer delegation using Tezos command line. You can find detailed instructions here.
Don't hesitate to contact us if you need help on the delegation process.>
This is for security, and to ensure stable work of our delegation service without any intrusions into it.
We understand that delegators would feel safer with our identity and photos posted on the web. But in case of possible physical attacks on Tezos Panda due to the revealed information our delegation service work can be interrupted. Baking will stop and that will also affect our clients.
Yes, it is possible to be a baker if your stake is greater than 10 000 XTZ.
However, running a baking node requires technical skills, appropiate hardware infrastructure and security configuration.
And with a large stake you probably would not want to associate your real IP address with Tezos node address. You will also be required to provide a 8.25% Tezos security bond to follow the Tezos baking rules. You can lose this bond in case of baking issues.
By delegating your XTZ to Tezos Panda you will still have full control of your XTZ’s without the need of running the node on your own.
You can also review this article for more details on the matter: Benefits and Risks of Home Baking.
No, your tokens remain in your wallet. You’re just giving Tezos Panda permission to bake for you. At any time you can spend or transfer your funds. Also you can always change your delegate.
Tezos Panda schedule is to pay out delegation awards every cycle when rewards are delivered to the baker.
With the current economic rules of the Tezos protocol, baking power is calculated in the snapshot of N-7 cycle. So the first payment will be done after 7 cycles following delegation cycle.
If at some point you will decide to switch to the other delegation service you’ll receive from us payments for all cycles you were with Tezos Panda.
Please follow us on Twitter to get news and updates on the service.
Tezos Panda is the team of professionals with IT / Investment banking background and early adopters of crypto world.
We concentrate on providing a reliable and secure delegation service.
Our goal is to contribute to the Tezos ecosystem and transform delegation into something transparent, simple and profitable.
You can use our delegation service as an alternative to running your own node.


---
layout: page
permalink: /events/index.html
title: Public Events
description: "A list of my upcoming and past conference engagements"
---
{% include counteventdetails.html %}
I'm an experienced conference speaker and event organiser.
I started public speaking in 2017 and thus far at {{ site.data.conferences.size}} events,
I've accepted {{keynotecount}} keynote,
{{talkcount}} talks,
{{workshopcount}} workshop, been invited onto {{podcastcount}} podcasts, recorded {{coursecount}} course, and organised/co-organised
{{organisercount}} of those events, in a total of 8
countries.
If you're interested to know where I'm going to be and what events I'm attending, look no further! I will do my best to keep this up to date.
If you're interested in having me talk or help you organise an event, please contact me using your preferred method from my footer.
Upcoming Events
{% assign events_by_year = site.data.conferences | group_by:"year" %}
{% assign yearsSorted = events_by_year | sort: "name" %}
{% for year in yearsSorted %}
{% for event in year.items %}
{% capture now %}{{'now' | date: '%s' | plus: 0 %}}{% endcapture %}
{% capture date %}{{event.startdate | date: '%s' | plus: 0 %}}{% endcapture %}
{% if date > now %}
{% assign events_by_year = site.data.conferences | group_by:"year" %}
{% for year in events_by_year %}
{% for event in year.items %}
-
{% capture now %}{{'now' | date: '%s' | plus: 0 %}}{% endcapture %}
{% capture date %}{{event.startdate | date: '%s' | plus: 0 %}}{% endcapture %}
{% if date > now %}
{% if event.enddate == nil %}
{% if event.year > 2016 %}
{{ event.startdate | date: "%e %B %Y" }}
{% else %}
{{ event.startdate | date: "%B %Y" }}
{% endif %}
{% else %}
{{ event.startdate | date: "%e" }}-{{ event.enddate | date: "%e %B %Y" }}
{% endif %}
{% if event.url == nil %}
{{ event.name }}, ({{ event.city }}, {{ event.country }})
{% else %}
{{event.name}},
{% endif %}
{% if event.city %}{{ event.city }},{% endif %} {{ event.country }}
{% if event.title != nil %}
{{event.role}}: {{event.title}}
{% else %}
Event Organiser
{% endif %}
{% if event.video != nil %}
video_library Watch the recording
{% endif %}
{% endif %}
{% endfor %}
{% endfor %}
{% endif %}
{% endfor %}
{% endfor %}
Past Events
{% assign events_by_year = site.data.conferences | group_by:"year" %}
{% for year in events_by_year %}
{% for event in year.items %}
-
{% capture now %}{{'now' | date: '%s' | plus: 0 %}}{% endcapture %}
{% capture date %}{{event.startdate | date: '%s' | plus: 0 %}}{% endcapture %}
{% if date <= now %}
{% if event.enddate == nil %}
{% if event.year > 2016 %}
{{ event.startdate | date: "%e %B %Y" }}
{% else %}
{{ event.startdate | date: "%B %Y" }}
{% endif %}
{% else %}
{{ event.startdate | date: "%e" }}-{{ event.enddate | date: "%e %B %Y" }}
{% endif %}
{% if event.url == nil %}
{{ event.name }}, ({{ event.city }}, {{ event.country }})
{% else %}
{{event.name}},
{% endif %}
{% if event.city %}{{ event.city }},{% endif %} {{ event.country }}
{% if event.title != nil %}
{{event.role}}: {{event.title}}
{% else %}
Event Organiser
{% endif %}
{% if event.video != nil %}
video_library Watch the recording
{% endif %}
{% if event.audio != nil %}
library_music Listen to the recording
{% endif %}
{% if event.course != nil %}
laptop_chromebook View the course
{% endif %}
{% endif %}
{% endfor %}
{% endfor %}


Building with Xamarin.Forms source
Project Configuration
Notes for those starting from scratch (as a August 16, 2018)
- Switch to the Xamarin.Forms_Official/3.1.0 branch
- Xamarin.Forms projects used:
- Xamarin.Flex
- Xamarin.Forms.Core
- Xamarin.Forms.Platform
- Xamarin.Forms.Platform.Android
- Xamarin.Forms.Platform.Android.FormsViewGroup
- Xamarin.Forms.Platform.iOS
- Xamarin.Forms.Platform.UAP
- Xamarin.Forms.Xaml
- Stubs/Xamarin.Forms.Platform.Android
- Stubs/Xamarin.Forms.Platform.iOS
- Xamarin.Forms.Android:
- needs to be built with Android 8.1 (Project Properties / Application / Compile using Android version)
- Minimum Android Version needs to be 4.1 (API16) to support HTML copy / paste
- Set up
packages
symbolic links (see below) - Use .netstandard 2.0 for all of your cross platform projects
- Reference the following packages in your .netstandard cross platform projects:
- Xamarin.Flex
- Xamarin.Forms.Core
- Xamarin.Forms.Platform
- Xamarin.Forms.Xaml
- Reference the following packages in your Android projects:
- Xamarin.Flex
- Xamarin.Forms.Core
- Xamarin.Forms.Platform.Android
- Xamarin.Forms.Platform.Android.FormsViewGroup
- Xamarin.Forms.Xaml
- Stubs/Xamarin.Forms.Platform.Android
- Reference the following packages in your iOS projects:
- Xamarin.Flex
- Xamarin.Forms.Core
- Xamarin.Forms.Platform.iOS
- Xamarin.Forms.Platform.UAP
- Xamarin.Forms.Xaml
- Stubs/Xamarin.Forms.Platform.iOS
- Reference the following packages in your UWP projects:
- Xamarin.Flex
- Xamarin.Forms.Core
- Xamarin.Forms.Platform.UAP
- Xamarin.Forms.Xaml
Every submodule needs a packages
folder
Because of the way VisualStudio, NuGet, and Git (don't) work together, relative paths are not valid for NuGet packages referenced in project files (that are from VisualStudio solutions) that have been added as git submodules. To work around for this, go to the following directories (below) and symbolically link the packages
subdirectory to the solution's working NuGet packages directory:
- Forms9Patch/Forms9PatchDemo
- Forms9Patch/FormsGestures
- Forms9Patch/P42
- Forms9Patch/Xamarin.Forms
Below are example commands of how to symbolically link to your VisualStudio solution's (and git root module) NuGet packages folder. For the case of building Forms9Patch source and demo code using just this git module, the below command lines are meant to be executed in the above directories.
- Windows:
c:> mklink /D packages ..\packages
- OSX:
$ ln -s ../packages packages
If you are using Forms9Patch source as a submodule in another git module, modify the above command lines to cause the symbolic links to point to the packages
directory in the root directory of the VisualStudio solution associated with that git module.
Address error: Project '..\Xamarin.Forms ... .csproj' targets 'netstandard2.0'
Be sure all of your shared projects use .netStandard 2.0
Changes to Forms9PatchDemo, Forms9Patch, or FormsGestures source code isn't updating
This may likely not be a problem in the future but currently VisualStudio doesn't always show changes to .target
files. The extreme version of this can be seen in how .target
file references are not seen at all in .PCL
, .iOS
, .Droid
and .UWP
projects. Why am I using .target
files then? Because it saves a lot of work in keeping the source code for various permutations of builds in sync.
Forms9PatchDemo.PCL.Droid won't run when built and deployed from VisualStudio 2017 (Windows) to Android Emulator
Heck, it might not work when deployed to an actual device. It does work when deployed from VisualStudio Mac to Android Emulator. 1 point for VisualStudio Mac! If you know why it doesn't work on Windows, please share!
Why are the Xaml examples not in the Forms9PatchDemo.Source apps
Because I haven't been able to take the time to figure out why Xaml files are not being compiled and embedded properly when using Xamarin.Forms source. Again, if you know how to do this, please share!
UWP: Unable to load System.Runtime. The located assembly's manifest definition does not match the assembly reference.
Change the Windows target version to 14393.
UWP: Getting exceptions at Xamarin.Forms.Init
When using Compile with .Net Native tool chain
build setting, System.IO.FileNotFoundException
exceptions for the following files (maybe more) can occur at Xamarin.Forms.Init when the Common Language Runtime Exceptions are all enabled:
- clrcompression
- libgl
- libglex
- SkiaSharp.Views
You need to use Compile with .Net Native tool chain
for your app to be accepted by Windows Store. What appears to work is to return the Common Language Runtime Exceptions to its defaults. As of this writing (2/19/2018), the defaults are:
- System.Reflection.MissingMetaDataException
- System.Reflection.MissingRuntimeArtifactException
- System.Windows.Markup.XamlParseException
UWP: Crashes when when trying to open an image using Xamarin.Forms.ImageSource.FromResource
but not when using Forms9Patch.ImageSource.FromMultiResource
Boy, did I loose a lot of time on this one. Turns out the solution to [UWP: Getting exceptions at Xamarin.Forms.Init](UWP: Getting exceptions at Xamarin.Forms.Init) was the fix. I have no idea why.


References
Abrams, O. (2019, June 23). Why Female Athletes Earn Less Than Men Across Most Sports. Retrieved from https://www.forbes.com/sites/oliviaabrams/2019/06/23/why-female-athletes-earn-less-than-men-across-most-sports/#646f8eeb40fb.
Baker, C. N., Seymour, E., &Zimbalist, A. (2019, April 18). Less Money, Less Media: How Female Athletes are Undervalued. Retrieved from https://msmagazine.com/2019/04/18/less-money-less-media-how-female-athletes-are-undervalued/.
Bian, X. (2005). Predicting Olympic medal counts: The effects of economic development on Olympic performance. The park place economist, 13(1), 37-44.
Beutler, I. (2008). Sport serving development and peace: Achieving the goals of the United Nations through sport. Sport in society, 11(4), 359-369.
Bernard, A. B., & Busse, M. R. (2004). Who wins the Olympic Games: Economic resources and medal totals. Review of economics and statistics, 86(1), 413-417.
COC. (2014, March 27). 10th-15th Olympic Games: 1936-1952. Retrieved from http://en.olympic.cn/games/summer/2004-03-27/121663.html.
Cooky, C., Messner, M. A., & Musto, M. (2015). “It’s dude time!” A quarter century of excluding women’s sports in televised news and highlight shows. Communication & Sport, 3(3), 261-287.
Cottrell, M. P., & Nelson, T. (2011). Not just the Games? Power, protest and politics at the Olympics. European Journal of International Relations, 17(4), 729-753.
Darnell, S. C. (2012). Olympism in action, Olympic hosting and the politics of ‘sport for development and peace’: Investigating the development discourses of Rio 2016. Sport in Society, 15(6), 869-887.
Dutta, D. (2018). Analysing the Olympics (for last 120 yrs.). Retrieved from https://www.kaggle.com/duttadebadri/analysing-the-olympics-for-last-120-yrs.
Farmer, I. (2017, December 18). Why are female athletes paid less than male athletes? Retrieved from https://news.jrn.msu.edu/2017/12/why-are-female-athletes-paid-less-than-male-athletes/.
Forbes (2019). World’s Highest Paid Athletes. Retrieved from https://www.forbes.com/athletes/list/\#tab:overall.
Ghildiyal, R. (2015). Role of sports in the development of an individual and role of psychology in sports. Retrieved from https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4381313/.
Giulianotti, R. (2015). The Beijing 2008 Olympics: Examining the interrelations of China, globalization, and soft power. European Review, 23(2), 286-296.
Goldblatt, D. (2016, August 4). Nobody wants to host the Olympic Games anymore. Can you blame them? Retrieved from https://qz.com/748894/nobody-wants-to-host-the-olympic-games-anymore-can-you-blame-them/.
Good, A. (2015, June 5). When it comes to women in sports, TV news tunes out. Retrieved from https://news.usc.edu/82382/when-it-comes-to-women-in-sports-tv-news-tunes-out/.
Grix, J. (2013). Sport politics and the Olympics. Political studies review, 11(1), 15-25.
Center for Strategic International Studies (n.d.). How dominant is China at the Olympic Games? Retrieved from https://chinapower.csis.org/dominant-china-olympic-games/.
International Table Tennis Federation. (2018). Tyko 2020 Qualification System Table Tennis (Eng). Retrieved from https://www.ittf.com/wp-content/uploads/2018/05/2018-05-14-Tokyo-2020-Qualification-system-Table-Tennis-eng.pdf
Johnson, I. (2008, August 13). Who’s on First in Medals Race? Retrieved from https://www.wsj.com/articles/SB121856271893833843?ns=prod/accounts-wsj.
Klein, J. Z. (2008, August 23). The Medal Rankings: Which Country Leads the Olympics? [FINAL UPDATE]. Retrieved from https://beijing2008.blogs.nytimes.com/2008/08/23/the-medal-rankings-which-country-leads-the-olympics/.
Ludacer, R. (2018, February 6). No one wants to host the Olympics anymore - will they go away? Retrieved from https://www.businessinsider.com/future-olympics-no-country-wants-to-host-games-2018-2.
MacAloon, J. (1995). Politics and the Olympics: some new dimensions. Received from https://www.recercat.cat/bitstream/handle/2072/10632/WP053_eng.pdf?sequence=1
MacKenzie, M. (2019, July 16). Female Athletes Receive Only 4% of Sports Media Coverage-Adidas Wants to Change That. Retrieved from https://www.glamour.com/story/female-athletes-receive-only-4-of-sports-media-coverage-adidas-wants-to-change-that.
Malfas, M., Theodoraki, E., & Houlihan, B. (2004, September). Impacts of the Olympic Games as mega-events. In Proceedings of the Institution of Civil Engineers-Municipal Engineer} (Vol. 157, No. 3, pp. 209-220. Thomas Telford Ltd.
Mervosh, S., & Caron, C. (2019, March 8). 8 Times Women in Sports Fought for Equality. Retrieved from https://www.nytimes.com/2019/03/08/sports/women-sports-equality.html.
Mower, J. (2012, January 1). London 2012: Olympic success is key to national pride. Retrieved from https://www.bbc.com/news/world-16245075.
Nunes, R.A. (2019). Women athletes in the Olympic Games. Journal of Human Sport and Exercise. 2019, 14(3): 674-683. doi:10.14198/jhse.2019.143.17
Osada, M., Ojima, M., Kurachi, Y., Miura, K., & Kawamoto, T. (2016). Economic impact of the Tokyo 2020 Olympic games. Bank of Japan Reports and Research Paper, Tokyo, January. Retrieved from http://www.trustfu.com/Uploads/image/20180827/20180827212024_95674.pdf
Rathke, A., & Woitek, U. (2007). Economics and Olympics: An efficiency analysis. Available at SSRN 967629.
Sandercock, G., Beedie, C., & Mann, S. (2016). Is Olympic inspiration associated with fitness and physical activity in English schoolchildren? A repeated cross-sectional comparison before and 18 months after London 2012. British Medical Journal Open, 6(11).
Soós, I., Martínez, J. C. F., & Szabo, A. (2017). Before the Rio Games: A retrospective evaluation of the effects of the population size, GDP and national temperature on winning medals at the 2012 London Olympic Games. Journal of Human Sport and Exercise, 12(1), 246-250.
Wikipedia (n.d.). Retrieved from https://en.wikipedia.org/wiki/Table_tennis_at_the_2020_Summer_Olympics_–_Qualification.
Warburton, D. E., Nicol, C. W., & Bredin, S. S. (2006). Health benefits of physical activity: the evidence. Cmaj, 174(6), 801-809.
World Bank (2018). Population 2018. Retrieved from https://databank.worldbank.org/data/download/POP.pdf