class: center, middle, inverse, title-slide # Accelerating Computational Reproducibility with the Social Science Reproduction Platform ## PUC, Chile ### Fernando Hoces de la Guardia, BITSS ### October 2021 |
slides
--- background-image: url("Images/BITSSlogo.png"), url(Images/cega.png) background-size: contain, 200px background-position: 50% 100% , 100% 10% count:true #[BITSS](https://bitss.org)   .pull-left[ The Berkeley Initiative for Transparency in the Social Sciences works to improve
the credibility of science by
 advancing transparency,
 reproducibility, rigor, and
 ethics in research and policy analysis. .font130[**Core ACRe**] Aleks Bogdanoski Albert Chae Fernando Hoces de la Guardia Katie Hoeberling Edward Miguel Lars Vilhuber ] .pull-right[ .right[ We are part of the Center for Effective Global Action ([CEGA](https://cega.berkeley.edu/)).

 .font130[[**Many Others**](https://bitss.github.io/ACRE/contributions.html#list-of-contributors-guidelines-content-and-source-code)] CEGA staff Undergrad and Graduate RAs Catalysts Outside Collaborators (Researchers, Programmers) ]] --- name: motivation # Motivation 1: "Reproducibility Crisis"

 .font170[ | Replication in Social Sciences
(same method, different sample) | Reproduction in Economics
(same data and methods) | |------------------------------------------------------------------- |------------------------------------------------------ | | OSC ([2015](https://docs.google.com/document/d/1mm_4HZnEz_2Bh8XuiS2tpqCH08MFPyqUhi1baKPqR8Y/edit#heading=h.7vqf2cziid7z)): 30%-60% | Chang & Li ([2015](https://www.nowpublishers.com/article/Details/CFR-0053)): 43% | | Camerer et. al. ([2016](https://science.sciencemag.org/content/351/6280/1433)): ~60% | Gertler et. al. ([2017](https://www.nature.com/articles/d41586-018-02108-9)): 14% | | Nosek & Camerer et. al. ([2018](https://www.nature.com/articles/s41562-018-0399-z)): ~60% | Kingi et. al. ([2018](https://hautahi.com/static/docs/Replication_aejae.pdf)): 43% | | Klein et. al. ([2018](https://journals.sagepub.com/doi/10.1177/2515245918810225)): 50% | Wood et. al. ([2018](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0209416#abstract0)): 25% | ] --- count:false # .font90[M2: More Inclusive Concept Scholarly Output] .pull-left[ .font120[
 Clarebout Principle:

 “An article about computational science in a scientific publication is not the scholarship itself, it’s merely scholarship advertisement. The actual scholarship is the complete software development environment and the complete set of instructions which generated the figures.”

 .right[  Buckheit and D.L. Donoho (1995, [2009](https://academiccommons.columbia.edu/doi/10.7916/D8QZ2MDS/download)) ]
 ] ] --- background-image: url("Images/iceberg.jpg") background-size: 50% background-position: 100% 50% # .font90[M2: More Inclusive Concept Scholarly Output] .pull-left[ .font120[
 Clarebout Principle:

 “An article about computational science in a scientific publication is not the scholarship itself, it’s merely scholarship advertisement. The actual scholarship is the complete software development environment and the complete set of instructions which generated the figures.”

 .right[  Buckheit and D.L. Donoho (1995, [2009](https://academiccommons.columbia.edu/doi/10.7916/D8QZ2MDS/download)) ]
 ] ] --- # .font90[M2: More Inclusive Concept Scholarly Output] .font130[ Potential benefits of following the Clarebout Principle Well discussed potential positive effects on: - Pedagogy - Incremental generation of knowledge ] -- .font130[ Under discussed: - Possible positive effect on diversity, equity and inclusion: no connections or language skills ("appropriate politeness") required to obtain materials ] ??? An under discussed benefit of this principle is that increases access to knowledge for students who are outside of elite schools (no connections or "appropriate politeness" required to obtain materials). --- # M3: Prevent Loss of Knowledge Every semester, graduate students around **the world** take an Empirical/Applied [`...`] Economics course. A typical assignment consists of reproducing the results of a paper and, possibly, testing the robustness of its results. -- | Stage | New Knowledge | |:-----------------: |:------------------------------------------------------------: | |

 | | |

 | | |

 | | |

 |
 | --- count:false # M3: Prevent Loss of Knowledge Every semester, graduate students around **the world** take an Empirical/Applied [`...`] Economics course. A typical assignment consists of reproducing the results of a paper and, possibly, testing the robustness of its results. | Stage | New Knowledge | |:-----------------: |:------------------------------------------------------------: | | Scope
 (select and verify) | Data and code exist? | |

 | | |

 | | |

 |
 | --- count:false # M3: Prevent Loss of Knowledge Every semester, graduate students around **the world** take an Empirical/Applied [`...`] Economics course. A typical assignment consists of reproducing the results of a paper and, possibly, testing the robustness of its results. | Stage | New Knowledge | |:-----------------: |:------------------------------------------------------------: | | Scope
 (select and verify) | Data and code exist? | | Assess | Degree of reproducibility for
specific part of the paper | |

 | | |

 |
 | --- count:false # M3: Prevent Loss of Knowledge Every semester, graduate students around **the world** take an Empirical/Applied [`...`] Economics course. A typical assignment consists of reproducing the results of a paper and, possibly, testing the robustness of its results. | Stage | New Knowledge | |:-----------------: |:------------------------------------------------------------: | | Scope
 (select and verify) | Data and code exist? | | Assess | Degree of reproducibility for
specific part of the paper | | Improve | E.g. fixed paths, libraries,
added missing files, etc. | |

 |
 | --- count:false # M3: Prevent Loss of Knowledge Every semester, graduate students around **the world** take an Empirical/Applied [`...`] Economics course. A typical assignment consists of reproducing the results of a paper and, possibly, testing the robustness of its results. | Stage | New Knowledge | |:-----------------: |:------------------------------------------------------------: | | Scope
 (select and verify) | Data and code exist? | | Assess | Degree of reproducibility for
specific part of the paper | | Improve | E.g. fixed paths, libraries,
added missing files, etc. | | Test robustness | Results are robust to additional
specifications | --- # M3: Prevent Loss of Knowledge
 .font120[ - In each of the previous steps there was valuable new knowledge - This knowledge is not usually disseminated - End of semester report, or presentation that is not published. - Language across courses is not standard (reproduction? replication?) - Current attempts to record this are closer to a full paper format (see [Replication Wiki](https://replication.uni-goettingen.de/)) - As a result there is a large amount of missed knowledge. - Each new semester, new students repeat similar excesses and have to reinvent the wheel. - Lost opportunity for building on top of previous exercises. - Lost opportunity for aggregating the new knowledge. ] --- name: guidelines # Context for ACRE - American Economics Association (AEA) creates first data policy in 2006. - Must publish some data (waivers available) -- - AEA updates [policy in 2019](https://www.aeaweb.org/journals/policies/data-code/). - Must post all data and code. Publication is conditional on verifying reproducibility (if confidential: must document extensively) - A new requirement is to post all cleaning code, even for data that is not public -- - We should expect high levels of computational reproducibility after 2019 (AEA). -- - We should not demand 100% reproducibility before, but we could identify the gaps and try to improve some. --- # .font90[**A**ccelerating **C**omputational **Re**producibility: Framework] ## Beyond Binary Judgments Reproductions can easily gravitate towards adversarial exchanges. - Early career researchers (ECR) have incentives to emphasize unsuccessful reproductions - Original authors have a more senior position and can use it to deter in-depth reproductions from ECRs. - The media also focuses on eye-catching headlines -- ### Our approach: We do not want to say > "Paper X is (ir)reproducible" -- We do want to say > "Result Y in paper X has a high/low level of reproducibility according to several reproduction attempts. Moreover, improvements have been made to the original reproduction package, increasing its reproducibility to a higher level" --- count:false # .font90[**A**ccelerating **C**omputational **Re**producibility: Framework] ## Beyond Binary Judgments Reproductions can easily gravitate towards adversarial exchanges. - Early career researchers (ECR) have incentives to emphasize unsuccessful reproductions - Original authors have a more senior position and can use it to deter in-depth reproductions from ECRs. - The media also focuses on eye-catching headlines ### Our approach: We do not want to say > "Paper X is (ir)reproducible" We do want to say > "Result Y in paper X has a high/low **level** of reproducibility according to **several** reproduction attempts. Moreover, **improvements** have been made to the original reproduction package, **increasing** its reproducibility to a higher level" --- count: true background-image: url(Images/paper-claims.svg) background-size: 610px background-position: 75% 0% # ACRe Framework .pull-left[ .font100[ Each **reproduction attempt** is centered
 around scientific **claims** (following [SCORE](https://replicats.research.unimelb.edu.au)). One paper can contain several claims. Each claim may be supported by various
 **display items**: tables, figures & inline results. A reproduction attempt is at the claim level,
 and reproducers must record their
 **specifications** of interest. Key challenge: **standardization** of concepts
 and formats. ] DI: Display Item S: Specificaiton ] .pull-right[ ] --- background-image: url(Images/home_page.png) background-size: contain count:true .center[ # Demo: [socialsciencereproduction.org]() ] --- background-image: url(Images/stages.svg) background-size: contain # Stages --- background-image: url(Images/select.svg), url(Images/select_paper.png) background-size: 400px, 700px background-position: 95% 100%, 0% 10% count:false # Select a paper --- background-image: url(Images/select.svg), url(Images/select_example.png), url(Images/select_paper.png) background-size: 400px, 600px, 700px background-position: 95% 100%, 100% 0%, 0% 10% count:true # Select a paper --- background-image: url(Images/scope.svg), url(Images/scope_paper.png) background-size: 400px, 700px background-position: 95% 100%, 0% 10% count:false # Scope --- background-image: url(Images/scope.svg), url(Images/scope_paper2.png) , url(Images/scope_paper.png) background-size: 400px, 500px, 700px background-position: 95% 100%, 90% 0%, 0% 10% count:false # Scope --- background-image: url(Images/scope.svg), url(Images/scope_example.png), url(Images/scope_paper2.png) , url(Images/scope_paper.png) background-size: 400px, 600px, 500px, 700px background-position: 95% 100%, 100% 75%, 90% 0%, 0% 10% count:true # Scope --- background-image: url(Images/assess.svg), url(Images/assess_paper1.png) background-size: 400px, 120px background-position: 95% 100%, 0% 10% count:false # Assess --- background-image: url(Images/assess.svg), url(Images/assess_paper2.png) background-size: 400px, 120px background-position: 95% 100%, 0% 10% count:false # Assess --- background-image: url(Images/assess.svg), url(Images/assess_example1.png), url(Images/assess_paper2.png) background-size: 400px, 500px, 120px background-position: 95% 100%, 15% 50%, 0% 10% count:false # Assess --- background-image: url(Images/assess_example2.png), url(Images/assess.svg), url(Images/assess_example1.png) , url(Images/assess_paper2.png) background-size: 600px, 400px, 500px, 120px background-position: 100% 80%,95% 100%, 15% 50%, 0% 10% count:true # Assess --- background-image: url(Images/improve.svg) background-size: 700px background-position: 50% 20% # Improvements

 ## Three types of improvements: .font130[ 1. Improvements at the paper level 2. Improvements at the display-item level 3. Specific future improvements ] --- background-image: url(Images/improve.svg) background-size: 300px background-position: 0% 100% # Improvements: Paper-level .font140[ - Use version control software (Git/Github). - Improve documentation: comments, indentations, object names, etc. - Re-organize the reproduction package into a set of folders and sub-folders that follow [standardized best practices](https://www.projecttier.org/tier-protocol/specifications/#overview-of-the-documentation), and add a master script that executes all the code in order, with no further modifications. [See AEA's reproduction template](https://github.com/AEADataEditor/replication-template). - Literate programming environment (e.g., Jupyter notebooks, RMarkdown) - Re-write code using a differenet statistical software (ideally open source, like R, Python, or Julia). - Set up a computing capsule (e.g., [Binder](https://mybinder.org/) and [Code Ocean](https://codeocean.com/)). ] --- background-image: url(Images/improve.svg) background-size: 300px background-position: 0% 100% # Improvements: Display item-level
 .font120[ - Adding missing raw data: files or meta-data - Example: "Add raw temperature and relative humidity data" - Adding missing analytic data files - Example: "Copy the row files from Data folder into new `Analysis\trade cost\Input`" - Adding missing analysis or cleaning code - Example: "Replaced broken Wald bootstrap code with updated code/command" - Debugging code - Example: "was counting each group 4 times in round 1, so fixed that" ] --- background-image: url(Images/improve.svg) background-size: 300px background-position: 0% 100% # Improvements: future possible We ask reproducer to leave concise and actionable tasks for other reproducers in the future. Example 1: >"Revise the .aml and .bat code scripts to reflect reorganized structure" Example 2: > "Provide data and codes generating the other two figures in the paper, which are not given in the replication file." Example 3: > "Table 3 can be reproduced identically from the [...] analytic data files. I was not able to reproduce the analytic data files due to lack of access to ArcGIS software, but the code scripts and raw data files [...] are included in the reproduction package." --- background-image: url(Images/robust.svg) background-size: 700px background-position: 50% 20% # Robustness Checks

 ## Two main parts for robustness: .font130[ 1. Increase the number of robustness checks 2. Justify the appropriateness of a specific test ] --- background-image: url(Images/robust.svg), url("Images/robustness checks.svg") background-size: 300px, 500px background-position: 0% 100%, 100% 60% # Robustness **Robustness checks:** any possible change in a computational choice, both in data analysis and data cleaning -- .pull-left[ **Reasonable specifications** ([Simonsohn et. al., 2018](https://urisohn.com/sohn_files/wp/wordpress/wp-content/uploads/Paper-Specification-curve-2018-11-02.pdf)): 1. Sensible tests of the research question 2. Expected to be statistically valid, and 3. Not redundant with other specifications in the set. Reproducers will be able to record two types of contributions: - Mapping the universe of robustness checks - Proposing a specific robustness check ] --- background-image: url(Images/robust.svg) background-size: 400px background-position: 95% 95% # Robustness & Reproducibility .pull-left[ Robustness with level 1  Robustness with levels 5-9  ] .pull-left[ Robustness with levels 2-4  Robustness with level 10  ] --- background-image: url(Images/completed_repro1.png) background-size: 450px background-position: 0% 0% count:false # Completed Reproduction: [Example](https://www.socialsciencereproduction.org/reproductions/40/published/index) --- background-image: url(Images/completed_repro2.png), url(Images/completed_repro1.png) background-size: 300px, 450px background-position: 35% 0%, 0% 0% count:false # Completed Reproduction: [Example](https://www.socialsciencereproduction.org/reproductions/40/published/index) --- background-image: url(Images/completed_repro3.png) ,url(Images/completed_repro2.png), url(Images/completed_repro1.png) background-size: 600px , 300px, 450px background-position: 100% 10%, 35% 0%, 0% 0% count:true # Completed Reproduction: [Example](https://www.socialsciencereproduction.org/reproductions/40/published/index) .pull-right[ .font130[

 - **Share it:** Original authors, instructors, other researchers, add it to your CV - **Discuss it:** Discourse forum for reproductions - **Cite it:** Reproduction DOI coming soon ] ] --- # Promoting a Constructive Exchange #### 1 - Contacting the original author(s) when there is no reproduction package #### 2 - Contacting the original author(s) to request specific missing items of a reproduction package #### 3 - Asking for additional guidance when some materials have been shared #### 4 - Response when the original author has refused to share due to *undisclosed reasons* #### 5 - Response when the original author has refused to share due to legal or ethical restrictions of the data #### 6 - Contacting the original author to share the results of your reproduction exercise #### 7 - Responding to hostile responses from original authors #### Under development: sample responses form authors to reproducers --- # .font80[Example 1: There is no reproduction package] .font70[ >**Subject:** Reproduction package for `[“Title of the paper”]` >Dear Dr. `[Lastname of Corresponding Author]`, > > I am contacting you to request a reproduction package for your paper titled `[Title]` which was published in `[Reference]`. A reproduction package may contain (raw and/or analytic) data, code, and other documentation that makes it possible to reproduce paper. Would you be able to share any of these items? > >I am a `[position]` at `[Institution]`, and I would like to reproduce the results, tables, and other figures using the reproduction materials mentioned above. I have chosen this paper because `[add context ...]`. Unfortunately, I was not able to locate any of these materials on the journal website, Dataverse `[or other data and code repositories]`, or in your website. > >I will record the result of my reproduction attempt on ACRE [...]. With your permission, I will also record the materials you share with me, which would allow access for other reproducers and avoid repeated requests directed to you. Please let me know if there are any legal or ethical restrictions that apply to all or parts of the reproduction materials so that I can take that into consideration during this exercise. > >In addition to your response above, would you be available to respond to future (non-repetitive) inquiries from me or other reproducers conducting an ACRE excercise? Though your cooperation with my and/or any future request would be extremely helpful, please note that you are *not required to comply*. >Since I am required to complete this project by `[date]`, I would appreciate your response by `[deadline]`. > >Let me know if you have any questions. Please also feel free to contact my supervisor/instructor `[Name (email)]` for further details on this exercise. Thank you in advance for your help! > >Best regards, >`[Reproducer]` ] --- count:false # .font80[Example 1: There is no reproduction package] .font70[ >**Subject:** Reproduction package for `[“Title of the paper”]` >Dear Dr. `[Lastname of Corresponding Author]`, > > I am contacting you to request a reproduction package for your paper titled `[Title]` which was published in `[Reference]`. A reproduction package may contain (raw and/or analytic) data, code, and other documentation that makes it possible to reproduce paper. Would you be able to share any of these items? > >I am a `[position]` at `[Institution]`, and I would like to reproduce the results, tables, and other figures using the reproduction materials mentioned above. I have chosen this paper because `[add context ...]`. **Unfortunately, I was not able to locate any of these materials on the journal website, Dataverse `[or other data and code repositories]`, or in your website**. > >**I will record the result of my reproduction attempt on ACRE [...]. With your permission, I will also record the materials you share with me, which would allow access for other reproducers and avoid repeated requests directed to you. Please let me know if there are any legal or ethical restrictions that apply to all or parts of the reproduction materials so that I can take that into consideration during this exercise.** > >In addition to your response above, would you be available to respond to future (non-repetitive) inquiries from me or other reproducers conducting an ACRE excercise? **Though your cooperation with my and/or any future request would be extremely helpful, please note that you are *not required to comply*.** >Since I am required to complete this project by `[date]`, I would appreciate your response by `[deadline]`. > >Let me know if you have any questions. Please also feel free to contact my supervisor/instructor `[Name (email)]` for further details on this exercise. Thank you in advance for your help! > >Best regards, >`[Reproducer]` ] --- # .font80[Example 1: Following up on additional materials] **Template email:** >**Subject:** Clarification for reproduction materials for `[“Title of the paper”]` >Dear Dr. `[Lastname of Corresponding Author]`, > >Thank you for sharing the materials. They have been immensely helpful for my work. > >Unfortunately, I ran into a few issues as I delved into the reproduction exercise, and I think your guidance would be helpful in resolving them. `[Describe the issues and how you have tried to resolve them. Describe whatever files or parts of the data or code are missing. Refer to examples 1 and 2 below for more details]`. > >Thank you in advance for your help. > >Best regards, >`[Reproducer]` --- count:false # .font80[Example 1: Following up on additional materials] **Template email:** >**Subject:** Clarification for reproduction materials for `[“Title of the paper”]` >Dear Dr. `[Lastname of Corresponding Author]`, > >Thank you for sharing the materials. They have been immensely helpful for my work. > >Unfortunately, I ran into a few issues as I delved into the reproduction exercise, and I think your guidance would be helpful in resolving them. **`[Describe the issues and how you have tried to resolve them. Describe whatever files or parts of the data or code are missing. Refer to examples 1 and 2 below for more details]`**. > >Thank you in advance for your help. > >Best regards, >`[Reproducer]` --- # An example of well described issues: .font80[ >Specifically, I am attempting to reproduce OUTPUT X (e.g., table 1, figure 3). I found that the following components are required to reproduce to reproduce OUTPUT X: ```md OUTPUT X └───[code] formatting_table1.R ├───output1_part1.txt | └───[code] output_table1.do | └───[data] analysis_data01.csv | └───[code] data_cleaning01.R* | └───[data] UNKNOWN └───output1_part2.txt └───[code] output_table2.do └───[data] analysis_data02.csv └───[code] data_cleaning02.R └───[data] admin_01raw.csv* ``` >I have marked with an asterisk (\*) the items that I could not find in the reproduction materials: data_cleaning01.R and admin_01raw.csv. After accessing these files, I will also be able to identify the name of the raw data set required to obtain output1_part1.txt. This is to let you know that I may need to contact you again if I cannot find this file (labeled as UNKNOWN above) in the reproduction materials. > >I understand that this request will require some work for you or somebody in your research group, but I want to assure you that I will add these missing files to the reproduction package for your paper on the ACRE platform. Doing this will ensure that you will not be asked twice for the same missing file. ] --- count:false # An example of well described issues: .font80[ >Specifically, I am attempting to reproduce OUTPUT X (e.g., table 1, figure 3). I found that the following components are required to reproduce to reproduce OUTPUT X: ```md OUTPUT X └───[code] formatting_table1.R ├───output1_part1.txt | └───[code] output_table1.do | └───[data] analysis_data01.csv * | └───[code] data_cleaning01.R* * | └───[data] UNKNOWN └───output1_part2.txt └───[code] output_table2.do └───[data] analysis_data02.csv └───[code] data_cleaning02.R * └───[data] admin_01raw.csv* ``` >I have marked with an asterisk (\*) the items that I could not find in the reproduction materials: **data_cleaning01.R** and **admin_01raw.csv**. After accessing these files, I will also be able to identify the name of the raw data set required to obtain output1_part1.txt. This is to let you know that I may need to contact you again if I cannot find this file (labeled as **UNKNOWN** above) in the reproduction materials. > >I understand that this request will require some work for you or somebody in your research group, but I want to assure you that I will add these missing files to the reproduction package for your paper on the ACRE platform. **Doing this will ensure that you will not be asked twice for the same missing file.** ] --- background-image: url(Images/use1.png) background-size: 500px background-position: 0% 0% count:false # How Do I Get Started? .center[ .font120[ [**Use it**](https://www.socialsciencereproduction.org) for your class
 or independent project ] ] --- background-image: url(Images/use2.png), url(Images/use1.png) background-size: 600px, 500px background-position: 35% 100%, 0% 0% count:false # How Do I Get Started? .center[ .font120[ [**Use it**](https://www.socialsciencereproduction.org) for your class
 or independent project ] ]

 .font120[ Consult the
 supporting
 [**guide**](https://bitss.github.io/ACRE/) ] --- background-image: url(Images/use3.png) ,url(Images/use2.png), url(Images/use1.png) background-size: 400px, 600px, 500px background-position: 100% 0%, 35% 100%, 0% 0% count:true # How Do I Get Started? .center[ .font120[ [**Use it**](https://www.socialsciencereproduction.org) for your class
 or independent project ] ]

 .font120[ Consult the
 supporting
 [**guide**](https://bitss.github.io/ACRE/) ] .right[ .font120[ [**Ask**](https://forum.socialsciencereproduction.org) questions ] ] --- class: inverse, center, middle # .font140[ Thank You]

 .font190[<EMAIL_ADDRESS>]


Background:
Born and Raised: Kathmandu, Nepal
High School: Shanghai, China
University: Boston, USA
Hobbies and Interests:
Food adventures: Coming from a family of great cooks and avid food lovers, I was destined to follow the same path. I really enjoy exporing new and exquisite places to eat. In Boston, I go out at least once a week to try something new. My favorite cuisines are traditional Newari foods and Thai food.
Active sports: As a kid, I hated watching the television and preferred to go out and play. The childhood habits stayed, and now I like to play soccer and squash whenever I get the chance. I also enjoy swimming occasionally. Going to the gym is another hobby of mine because working out makes me feel fit and ready to tackle any problem at hand.
Designing and Building: Aside from the fact that I appreciate great architecture due to the intricate details of design, I love product designing and working on side projects with Arduino. Please see my projects tab for further details. The projects help me expand my knowledge base and allow me to apply what I've learnt in classes.
Event management: I love interacting with people and working in a team to create memorable events. My attention to detail and organizing skills make me a valuable asset to a team. With each event, I strive to gain new skills, meet new people and broaden my perspective.
Throughout my childhood, I had hopes and dreams of getting an incredible job where I get to explore and travel the world. When I was 10, my father had bought a RC Helicopter for me. THe first day that I assembled it and took it out for a fly, the helicopter broke. I was very dissapointed because I had been excited for the gift. The first step was to go to Shanghai to live with my father and to pursue my high school degree. After a great two years, I decided to enroll in Boston University as a undergraduate pursuing Mechanical Engineering. I wanted to learn more about robotics and do more in that field.
In my second year, as I got more and more into programming, I got more and more interested in the electrical and computer engineering department. I liked designing and using the 3D modelling tools, however, I really liked coding with an Arduino and building a system. I, then, switched my major to Computer Engineering and decided to take a handful to Electrical Engineering courses as my technical electives.


Use this page to define the Python interpreter, its options, starting script etc. for the Django console.
(This page only appears when Django support is enabled!)


Blockly
>
Demos
> Toolbox
This is a demo of a complex category structure for the toolbox.
→ More info on the
Toolbox
…
123


Issue: SYMBOL-MACROLET-DECLARE
References: SYMBOL-MACROLET (88-002R page 2-81)
WITH-ACCESSORS (88-002R page 2-88)
WITH-SLOTS (88-002R page 2-92)
Related Issues: SYMBOL-MACROLET-SEMANTICS
FLET-DECLARATIONS (passed)
Category: ADDITION
Edit history: Version 1, 12-Sep-88, Moon
Version 2, 9-Dec-88, Masinter
(add cross reference, discussion)
Problem description:
It would be both natural and nice to be able to write
(with-slots (rho theta) point
(declare (single-float rho theta))
...computation...)
Proposal (SYMBOL-MACROLET-DECLARE:ALLOW):
Allow declarations at the head of the body of SYMBOL-MACROLET, and hence
in WITH-ACCESSORS and WITH-SLOTS. Exactly the same declarations are
allowed as for LET, with one exception: SYMBOL-MACROLET signals an error
if a SPECIAL declaration names one of the symbols being defined as a
symbol-macrolet. A type declaration of one of these symbols is equivalent
to wrapping a THE expression around the expansion of that symbol.
Example:
See problem description.
Rationale:
If SYMBOL-MACROLET is intended to resemble LET in syntax, it ought to
allow declarations. When writing a SYMBOL-MACROLET directly, the user
could just as easily write a THE expression instead of a type
declaration. However, when invoking a macro such as WITH-SLOTS that
expands into SYMBOL-MACROLET, the user does not have this option since
the expansion is not supplied explicitly by the user.
Current practice:
SYMBOL-MACROLET was only tentatively added to Common Lisp 3 months ago.
Cost to Implementors:
Less than one man-hour.
Cost to Users:
None.
Cost of non-adoption:
Minor wart in the language.
Benefits:
More consistent language definition.
Esthetics:
More consistent language definition.
Discussion:
This issue is related to SYMBOL-MACROLET-SEMANTICS.
"A macro-definition for SYMBOL-MACROLET would leave the issue of
DECLARE open. But the special-form version of SYMBOL-MACROLET
really should address it."


Copyright © 2009 Jacob Torrey<EMAIL_ADDRESS>This module defines the osp_servlet behaviour.
Required callback functions: init/0, cleanup/0, server/1, proto/0, start_mnesia/0.
Authors: Jacob Torrey (torreyji@clarkson.edu).
| behaviour_info/1 | Provides the information about the behavior. |
behaviour_info(X1::atom()) -> undefined | list()
Provides the information about the behavior
Generated by EDoc, Nov 5 2009, 11:34:37.


{{connectionState}}
Updating from LeapMotion
Not Updating from LeapMotion
Toggle Updating from LeapMotion
Mass Update
Mass Apply Flexion
{{name}}


|
src_bank = handle of source memory bank
src_offset = offset location to start copying from dest_bank = handle of destination memory bank dest_offset = offset location to start writing to count = how many bytes to copy |
| Copies data from one memory bank to another. |
|
; BankSize, ResizeBank, CopyBank Example
; create a bank bnkTest=CreateBank(5000) ; Fill it with rand Integers For t = 0 To 4999 PokeByte bnkTest,t,Rand(9) Next ; Resize the bank ResizeBank bnkTest,10000 ; Copy the first half of the bank to the second half CopyBank bnkTest,0,bnkTest,5000,5000 ; Print final banksize Print BankSize(bnkTest) |


Online Session#8 - Introduction to Git & Discussion on Alternatives
5th May, 2020
Get to know Git and discussion on Disroot
Get your own Pelican site !!!
This May is Awaiting !!!!!
Its everyones dream to get a website host it live, here your dream will come true !!! :)
Something on JavaScript!!!! Wait for it folks :)
Soon !!!


Here is some wisdom from experts on mental health, from professional doctors to other people who have came up with great strategies that work for them.
To get professional advice and first-hand information, we interviewed Barbara Kellett, who has worked with clients suffering with depression in group therapy, and Mark Lewis, who has done extensive research on nuerodevelopmental disorders and had remendous experience with depression as well.
Many people have the wrong idea of depression.  As Mark Lewis said, that's just not true. He has worked alongside many people who have counseled people with depression, and his own father had depression as well.
"There has been tremendous progress since [before 1985]. There are now much better treatments available."
Another misconception is that we haven't made any progress. AS depression is still so prevalent and it feels like more and more people get diagnosed with it or a related disorder, it can feel like things are stagnating. However, there are always doctors working to make better, more effective treatments. The scene isn't forgotten.
Both interviewees stressed the importance of educating the general public. Having a support group of friends and family that understand can make the entire process so much better, but first that support group has to understand what the struggle is like. This public awareness can come from community leaders, teachers, political leaders, the media... all the ways that people can learn. It doesn't matter, so long as we can finally get rid of the nasty stigmas around talking about depression.


Click the button to view a PDF document generated by Essential PDF. Please note that Adobe Reader or its equivalent is required to view the resultant document.
Note: The document creation/manipulation functionalities are defined within Web API.


| Site ID Number: | 40 (Write this down!) |
| URL: | http://members.home.net/ncherry |
| Title: | Linux Home Automation |
| Email: |<EMAIL_ADDRESS>|
| Password: | monty1st (Write this down!) |
| U#: | 10033091 (Write this down!) |
Your page was sucessfully submitted to the Home Automation Webring queue. It is not yet, however, part of the ring. You will need to add the proper HTML links on your page before either the ring manager or another ring member will move your site into the actual ring.
Do not forget your Site ID number of password! You will need this information in the future.
For further instructions, return to the Home Automation Webring homepage.

|
Home Automation Webring made possible by the Webring. |


MUCINEX SINUS-MAX DAY NIGHT MAXIMUM STRENGTH- acetaminophen, diphenhydramine hydrochloride, guaifenesin, phenylephrine hydrochloride
Reckitt Benckiser LLC
Disclaimer: Most OTC drugs are not reviewed and approved by FDA, however they may be marketed if they comply with applicable regulations and policies. FDA has not evaluated whether this product complies.
| Active ingredients (in each caplet) Mucinex SINUS-MAX Day |
Purposes |
| Acetaminophen 325 mg |
Pain reliever |
| Guaifenesin 200 mg |
Expectorant |
| Phenylephrine HCl 5 mg |
Nasal decongestant |
| Active ingredients (in each caplet) Mucinex SINUS-MAX NIGHT |
Purposes |
| Acetaminophen 325 mg |
Pain reliever |
| Diphenhydramine HCl 12.5 mg |
Antihistamine/cough suppressant |
| Phenylephrine HCl 5 mg |
Nasal decongestant |
Uses
- temporarily relieves:
- nasal congestion
- headache
- minor aches and pains
- sinus congestion and pressure
- runny nose and sneezing (NIGHT only)
- cough (NIGHT only)
- temporarily promotes nasal and/or sinus drainage
- helps loosen phlegm (mucus) and thin bronchial secretions to rid the bronchial passageways of bothersome mucus and make coughs more productive (DAY only)
Warnings
Liver warning
This product contains acetaminophen. Severe liver damage may occur if you take:
- more than 12 caplets in 24 hours, which is the maximum daily amount
- with other drugs containing acetaminophen
- 3 or more alcoholic drinks daily while using this product
Allergy alert
Acetaminophen may cause severe skin reactions. Symptoms may include:
- skin reddening
- blisters
- rash
If a skin reaction occurs, stop use and seek medical help right away.
Do not use
- with any other drug containing acetaminophen (prescription or nonprescription). If you are not sure whether a drug contains acetaminophen, ask a doctor or pharmacist.
- with any other drug containing diphenhydramine, even one used on the skin (NIGHT only)
- if you are now taking a prescription monoamine oxidase inhibitor (MAOI) (certain drugs for depression, psychiatric, or emotional conditions, or Parkinson's disease), or for 2 weeks after stopping the MAOI drug. If you do not know if your prescription drug contains an MAOI, ask a doctor or pharmacist before taking this product.
Ask a doctor before use if you have
- liver disease
- heart disease
- diabetes
- high blood pressure
- thyroid disease
- trouble urinating due to an enlarged prostate gland
- glaucoma (NIGHT only)
- a breathing problem such as emphysema or chronic bronchitis (NIGHT only)
- persistent or chronic cough such as occurs with smoking, asthma, chronic bronchitis, or emphysema
- cough that occurs with too much phlegm (mucus)
Ask a doctor or pharmacist before use if you are
- taking the blood thinning drug warfarin
- taking sedatives or tranquilizers (NIGHT only)
When using this product
- do not use more than directed
- excitability may occur, especially in children (NIGHT only)
- marked drowsiness may occur (NIGHT only)
- alcohol, sedatives, and tranquilizers may increase drowsiness (NIGHT only)
- avoid alcoholic drinks (NIGHT only)
- be careful when driving a motor vehicle or operating machinery (NIGHT only)
Stop use and ask a doctor if
- nervousness, dizziness, or sleeplessness occur
- pain, nasal congestion, or cough gets worse or lasts more than 7 days
- fever gets worse or lasts more than 3 days
- redness or swelling is present
- new symptoms occur
- cough comes back, or occurs with rash or headache that lasts. These could be signs of a serious condition.
If pregnant or breast-feeding, ask a health professional before use.
Keep out of reach of children.
overdose">
Overdose warning
Taking more than the recommended dose (overdose) may cause liver damage. In case of overdose, get medical help or contact a Poison Control Center right away. Quick medical attention is critical for adults as well as for children even if you do not notice any signs or symptoms.
Directions
- do not take more than directed (see overdose">Overdose warning)
- do not take more than 12 caplets in any 24-hour period
- adults and children 12 years of age and older: take 2 caplets every 4 hours
- children under 12 years of age: do not use
Other information
- store between 20-25°C (68-77°F)
Inactive ingredients (DAY only)
croscarmellose sodium, crospovidone, FD&C red no. 40 aluminum lake, FD&C yellow no. 6 aluminum lake, magnesium stearate, microcrystalline cellulose, polyethylene glycol, polyvinyl alcohol, povidone, talc, titanium dioxide
Inactive ingredients (NIGHT only)
croscarmellose sodium, crospovidone, FD&C blue no. 1, FD&C blue no. 2, ferric oxide yellow, methacrylic acid – ethyl acrylate copolymer (1:1) Type A, mica, microcrystalline cellulose, polyethylene glycols, polyvinyl alcohol, povidone K29/32, sodium bicarbonate, talc, titanium dioxide
Questions?
1-866-MUCINEX (1-866-682-4639)
You may also report side effects to this phone number.
Dist. by: Reckitt Benckiser, Parsippany, NJ 07054-0224
Made in England
PRINCIPAL DISPLAY PANEL - Kit Carton
MAXIMUM STRENGTH*
NDC 63824-204-20
NEW!
Read All
Information
Mucinex®
SINUS-MAX®
DAY
Acetaminophen – Pain Reliever
Guaifenesin – Expectorant
Phenylephrine HCl – Nasal Decongestant
- ✓
- Relieves Sinus Pressure,
Headache & Congestion
- ✓
- Thins & Loosens Mucus
12
CAPLETS
NIGHT
Acetaminophen – Pain Reliever
Diphenhydramine HCl – Antihistamine/Cough Suppressant
Phenylephrine HCl – Nasal Decongestant
- ✓
- Relieves Nasal Congestion,
Sinus Pressure & Pain
- ✓
- Relieves Runny Nose,
Sneezing & Cough
8
CAPLETS
FOR AGES 12+


The Movie Making
Movie Making
×
›
Behind The Stage
×
‹
›
How Camera Roll
×
‹
›
Gray City Film
×
‹
›
The Twin Lens
×
‹
›
The Peripheral
×
‹


No lock in, the proofs exist on blockchain forever and we handle all the intricacies behind the scenes.
It's like magic!
We've kept the interface simple; you do not need to own a crypto wallet or download a software. The entire process is seamless and quick.
You and/or signers do not pay a cent (or Bitcoin/Ether) to try us out. Our base plan will remain free forever*
Too good to be true, we know!


String
concatenations that can be simplified by replacing them with text blocks.
Requirements:
\n
occurs two or more times.Use the Apply to single string literals option to suggest the fix for single literals containing line breaks.
Example:
String html = "\n" +
" \n" +
"
Hello, world
\n" +
" \n" +
"\n";
After the quick-fix is applied:
String html = """

Hello, world

""";
This inspection only reports if the language level of the project or module is 15 or higher.
New in 2019.3


This is a prototype of a dojo input type="file" with a FormWidget mixin, to be styled to match tundra and soria themes
The API is up for discussion, nor is it known to drop into forms and "just work" yet
FileInputAuto API is up for discussion, as well, though by use of the url="" attrib, you can basically do all your file-processing server side, and just use the filename sent that remains in the form input
There are two parts. dojo.require("dojox.form.FileInput") for just the base class, or dojo.require("dojox.form.FileInputAuto"); to provide the Auto Uploading widget (on blur), and the Blind Auto Upload widget.
Both themes are defined in the FileInput.css file, as well as basic styling needed to run


Activate your accaunt
and download application
Show password
Activate and download app
Forgot password?


Provo Corporate Challenge Pistol Shoot Results
These competitions were held at the Range Masters Shooting Range in Springville. to read the .PDF files.
2009 Results
[ HOME | UDPL SCHEDULE/RESULTS | CONTACT ]


|
libBlinkStick
A simple blinkstick library
|
Header for libBlinkStick. More...
#include <hidapi/hidapi.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
Go to the source code of this file.
Classes | |
| struct | blinkstick_device |
Typedefs | |
| typedef struct blinkstick_device | blinkstick_device |
Functions | |
| blinkstick_device ** | blinkstick_find_many (int count) |
| blinkstick_device * | blinkstick_find () |
| void | blinkstick_set_color (blinkstick_device *device, int index, int red, int green, int blue) |
| void | blinkstick_off (blinkstick_device *device, int index) |
| void | blinkstick_debug () |
| void | blinkstick_destroy (blinkstick_device *device) |
Header for libBlinkStick.
libBlinkStick is meant to to be a simple library for talking to a blinkstick Both the blinkstick square and blinkstick v1.1 are officially supported and it's likely that other devices work as well.
libBlinkStick depends on hidapi for interacting with the USB devices, but otherwise has no other dependencies.
Included are functions to turn on and off any of the LEDs and change their color via an rgb color. Multiple devices are supported.
| typedef struct blinkstick_device blinkstick_device |
A blinkstick_device holds a pointer to the hid device and is used when setting colors, modes, or turning the device off. Construct this device by using blinkstick_find and free it with blinkstick_destroy.
| void blinkstick_destroy | ( | blinkstick_device * | device | ) |
Frees the given blinkstick device
| blinkstick_device* blinkstick_find | ( | ) |
Find the first blinkstick device on the bus registered with HID.
| blinkstick_device** blinkstick_find_many | ( | int | count | ) |
Given a count will return a pointer array of blinkstick devices. This will abort if the number found is less than the given count.
| void blinkstick_off | ( | blinkstick_device * | device, |
| int | index | ||
| ) |
Turns off the led at the specified index for the provided device.
This is the same as using set_color with the RGB value (0, 0, 0)
| void blinkstick_set_color | ( | blinkstick_device * | device, |
| int | index, | ||
| int | red, | ||
| int | green, | ||
| int | blue | ||
| ) |
Sets the LED at the given index to the specified color for the provided device


--- layout: page ---
{{ page.content }}
There is no article in this category.
{{ post.date | date: "%Y-%m-%d" }}


|
e()
|
|
|
SKScrollBar(scrollView, type)
|
|
|
SKScrollContent(scrollView)
|
|
|
SKScrollView(element)
|
|
|
w(a, c, d, e)
|
|
|
y(a, b)
|
|
The base Pushpop object.
|


Merges two H2OFrame objects with the same arguments and meanings as merge() in base R. However, we do not support all=TRUE, all.x=TRUE and all.y=TRUE. The default method is auto and it will default to the radix method. The radix method will return the correct merge result regardless of duplicated rows in the right frame. In addition, the radix method can perform merge even if you have string columns in your frames. If there are duplicated rows in your rite frame, they will not be included if you use the hash method. The hash method cannot perform merge if you have string columns in your left frame. Hence, we consider the radix method superior to the hash method and is the default method to use.
h2o.merge(x, y, by = intersect(names(x), names(y)), by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all, method = "auto")
| x, y | H2OFrame objects |
|---|---|
| by | columns used for merging by default the common names |
| by.x | x columns used for merging by name or number |
| by.y | y columns used for merging by name or number |
| all | TRUE includes all rows in x and all rows in y even if there is no match to the other |
| all.x | If all.x is true, all rows in the x will be included, even if there is no matching row in y, and vice-versa for all.y. |
| all.y | see all.x |
| method | auto(default), radix, hash |
# NOT RUN { h2o.init() left <- data.frame(fruit = c('apple', 'orange', 'banana', 'lemon', 'strawberry', 'blueberry'), color <- c('red', 'orange', 'yellow', 'yellow', 'red', 'blue')) right <- data.frame(fruit = c('apple', 'orange', 'banana', 'lemon', 'strawberry', 'watermelon'), citrus <- c(FALSE, TRUE, FALSE, TRUE, FALSE, FALSE)) l.hex <- as.h2o(left) r.hex <- as.h2o(right) left.hex <- h2o.merge(l.hex, r.hex, all.x = TRUE) # }


Web APIs
In addition to the
chrome.* APIs,
extensions can use all the APIs
that the browser provides
to web pages and apps.
If the browser doesn't support an API you want to use,
you can bundle additional API libraries into your extension.
Here's a sampling of the APIs that extensions can use:
- Standard JavaScript APIs
- These are the same core JavaScript and
Document Object Model
(DOM) APIs
that you can use in ordinary web apps.
- XMLHttpRequest
-
Use XMLHttpRequest
to request data from one or more servers.
The permissions field
of the manifest specifies
which hosts the extension can send requests to.
- HTML5 and other emerging APIs
- Google Chrome supports HTML5 features,
along with other emerging APIs.
Here are some of the APIs you can use:
- audio
(tutorial)
- application cache
(tutorial)
- canvas
(articles)
{{?is_apps}}
- fullscreen
(article)
- In Chrome Apps, fullscreen is entered without
prompting the user or providing exit instructions.
HTML5 fullscreen requires the
app.window.fullscreen
permission in the manifest.
In normal webpages, the browser intercepts the ESC key to exit
pointer lock ensuring a consistent escape method for users.
That is also the behavior in Chrome Apps unless the
app.window.fullscreen.overrideEsc
permission is used to enable the app to call
preventDefault
on keydown and keyup events.
{{/is_apps}}
- geolocation
(tutorial)
- local storage
(tutorial)
- notifications
(tutorial)
{{?is_apps}}
- pointer lock
(tutorial)
- In Chrome Apps, pointer lock is entered without
requiring a user gesture,
prompting the user, or providing exit instructions.
Pointer lock requires the
pointerlock
permission in the manifest.
Also, there is no default exit behavior. In normal webpages,
the browser intercepts the ESC key to exit pointer lock.
This behavior is not present in Chrome Apps.
{{/is_apps}}
- video
(tutorial)
- web database
(tutorial)
See html5rocks.com
for HTML5 information, tutorials, an interactive playground,
and links to other resources.
- WebKit APIs
-
Because Google Chrome is built upon WebKit,
your extensions can use WebKit APIs.
Especially useful are the experimental CSS features
such as filters, animations, and transformations.
Here's an example of using WebKit styles
to make the UI spin:
<style>
div:hover {
transform: rotate(360deg);
transition: all 1s ease-out;
}
</style>
- V8 APIs, such as JSON
- Because JSON is in V8, you don't need to include a JSON library to use JSON functions.
- APIs in bundled libraries
- If you want to use a library that the browser doesn't provide
(for example, jQuery),
you can bundle that library's JavaScript files with your extension.
Bundled libraries work in extensions
just as they do in other web pages.


Gladiator 3 and 1/2 Stars (out of 4) Reviewed by Mac VerStandig<EMAIL_ADDRESS>http://www.moviereviews.org May 4, 2000 USA Release Date - May 5, 2000
---Please note that a copy of this review will appear at http://www.moviereviews.org/gladiator.htm on May 5, 2000. A copy will also run in the May 10 - 24 edition of The Stage Newspaper. Mac VerStandig will additionally review the film on WTPN-Radio on May 5, 2000. ---
When at its best, Gladiator is one of the great films of all time. Every moment is exhilarating, every fight engaging and every moral and statement so well thought out and of such a classic nature that they can be appreciated and pondered simultaneously. However, when at its worse, Gladiator's two-and-a-half hour length takes the spotlight off the film's numerous virtues to the point where a slip in the projection gave a preview audience an unintended intermission necessary to tolerate some upcoming moments that would make `Wuthering Heights' seem like a page-turner. Fortunately, the good disproportionately outweighs the bad so much that you should have no reservations about seeing this film if you want to be in-the-loop on Oscar night.
The first person onscreen is, appropriately enough, Maximus (Russell Crowe, setting the bar for this year's Best Actor race), the movie's hero. When we meet him he is a general at war commanding thousands of troops in the name of pre-Nero Rome. Like most great war heroes in the movies, Maximus is humble and wise. His motivation in battle is more to return to his family than to defend Rome. Although, given the benevolent nature of the empire's current Caesar, he has no qualms fighting for the great city.
Maximus' skill, bravery and humane qualities are rewarded when he is informed that he, not the Caesar's son, will inherit the emperorship of Rome. Yet one of the inherit rules applying to just about all of Hollywood's great epics is that the kinder the ruler is, the crueler and less loyal his son. Gladiator isn't an exception. Soon Maximus is no longer a General but rather a slave and no longer fighting for his family but rather the name of the great Caesar who once tried to name him his successor only to be murdered by his blood son that very evening.
Above all else, credit Ridley Scott, the director of the film. And then give John Mathieson, the deft cinematographer, his due as well. The two brilliant behind-the-scenes men have created an ancient Rome that few will have trouble accepting as reality. Thousands of extras are coordinated perfectly down to the most irrelevant details which only a nit-picky critic like myself would pay any heed. As for the scenery and backgrounds, to call them gorgeous would be an enormous understatement – if Dreamworks needs to make any more money off this film, they should have no difficulty selling postcards.
Yet surely Scott and Mathieson wouldn't have been able to accomplish this incredible feat without the aid of a $100 million budget. What does this tell us about Hollywood today? Perhaps those nine figures are the proof that although a fluke like The Blair Witch Project will come around from time to time, enough money combined with the right individuals can create a movie as marvelous and spectacular as Gladiator. Unfortunately, the large sum ultimately makes a little too much movie as the creative duo seem to have gotten caught up in scenery and re-creating the past so much so that they forget to advance the plot at certain points and instead test the audience's patience with a craft that belongs in an art gallery, not on the silver screen.
Gladiator's good guys share a political philosophy of favoring the Senate over a dictator-like emperor. Many of the more loveable characters also put their faith in an afterlife as a form of surviving their less-than-ideal current lives. These issues raise enough debate that Gladiator manages to achieve its final success by crossing the border from being just another heroic epic to being a modern-day classic, not unlike Ben-Hur and Braveheart, even if the film could use some trimming around the edges.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


This neural network is trained to identify
location
related tokens in
weather related queries.
Bi-Directional LSTM
LSTM
Dense Network


The Yaniv
Traffic Manager
Simulator & Web Developer
Unity Developer & Statistics
Simulator Developer & Documentation
Designer & Simulator Developer
Scheduler Algorithmics & IT
Simulator Developer & Statistics
Supervisor


Sadeth Lee has been an Orange County resident for over 20 years.
She graduated from Chapman University with a Bachelor Science Degree in Health Services in
1997. She left Cambodia in 1975 as a refugee. She and her family escaped
the country with just the shirts on their back. Through hard work and determination, she
became who she is today, a person who is not afraid to put her best foot forward and work
hard for her clients in order for them to achieve
their dream homes. She is a dedicated full-time real estate professional.
She serves Orange County, helping buyers and sellers find their
perfect homes in Southern California. She is a member of the National Association of
Realtors (NAR)'s Green Designation, this advanced training in green building and
sustainable business practices help her seek out and understand market properties with green
features.
She is also a member of Orange County Association of Realtors
(OCAR), California Association of Realtors (CAR), and California Regional Multiple Listing
Services (CRMLS); DRE # 02011684.
In her spare time, she enjoys cooking, gardening, and traveling.
She can speak Khmer fluently. She is also a member and volunteer of the Lake Forest Garden
Club in Lake Forest, California.


PhoneGap & PhoneGap Build
Getting Started
Julee Burdekin
@adobejulee
What is PhoneGap?
- Free and open source framework
- Create mobile apps using the web technologies
- Use standardized web APIs
- Target the platforms you care about
What is PhoneGap Build?
Overview
- You create screens with HTML, CSS & JavaScript
- You use PhoneGap to make it an app
- You use PhoneGap API to add device features
- You use PhoneGap Build to build & update it
- Your app displays in 100% of the screen
- It's like a headless browser
Overview
Getting Started
- 1. Design with mobile in mind
- 2. Download & install PhoneGap & the Cordova XPlat CLI
- 3. Install device-specific apps & SDKs
- 4. Get any dev certs and/or app keys
- 5. Add PhoneGap API
- 6. Build the app
- 7. Test in emulators & devices you have
1. Design with mobile in mind
- Use templates & guidelines
- Start with sizes that work on your smallest fav device
- Use media queries to increase sizes
2. Download & install PhoneGap & the Cordova XPlat CLI
3. Install device-specific apps & SDKs
Example, continued
Install plugins for APIs you want to use
for example:
cordova platform add ios
cordova platform add android
cordova plugin add org.apache.cordova.device
cordova plugin add org.apache.cordova.console
cordova plugin add org.apache.cordova.camera
And emulators
sudo npm install -g ios-sim
cordova emulate ios
4. Get any dev certs and/or app keys
For example, Apple Dev Cert & Provisioning
For example, Apple Cert & Provisioning Cont'd
- Get your dev certificate
- Use Keychain Access to generate a key pair locally
- Download & double-click to store in Keychain Access.
- Save both *.cer file & CertificateSigningRequest.certSigningRequest somewhere secure.
- Go to Keypair Access, select the private key associated with the Cert & export as a *.p12 file, with a password.
For example, Apple Cert & Provisioning Cont'd
5. Add PhoneGap API
- Create an app with Cordova CLI
- Fold in your code
- Test for styles
6. Build
window.onerror = function(msg,url,line){
console.log('window.onerror :',msg,url,line);
}
7. Test
- In emulators
- On real devices


HTML inside regions is generated and erased at run-time, this means it can be quite tricky to attach JavaScript events inside them, because DOM elements come and go multiple times. We could add inline JavaScript inside the template, yet this solution is not the most elegant and it doesn't scale well.
A much better solution is to rely on luga.dom.delegateEvent(). Event delegation allows us to attach the event to the region root, once the page is loaded, then filter it out based on the selector, passed as its third parameter:
luga.dom.ready(function(){
// Fetch JSON data
ladies.loadData();
// Only clicks on buttons will be captured
const container = document.getElementById("ladiesRegion");
luga.dom.delegateEvent(container, "click", "button", function(event, currentElement) {
event.preventDefault();
const birthDate = currentElement.getAttribute("data-birthdate");
currentElement.outerHTML = birthDate;
});
});
For the sake of this simplified demo we store the birth date inside a custom attribute of the <button> element. This way we can easily retrieve it from the event handler: