16 Bibliography
Alfaro, M.E., Santini, F., Brock, C., Alamillo, H., Dornburg, A., Rabosky, D.L., Carnevale, G., and Harmon, L.J. (2009) ‘Nine Exceptional Radiations Plus High Turnover Explain Species Diversity in Jawed Vertebrates’. Proceedings of the National Academy of Sciences [online] 106 (32), 13410–13414. available from <https://www.pnas.org/content/106/32/13410>
Arbuckle, K., Bennett, C.M., and Speed, M.P. (2014) ‘A Simple Measure of the Strength of Convergent Evolution’. Methods in Ecology and Evolution 5 (7), 685–693
Arbuckle, K. and Minter, A. (2014) Windex: Windex: Analysing Convergent Evolution Using the Wheatsheaf Index [online] available from <https://CRAN.R-project.org/package=windex>
Arnold, C., Matthews, L.J., and Nunn, C.L. (2010) ‘The 10kTrees Website: A New Online Resource for Primate Phylogeny’. Evolutionary Anthropology: Issues, News, and Reviews [online] 19 (3), 114–118. available from <https://doi.org/10.1002/evan.20251>
Baum, D.A. and Smith, S.D. (2012) Tree Thinking: An Introduction to Phylogenetic Biology [online] Macmillan Learning. available from <https://books.google.co.uk/books?id=zW\_ApwAACAAJ>
Borries, C., Sandel, A.A., Koenig, A., Fernandez-Duque, E., Kamilar, J.M., Amoroso, C.R., Barton, R.A., Bray, J., Di Fiore, A., Gilby, I.C., Gordon, A.D., Mundry, R., Port, M., Powell, L.E., Pusey, A.E., Spriggs, A., and Nunn, C.L. (2016) ‘Transparency, Usability, and Reproducibility: Guiding Principles for Improving Comparative Databases Using Primates as Examples’. Evolutionary Anthropology: Issues, News, and Reviews 25 (5), 232–238
Castiglione, S., Serio, C., Mondanaro, A., Melchionna, M., Carotenuto, F., Di Febbraro, M., Profico, A., Tamagnini, D., and Raia, P. (2020) ‘Ancestral State Estimation with Phylogenetic Ridge Regression’. Evolutionary Biology [online] available from <https://doi.org/10.1007/s11692-020-09505-x>
Castiglione, S., Tesone, G., Piccolo, M., Melchionna, M., Mondanaro, A., Serio, C., Febbraro, M.D., and Raia, P. (2018) ‘A New Method for Testing Evolutionary Rate Variation and Shifts in Phenotypic Evolution.’ Methods in Ecology and Evolution [online] 9, 974–983. available from <https://besjournals.onlinelibrary.wiley.com/doi/full/10.1111/2041-210X.12954>
Figueroa, A.D.A.G., Alex AND McKelvy (2016) ‘A Species-Level Phylogeny of Extant Snakes with Description of a New Colubrid Subfamily and Genus’. PLOS ONE [online] 11 (9), 1–31. available from <https://doi.org/10.1371/journal.pone.0161070>
FitzJohn, R.G. (2012) ‘Diversitree: Comparative Phylogenetic Analyses of Diversification in R’. Methods in Ecology and Evolution in press
Fitzjohn, R.G. (2010) ‘Quantitative Traits and Diversification’. Systematic Biology [online] 59 (6), 619–633. available from <https://liverpool.idm.oclc.org/login?url=https://search.ebscohost.com/login.aspx?direct=true&db=edselc&AN=edselc.2-52.0-78650666284&site=eds-live&scope=site>
Fox, J. and Weisberg, S. (2019) An R Companion to Applied Regression [online] Third. Thousand Oaks CA: Sage. available from <https://socialsciences.mcmaster.ca/jfox/Books/Companion/>
Garland, J., Theodore, Dickerman, A.W., Janis, C.M., and Jones, J.A. (1993) ‘Phylogenetic Analysis of Covariance by Computer Simulation’. Systematic Biology [online] 42 (3), 265–292. available from <https://doi.org/10.1093/sysbio/42.3.265>
Gascuel, O. and Steel, M. (2014) ‘Predicting the Ancestral Character Changes in a Tree Is Typically Easier Than Predicting the Root State’. Systematic Biology [online] 63 (3), 421–435. available from <https://doi.org/10.1093/sysbio/syu010>
Gonzalez-Voyer, A. and Von Hardenberg, A. (2014) ‘An Introduction to Phylogenetic Path Analysis’. in Modern Phylogenetic Comparative Methods and Their Application in Evolutionary Biology. Springer, 201–229
Grafen, A. (1989) ‘The Phylogenetic Regression’. Philosophical Transactions of the Royal Society of London. B, Biological Sciences [online] 326 (1233), 119–157. available from <https://doi.org/10.1098/rstb.1989.0106>
Hammill, D. (2020) DataEditR: An Interactive Editor for Viewing, Entering and Editing Data [online] available from <https://CRAN.R-project.org/package=DataEditR>
Harmon, L., Weir, J., Brock, C., Glor, R., and Challenger, W. (2008) ‘GEIGER: Investigating Evolutionary Radiations’. Bioinformatics 24, 129–131
Hone, D.W.E. and Benton, M.J. (2005) ‘The Evolution of Large Size: How Does Cope’s Rule Work?’ Trends in Ecology & Evolution [online] 20 (1), 4–6. available from <https://liverpool.idm.oclc.org/login?url=https://search.ebscohost.com/login.aspx?direct=true&db=edselp&AN=S0169534704003143&site=eds-live&scope=site>
Ibrahim, N., Maganuco, S., Dal Sasso, C., Fabbri, M., Auditore, M., Bindellini, G., Martill, D.M., Zouhri, S., Mattarelli, D.A., Unwin, D.M., Wiemann, J., Bonadonna, D., Amane, A., Jakubczak, J., Joger, U., Lauder, G.V., and Pierce, S.E. (2020) ‘Tail-Propelled Aquatic Locomotion in a Theropod Dinosaur’. Nature [online] 581 (7806), 67–70. available from <https://doi.org/10.1038/s41586-020-2190-3>
Ingram, T. and Mahler, D.L. (2013) ‘SURFACE: Detecting Convergent Evolution from Comparative Data by Fitting Ornstein-Uhlenbeck Models with Stepwise Akaike Information Criterion’. Methods in Ecology and Evolution [online] 4 (5), 416–425. available from <https://doi.org/10.1111/2041-210X.12034>
Jones, K.E., Bielby, J., Cardillo, M., Fritz, S.A., O’Dell, J., Orme, D.L., Safi, K., Sechrest, W., Boakes, E.H., Carbone, C., Connolly, C., Cutts, M.J., Foster, J.K., Grenyer, R., Habib, M., Plaster, C.A., Price, S.A., Rigby, E.A., Rist, J., Teacher, A., Bininda-Emonds, O.R.P., Gittleman, J.L., Mace, G.M., and Purvis, A. (2009) ‘PanTHERIA: A Species-Level Database of Life History, Ecology, and Geography of Extant and Recently Extinct Mammals’. Ecology 90 (9), 2648–2648
Joy, J.B., Liang, R.H., McCloskey, R.M., Nguyen, T., and Poon, A.F.Y. (2016) ‘Ancestral Reconstruction’. PLOS Computational Biology [online] 12 (7), e1004763. available from <https://doi.org/10.1371/journal.pcbi.1004763>
Kingsolver, J.G. and Pfennig, D.W. (2004) ‘Individual-Level Selection as a Cause of Cope’s Rule of Phyletic Size Increase’. Evolution [online] 58 (7), 1608. available from <https://liverpool.idm.oclc.org/login?url=https://search.ebscohost.com/login.aspx?direct=true&db=edsjsr&AN=edsjsr.3449385&site=eds-live&scope=site>
Louca, S. and Pennell, M.W. (2020) ‘Extant Timetrees Are Consistent with a Myriad of Diversification Histories’. Nature [online] 580 (7804), 502–505. available from <https://doi.org/10.1038/s41586-020-2176-1>
McGowen, M.R., Montgomery, S.H., Clark, C., and Gatesy, J. (2011) ‘Phylogeny and Adaptive Evolution of the Brain-Development Gene Microcephalin (Mcph1) in Cetaceans’. BMC Evolutionary Biology [online] 11 (1), 98. available from <https://doi.org/10.1186/1471-2148-11-98>
Montgomery, S.H., Capellini, I., Barton, R.A., and Mundy, N.I. (2010) ‘Reconstructing the Ups and Downs of Primate Brain Evolution: Implications for Adaptive Hypotheses and Homo Floresiensis’. BMC Biology [online] 8 (1), 9. available from <https://doi.org/10.1186/1741-7007-8-9>
Montgomery, S.H., Geisler, J.H., McGowen, M.R., Fox, C., Marino, L., and Gatesy, J. (2013) The Evolutionary History of Cetacean Brain and Body Size. [online] 67 (11), 3339–3353. available from <www.jstor.org/stable/24032748>
Morgan, M. (2019) BiocManager: Access the Bioconductor Project Package Repository [online] available from <https://CRAN.R-project.org/package=BiocManager>
Morlon, H., Lewitus, E., Condamine, F., Manceau, M., Clavel, J., and Drury, J. (2016) ‘RPANDA: An R Package for Macroevolutionary Analyses on Phylogenetic Trees’. Methods in Ecology and Evolution [online] 7, 589–597. available from <https://CRAN.R-project.org/package=RPANDA>
Neal, R.M. (2003) ‘Slice Sampling’. Annals of Statistics [online] 31 (3), 705–741. available from <https://liverpool.idm.oclc.org/login?url=https://search.ebscohost.com/login.aspx?direct=true&db=edselc&AN=edselc.2-52.0-1642370803&site=eds-live&scope=site>
Nunn, C.L. (2011) The Comparative Approach in Evolutionary Anthropology and Biology [online] University of Chicago Press. available from <https://books.google.co.uk/books?id=qj4cSzJGQJAC>
Nyakatura, K. and Bininda-Emonds, O.R. (2012) ‘Updating the Evolutionary History of Carnivora (Mammalia): A New Species-Level Supertree Complete with Divergence Time Estimates’. BMC Biology [online] 10 (1), 12. available from <https://doi.org/10.1186/1741-7007-10-12>
Orme, D., Freckleton, R., Thomas, G., Petzoldt, T., Fritz, S., Isaac, N., and Pearse, W. (2018) Caper: Comparative Analyses of Phylogenetics and Evolution in R [online] available from <https://CRAN.R-project.org/package=caper>
Paradis, E. and Schliep, K. (2018) ‘Ape 5.0: An Environment for Modern Phylogenetics and Evolutionary Analyses in R’. Bioinformatics 35, 526–528
Parker, H.G., Dreger, D.L., Rimbault, M., Davis, B.W., Mullen, A.B., Carpintero-Ramirez, G., and Ostrander, E.A. (2017) ‘Genomic Analyses Reveal the Influence of Geographic Origin, Migration, and Hybridization on Modern Dog Breed Development’. Cell Reports [online] 19 (4), 697–708. available from <http://www.sciencedirect.com/science/article/pii/S2211124717304564>
Pedersen, T.L. (2019) Ggforce: Accelerating ’Ggplot2’ [online] available from <https://CRAN.R-project.org/package=ggforce>
Peters, R.S., Krogmann, L., Mayer, C., Donath, A., Gunkel, S., Meusemann, K., Kozlov, A., Podsiadlowski, L., Petersen, M., Lanfear, R., Diez, P.A., Heraty, J., Kjer, K.M., Klopfstein, S., Meier, R., Polidori, C., Schmitt, T., Liu, S., Zhou, X., Wappler, T., Rust, J., Misof, B., and Niehuis, O. (2017) ‘Evolutionary History of the Hymenoptera’. Current Biology [online] 27 (7), 1013–1018. available from <https://doi.org/10.1016/j.cub.2017.01.027>
Rabosky, D., Grundler, M., Anderson, C., Title, P., Shi, J., Brown, J., Huang, H., and Larson, J. (2014) ‘BAMMtools: An R Package for the Analysis of Evolutionary Dynamics on Phylogenetic Trees’. Methods in Ecology and Evolution 5, 701–707
Rabosky, D.L. (2014) ‘Automatic Detection of Key Innovations, Rate Shifts, and Diversity-Dependence on Phylogenetic Trees’. PLOS ONE [online] 9 (2), 1–15. available from <https://doi.org/10.1371/journal.pone.0089543>
R Core Team (2019) R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing
Reader, S.M., Hager, Y., and Laland, K.N. (2011) ‘The Evolution of Primate General and Cultural Intelligence’. Philosophical Transactions of the Royal Society B: Biological Sciences [online] 366 (1567), 1017–1027. available from <https://royalsocietypublishing.org/doi/abs/10.1098/rstb.2010.0342>
Revell, L.J. (2012) ‘Phytools: An R Package for Phylogenetic Comparative Biology (and Other Things).’ Methods in Ecology and Evolution 3, 217–223
R Hackathon et al. (2019) Phylobase: Base Package for Phylogenetic Structures and Comparative Data [online] available from <https://CRAN.R-project.org/package=phylobase>
Serio, C., Castiglione, S., Tesone, G., Piccolo, M., Melchionna, M., Mondanaro, A., Febbraro, M.D., and Raia, P. (2019) ‘Macroevolution of Toothed Whales Exceptional Relative Brain Size.’ Evolutionary Biology [online] 46, 332–342. available from <https://link.springer.com/article/10.1007/s11692-019-09485-7>
Shipley, B. (2016) Cause and Correlation in Biology: A User’s Guide to Path Analysis, Structural Equations and Causal Inference with R. Cambridge University Press
Shipley, B. (2000) ‘A New Inferential Test for Path Models Based on Directed Acyclic Graphs’. Structural Equation Modeling 7 (2), 206–218
Slater, G.J., Harmon, L.J., and Alfaro, M.E. (2012) ‘Integrating Fossils with Molecular Phylogenies Improves Inference of Trait Evolution’. Evolution [online] 66 (12), 3931–3944. available from <https://doi.org/10.1111/j.1558-5646.2012.01723.x>
Stadler, T. (2019) TreeSim: Simulating Phylogenetic Trees [online] available from <https://CRAN.R-project.org/package=TreeSim>
Stankowich, T., Caro, T., and Cox, M. (2011) ‘Bold Coloration and the Evolution of Aposematism in Terrestrial Carnivores’. Evolution [online] 65 (11), 3090. available from <https://liverpool.idm.oclc.org/login?url=https://search.ebscohost.com/login.aspx?direct=true&db=edsjsr&AN=edsjsr.41317030&site=eds-live&scope=site>
Stumpke, H. (1957) The Snouters: Form and Life of the Rhinogrades. Stuttgart: Gustav Fischer Verlag
Thewissen, J.G.M., Cooper, L.N., George, J.C., and Bajpai, S. (2009) ‘From Land to Water: The Origin of Whales, Dolphins, and Porpoises’. Evolution: Education and Outreach [online] 2 (2), 272–288. available from <https://doi.org/10.1007/s12052-009-0135-2>
Urbanek, S. (2019) Jpeg: Read and Write Jpeg Images [online] available from <https://CRAN.R-project.org/package=jpeg>
van der Bijl, W. (2018) ‘Phylopath: Easy Phylogenetic Path Analysis in R.’ PeerJ 6, e4718
von Hardenberg, A. and Gonzalez-Voyer, A. (2013) ‘Disentangling Evolutionary Cause-Effect Relationships with Phylogenetic Confirmatory Path Analysis’. Evolution 67 - 2, 378–387
Webster, A.J. and Purvis, A. (2002) ‘Testing the Accuracy of Methods for Reconstructing Ancestral States of Continuous Characters’. Proceedings of the Royal Society of London. Series B: Biological Sciences [online] 269 (1487), 143–149. available from <https://doi.org/10.1098/rspb.2001.1873>
Wickham, H. (2017) Tidyverse: Easily Install and Load the ’Tidyverse’ [online] available from <https://CRAN.R-project.org/package=tidyverse>
Wickham, H. (2016) Ggplot2: Elegant Graphics for Data Analysis [online] Springer-Verlag New York. available from <https://ggplot2.tidyverse.org>
Yu, G. (2019) Ggimage: Use Image in ’Ggplot2’ [online] available from <https://CRAN.R-project.org/package=ggimage>
Yu, G., Lam, T.T.-Y., Zhu, H., and Guan, Y. (2018) ‘Two Methods for Mapping and Visualizing Associated Data on Phylogeny Using Ggtree.’ Molecular Biology and Evolution [online] 35 (2), 3041–3043. available from <https://doi.org/10.1093/molbev/msy194>
Yu, G., Smith, D., Zhu, H., Guan, Y., and Lam, T.T.-Y. (2017) ‘Ggtree: An R Package for Visualization and Annotation of Phylogenetic Trees with Their Covariates and Other Associated Data.’ Methods in Ecology and Evolution [online] 8 (1), 28–36. available from <http://onlinelibrary.wiley.com/doi/10.1111/2041-210X.12628/abstract>


HUSTLE JOBS
Home
My Account
Post New Job
Update Job
Job Description
Job Location
Expected Job Duration (whole hours only)
Total Pay
Reset
Update Job


SAVED!
×
Your workflow and tasks have automatically been saved.
Edit Workflow Task
×
Task Step
Task Name
Task Description
Days Required
Edit And Save This Workflow
×
Workflow Name
Workflow Description
Location
Private
Public
OS Knowledge
And Project Management
Dashboard
Edit Workflow
Task Step
Task Name
Task Description
Days Required
Add Task
Step
Name
Description
Days Required
More


Unique Admin
We are launching
soon!
Subscribe and get notified.
Notify me
© 2018
Multi-Purpose Themes
. All Rights Reserved.


|
BabyOS
V0.0.1
|
Functions | |
| int | fputc (int c, FILE *p) |
| void | bHalEnterCritical () |
| void | bHalExitCritical () |
| << delay More... | |
| void | bHalDelayMS (uint16_t xms) |
| void | bHalDelayUS (uint16_t xus) |
| uint32_t | bHalGetTick () |
| void | bHalChipProtect () |
| void | bHalFeedWTD () |
| void | bHalGetSTM32MCUID (uint32_t id[3]) |
| int | bHalFlashWrite (uint32_t address, uint8_t *pbuf, uint16_t len) |
| int | bHalErasePage (uint32_t addr) |
| int bHalFlashWrite | ( | uint32_t | address, |
| uint8_t * | pbuf, | ||
| uint16_t | len | ||
| ) |
| void bHalGetSTM32MCUID | ( | uint32_t | id[3] | ) |
Definition at line 170 of file b_hal.c.
References STM32F1_UID_ADDR.
| int fputc | ( | int | c, |
| FILE * | p | ||
| ) |
Definition at line 107 of file b_hal.c.
References DEBUG_UART_HANDL.


one course
Select a course:
You selected: {{spCon.data.title}}
You can view the selected course from here
COURSE PAGE


@(u: User, action: String)(implicit ctx: Context)
Would you like to watcha live game while you wait?
This can take a while,maybe reload this page later!


Administrators can change the entire website theme with a few clicks.
It's simple! Preview the prospective theme and if you like it check its radio button and Save.


“It always amazes me how little code you need to capture the essence of data graphics, and how much code you need for all the fiddly details like scales and axes and legends.”


Disruption of a GATA motif in the Duffy gene promoter abolishes erythroid gene expression in Duffy-negative individuals.
The mRNA for the Duffy blood group antigen, the erythrocyte receptor for the Plasmodium vivax malaria parasite, has recently been cloned and shown to encode a widely expressed chemokine receptor. Here, we show that the Duffy antigen/chemokine receptor gene (DARC) is composed of a single exon and that most Duffy-negative blacks carry a silent FY*B allele with a single T to C substitution at nucleotide -46. This mutation impairs the promoter activity in erythroid cells by disrupting a binding site for the GATA1 erythroid transcription factor. With the recent characterization of the FY*A and FY*B alleles, these findings provide the molecular basis of the Duffy blood group system and an explanation for the erythroid-specific repression of the DARC gene in Duffy-negative individuals.


Please note that this site is an alpha-stage prototype under rapid development. It is likely to change often and, at times, some features may be broken or only partially implemented.
Click next for an extremely brief tour.
You can watch see this again at any time by clicking "Help" at the top of the screen.
To start, you enter your PEG.js grammar here.
The text that your PEG.js grammar will be parsing goes here.
Here's where you click to build your parser.
Select one of the three tabs below to inspect your parser's results.
This is where you can see the JSON representation of the parse tree produced by your PEG.
Thanks to the library, d3.js, you don't need an imagination to visualize your parse tree!
This tab shows the results of traversing your parse tree...
Essentially, it's what you'd see if your program ran in a console.
Click here to pick one of the sample grammars.


No node /trunk/common/doc/epl-v10.html at revision 1730
You can search in the repository history to see if that path existed but was later removed
TracGuide — The Trac User and Administration Guide


(Not Your Users)
Today, the front-end gets just as much consideration as the back-end
Server-side UI frameworks can create a massive bottleneck, and tie you to stale ideas and structures
What does a client-side heavy approach give us?
Generating HTML on the client reduces server load and can deliver a better overall user experience
JSON and XML use less bandwidth than presentation-ready HTML and there is less string concatenation and HTML escaping to perform
The client browser must download the first payload of JavaScript and markup, but after that, it’s much easier to control how resources are delivered and how the application is enhanced
Client-side code gives us the flexibility of using CDN bandwidth for popular libraries like jQuery
When using a CDN for resource delivery, we are betting that the user has already downloaded this library through another Web site using the same CDN
This spares them the bulk and expense of downloading a 33KB (gzipped) library like jQuery yet again
However, when everything runs on the client, performance and security is reduced.
Parsing JSON or XML and generating HTML uses more memory and processing time than just printing some server-rendered HTML
When we create an offline capable application that is distributed across many different browsers, WebStorage (localStorage) is the only viable means for storing data on the client – and it offers no security
Most of the time you’ll end up with a hybrid application that does some processing on the server and much more on the client
"Offline First" is one of many *First buzzwords
What does it mean?
window.addEventListener("offline", function (e) {
//we just lost our connection and entered offline mode, disable eternal link
slidfast.network.processOffline(e.type);
}, false);
var connection = navigator.connection || {'type':'0'};
if (connection.type === 2 || connection.type === 1) {
//...
} else if (connection.type === 3) {
//edge
//ATT Edge latency: ~400-600ms
//ATT Edge DL speed: ~2-10kbps
slidfast.core.fetchAndCache(false);
} else if (connection.type === 2) {
//3g
//ATT 3G latency: ~400ms
//Verizon 3G latency: ~150-250ms
//...
}
//check for a new appCache
window.applicationCache.addEventListener('updateready', function (e) {
//alert('checking appcache' + window.applicationCache.status);
if (window.applicationCache.status === window.applicationCache.UPDATEREADY) {
// Browser downloaded a new app cache.
// Swap it in and reload the page to get the new hotness.
window.applicationCache.swapCache();
if (confirm('A new version of this site is available. Load it?')) {
window.location.reload();
}
}
}, false);
CACHE MANIFEST
# 2011-08-18:v4
CACHE:
demo1.html
styles/demo1.css
js/demo1.js
NETWORK:
*
The * indicates that the browser should allow all connections to non-cached resources from a cached page.
...
NETWORK:
*
Link prefetching allows developers to silently preload site contents to project a more fluid, seamless web experience:
<link rel="prefetch" href="http://davidwalsh.name/css-enhancements-user-experience" />
var getFrame = function () {
var frame = document.getElementById("temp-frame");
if (!frame) {
// create frame
frame = document.createElement("iframe");
frame.setAttribute("id", "temp-frame");
frame.setAttribute("name", "temp-frame");
frame.setAttribute("seamless", "");
frame.setAttribute("sandbox", "allow-same-origin");
frame.style.display = 'none';
document.documentElement.appendChild(frame);
}
// load a page
return frame.contentDocument;
};
document.getElementById(location).appendChild(document.adoptNode(newPage));
red = innerHTML
By Steve Souders
By Me
What makes sites feel slow?
Non-gzipped or non-cached resources
Too much concatenation
Script block (downloading and rendering)
Figure out what's needed to render the page and defer everything else
Use defer - Introduced over 12 years ago with IE4
<script src="file.js" defer></script>
Download in background and execute in order
With HTML5 - Use async
<script src="file.js" async></script>
Execute when downloaded but no order preservation
Only Needed after page load...
var se = document.createElement(‘script’);
se.src = ‘http://mydomain.com/script.js’
//append to head
Used by Google Analytics - May not preserve order
Only Needed after page load...(cont)
<script type=“text/javascript”>
/*var …*/
</script>
Gmail Mobile - remove comment delimiters eval when needed
ControlJS
<script type="text/cjs" data-cjssrc="main.js"></script>
Used By Washington Post - Crawls DOM, Loads scripts asyn
If you want to optimize something you need to be able to measure it.
80ms is the average response time noticed by the human eye
Adding share buttons from Facebook, LinkedIn, Google, and Twitter come with a heavy cost
Facebook share button comes with 11 HTTP requests and a 135KB download (after gzip)
Alternatives
We are faced with a potential list of social networks and options that our users may not even use or care about (the “share bar”)
We don’t have any way of receiving a callback on whether the post/share was successful or not
(We must use async analytics by embedding a unique identifier in the URL)


My sweetheart phone is frozen (902)The screen of my sweetheart phone is frozen... |
15/04/2014 12:34 | In Process | |
Stupid Radio (857)The volume of my sweetheart radio is stuck :-( |
14/04/2014 12:34 | In Process |
In Process |
All | + Create Task |
My sweetheart phone is frozen (902)The screen of my sweetheart phone is frozen... |
15/04/2014 12:34 | In Process | |
Stupid Radio (857)The volume of my sweetheart radio is stuck :-( |
14/04/2014 12:34 | In Process |


@* * This template takes a single argument, a String containing a * message to display. *@ @(message: String) @* * Call the `main` template with two arguments. The first * argument is a `String` with the title of the page, the second * argument is an `Html` object containing the body of the page. *@ @main("Welcome to Play") {
@if(flash.containsKey("error")){ } }


For enquiries from USA, Canada, Mexico, Central America and South America US Office:
1.800.555.5555 Toll Free
<EMAIL_ADDRESS>For enquiries from Australia, New Zealand, Asia, Europe, Africa and the Middle East:
Australia Office:
+61.5.5555.5555
<EMAIL_ADDRESS>Our Client Managers are here to assist you seven days a week. They will be your first contact to ensure you have the experience of your dreams. Give us a call now.
For further information or to book your next Turtle Island vacation we have listed our resorts toll free contact number and reservation office below. You can now book directly with our resort by contacting us. Alternatively, you can check availability. We look forward to hearing from you.
Or you can complete the form on this page and one of our Client Managers will be in touch.


Sponsor
Bio
I am a tech generalist, with an interest in building solutions to socio-economic problems (towards the SDGs 2030 of UN). I graduated from the computer science department of IIT Kanpur in 2016 and have built a diverse skillset through my internships and work experiences at various companies, ranging from the likes of Microsoft Research & Goldman Sachs to tiny startups, with less than 10 people, in education, healthcare and gaming industries.
I am currently building Vibinex for simplifying the process of technical team building, especially in software. Alongside this, I am also thoroughly involved with FOSS United and all their initiatives for promoting Free (as in "Freedom", and not money-wise) and Open-source Software.
I am also working on my own open-source project, Free Time, which is a suite of productivity tools for individuals that helps them do more and live happier.
Towards United Nations' Sustainable Development Goals (2030)
I founded Vibinex in 2020 as a mentorship platform. It has taken the shape of a technical hiring platform for software workers. Hence, it is helping us towards both SDG4 (Education) and SDG8 (Economic Growth)
Currently, I am connected to various programs which aim at the SDGs. Some of these organizations, along with my associations with them are as follows:
- Member, IIT Kanpur Alumni Association: SEE Initiative (SEE: Social Entrepreneurs and Enterprises)
- Fellow, YSI Global (YSI: Young Sustainable Impact), Norway
- Ambassador, Global Impact Network
News
Topics of Interests
Academic Achievements
- IIT-JEE 2012: All India Rank 99
(which is more than 99.99 percentile) - KVPY Scholaship Test (2011) : AIR 175
- Received "Top 1%" certificate in IPhO 2011 (International Physics Olympiad).
- ResoSTaRT 2011: AIR 29
- ResoNET 2010: AIR 59 (recieved scholarship from Resonance Eduventures Pvt. Lmt.)
- Rank 1 in district-level "Science Quiz" (2009) conducted in Surat by Quantum Classes Pvt. Ltd.
- Represented School (J.H.Ambani Saraswat Vidyamandir, Surat) in Ramanujam Mathematics Quiz, which is an interschool quiz competition conducted by the Radiant Academy School in Surat, for 2 consecutive years:-
- Winners
- Runner-Up
- Represented School in Prayas Environment Quiz '08 (conducted by WWF) and stood 3rd in Surat district.
Computer Skills
- Programming: C, C++ (STL+OpenGL), Git, Octave/MATLAB, Scala, Oz/Mozart
- Markup: Latex & Beamer, GnuPlot
- Web Development: PHP, HTML+CSS, JavaScript (including JQuery)+AJAX, CakePHP framework
- Scripting: Bash, Perl and Python
- Database Management & Big data analysis: MySQL, MongoDB, R
- Version control systems: Git, Subversion
- Hardware Description Languages:MIPS (assembly language), Blue Spec Verilog (BSV) machine language
Computer Science Projects
Other Projects
Dance
Football
Others
- Black-belt in Karate Shodan-Ho


Last Updated: 2019-04-30
Progressive Web Apps provide an installable, app-like experience on desktop and mobile that are built and delivered directly via the web. They're web apps that are fast and reliable. And most importantly, they're web apps that work in any browser. If you're building a web app today, you're already on the path towards building a Progressive Web App.
Every web experience must be fast, and this is especially true for Progressive Web Apps. Fast refers to the time it takes to get meaningful content on screen, and provide an interactive experience in less than 5 seconds.
And, it must be reliably fast. It's hard to stress enough how much better reliable performance is. Think of it this way: the first load of a native app is frustrating. It's gated by an app store and a huge download, but once you get to a point where the app is installed, that up-front cost is amortized across all app starts, and none of those starts have a variable delay. Each application start is as fast as the last, no variance. A Progressive Web App must deliver this reliable performance that users have come to expect from any installed experience.
Progressive Web Apps can run in a browser tab, but are also installable. Bookmarking a site just adds a shortcut, but an installed Progressive Web App looks and behaves like all of the other installed apps. It launches from the same place as other apps launch. You can control the launch experience, including a customized splash screen, icons and more. It runs as an app, in an app window without an address bar or other browser UI. And like all other installed apps, it's a top level app in the task switcher.
Remember, it's critical that an installable PWA is fast and reliable. Users who install a PWA expect that their apps work, no matter what kind of network connection they're on. It's a baseline expectation that must be met by every installed app.
Using responsive design techniques, Progressive Web Apps work on both mobile and desktop, using a single code base between platforms. If you're considering writing a native app, take a look at the benefits that a PWA offers.
In this codelab, you're going to build a weather web app using Progressive Web App techniques. Your app will:
beforeinstallprompt
event to notify the user it's installable.This codelab is focused on Progressive Web Apps. Non-relevant concepts and code blocks are glossed over and are provided for you to simply copy and paste.
Our weather data comes from the Dark Sky API. In order to use it, you'll need to request an API key. It's easy to use, and free for non-commercial projects.
To test that your API Key is working properly, make an HTTP request to the DarkSky API. Update the URL below to replace DARKSKY_API_KEY
with your API key. If everything works, you should see the latest weather forecast for New York City.
https://api.darksky.net/forecast/DARKSKY_API_KEY/40.7720232,-73.9732319
We've put everything you need for this project into a Git repo. To get started, you'll need to grab the code and open it in your favorite dev environment. For this codelab, we recommend using Glitch.
Using Glitch is the recommended method for working through this codelab.
.env
file, and update it with your DarkSky API key.If you want to download the code and work locally, you'll need to have a recent version of Node, and code editor setup and ready to go.
npm install
to install the dependencies required to run the server.server.js
and set your DarkSky API key.node server.js
to start the server on port 8000.Our starting point is a basic weather app designed for this codelab. The code has been overly simplified to show the concepts in this codelab, and it has little error handling. If you choose to reuse any of this code in a production app, make sure that you handle any errors and fully test all code.
Some things to try...
FORECAST_DELAY
in server.js
Lighthouse is an easy to use tool to help improve the quality of your sites and pages. It has audits for performance, accessibility, progressive web apps, and more. Each audit has a reference doc explaining why the audit is important, as well as how to fix it.
We'll use Lighthouse to audit our Weather app, and verify the changes we've made.
We're going to focus on the results of the Progressive Web App audit.
And there's a lot of red to focus on:
start_url
does not respond with a 200 when offline.start_url.
Let's jump in and start fixing some of these issues!
By the end of this section, our weather app will pass the following audits:
The web app manifest is a simple JSON file that gives you, the developer, the ability to control how your app appears to the user.
Using the web app manifest, your web app can:
display
).start_url
).short_name
, icons
).name
, icons
, colors
).orientation
).Create a file named public/manifest.json
in your project and copy/paste the following contents:
public/manifest.json
{
"name": "Weather",
"short_name": "Weather",
"icons": [{
"src": "/images/icons/icon-128x128.png",
"sizes": "128x128",
"type": "image/png"
}, {
"src": "/images/icons/icon-144x144.png",
"sizes": "144x144",
"type": "image/png"
}, {
"src": "/images/icons/icon-152x152.png",
"sizes": "152x152",
"type": "image/png"
}, {
"src": "/images/icons/icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
}, {
"src": "/images/icons/icon-256x256.png",
"sizes": "256x256",
"type": "image/png"
}, {
"src": "/images/icons/icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}],
"start_url": "/index.html",
"display": "standalone",
"background_color": "#3E4EB8",
"theme_color": "#2F3BA2"
}
The manifest supports an array of icons, intended for different screen sizes. For this code lab, we've included a few others since we needed them for our iOS integration.
Next, we need to tell the browser about our manifest by adding a <link rel="manifest"...
to each page in our app. Add the following line to the <head>
element in your index.html
file.
<!-- CODELAB: Add link rel manifest -->
<link rel="manifest" href="/manifest.json">
DevTools provides a quick, easy way to check your manifest.json
file. Open up the Manifest pane on the Application panel. If you've added the manifest information correctly, you'll be able to see it parsed and displayed in a human-friendly format on this pane.
Safari on iOS doesn't support the web app manifest (yet), so you'll need to add the traditional meta
tags to the <head>
of your index.html
file:
<!-- CODELAB: Add iOS meta tags and icons -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="Weather PWA">
<link rel="apple-touch-icon" href="/images/icons/icon-152x152.png">
Our Lighthouse audit called out a few other things that are pretty easy to fix, so let's take care of those while we're here.
Under the SEO audit, Lighthouse noted our "Document does not have a meta description." Descriptions can be displayed in Google's search results. High-quality, unique descriptions can make your results more relevant to search users and can increase your search traffic.
To add a description, add the following meta
tag to the <head>
of your document:
<!-- CODELAB: Add description here -->
<meta name="description" content="A sample weather app">
In the PWA audit, Lighthouse noted our app "Does not set an address-bar theme color". Theming the browser's address bar to match your brand's colors provides a more immersive user experience.
To set the theme color on mobile, add the following meta
tag to the <head>
of your document:
<!-- CODELAB: Add meta theme-color -->
<meta name="theme-color" content="#2F3BA2" />
Run Lighthouse again (by clicking on the + sign in the upper left corner of the Audits pane) and verify your changes.
SEO Audit
Progressive Web App Audit
start_url
does not respond with a 200 when offline.start_url.
There is an expectation from users that installed apps will always have a baseline experience if they're offline. That's why it's critical for installable web apps to never show Chrome's offline dinosaur. The offline experience can range from a simple, offline page, to a read-only experience with previously cached data, all the way to a fully functional offline experience that automatically syncs when the network connection is restored.
In this section, we're going to add a simple offline page to our weather app. If the user tries to load the app while offline, it'll show our custom page, instead of the typical offline page that the browser shows. By the end of this section, our weather app will pass the following audits:
start_url
does not respond with a 200 when offline.start_url.
In the next section, we'll replace our custom offline page with a full offline experience. This will improve the offline experience, but more importantly, it'll significantly improve our performance, because most of our assets (HTML, CSS and JavaScript) will be stored and served locally, eliminating the network as a potential bottleneck.
If you're unfamiliar with service workers, you can get a basic understanding by reading Introduction To Service Workers about what they can do, how their lifecycle works and more. Once you've completed this code lab, be sure to check out the Debugging Service Workers code lab for a more in-depth look at how to work with service workers.
Features provided via service workers should be considered a progressive enhancement, and added only if supported by the browser. For example, with service workers you can cache the app shell and data for your app, so that it's available even when the network isn't. When service workers aren't supported, the offline code isn't called, and the user gets a basic experience. Using feature detection to provide progressive enhancement has little overhead and it won't break in older browsers that don't support that feature.
The first step is to register the service worker. Add the following code to your index.html
file:
// CODELAB: Register service worker.
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/service-worker.js')
.then((reg) => {
console.log('Service worker registered.', reg);
});
});
}
This code checks to see if the service worker API is available, and if it is, the service worker at /service-worker.js
is registered once the page is loaded.
Note, the service worker is served from the root directory, not from a /scripts/
directory. This is the easiest way to set the scope
of your service worker. The scope
of the service worker determines which files the service worker controls, in other words, from which path the service worker will intercept requests. The default scope
is the location of the service worker file, and extends to all directories below. So if service-worker.js
is located in the root directory, the service worker will control requests from all web pages at this domain.
First, we need to tell the service worker what to cache. We've already created a simple offline page (public/offline.html
) that we'll display any time there's no network connection.
In your service-worker.js
, add '/offline.html',
to the FILES_TO_CACHE
array, the final result should look like this:
// CODELAB: Update cache names any time any of the cached files change.
const FILES_TO_CACHE = [
'/offline.html',
];
Next, we need to update the install
event to tell the service worker to pre-cache the offline page:
// CODELAB: Precache static resources here.
evt.waitUntil(
caches.open(CACHE_NAME).then((cache) => {
console.log('[ServiceWorker] Pre-caching offline page');
return cache.addAll(FILES_TO_CACHE);
})
);
Our install
event now opens the cache with caches.open()
and provides a cache name. Providing a cache name allows us to version files, or separate data from the cached resources so that we can easily update one but not affect the other.
Once the cache is open, we can then call cache.addAll()
, which takes a list of URLs, fetches them from the server and adds the response to the cache. Note that cache.addAll()
will reject if any of the individual requests fail. That means you're guaranteed that, if the install step succeeds, you cache will be in a consistent state. But, if it fails for some reason, it will automatically try again the next time the service worker starts up.
Let's take a look at how you can use DevTools to understand and debug service workers. Before reloading your page, open up DevTools, go the Service Workers pane on the Application panel. It should look like this:
When you see a blank page like this, it means that the currently open page does not have any registered service workers.
Now, reload your page. The Service Workers pane should now look like this:
When you see information like this, it means the page has a service worker running.
Next to the Status label, there's a number (34251 in this case), keep an eye on that number as you're working with service workers. It's an easy way to tell if your service worker has been updated.
We'll use the activate
event to clean up any old data in our cache. This code ensures that your service worker updates its cache whenever any of the app shell files change. In order for this to work, you'd need to increment the CACHE_NAME
variable at the top of your service worker file.
Add the following code to your activate
event:
// CODELAB: Remove previous cached data from disk.
evt.waitUntil(
caches.keys().then((keyList) => {
return Promise.all(keyList.map((key) => {
if (key !== CACHE_NAME) {
console.log('[ServiceWorker] Removing old cache', key);
return caches.delete(key);
}
}));
})
);
With the Service Workers pane open, refresh the page, you'll see the new service worker installed, and the status number increment.
The updated service worker takes control immediately because our install
event finishes with self.skipWaiting()
, and the activate
event finishes with self.clients.claim()
. Without those, the old service worker would continue to control the page as long as there is a tab open to the page.
And finally, we need to handle fetch
events. We're going to use a network, falling back to cache strategy. The service worker will first try to fetch the resource from the network, if that fails, it will return the offline page from the cache.
// CODELAB: Add fetch event handler here.
if (evt.request.mode !== 'navigate') {
// Not a page navigation, bail.
return;
}
evt.respondWith(
fetch(evt.request)
.catch(() => {
return caches.open(CACHE_NAME)
.then((cache) => {
return cache.match('offline.html');
});
})
);
The fetch
handler only needs to handle page navigations, so other requests can be dumped out of the handler and will be dealt with normally by the browser. But, if the request .mode
is navigate
, use fetch
to try to get the item from the network. If it fails, the catch
handler opens the cache with caches.open(CACHE_NAME)
and uses cache.match('offline.html')
to get the precached offline page. The result is then passed back to the browser using evt.respondWith()
.
Let's check to make sure everything works as we expect it. With the Service Workers pane open, refresh the page, you'll see the new service worker installed, and the status number increment.
We can also check to see what's been cached. Go to the Cache Storage pane on the Application panel of DevTools. Right click Cache Storage, pick Refresh Caches, expand the section and you should see the name of your static cache listed on the left-hand side. Clicking on the cache name shows all of the files that are cached.
Now, let's test out offline mode. Go back to the Service Workers pane of DevTools and check the Offline checkbox. After checking it, you should see a little yellow warning icon next to the Network panel tab. This indicates that you're offline.
Reload your page and... it works! We get our offline panda, instead of Chrome's offline dino!
Debugging service workers can be a challenge, and when it involves caching, things can become even more of a nightmare if the cache isn't updated when you expect it. Between the typical service worker lifecycle and a bug in your code, you may become quickly frustrated. But don't.
In the Service Workers pane of the Application panel, there are a few checkboxes that will make your life much easier.
In some cases, you may find yourself loading cached data or that things aren't updated as you expect. To clear all saved data (localStorage, indexedDB data, cached files) and remove any service workers, use the Clear storage pane in the Application tab. Alternatively, you can also work in an Incognito window.
Additional tips:
Run Lighthouse again and verify your changes. Don't forget to uncheck the Offline checkbox before you verify your changes!
SEO Audit
Progressive Web App Audit
start_url
responds with a 200 when offline.start_url.
Take a moment and put your phone into airplane mode, and try running some of your favorite apps. In almost all cases, they provide a fairly robust offline experience. Users expect that robust experience from their apps. And the web should be no different. Progressive Web Apps should be designed with offline as a core scenario.
The life cycle of the service worker is the most complicated part. If you don't know what it's trying to do and what the benefits are, it can feel like it's fighting you. But once you know how it works, you can deliver seamless, unobtrusive updates to users, mixing the best of the web and native patterns.
install
eventThe first event a service worker gets is install
. It's triggered as soon as the worker executes, and it's only called once per service worker. If you alter your service worker script the browser considers it a different service worker, and it'll get its own install
event.
Typically the install
event is used to cache everything you need for your app to run.
activate
eventThe service worker will receive an activate
event every time it starts up. The main purpose of the activate
event is to configure the service worker's behavior, clean up any resources left behind from previous runs (e.g. old caches), and get the service worker ready to handle network requests (for example the fetch
event described below).
fetch
eventThe fetch event allows the service worker to intercept any network requests and handle requests. It can go to the network to get the resource, it can pull it from its own cache, generate a custom response or any number of different options. Check out the Offline Cookbook for different strategies that you can use.
The browser checks to see if there is a new version of your service worker on each page load. If it finds a new version, the new version is downloaded and installed in the background, but it is not activated. It's sits in a waiting state, until there are no longer any pages open that use the old service worker. Once all windows using the old service worker are closed, the new service worker is activated and can take control. Refer to the Updating the service worker section of the Service Worker Lifecycle doc for further details.
Choosing the right caching strategy depends on the type of resource you're trying to cache and how you might need it later. For our weather app, we'll split the resources we need to cache into two categories: resources we want to precache and the data that we'll cache at runtime.
Precaching your resources is a similar concept to what happens when a user installs a desktop or mobile app. The key resources needed for the app to run are installed, or cached on the device so that they can be loaded later whether there's a network connection or not.
For our app, we'll precache all of our static resources when our service worker is installed so that everything we need to run our app is stored on the user's device. To ensure our app loads lightning fast, we'll use the cache-first strategy; instead of going to the network to get the resources, they're pulled from the local cache; only if it's not available there will we try to get it from the network.
Pulling from the local cache eliminates any network variability. No matter what kind of network the user is on (WiFi, 5G, 3G, or even 2G), the key resources we need to run are available almost immediately.
The stale-while-revalidate strategy is ideal for certain types of data and works well for our app. It gets data on screen as quickly as possible, then updates that once the network has returned the latest data. Stale-while-revalidate means we need to kick off two asynchronous requests, one to the cache and one to the network.
Under normal circumstances, the cached data will be returned almost immediately providing the app with recent data it can use. Then, when the network request returns, the app will be updated using the latest data from the network.
For our app, this provides a better experience than the network, falling back to cache strategy because the user does not have to wait until the network request times out to see something on screen. They may initially see older data, but once the network request returns, the app will be updated with the latest data.
As mentioned previously, the app needs to kick off two asynchronous requests, one to the cache and one to the network. The app uses the caches
object available in window
to access the cache and retrieve the latest data. This is an excellent example of progressive enhancement as the caches
object may not be available in all browsers, and if it's not the network request should still work.
Update the getForecastFromCache()
function, to check if the caches
object is available in the global window
object, and if it is, request the data from the cache.
// CODELAB: Add code to get weather forecast from the caches object.
if (!('caches' in window)) {
return null;
}
const url = `${window.location.origin}/forecast/${coords}`;
return caches.match(url)
.then((response) => {
if (response) {
return response.json();
}
return null;
})
.catch((err) => {
console.error('Error getting data from cache', err);
return null;
});
Then, we need to modify updateData()
so that it makes two calls, one to getForecastFromNetwork()
to get the forecast from the network, and one to getForecastFromCache()
to get the latest cached forecast:
// CODELAB: Add code to call getForecastFromCache.
getForecastFromCache(location.geo)
.then((forecast) => {
renderForecast(card, forecast);
});
Our weather app now makes two asynchronous requests for data, one from the cache and one via a fetch
. If there's data in the cache, it'll be returned and rendered extremely quickly (tens of milliseconds). Then, when the fetch
responds, the card will be updated with the freshest data direct from the weather API.
Notice how the cache request and the fetch
request both end with a call to update the forecast card. How does the app know whether it's displaying the latest data? This is handled in the following code from renderForecast()
:
// If the data on the element is newer, skip the update.
if (lastUpdated >= data.currently.time) {
return;
}
Every time that a card is updated, the app stores the timestamp of the data on a hidden attribute on the card. The app just bails if the timestamp that already exists on the card is newer than the data that was passed to the function.
In the service worker, let's add a DATA_CACHE_NAME
so that we can separate our applications data from the app shell. When the app shell is updated and older caches are purged, our data will remain untouched, ready for a super fast load. Keep in mind, if your data format changes in the future, you'll need a way to handle that and ensure the app shell and content stay in sync.
// CODELAB: Update cache names any time any of the cached files change.
const CACHE_NAME = 'static-cache-v2';
const DATA_CACHE_NAME = 'data-cache-v1';
Don't forget to also update the CACHE_NAME
; we'll be changing all of our static resources as well.
In order for our app to work offline, we need to precache all of the resources it needs. This will also help our performance. Instead of having to get all of the resources from the network, the app will be able to load all of them from the local cache, eliminating any network instability.
Update the FILES_TO_CACHE
array with the list of files:
// CODELAB: Add list of files to cache here.
const FILES_TO_CACHE = [
'/',
'/index.html',
'/scripts/app.js',
'/scripts/install.js',
'/scripts/luxon-1.11.4.js',
'/styles/inline.css',
'/images/add.svg',
'/images/clear-day.svg',
'/images/clear-night.svg',
'/images/cloudy.svg',
'/images/fog.svg',
'/images/hail.svg',
'/images/install.svg',
'/images/partly-cloudy-day.svg',
'/images/partly-cloudy-night.svg',
'/images/rain.svg',
'/images/refresh.svg',
'/images/sleet.svg',
'/images/snow.svg',
'/images/thunderstorm.svg',
'/images/tornado.svg',
'/images/wind.svg',
];
Since we are manually generating the list of files to cache, every time we update a file we must update the CACHE_NAME
. We were able to remove offline.html
from our list of cached files because our app now has all the necessary resources it needs to work offline, and won't ever show the offline page again.
To ensure our activate
event doesn't accidentally delete our data, in the activate
event of service-worker.js
, replace if (key !== CACHE_NAME) {
with:
if (key !== CACHE_NAME && key !== DATA_CACHE_NAME) {
We need to modify the service worker to intercept requests to the weather API and store their responses in the cache, so we can easily access them later. In the stale-while-revalidate strategy, we expect the network response to be the ‘source of truth', always providing us with the most recent information. If it can't, it's OK to fail because we've already retrieved the latest cached data in our app.
Update the fetch
event handler to handle requests to the data API separately from other requests.
// CODELAB: Add fetch event handler here.
if (evt.request.url.includes('/forecast/')) {
console.log('[Service Worker] Fetch (data)', evt.request.url);
evt.respondWith(
caches.open(DATA_CACHE_NAME).then((cache) => {
return fetch(evt.request)
.then((response) => {
// If the response was good, clone it and store it in the cache.
if (response.status === 200) {
cache.put(evt.request.url, response.clone());
}
return response;
}).catch((err) => {
// Network request failed, try to get it from the cache.
return cache.match(evt.request);
});
}));
return;
}
evt.respondWith(
caches.open(CACHE_NAME).then((cache) => {
return cache.match(evt.request)
.then((response) => {
return response || fetch(evt.request);
});
})
);
The code intercepts the request and checks if it is for a weather forecast. If it is, use fetch
to make the request. Once the response is returned, open the cache, clone the response, store it in the cache, and return the response to the original requestor.
We need to remove the evt.request.mode !== 'navigate'
check because we want our service worker to handle all requests (including images, scripts, CSS files, etc), not just navigations. If we left that check in, only the HTML would be served from the service worker cache, everything else would be requested from the network.
The app should be completely offline-functional now. Refresh the page to ensure that you've got the latest service worker installed, then save a couple of cities and press the refresh button on the app to get fresh weather data.
Then go to the Cache Storage pane on the Application panel of DevTools. Expand the section and you should see the name of your static cache and data cache listed on the left-hand side. Opening the data cache should show the data stored for each city.
Then, open DevTools and switch to the Service Workers pane, and check the Offline checkbox, then try reloading the page, and then go offline and reload the page.
If you're on a fast network and want to see how weather forecast data is updated on a slow connection, set the FORECAST_DELAY
property in server.js
to 5000
. All requests to the forecast API will be delayed by 5000ms.
It's also a good idea to run Lighthouse again.
SEO Audit
Progressive Web App Audit
start_url
responds with a 200 when offline.start_url.
When a Progressive Web App is installed, it looks and behaves like all of the other installed apps. It launches from the same place as other apps launch. It runs in an app without an address bar or other browser UI. And like all other installed apps, it's a top level app in the task switcher.
In Chrome, a Progressive Web App can either be installed through the three-dot context menu, or you can provide a button or other UI component to the user that will prompt them to install your app.
In order for a user to be able to install your Progressive Web App, it needs to meet certain criteria. The easiest way to check is to use Lighthouse and make sure it meets the installable criteria.
If you're worked through this codelab, your PWA should already meet these criteria.
First, let's add the install.js
to our index.html
file.
<!-- CODELAB: Add the install script here -->
<script src="/scripts/install.js"></script>
beforeinstallprompt
eventIf the add to home screen criteria are met, Chrome will fire a beforeinstallprompt
event, that you can use to indicate your app can be 'installed', and then prompt the user to install it. Add the code below to listen for the beforeinstallprompt
event:
// CODELAB: Add event listener for beforeinstallprompt event
window.addEventListener('beforeinstallprompt', saveBeforeInstallPromptEvent);
In our saveBeforeInstallPromptEvent
function, we'll save a reference to the beforeinstallprompt
event so that we can call prompt()
on it later, and update our UI to show the install button.
// CODELAB: Add code to save event & show the install button.
deferredInstallPrompt = evt;
installButton.removeAttribute('hidden');
When the user clicks the install button, we need to call .prompt()
on the saved beforeinstallprompt
event. We also need to hide the install button, because .prompt()
can only be called once on each saved event.
// CODELAB: Add code show install prompt & hide the install button.
deferredInstallPrompt.prompt();
// Hide the install button, it can't be called twice.
evt.srcElement.setAttribute('hidden', true);
Calling .prompt()
will show a modal dialog to the user, asking them to add your app to their home screen.
You can check to see how the user responded to the install dialog by listening for the promise returned by the userChoice
property of the saved beforeinstallprompt
event. The promise returns an object with an outcome
property after the prompt has shown and the user has responded to it.
// CODELAB: Log user response to prompt.
deferredInstallPrompt.userChoice
.then((choice) => {
if (choice.outcome === 'accepted') {
console.log('User accepted the A2HS prompt', choice);
} else {
console.log('User dismissed the A2HS prompt', choice);
}
deferredInstallPrompt = null;
});
One comment about userChoice
, the spec defines it as a property, not a function as you might expect.
In addition to any UI you add to install your app, users can also install your PWA through other methods, for example Chrome's three-dot menu. To track these events, listen for the appinstalled event.
// CODELAB: Add event listener for appinstalled event
window.addEventListener('appinstalled', logAppInstalled);
Then, we'll need to update the logAppInstalled
function, for this codelab, we'll just use console.log
, but in a production app, you probably want to log this as an event with your analytics software.
// CODELAB: Add code to log the event
console.log('Weather App was installed.', evt);
Don't forget to update the CACHE_NAME
in your service-worker.js
file since you've made changes to files that are already cached. Enabling the Bypass for network checkbox in the Service Workers pane of the Application panel in DevTools will work in development, but won't help in the real world.
Let's see how our install step went. To be safe, use the Clear site data button in the Application panel of DevTools to clear everything away and make sure we're starting fresh. If you previously installed the app, be sure to uninstall it, otherwise the install icon won't show up again.
First, let's verify our install icon shows up properly, be sure to try this on both desktop and mobile.
Next, let's make sure everything installs properly, and our events are properly fired. You can do this either on desktop or mobile. If you want to test this on mobile, be sure you're using remote debugging so you can see what's logged to the console.
Note, if you're running on desktop from localhost, your installed PWA may show an address banner because localhost isn't considered a secure host.
Let's also check the behavior on iOS. If you have an iOS device, you can use that, or if you're on a Mac, try the iOS Simulator available with Xcode.
The display-mode
media query makes it possible to apply styles depending on how the app was launched, or determine how it was launched with JavaScript.
@media all and (display-mode: standalone) {
body {
background-color: yellow;
}
}
You can also check the display-mode
media query in JavaScript to see if you're running in standalone.
Remember, the beforeinstallevent
doesn't fire if the app is already installed, so during development you'll probably want to install and uninstall your app several times to make sure everything is working as expected.
On Android, PWAs are uninstalled in the same way other installed apps are uninstalled.
On ChromeOS, PWAs are easily uninstalled from the launcher search box.
On Mac and Windows, PWAs may be uninstalled through Chrome:
You can also open the installed PWA, click the the dot menu in the upper right corner, and choose "Uninstall Weather PWA..."
Congratulations, you've successfully built your first Progressive Web App!
You added a web app manifest to enable it to be installed, and you added a service worker to ensure that your PWA is always fast, and reliable. You learned how to use DevTools to audit an app and how it can help you improve your user experience.
You now know the key steps required to turn any web app into a Progressive Web App.
Check out some of these codelabs...


4 instantiations of PipelineStateEventArgs
System.Management.Automation (4)
engine\hostifaces\pipelinebase.cs (1)
881
stateChanged(this, new
PipelineStateEventArgs
(queueItem.PipelineStateInfo));
engine\hostifaces\PowerShell.cs (2)
5492
new
PipelineStateEventArgs
(
5547
new
PipelineStateEventArgs
(
engine\remoting\client\remotepipeline.cs (1)
852
stateChanged(this, new
PipelineStateEventArgs
(queueItem.PipelineStateInfo));
15 references to PipelineStateEventArgs
Microsoft.PowerShell.ConsoleHost (1)
host\msh\Executor.cs (1)
139
private void PipelineStateChangedHandler(object sender,
PipelineStateEventArgs
e)
System.Management.Automation (14)
engine\hostifaces\Pipeline.cs (1)
459
public abstract event EventHandler<
PipelineStateEventArgs
> StateChanged;
engine\hostifaces\pipelinebase.cs (2)
735
public override event EventHandler<
PipelineStateEventArgs
> StateChanged = null;
840
EventHandler<
PipelineStateEventArgs
> stateChanged = null;
engine\hostifaces\PowerShell.cs (4)
3877
private void PipelineStateChanged(object source,
PipelineStateEventArgs
stateEventArgs)
6210
private EventHandler<
PipelineStateEventArgs
> _eventHandler;
6231
_eventHandler = new EventHandler<
PipelineStateEventArgs
>(LocalPipeline_StateChanged);
6237
private void LocalPipeline_StateChanged(object sender,
PipelineStateEventArgs
e)
engine\remoting\client\Job.cs (3)
2716
private void HandlePipelineStateChanged(object sender,
PipelineStateEventArgs
stateEventArgs)
3157
protected virtual void HandlePipelineStateChanged(object sender,
PipelineStateEventArgs
e)
4307
protected override void HandlePipelineStateChanged(object sender,
PipelineStateEventArgs
e)
engine\remoting\client\remotepipeline.cs (2)
634
public override event EventHandler<
PipelineStateEventArgs
> StateChanged = null;
813
EventHandler<
PipelineStateEventArgs
> stateChanged = null;
engine\remoting\commands\PSRemotingCmdlet.cs (2)
3422
private void HandlePipelineStateChanged(object sender,
PipelineStateEventArgs
stateEventArgs)
3654
PipelineStateEventArgs
stateEventArgs)


--- scott-active: true ---
Scott Whitfield (trombonist, composer, arranger, and vocalist) is internationally recognized for his work with contemporary big bands, including those of Toshiko Akiyoshi, Bob Florence, Clare Fischer, Johnny Mandel, Bill Holman, Phil Norman Tentet, Glen Miller Orchestra, Stan Kenton Alumni Band and Jimmy Dorsey Band, as well as his own Scott Whitfield Jazz Orchestras (East AND West). In addition to Scott’s own recordings, his compositions and arrangements have been performed and recorded by such artists as Diva, Maurice Hines, The Pied Pipers, The Modernaires, Bill Allred’s Classic Jazz Band, and Pete Petersen’s 23-strong Collection Jazz Orchestra.
Scott’s playing, writing, and singing have been compared to that of some of his biggest influences, including Carl Fontana, Frank Rosolino, Thad Jones, Sammy Nestico, Mel Torme, and Jack Jones. While jazz ensemble composition and arranging is his forte, he’s arranged for the Omaha Philharmonic and The New York City Pops Orchestra.
Settling in New York in 1993, Scott became a member of the Nat Adderley Sextet, which also included Jimmy Cobb, Walter Booker, Vincent Herring and Rob Bargad. The group’s engagements at Sweet Basil led to fruitful associations with Nnenna Freelon, Frank Wess, Lionel Hampton, Wayne Andre, and many others. He has also performed in many Broadway show orchestras, and backed the likes of Robert Goulet, Rita Moreno, Marilyn McCoo, Vic Damone, Jack Jones, Nancy Wilson, Natalie Cole, Frank Sinatra, Jr., Patti Austin, and a host of others.
Scott served on the jazz faculty at Rutgers University from 1998 to 2002, teaching trombone, composition and arranging, and improvisation, while also coordinating the school’s combo program. Scott is a Getzen artist, and has appeared throughout the world, from Australia to Zurich, sharing his expertise on trombone technique, improvisation, composition, arranging, and jazz history. The Scott Whitfield Jazz Orchestra (first founded in 1986, while Scott was pursuing his Master’s degree at North Texas State University) now has two incarnations: the SWJO East, based in New York; and the SWJO West, based in Whitfield’s new home of Los Angeles. Both of these aggregations feature the top players in the business. For more than a year, the SWJO East was in residence at New York’s Birdland, the Jazz Corner of the World.
Scott plays with such reckless, high-wire act abandon, like maybe (Frank) Rosolino on speed.


OH MY GOSH!
Looks like the page you’re trying to visit doesn’t exist. Please check the URL and try your luck again.
TAKE ME HOMELooks like the page you’re trying to visit doesn’t exist. Please check the URL and try your luck again.
TAKE ME HOME


Redirecting to Unstoppable Wallet
Open Wallet
Don’t have the app?
Google Play
App Store
F-Droid
APK file
Github
Gitlab


Created by Unknown User (dharmsheta), last modified on Mar 05, 2012
Set up a Jenkins build to generate CollabNet tracker artifacts
General instructions on how to setup the Tracker component
Before you set up the plugin, make sure the following are in place in the CollabNet project:
- A valid tracker where artifacts can be created or updated
- A user who is a project member, and has view, submit and edit permissions for the tracker# In the Jenkins interface for the job, click Configure.
- In the Jenkins interface for the job, click Configure.
- In the Post-build Actions section, select CollabNet Tracker.
- Enter the URL of the CollabNet site. For example, https://forge.collab.net.
- Enter the username and password of the SourceForge or Teamforge project member responsible for creating and updating tracker artifacts in the project.
- Enter the name of the project containing the tracker.
*Note:*If the user specified is not a member of this project, the plugin will not be able to locate the project.
- Enter the name of the tracker where artifacts will be created or updated.
*Note:*If the user specified does not have the requisite permissions in this tracker, the plugin will not be able to identify the tracker.
- Enter a title for the tracker artifact. You may use environment variables in the title. For example, ${BUILD_ID). Entering a title that could change causes a new artifact to be opened every time the build fails. For a title that does not change, all build results affect a single tracker artifact.
- Specify the individual to whom the artifact should be assigned.
*Note:*If the project administrator has configured the tracker to automatically assign artifacts to individuals based on artifact criteria, skip this step. If not, and you do not select a user, the artifact is assigned to "None". The artifact is also assigned to "None" in case the username is not valid.
- Enter a priority or the artifact.
- Select whether you want the Jenkins build log attached to the artifact. Attaching the build log could be especially useful when a build fails, since you would not need to check the Jenkins console output for details.
- Specify whether you want the artifact to be updated irrespective of the outcome of the build.
**Select yes if you always want to update the issue after each build, regardless of whether the build succeeds or fails.
**Select no if you only want to track build failures.
- Select whether you want an open artifact to be automatically closed when the build succeeds.
*Note: Make sure your selection does not potentially conflict with a tracker workflow rule you may have set up. For example, assume you had defined a status transition rule that an open artifact can be closed only when the "Fixed in Release" field is specified. If you select the "Yes" option here to automatically close an open artifact without manual intervention, there will be a conflict because of the "Fixed in Release" requirement.
- If the artifact represents a failed build for a file release, enter the release name in Reported Release.
Tracker artifacts are created, updated or closed depending on your configuration and build results.
The Tracker component can be used to open a new artifact on failure or always update an artifact. You can choose to automatically close the issue once the build succeeds, or just update the last comment this this effect.
If you give the issue title a name with a build variable in it, it will open a new issue on any failure (instead of updating). The user needs to have the right to edit Tracker artifacts. The resulting tracker artifact will look something like:


¡Hola! Hi! I am Fernanda Ramírez from Chile. I studied Civil Computer Engineer (B.S. Computer Science) at Universidad de Chile. My main field is Human-Computer Interaction and I want to learn a lot more about it.
During last years I worked mostly like Front-End developer, but I'm very interested in UI/UX.
Check my Resume


Ease your WebRTC
Hey there, thanks for downloading the EaseRTC Library. Let's show you how this Library works!
We need an signaling server for any connection but as we don't have one here you'll have to do it in the same device as we'll be using the localstorage as a medium to transfer data
Click on the buttons one by one
Then you're connected


--- title: /home/ayonga/.dropboxes/business/Dropbox/research/dzopt/frost/matlab/utils/plot Directory Reference layout: doxygen comments: false sidebar: doxygen_sidebar topnav: topnav tags: false ---
Files | |
| file | hline.m |
| file | plot_format.m |
| file | plot_save.m |
| file | sfigure.m |
| SFIGURE Create figure window (minus annoying focus-theft). | |
| file | vline.m |


ctgermany
2016-12-16 14:15
has joined #mainframe
anandv
2017-01-07 17:24
has joined #mainframe
matanyahu
2017-01-25 19:15
has joined #mainframe
ry
2017-02-03 20:43
has joined #mainframe
ry
2017-02-03 20:43
@ry archived the channel (w/ 4 members)


Welcome to FFFB
Flat File Flask Blog is a simple open-source blogging engine that runs off Python 3 and Flask.
It was developed to be super minimal and customisable.
Developed by Luuc Verburgh and Ronald Langeveld
{# Template for about page #} {% extends "base.html" %} {% block main %}
Developed by Luuc Verburgh and Ronald Langeveld


QuantumBit Design
Naturally Inspired Craft
Home
JavascriptSandbox
Contact
About Me
Eloquent Javascript
209.559.9323
Rock, Paper, Scissors!
Choose your Weapon!
Rock
Paper
Scissors
Battle!
Games Played:
0
Player Score:
0
Computer Score:
0
Player
Computer


{% load static %}
Note: This is a development sandbox, so it won't create real transation
To check how it work use Default values
Bkash Number:<PHONE_NUMBER>5
OTP : 123456
PIN : 12121
You will be redirected to bKash website to complete your payment. Please take note of the following before you proceed:


Package
Class
Tree
Index
Help
PREV NEXT
FRAMES
NO FRAMES
All Classes
A
B
C
D
F
G
L
M
P
R
S
T
W
A
addItem(MediaItem)
- Method in class
AnytownLibrary
Adds an item to the library.
addItem(MediaItem)
- Method in interface
Library
Adds an item to the library.
AnytownLibrary
- Class in
<Unnamed>
Represents a library.
AnytownLibrary()
- Constructor for class
AnytownLibrary
Constructor for objects of class AnytownLibrary.
AnytownLibraryTest
- Class in
<Unnamed>
The test class AnytownLibraryTest.
AnytownLibraryTest()
- Constructor for class
AnytownLibraryTest
Default constructor for test class AnytownLibraryTest.
AuthorMatch
- Class in
<Unnamed>
Write a description of class AuthorMatch here.
AuthorMatch()
- Constructor for class
AuthorMatch
B
buildItems()
- Static method in class
AnytownLibraryTest
Builds item array for tests.
buildLibrary(MediaItem[])
- Static method in class
AnytownLibraryTest
Builds a library for read/write.
C
calculateDateDiff(GregorianCalendar, GregorianCalendar)
- Static method in class
AnytownLibrary
Returns the difference between the supplied dates in days.
checkIn(String, int)
- Method in class
AnytownLibrary
Checks an item back into the library.
checkIn(String, int)
- Method in interface
Library
Checks an item back into the library.
checkOut(String, int, String, GregorianCalendar)
- Method in class
AnytownLibrary
Checks out an item from the library.
checkOut(String, int, String, GregorianCalendar)
- Method in interface
Library
Checks out an item from the library.
D
deleteItem(String, int)
- Method in class
AnytownLibrary
Deletes a item from the library.
deleteItem(String, int)
- Method in interface
Library
Deletes a item from the library.
F
findItems(String)
- Method in class
AnytownLibrary
Creates and returns an array of media items that match the call number.
findItems(String)
- Method in interface
Library
Creates and returns an array of media items that match the call number.
G
getItems()
- Method in class
AnytownLibrary
Creates and returns an array containing all items in the library.
getItems()
- Method in interface
Library
Creates and returns an array containing all items in the library.
L
Library
- Interface in
<Unnamed>
Defines the interface for a library system that keeps track of media in a library.
M
MatchMaker
- Interface in
<Unnamed>
Defines an interface for an object that encapsulates a search algorithm.
MAX_ITEMS
- Static variable in class
AnytownLibrary
The maximum number of items allowed in the library.
P
PartialTitleMatch
- Class in
<Unnamed>
Write a description of class PartialTitleMatch here.
PartialTitleMatch()
- Constructor for class
PartialTitleMatch
R
readFromFile(String)
- Static method in class
AnytownLibrary
Recreates the library from a persisted object file.
renew(String, int, String, GregorianCalendar)
- Method in class
AnytownLibrary
Adds 14 days to the due date of the given book, and returns the new due date.
renew(String, GregorianCalendar)
- Method in class
AnytownLibrary
Renews all books checked out to the given borrower.
renew(String, int, String, GregorianCalendar)
- Method in interface
Library
Adds 14 days to the due date of the given book, and returns the new due date.
renew(String, GregorianCalendar)
- Method in interface
Library
Renews all books checked out to the given borrower.
S
search(String, List<MediaItem>)
- Method in class
AuthorMatch
search(String, List<MediaItem>)
- Method in interface
MatchMaker
Finds all the items in the list that matches the criterion.
search(String, List<MediaItem>)
- Method in class
PartialTitleMatch
search(String, List<MediaItem>)
- Method in class
TitleMatch
searchItems(String)
- Method in class
AnytownLibrary
Creates and returns a list of media items that match the criterion.
searchItems(String)
- Method in interface
Library
Creates and returns a list of media items that match the criterion.
setMatchMaker(MatchMaker)
- Method in class
AnytownLibrary
Sets the match maker object that encapsulates the search algorithm.
setMatchMaker(MatchMaker)
- Method in interface
Library
Sets the match maker object that encapsulates the search algorithm.
setUp()
- Method in class
AnytownLibraryTest
Sets up the test fixture.
T
tearDown()
- Method in class
AnytownLibraryTest
Tears down the test fixture.
testAddMultipleCopiesOfItem()
- Method in class
AnytownLibraryTest
Test adding multiple copies of items to the library.
testAddSingleCopyOfItem()
- Method in class
AnytownLibraryTest
Test adding single copies of items to the library.
testBadFileNameRead()
- Method in class
AnytownLibraryTest
Test trying to read from non-existent file.
testCheckIn()
- Method in class
AnytownLibraryTest
Tests checking in an item.
testCheckOut()
- Method in class
AnytownLibraryTest
Tests checking out an item.
testContructor()
- Method in class
AnytownLibraryTest
Test constructor.
testDateDiff()
- Method in class
AnytownLibraryTest
Tests calculateDateDiff().
testDeleteAndAddItems()
- Method in class
AnytownLibraryTest
Test adding and deleting items from the library.
testDeleteOnlyItem()
- Method in class
AnytownLibraryTest
Test deleting the only item from the library.
testFindMultipleCopiesOfItem()
- Method in class
AnytownLibraryTest
Test finding multiple copies of an item in the library.
testFindNoCopiesOfItem()
- Method in class
AnytownLibraryTest
Test finding no copies of an item in the library.
testFindSingleCopyOfItem()
- Method in class
AnytownLibraryTest
Test finding single copies of items in the library.
testGetItems()
- Method in class
AnytownLibraryTest
Test getItems().
testRenewAll()
- Method in class
AnytownLibraryTest
Tests renewing all books for a borrower.
testRenewAnItem()
- Method in class
AnytownLibraryTest
Tests renewing a book.
testWriteAndRead()
- Method in class
AnytownLibraryTest
Test serialization and deserialization.
TitleMatch
- Class in
<Unnamed>
Write a description of class TitleMatch here.
TitleMatch()
- Constructor for class
TitleMatch
W
writeToFile(String)
- Method in class
AnytownLibrary
Writes the current library to the given file name using object serialization.
A
B
C
D
F
G
L
M
P
R
S
T
W
Package
Class
Tree
Index
Help
PREV NEXT
FRAMES
NO FRAMES
All Classes


TextureBMP
TextureBMP is sample C++ code illustrating the use of textures in OpenGL. It is intended to accompany the book 3D Computer Graphics: A mathematical approach with OpenGL, by S. Buss, Cambridge University Press, 2003. However, it can be used independently as well.
TextureBMP reads a texture map from a bitmap file (.bmp extension). Bitmap files can be created with many standard graphics editting programs, include the PC program Paint. These programs often allow coverting other file formats to bitmap images. The main program is in TextureMap.cpp. The C++ class RgbImage is used to read the image data from a bitmap file.
There are several options for downloading the files.
Things to look at:


| viridis {viridisLite} | R Documentation |
This function creates a vector of n
equally spaced colors
along the selected color map.
viridis(n, alpha = 1, begin = 0, end = 1, direction = 1, option = "D") viridisMap(n = 256, alpha = 1, begin = 0, end = 1, direction = 1, option = "D") magma(n, alpha = 1, begin = 0, end = 1, direction = 1) inferno(n, alpha = 1, begin = 0, end = 1, direction = 1) plasma(n, alpha = 1, begin = 0, end = 1, direction = 1) cividis(n, alpha = 1, begin = 0, end = 1, direction = 1) rocket(n, alpha = 1, begin = 0, end = 1, direction = 1) mako(n, alpha = 1, begin = 0, end = 1, direction = 1) turbo(n, alpha = 1, begin = 0, end = 1, direction = 1)
n |
The number of colors (≥ 1) to be in the palette. |
alpha |
The alpha transparency, a number in [0,1], see argument alpha in
|
begin |
The (corrected) hue in [0,1] at which the color map begins. |
end |
The (corrected) hue in [0,1] at which the color map ends. |
direction |
Sets the order of colors in the scale. If 1, the default, colors are ordered from darkest to lightest. If -1, the order of colors is reversed. |
option |
A character string indicating the color map option to use. Eight options are available:
|
Here are the color scales:
magma()
, plasma()
, inferno()
, cividis()
,
rocket()
, mako()
, and turbo()
are convenience functions
for the other color map options, which are useful when the scale must be
passed as a function name.
Semi-transparent colors (0 < alpha < 1) are supported only on some
devices: see rgb
.
viridis
returns a character vector, cv
, of color hex
codes. This can be used either to create a user-defined color palette for
subsequent graphics by palette(cv)
, a col =
specification in
graphics functions or in par
.
viridisMap
returns a n
lines data frame containing the
red (R
), green (G
), blue (B
) and alpha (alpha
)
channels of n
equally spaced colors along the selected color map.
n = 256
by default.
Simon Garnier<EMAIL_ADDRESS>/ @sjmgarnier
library(ggplot2) library(hexbin) dat <- data.frame(x = rnorm(10000), y = rnorm(10000)) ggplot(dat, aes(x = x, y = y)) + geom_hex() + coord_fixed() + scale_fill_gradientn(colours = viridis(256, option = "D")) # using code from RColorBrewer to demo the palette n = 200 image( 1:n, 1, as.matrix(1:n), col = viridis(n, option = "D"), xlab = "viridis n", ylab = "", xaxt = "n", yaxt = "n", bty = "n" )


{% load static %} {% load i18n %}
Privacy Manager
Privacy Manager
Register User
Add Policy
Add Device
Add Entity
Register Stay
List Users
List Policies
List Devices
List Entities
List Unsigned Receipts
List Signed Receipts
Notifications


StoryFinder
Email
Password
Confirm password
Create account
Already have an account?
Click here to login with your username and password.


Issue 2495: The rendered font should be highlighted in Style side panel
Steps to reproduce
- Open Firebug
-
Switch to the HTML panel and there to the Style side
panel
- Inspect the blue
<div>
above
-
Inside the Style side panel check the value for the
font-family
property
Expected result
-
The font
sans-serif
should be shown in blue while
nofont1
and nofont2
are displayed in gray.


1. Searching Methods
2. Sorting Methods
Searching methods are used to find an element. While all searching methods are used to find the element, some are better in terms of runtime (big o) and in certain conditions, such as if an array is sorted.
Big O Runtime:
Best Case: O(1)
Worst Case: O(n)
In linear search, we go through each element until we found the target or we went through every element. When the target is found we return the index or otherwise -1 if the target is not found in the array.
On the left is the image of the walk through of linear search and on the right is the linear search code.
The reason why the Big O is O(n) because we go through each element and the worst case is O(n) since we go through all of the elements in the worst case and n represents all of the elements. The reason why the Best Case Big O is O(1) because in the best case if the first element is the target then we can return it. It will always be constant because no matter what the size of the array is, it will always return the first element.
Big O Runtime:
Best Case: O(1)
Worst Case: O(log n)
In binary search, the array must be sorted or otherwise the search algorithm will not work. In my explanation of the search algorithm, the array is sorted in ascending order from left to right.
First we start with the middle value of the array. We can do this by getting the left index (0) and the right index (last index of the array) and divide it by two using integer division. If the element is the tagret then we can return the index of the target. If the element we found is less than the target then we will move the left index to the index after the middle index. If the element we found is greater than the target then we will move the right index to the index before the middle index. We keep on doing this till the right surpasses the left. If the target is not found then we will return -1.
On the left is the image of the walk through of binary search and on the right is the image of the binary search code.
Please Note: low is the left index and high is the right index
The reason why the Big O is O(log n) because we touch through log(n) nodes. Looking at the example above we touch three
values and the size is 8 (8 will be our n since it is the size of the array). So log(8) is 3. In the best case, at the first try if the middle
is our target then we then return its index.
Please Remember: the base of log n is 2 in computer science
Sorting methods are used to sort an array. While all sorting methods are used to sort the array, some are better in terms of runtime (big o) and in certain conditions, such as if an array is mostly sorted or not sorted at all.
Big O Runtime:
Best Case: O(n)
Worst Case: O(n^2)
In insertion sort, we take an element and insert it where it should be in the sorted array. For instance, we have an array where we want to sort 3,1,2. We can take 3 and insert it. Then take 1 and insert it before 3. Finally, we take 2 and insert it between 1 and 3.
On the left is the image of the walk through of insertion sort and on the right is the image of the insertion sort code.
The reason why the Worst Case Big O is O(n^2) because we traverse through the sorted array n times. Bassically, the worst case is if the input is sorted in descending order. Because we have to go through the the whole sorted array n times. The best case would be O(n) since we wouldn't have to traverse the sorted array, so we just need to traverse the array which is O(n). Basically, the best case would be if the array is already sorted. The more the array is sorted the better the Big O is.
Big O Runtime:
Best Case: O(n^2)
Worst Case: O(n^2)
In selection sort, we take the smallest element and move it to the front. Then we take the smallest element of the current line of numbers and move that to the front of the number that was recently inserted. We keep on doing for n-2 more times.
On the left is the image of the walk through of selection sort and on the right is the image of the selection sort code.
The reason why the Worst Case Big O is O(n^2) because we are going through all of the elements of the array to find the smallest element n times. Even the best case is O(n^2) because we are still searching for the smallest element n times (even if the array is sorted). Basically, selection sort is a pretty bad sorting algorithm and should not really be used.
Big O Runtime:
Best Case: O(n logn)
Worst Case: O(n logn)
In merge sort, we take an array and divide it in half and keep on dividing the halves into halves. We keep on doing this till we reach an array with a size of one. Then merge the ones back together that were originally grouped together while sorting it. We will merge them to make sure they are in ascending order by using the two pointers algorithm.
Here is the walk through of merge sort and its Big O explanation. We divide the arrays in half till we go to an array of length 1. Then we merge the arrays using the two pointer algorithm.
The image below is the code for mergesort.
The reason why the Worst Case Big O is O(n logn) we divide log n times and while merging, we do a total of n comparisons. When combined, the Big O is O(n logn). The Big O for Best Case is still the same since we are bascially performing the same algorithm. Mergesort seems like the best sorting method in terms of Big O because for an array where we do not know how the elements are sorted we can say hey, maybe the Big O is not as great as O(n) but at least that is way better than ending up with a Big O of O(n^2). However, merge sort uses too much memory which is why we will explore other sorting algorithms.
Big O Runtime:
Best Case: O(n logn)
Worst Case: O(n logn)
In heapsort, we first apply heapify (hyperlink) on the array. Then we can do the process where we take the max out and insert it to the array till the heap is empty.
As you can see, we first apply heapify to the array so we can turn it into a max heap. Then we remove the top element of heap
and add it to the array and keep on doing this till the heap is empty.
Please Remember: once the largest element is removed the heap will change so the
current top element is ready to remove.
The image below is the code for heapsort.
The reason why the Worst Case Big O is O(n logn) because the Big O for heapify is O(n). The process of taking out an element and adding it to the array is O(n logn) as we are deleting from a max heap n times and each deletion is log n. So n + nlogn would be O(nlogn) as nlogn > n. The Best Case Big O is still the same because no matter what the size or the elements in the array are, it will always do heapify O(n) and delete from max n times.
Big O Runtime:
Best Case: O(n logn)
Worst Case: O(n^2)
In quicksort, we set pivot (usually any element can be the pivot but we are just going use the first element as the pivot).Then we set our left pointer (element after the pivot) and right pointer (last element of the array). Then we keep on moving the left element 1 unit to the right until it surpasses the right pointer or the element we are at is greater than or euqal to the pivot. Then we keep on moving the right pointer 1 unit to the left until the element we are at is less than the pivot or the left pointer meets the right pointer. We then swap the elements of the left and right pointers. If left surpasses right then we swap the element before left with the pivot and then we divide arrays between pivot to sub arrays. We apply quick sort on the subarrays again and we keep on doing this till the sub arrays are elements of length 1.
As you can see, we set our first element as the pivot. The left pointer is set after the pivot just like it is supposed to. The right pointer is set at the end of the array like it is supposed to. We keep on increasing L by 1 till the element L is pointer is greater than the pivot.
Now we keep on decreasing R till at 3 since R is now less than the pivot. We will now swap 27 with 3.
After that we increase L by 1 and decrease R by 1. But now look: R > L. So that means we will swap the index of L minus 1 with the pivot. So 3 gets swapped with 6. Now we apply quicksort on the array on the left of 6 and the array on the right of 6. In the case we get an array of size two, left and right are just on top of each other. We keep on doing this till the array goes to a size of 1.
Now try to do quicksort on this array
Answer is here
The image below is the code for quicksort.
The reason why the Worst Case Big O is O(n^2) (demonstrated on the left image) because the worst case is if the array is sorted. As you can see, it will be 3 comparisons, 2, 1. We can calculate it using summation of numbers (you can look it up to learn more about it online). Basically, summation of numbers Big O is O(n^2). The Best Case (demonstrated on the right image) Big O is O(n logn). Basically the left and right sub arrays has around the same length as shown on the right. It looks similar to another sorting algorithm that we know 😉.
In quicksort, we can fine tune it to reduce the runtime or at least the number of comparisons.
In finetuning method 1, we can obtain the first value, second value, and middle value. We take the second smallest value and switch with the pivot. Then perform quick sort. In finetuning method 2, we can do quicksort and then apply insertion sort on the smaller subarrays as it might have less comparions. We can really determine the best size of an array for insertion sort through experimentation. The last finetuning method is efficient in terms of space. When we do quicksort, since we know that it is a recursive algorithm it builds a stack of O(n). Now we want to try to reduce the space. Perhaps we can first call the method on the smaller subarray. Since the array is smaller, we can call the method on that first and since it will most likey call little to none methods it will most likely be done quickly and be popped out of the stack as soon as possible. Bascially, it will make a stack of O(1) space. Now when we work on the larger sub array, in the worst case, the smaller side will be n/2, so the other side is n/2-1, so the next subarray will be n/4, n/8, and so on. This makes the stack a Big O space complexity of O(log n).


--- layout: null title: 404 permalink: /404.html ---
Sorry, but the page you are looking for has not been found. Try checking the URL for error, then hit the refresh button on your browser or try found something else in my website.


The six attending boats to the race leave from the pit all at once. It is called "pit-out" in the Japanese boat racing scene.
Once they are out of the pit, all the racers must get ready for the start between the time of leaving the pit and the time of passing the start line. It is called the "Wait Action", Taiki Kohdoh in Japanese. Running straight from the pit, the boats are to round counterclockwise at the 2nd marker and the cheat-prevent bouy, positioning themselves by using various tactics to obtain the most favorable position at the moment of the race start.
A giant clock counts to start the race. Once all the start positions are set, the six racers lead off speeding up, and prepare their boats to start. No racer may cross the start line until it strikes "12:00" and then every racer must cross the start line within the next second. The racers use various tactics to ensure that they cross the start line within this 1-second window of time while positioning themselves for best advantage over their opponents. If a boat crosses the start line before the clock strikes 12:00, this is called a "flying start" (F), meaning a premature start. If a boat crossed the start line more than 1 second after the clock strikes 12:00, then this is judged a "late start" (L). In the case of either a flying start or late start, the boat is scratched from the race.
*All the tickets of the scratched boats are to be refunded.
The pleasure of the BOAT RACE is watching the offensive and defensive battles at the first marker of the first lap. Each boat tactically competes to reach and round the very first marker first. The outcome of the battles at the first marker of the first lap is the most important key element to influence the victory of the race.
In boat racing it is disadvantageous to run over another boats' backwash. However even after the turn at the second marker of the first lap, you will find a lot of exciting racing competion to win the 2nd or 3rd places. Sometime even the reversal of the 1st place can occur. When there is close competition in an exciting race, you never know who wins until the race is completely over.
After the turn at the 2nd marker of the 3rd lap, the boats have only to pass the goal line to finish the race. The finish line is the same as the start line.


Welcome!
Please pick the product that you're most interested out of the three displayed above. Note that the same item will appear multiple times. Simply select the one that's most appealing to you out of the group.
Please pick the product that you're most interested out of the three displayed above. Note that the same item will appear multiple times. Simply select the one that's most appealing to you out of the group.


I first went to the subject's house, to survey the carnage. The fight between the bear and the agents had nearly levelled the building. I resolved not to repeat their mistake. When I meet the bear, I will be ready.
Luckily, several witnesses had observed the subject leaving, atop the mighty steed. I had no trouble picking up their tracks, and soon I was pursuing them across the Eurasian continent. What I saw during the pursuit amazed me.
Everywhere the intrepid couple goes, they fight injustice and liberate people from oppression. I passed town after town of people rejoicing in their newfound freedom.
As if that wasn't enough, they have also been joined by Cédric Kinsinger, the famous journalist. I have read a few of the articles he has written during their travels, and it is the most amazing investigative journalism I have ever seen. It's like Woodward and Bernstein had a threesome with Nellie Bly. Everyone who reads the articles is inspired to throw off the shackles of oppression and become truly free.
They have also been joined by a subversive woman, whose oratory skills surpass anything I have ever heard before. At one town I heard her give an amazing speech, finishing with the following lines: "Ask for work. If they don't give you work, ask for bread. If they do not give you work or bread, then take FREEEEEDOOOOM." The crowd went wild.
Together, they are accomplishing truly great things. They have already abolished capitalism in northern Germany, from Flensburg to Meckelfeld. I can only imagine what they will accomplish as they move on through Europe.
In fact, I have become increasingly sympathetic to their cause. From reading their articles, listening to their speeches, and seeing their results, I have come to realise that my work contributes to the propagation of oppression and injustice. No more, I say!
Thus, this will be my last report. From this day on, I am no longer "D06". I am not an alphanumeric designation, I am a free man!
When I meet the bear, I will be ready.


The Apache Directory Studio update site.
The Apache Directory Studio RCP category contains all features related to the RCP Application.
The Apache Directory Studio Browser category contains all features related to the LDAP Browser.
The Apache Directory Studio Schema category contains all features related to the Schema Editor.
The Apache Directory Studio ApacheDS Configuration category contains all features related to ApacheDS Configuration.
The Apache Directory Studio ApacheDS 2.0 Configuration category contains all features related to ApacheDS 2.0 Configuration.
The Apache Directory Studio LDIF Editor category contains all features related to the LDIF Editor.
The Apache Directory Studio LDAP Servers category contains all features related to the LDAP Servers.


Malwa Institute of Technology is committed to provide value based quality technical education and facilitis to the students to boost there performance. Always continue the climb. It is possible for you to do whatever you choose, if you first get to know who you are and are willing to work with a power that is greater than ourselves to do it.
Nothing can be done without hope and confidence. If you can dream it, you can do it. Do it now, not tomorrow. Always continue the climb.
Malwa Institute of Technology is committed to provide value based quality technical education and facilitis to the students to boost there performance. Always continue the climb. It is possible for you to do whatever you choose, if you first get to know who you are and are willing to work with a power that is greater than ourselves to do it.
Nothing can be done without hope and confidence. If you can dream it, you can do it. Do it now, not tomorrow. Always continue the climb.