class: center, middle, inverse, title-slide # Introduction to Data Science ## Session 2: Version control and project management ### Simon Munzert ### Hertie School |
GRAD-C11/E1339
---  # Table of contents 1. [Project management](#projects)1 2. [Git and GitHub](#git) 3. [Getting started](#gettingstarted) 4. [Git(Hub) + RStudio](#rstudio) 5. [Git from the shell](#shell) 6. [Merge conflicts](#merge) 7. [Branches and forking](#branches) 8. [Other tips](#other) 9. [Summary](#summary) .footnote[1 Much of this lecture draws on materials from Grant McDermott's excellent [*Data Science for Economists*](https://github.com/uo-ec607/lectures) class.] --- class: inverse, center, middle name: projects # Project management

 --- # Taming chaos .pull-left[ In the data science workflow there are two sorts of **surprises** and cognitive stress: 1. Analytical (often good) 2. Infrastructural (almost always bad) **Analytical surprise** is when you learn something from or about the data. **Infrastructural surprise** is when you discover that: - You can't find what you did before. - The analysis code breaks. - The report doesn't compile. - The collaborator can't run your code. Good project management lets you focus on the right kind of stress. ] .pull-right[

 ] --- # Keeping Future-you happy - It’s often tempting to set up a project assuming that you will be the only person working on it, e.g. as homework. - That’s almost never true. - Coauthors and collaborators happen to the best of us. - Even if not, there's someone else who you always have to keep happy: Future-you. - Future-you is really the one you do organize your projects for. - They are who you use version control for (see later). - Most importantly, they are who will enjoy the fruits of your data science labor, or have to fight back your chaos. - So, be kind to Future-you. Establish a good workflow. You'll thank yourself later. --

 --- # Project setup You should **always** think in terms of projects. A project is a **self-contained unit of data science work** that can be - Shared - Recreated by others - Packaged - Dumped -- A project contains - Content, e.g., raw data, processed data, scripts, functions, documents and other output - Metadata, e.g., information about tools for running it (required libraries, compilers), version history -- For R projects - Projects are folders/directories. - Metadata is the [RStudio project](https://support.rstudio.com/hc/en-us/articles/200526207-Using-Projects) (`.Rproj`) files (perhaps augmented with the output of [renv](https://rstudio.github.io/renv/articles/renv.html) for dependency management) and `.git`. --- # Setup: the folder structure .pull-left-wide[ ## Structuring your working directory - One folder contains everything inside it. - Directories keep things separate that should be separated. - You decide on the fundamental structure. The project decides on the details. ## Further thoughts - Ideally, your project folder can be relocated without problem. - Keep input separate from output. Definitely separate raw from processed data! - Structure should be capable of evolution. More data, cases, models, output formats shouldn't be a problem. ] .pull-right-small-center[

 `Credit` [Chris/r-bloggers.com](https://www.r-bloggers.com/2018/08/structuring-r-projects/) ] --- # Setup: the paths .pull-left[ ## Good paths - All internal paths are relative. - They are invariant to moving/sharing the project. - Examples: - `"preprocessing.R"` - `"figures/model-1.png"` - `"../data/survey.RDa"` ## Bad paths - Using `setwd()` is bad practice 99% of the times. - Absolute paths are bad paths. Don't feed functions with paths like `"/Users/me/data/thing.sav"`. - Those paths will not work outside your computer (or maybe not even there, some days/weeks/months ahead). ] -- .pull-right[ ## The working directory - Set it manually once per session (do `Session > Set Working Directory > Choose Directory`). Then all your good paths will "just work". - Better yet, get it right automatically by opening RStudio with clicking on the script you want to work with. This will set the location of the script as working directory (which should be your working assumption, too). - Even better yet, have the metadata set it for you: - Open your session by opening (choosing, clicking on) `myproject.Rproj` - Then you’ll get the path set for you. - That's probably better than the previous option because you might not want your `code` directory to be the working directory. ] --- # Setup: the code structure ## Naming scripts - Files should have short, descriptive names that indicate their purpose. - I recommend the use of telling verbs. - Names should only include letters and numbers with dashes `-` or underscores `_` to separate words. - Use numbering to indicate the order in which files should be run: - `0-setup.R` - `1-import-data.R` - `2-preprocess-data.R` - `3-describe-uptake.R` - `4-analyze-uptake.R` - `5-analyze-experiment.R` -- ## Modularizing scripts - Write short, modular scripts. Every script serves a purpose in your pipeline. - This makes things easier to debug. - At the beginning of a script you might want to document input and output. --- # Setup: the code structure (cont.) ## Talk to Future-you - Describe your code, e.g. by starting with a description of what it does. If you comment/describe a lot, consider using an R Markdown (`.Rmd`) file instead of a simple `.R` script. - Put the setup first (e.g., `library()` and `source()`). - You might want to outsource the loading of packages to a separate script that is imported in the first step (`source("functions.R")`) or just declared the first script in the pipeline. - Always comment more than you usually do. -- ## Structuring your code - Even with modularized code, scripts can become long. Structure helps to keep an overview. - Use commented lines as section/subsection heads. - RStudio creates a "table of contents" when you name your code chunks as follows (`#` followed by title and `---`): ```r R> # Import data -------------- R> R> dat <- read_csv("dat.csv") ``` --- # Setup: the rest .pull-left[ ## More things to consider - There'd be more to say on how to establish a good project workflow, including how to - store/organize raw and derived data, - deal with output in form of graphs and tables, - link everything together from start (project setup) to finish (knitting the report) - separate coding for the record and experimental coding. - But there's limited value in teaching you all that upfront. - The truth is: You'll likely refine your own workflow over time. I just saved you some initial pain (hopefully). - Do check out other people's experiences and opinions, e.g., [here](https://www.r-bloggers.com/2018/08/structuring-r-projects/) or [here](https://chrisvoncsefalvay.com/2018/08/09/structuring-r-projects/) or [here](https://kdestasio.github.io/post/r_best_practices/). ] .pull-right-center[

 **Managing your R project in two simple steps** ] --- class: inverse, center, middle name: git # Git and GitHub

 --- # Why version control?

 `Credit` [phdcomics.com](http://phdcomics.com/comics/archive.php?comicid=1531">creativity.
) --- # More reasons to do version control .pull-left[ **Have you ever...** - Changed your code, realized it was a mistake and wanted to revert back? - Lost code or had a backup that was too old? - Wanted to see the difference between different versions of your code? - Wanted to review the history of some code? - Wanted to submit a change to someone else's code? - Wanted to share your code, or let other people work on your code? - Wanted to see how much work is being done, when, and by whom? - Wanted to experiment with but not interfering with working code? `Credit` [si618/Stackoverflow](https://stackoverflow.com/questions/1408450/why-should-i-use-version-control) ] .pull-right-center[

 `Credit` [bhimanshukalra/devrant.com](https://devrant.com/rants/1840468/version-control) ] --- # Git(Hub) solves this problem .pull-left[

 - Git is a distributed version control system. - Imagine if your Dropbox (or Google Drive, or MS OneDrive for that matter) and the "Track changes" feature in MS Word had a baby. - In fact, it's even better than that because Git is optimized for the things that data scientists spend a lot of time working on - code! - There is a learning curve, but it's worth it. - Being familiar with Git is taken for granted when you interact with other data scientists. - It is by far [not the only version control software](https://en.wikipedia.org/wiki/Comparison_of_version-control_software), but certainly the most popular one. - According to [StackOverflow's 2021 Developer Survey](https://insights.stackoverflow.com/survey/2021#most-popular-technologies-tools-tech), more than 93% of respondents report to use Git - more than any other tool. ] -- .pull-right[

 - It's important to realize that Git and GitHub are distinct things. - GitHub is an online hosting platform that allows you to host your code online. - It relies on Git and makes some of its functionality more accessible. - Also, it provides many more useful features to collaborate with others. (Similar platforms include Bitbucket and GitLab.) - Just like we don't *need* Rstudio to run R code, we don't *need* GitHub to use Git... But it will make our lives easier. ] --- # Git: some background .pull-left-wide[ **Where does Git come from?** - Git was created in 2005 by Linux creator Linus Torvalds. - The initial motivation was to have a non-proprietary version control system to manage Linux kernel development. - Check out this (quite opinionated) [talk by Linus Torvalds on Git](https://www.youtube.com/watch?v=4XpnKHJAok8) two years after its creation. **What's the meaning of `Git`?** - Anything, [apparently](https://en.wikipedia.org/wiki/Git#Naming). - Also, it's pronounced [ɡɪt], not [d͡ʒɪt]. **How to interact with Git?** - There are many [Git GUIs](https://en.wikipedia.org/wiki/Comparison_of_Git_GUIs), giving you the option to use git without the shell (often with reduced functionality). A popular choice is [GitHub Desktop](https://desktop.github.com/), but we will mainly use the [Git integration into the RStudio IDE](https://support.rstudio.com/hc/en-us/articles/200532077-Version-Control-with-Git-and-SVN). ] .pull-right-small-center[

 `Credit` [Krd (photo), Von Sprat (crop/extraction), CC BY-SA 4.0.](https://commons.wikimedia.org/w/index.php?curid=54706023) ] --- # GitHub: some background .pull-left-wide[ **Where does GitHub come from?** - GitHub.com launched in April 2008 by [Tom Preston-Werner, Chris Wanstrath, P.J. Hyett and Scott Chacon](https://productmint.com/github-business-model-how-does-github-make-money/). - In 2018, Microsoft acquired the company for more than US$7 billion. **What's the business model?** - GitHub offers various subscription plans and has expanded its services beyond hosting Git-based version control. **Some interesting facts** - GitHub's mascot is "[Octocat](https://github.com/octocat)", a human-cat-octopus hybrid with five arms. - There are [56m+ developers on Github](https://octoverse.github.com/), with 60m+ new repositories created in 2020 alone. - Part of GitHub's history are controversies around issues like harassment allegations or incidences of censorship. ] .pull-right-small-center[

 `Credit` [Screenshot](https://github.com/octocat3) ] --- # Git(Hub) for scientific research .pull-left[ **From software development...** - Git and GitHub's role in global software development is not in question. - There's a high probability that your favourite app, program or package is built using Git-based tools. (RStudio is a case in point.) **... to scientific research** - Data science involves product building, collaboration, transparency. GH helps with all that. - Journals have increasingly strict requirements regarding reproducibility and access. GH makes this easy (DOI integration, off-the-shelf licenses, etc.). - I host most of the code and data for my [papers](https://simonmunzert.github.io/publications.html) on GH. My [website](https://simonmunzert.github.io/) lives there. And this [course](https://github.com/intro-to-data-science-21) does, too. ] .pull-right-center[

 `Credit` "[Democratic databases: science on GitHub](https://www.nature.com/news/democratic-databases-science-on-github-1.20719)" (Perkel, 2016, *Nature*). ] --- class: inverse, center, middle name: gettingstarted # Getting started

 --- # First step: register a GitHub account .pull-left[ Good news: It's free! Simply go to [https://github.com](https://github.com) to sign up. Some things to consider: - As a student, you qualify for a [free GitHub Pro account](https://education.github.com/discount_requests/student_application). - The Pro account comes with a couple of [additional features](https://docs.github.com/en/get-started/learning-about-github/githubs-products#github-pro). - Register for a free account first, then pursue the special offers. - Choose your username [wisely](https://happygitwithr.com/github-acct.html). This isn't Instagram, so maybe avoid puns and "funny" nicknames. ] .pull-right[

 ] --- # Second step: install Git Again, Git is an independent piece of software. You need to have it installed on your machine to call it from RStudio or the command line. Chances are that that's already the case. Here's how you can check using the command line: ```bash $ which git ``` ``` ## /usr/local/bin/git ``` And here's how you can check the version: ```bash $ git --version ``` ``` ## git version 2.28.0 ``` If you want to install (or update) Git on your Mac/Linux machine, I recommend using [Homebrew](https://brew.sh/), "the missing package manager for macOS (or Linux)": ```bash $ brew install git ``` To install/update Git for Windows, check out [happygitwithr.com](https://happygitwithr.com/install-git.html). --- # Third step: introduce yourself to Git This is particularly important when you work with Git but without the GitHub overhead. The idea is to define how your commits are labelled. Others should easily identify your commits as coming from you. Have you already introduced yourself to Git? Find it out: ```bash $ git config --list ``` Still have to introduce yourself? To that end, we set our user name and email address like this: ```bash $ git config --global user.name 'simonmunzert' $ git config --global user.email<EMAIL_ADDRESS>``` The user name can be (but does not have to be) your GitHub user name. The email address should definitely be the one associated with your GitHub account. Check out [these setup instructions](http://swcarpentry.github.io/git-novice/02-setup/) from [Software Carpentry](https://software-carpentry.org/about/) to learn about more configuration options. --- class: inverse, center, middle name: rstudio # Git(Hub) + RStudio

 --- # Link a GitHub repo to an RStudio Project One of the (many) great features of RStudio is how well it integrates version control into your everyday workflow. - Even though Git is a completely separate program to R, they feel like part of the same "thing" in RStudio. - This next section is about learning the basic Git(Hub) commands and the recipe for successful project integration with RStudio. -- The starting point for our workflow is to link a GitHub repository (i.e. "repo") to an RStudio Project. Here are the steps we're going to follow: 1. Create the repo on GitHub and initialize with a README. 2. Copy the HTTPS/SSH link (the green "Clone or Download" button). 3. Open up RStudio. 4. Navigate to **File -> New Project -> Version Control -> Git**. 5. Paste your copied link into the "Repository URL:" box. 6. Choose the project path ("Create project as subdirectory of:") and click **Create Project**. -- Let's see how that works in practice. --- # Link a GitHub repo to an RStudio Project

 --- # Make some local changes Look at the Environment panel in your RStudio IDE. Do you see the "Git" tab? 1. Click on it. 2. Look what's in there. There should already be some files in there, which we'll ignore for the moment. 3. Now open up the README file (see the "Files" tab in the bottom-right panel). 4. Add some text like "Hello World!" and save the README. 5. Have you noticed the changes in the "Git" panel? Again, see the GIF walkthrough on the next slide... --- # Make some local changes

 --- # Main Git operations Now that you've cloned your first repo and made some local changes, it's time to learn the four main Git operations. 1. **Stage** (or "add") - Tell Git that you want to add changes to the repo history (file edits, additions, deletions, etc.) 2. **Commit** - Tell Git that, yes, you are sure these changes should be part of the repo history. 3. **Push** - Push any (committed) local changes to the GitHub repo. 4. **Pull** - Get any new changes made on the GitHub repo (i.e. the upstream remote), either by your collaborators or you on another machine. -- For the moment, it will be useful to group the first two operations and last two operations together. (They are often combined in practice too, although you'll soon get a sense of when and why they should be split up.) -- Ready for more GIFs? --- # Stage and Commit

 --- # Push and Pull

 --- # Recap Here's a step-by-step summary of what we just did. - Made some changes to a file and saved them locally. - *Staged* these local changes. - *Committed* these local changes to our Git history with a helpful message. - *Pulled* from the GitHub repo just in case anyone else made changes too (not expected here, but good practice). - *Pushed* our changes to the GitHub repo. -- 🦊 Always pull from the upstream repo *before* you push any changes.  Learn how to cache these [here](https://happygitwithr.com/credential-caching.html). Note that the classical username/password authentication was recently removed. Instead, you have to use your personal access token (PAT). I recommend `usethis::create_github_token()` in combination with `gitcreds::gitcreds_set()`. -- 🤓 Speaking of credentials, another approach is to [switch to SSH](https://happygitwithr.com/ssh-keys.html). You might want to consider doing this when you feel comfortable with the main Git operations. --- # Why this workflow? **Creating the repo on GitHub first** means that it will always be "upstream" of your (and any other) local copies. - In effect, this allows GitHub to act as the central node in the distributed VC network. - Especially valuable when you are collaborating on a project with others — more on this later — but also has advantages when you are working alone. - If you would like to move an existing project to GitHub, my advice is still to create an empty repo there first, clone it locally, and then copy all your files across. -- **RStudio Projects are great.** - Again, they interact seamlessly with Git(Hub), as we've just seen. - They also solve absolute vs. relative path problems, since the `.Rproj` file acts as an anchor point for all other files in the repo.1 .footnote[1 You know that calling files from `YourComputer/YourName/Documents/Special-Subfolder/etc` in your scripts is one of the deadly sins of programming, right?] --- class: inverse, center, middle name: shell # Git from the shell

 --- # Why bother with the shell? .pull-left[ **The GitHub + RStudio Project combo is ideal for new users.** - RStudio's Git integration and built-in GUI cover all the major operations. - RStudio Projects FTW. However, there are **some benefits of the shell**: - The shell is more powerful and flexible. It lets you do things that the RStudio Git GUI can't. - Working in the shell is potentially more appropriate for projects that aren't primarily based in R. - Knowing the basic Git commands in the shell is generally a good thing for a data scientist. - We're going to cover the shell in more detail in a later session, so this is a sneak preview. ] .pull-right[

 ] --- # Main Git shell commands Clone a repo into current directory. ```bash $ git clone REPOSITORY-URL ``` See the commit history (hit spacebar to scroll down or q to exit). You need to be in a git repo to see something. ```bash $ git log ``` What has changed? ```bash $ git status ``` --- # Main Git shell commands (cont.) Stage ("add") a file or group of files. ```bash $ git add NAME-OF-FILE-OR-FOLDER ``` You can use [wildcard](https://ryanstutorials.net/linuxtutorial/wildcards.php) characters to stage a group of files (e.g. sharing a common prefix). There are a bunch of useful flag options too: - Stage all files. ```bash $ git add -A ``` - Stage updated files only (modified or deleted, but not new). ```bash $ git add -u ``` - Stage new files only (not updated). ```bash $ git add . ``` --- # Main Git shell commands (cont.) Commit your changes. ```bash $ git commit -m "Helpful message" ``` Pull from the upstream repository (i.e. GitHub). ```bash $ git pull ``` Push any local changes that you've committed to the upstream repo (i.e. GitHub). ```bash $ git push ``` --- class: inverse, center, middle name: merge # Merge conflicts

 --- # When things don't match up ### The context - While version control also makes sense when you work alone, it becomes essential when you collaborate with others. - When multiple people work on the same code simultaneously on different machines, this can lead to problems. - One way to avoid these problems is to simply not work on code simultaneously. This is an option in small teams, but not in bigger projects. -- ### The problem - Merge conflicts occur when Git cannot resolve differences in the code between two commits. - Not all code differences result in merge conflicts. When changes in code occur on different lines or in different files, Git will successfully merge commits. - The fact that merge conflicts can occur is not a bug, but a key feature of Git! It gives you the agency to address them properly. --- # A hypothetical example ### Think of two collaborators, C1 and C2. You are C1. - C1: You invite C2 to join you as a collaborator on the "test" GitHub repo that you created earlier. (See the *Settings* tab of your repo, then → *Manage access*.) - C2: Clones C1's repo to their local machine. Makes some edits to the README (e.g., deletes lines of text and adds their own). Stages, commits and pushes these changes. - C1: You make your own changes to the README on your local machine. Stage, commit and then try to push them (*after* pulling from the GitHub repo first). - C1 encounters a `merge conflict` error that needs to be fixed. -- 🤓 Note what Git is doing here: It protects your contribution by refusing to merge. It wants to make sure that you don't accidentally overwrite all of your changes by pulling C2's version of the modified file. -- 🦊 In toy examples like these, the source of the problem is obvious. In bigger projects, `git status` can provide a helpful summary to see which files are in conflict. --- # Interpreting merge conflicts Let's see what's happening here by opening up the README file in RStudio/your preferred text editor. You should see something like: ```bash # README Some text here. <<<<<<< HEAD Text added by Collaborator 2. ======= Text added by Collaborator 1. >>>>>>> 814e09178910383c128045ce67a58c9c1df3f558. More text here. ``` --- count: false # Interpreting merge conflicts Let's see what's happening here by opening up the README file in RStudio/your preferred text editor. You should see something like: ```bash # README Some text here. <<<<<<< HEAD Text added by Collaborator 2. ======= Text added by Collaborator 1. >>>>>>> 814e09178910383c128045ce67a58c9c1df3f558. More text here. ``` What do these symbols mean? --- count: false # Interpreting merge conflicts Let's see what's happening here by opening up the README file in RStudio/your preferred text editor. You should see something like: ```bash # README Some text here. *<<<<<<< HEAD Text added by Collaborator 2. ======= Text added by Collaborator 1. >>>>>>> 814e09178910383c128045ce67a58c9c1df3f558. More text here. ``` What do these symbols mean? - `<<<<<<< HEAD` Indicates the start of the merge conflict. --- count: false # Interpreting merge conflicts Let's see what's happening here by opening up the README file in RStudio/your preferred text editor. You should see something like: ```bash # README Some text here. <<<<<<< HEAD Text added by Collaborator 2. *======= Text added by Collaborator 1. >>>>>>> 814e09178910383c128045ce67a58c9c1df3f558. More text here. ``` What do these symbols mean? - `<<<<<<< HEAD` Indicates the start of the merge conflict. - `=======` Indicates the break point used for comparison. --- count: false # Interpreting merge conflicts Let's see what's happening here by opening up the README file in RStudio/your preferred text editor. You should see something like: ```bash # README Some text here. <<<<<<< HEAD Text added by Collaborator 2. ======= Text added by Collaborator 1. *>>>>>>> 814e09178910383c128045ce67a58c9c1df3f558. More text here. ``` What do these symbols mean? - `<<<<<<< HEAD` Indicates the start of the merge conflict. - `=======` Indicates the break point used for comparison. - `>>>>>>> <long string>` Indicates the end of the lines that had a merge conflict. --- # Fixing merge conflicts ### How merge conflicts are fixed - Fixing these conflicts is a matter of (manually) editing the README file. - Delete the lines of the text that you don't want. - Then, delete the special Git merge conflict symbols. - Once that's done, you should be able to stage, commit, pull and finally push your changes to the GitHub repo without any errors. -- ### Caveats - C1 gets to decide what to keep because they fixed the merge conflict. - But: The full commit history is preserved, so C2 can always recover their changes if desired. - A more elegant and democratic solution to merge conflicts (and repo changes in general) is provided by Git **branches**. We'll get there next. --- # Aside: Line endings and different OSs ### Problem During your collaboration, you may have encountered a situation where Git is highlighting differences on seemingly unchanged sentences. - If that is the case, check whether your partner is using a different OS to you. The "culprit" is the fact that Git evaluates an invisible character at the end of every line. This is [how Git tracks changes](https://help.github.com/articles/dealing-with-line-endings/). - For Linux and MacOS, that ending is "LF". - For Windows, that ending is "CRLF". - Check out [this Wikipedia article](https://en.wikipedia.org/wiki/Newline) for valuable cocktail party knowledge about where these terms come from. -- ### Solution Open up the shell and enter ```bash $ git config --global core.autocrlf input ``` (Windows users: Change `input` to `true`). --- class: inverse, center, middle name: branches # Branches and forking

 --- # What are branches and why use them? .pull-left-wide[ ### Branches are cool. - Think of your repo as a growing tree. - Branches allow you to take a snapshot of your existing repo and try out a whole new idea *without affecting* your main (formerly "master") branch. - Only once you (and your collaborators) are 100% satisfied, would you merge it back into the master branch.1 - This is how most new features in modern software and apps are developed. - It is also how bugs are caught and fixed. - But researchers can easily use it to try out new ideas and analysis (e.g. robustness checks, revisions, etc.). - If you aren't happy, then you can just delete the experimental branch and continue as if nothing happened. .footnote[1 As with real trees, you can actually have branches of branches (of branches). But let's not get ahead of ourselves.] ] .pull-right-small-center[

 `Credit` [noble desktop](https://www.nobledesktop.com/learn/git/git-branches) ] --- # Create a new branch in RStudio

 --- # Branch shell commands Create a new branch on your local machine and switch to it: ```bash $ git checkout -b NAME-OF-YOUR-NEW-BRANCH ``` Push the new branch to GitHub: ```bash $ git push origin NAME-OF-YOUR-NEW-BRANCH ``` List all branches on your local machine: ```bash $ git branch ``` Switch back to (e.g.) the main branch: ```bash $ git checkout main ``` Delete a branch ```bash $ git branch -d NAME-OF-YOUR-FAILED-BRANCH $ git push origin :NAME-OF-YOUR-FAILED-BRANCH ``` --- # Merging branches + Pull requests You have two options: -- ### 1. Locally - Commit your final changes to the new branch (say we call it "new-idea"). - Switch back to the master branch: `$ git checkout master` - Merge in the new-idea branch changes: `$ git merge new-idea` - Delete the new-idea branch (optional): `$ git branch -d new-idea` -- ### 2. Remotely (i.e. *pull requests* on GitHub) - PRs are a way to notify collaborators — or yourself! — that you have completed a feature. - You write a summary of all the changes contained in the branch. - You then assign suggested reviewers of your code — including yourself potentially — who are then able to approve these changes ("Merge pull request") on GitHub. -- Let's see how that works in practice. --- # Your first pull request ### Enter new branch - First, operate in the new branch. - Switch over to it if you haven't already. - Remember: `$ git checkout new-idea` (or just click on the branches tab in RStudio) -- ### Make edits - Make some local changes and then commit + push them to GitHub. - For a start, the changes themselves don't really matter. Add text to the README, add some new files, whatever. -- ### Create pull request - After pushing these changes, head over to your repo on GitHub. - You should see a new green button with "Compare & pull request". Click it. - Add a meta description of what this PR accomplishes. You can also change the title if you want. - Click "Create pull request". - (Here's where you or your collaborators would review all the changes.) - Once satisfied, click "Merge pull request" and then confirm. --- # Your first pull request (cont.)

 --- # Forks ### What are forks? - Git forks lie somewhere between cloning a repo and branching from it. - In fact, if you fork a repo then you are really creating a copy of it. -- ### How does it work? - Forking a repo on GitHub is [very simple](https://help.github.com/articles/fork-a-repo/); just click the "Fork" button in the top-right corner of said repo. - This will create an independent copy of the repo under your GitHub account. -- ### What to do with a forked repo? - Once you fork a repo, you are free to do anything you want to it. (It's yours.) However, forking — in combination with pull requests — is actually how much of the world's software is developed. For example: - Outside user *B* forks *A*'s repo. She adds a new feature (or fixes a bug she's identified) and then [issues an upstream pull request](https://help.github.com/articles/creating-a-pull-request-from-a-fork/). - *A* is notified and can then decide whether to merge *B*'s contribution with the main project. - If the original repo is still under active development, you might want to stay up to date. Learn more about syncing a fork [here](https://help.github.com/articles/syncing-a-fork/). --- class: inverse, center, middle name: other # Other tips

 --- # README ### Why README? - README files are special in GitHub because they act as repo landing pages. - They're the first thing viewers of your repo see and should therefore communicate what the repo is about. -- ### Where README? - For a project tied to a research paper, this is where you should be explicit about the goal of the research paper, the software requirements, how to run the analysis, and so forth (e.g. [here](https://github.com/grantmcdermott/bycatch)). - On the other end of the scale, many GitHub repos are basically standalone README files. Think of these as version-controlled blog posts (e.g. [here](https://github.com/jfiksel/github-classroom-for-teachers)). - R packages that are published on GitHub often provide more useful information in the README (and in the repo in general) than on CRAN (if they're published there at all). See, e.g., [here](https://github.com/saschagobel/legislatoR) vs. [here](https://cran.r-project.org/web/packages/legislatoR/index.html). -- ### How README? - READMEs should be written in Markdown, which GH automatically renders. - You'll learn more about [Markdown](https://www.markdownguide.org/) (and its close relation, [R Markdown](https://rmarkdown.rstudio.com/)) during the course of our homework assignments. --- # .gitignore .pull-left-wide[ ### What is .gitignore? - A `.gitignore` file tells Git what to ignore. - This is especially useful if you want to exclude whole folders or a class of files (e.g. based on size or type). - Proprietary data files should be ignored from the beginning if you intend to make a repo public at some point. - Very large individual files (>100 MB) exceed GitHub's maximum allowable size and should be ignored regardless. See here and here. ] .pull-right-small-center[

 `Credit` [RulerD/reddit.com](https://www.reddit.com/r/ProgrammerHumor/comments/bfanuc/version_control/) ] --- # .gitignore (cont.) ### Multiple ways to create a .gitignore - A `.gitignore` file was automatically generated if you cloned your repo with an RStudio Project. - You could also have the option of adding one when you first create a repo on GitHub. - Or, you can create one with your preferred text editor. (Must be saved as "`.gitignore`".) -- ### How to specify rules in the .gitignore file - To ignore a single a file: `FILE-I-WANT-TO-IGNORE.csv` - To ignore a whole folder (and all of its contents, subfolders, etc.): `FOLDER-NAME/**` - The standard shell commands and special characters apply. - E.g., ignore all CSV files in the repo: `*.csv` - E.g., ignore all files beginning with "test": `test*` - E.g., don't ignore a particular file: `!somefile.txt` --- # GitHub Issues ### What is a GitHub Issue? - [GitHub Issues](https://guides.github.com/features/issues/) are another great way to interact with your collaborators and/or package maintainers. - They are a genuine feature of GitHub (not Git). - Think of it as a communication board where you can flag bugs, request new features, suggest changes, etc. - Repo maintainers can keep the issues as a to do list (and close issues that have been "solved"), but also communicate with people who brought up the issue. -- ### How to deal with issues? - Before filing an issue, you should check the list of open (and maybe also closed) issues. - If you spot any problems with these lecture notes, feel free to file an issue [here](https://github.com/Fall2021-GRAD-C11-Intro-to-DS/lectures/issues)! --- class: inverse, center, middle name: summary # Summary

 --- # Recipe (shell commands in grey) 1. Create a repo on GitHub and initialize with a README. 2. Clone the repo to your local machine. Preferably using an RStudio Project, but as you wish. (E.g. Shell command: `$ git clone REPOSITORY-URL`) 3. Stage any changes you make: `$ git add -A` 4.  Pull from GitHub: `$ git pull` 6. (Fix any merge conflicts.) 7. Push your changes to GitHub: `$ git push` -- Repeat steps 3—7 (but especially steps 3 and 4) often. --- # FAQ .pull-left[ **Q: When should I use version control with Git? Is DropBox/OneDrive/Google Docs not enough?** A: It's not evil to use these tools. - Depending on the size and complexity of a project, version history of cloud storage services might seem sufficient (and more convenient to use!). - But as an aspiring data scientist, Git/GitHub is going to become part of your workflow. And it will be less painful the more experience you have. **Q: Should I try to work in the shell, or are convenient GUIs as given by RStudio, GitHub Desktop etc. fine, too?** A: Again, it's not evil to use these tools. - Start simple and stay within the RStudio IDE. - Return to the shell once you've learned more. ] .pull-right[ **Q: When should I commit (and push) changes?** A: Early and often. - It's not quite as important as saving your work regularly, but it's a close second. - You should certainly push everything that you want your collaborators to see. **Q: Do I need branches if I am working on a solo project?** A: You don't *need* them, but they offer big advantages in maintaining a sane workflow. - Experiment without any risk to the main project! - If you combine them with pull requests, then you can compress significant additions to your project (which may comprise many small edits) into a single branch. ] --- # FAQ (cont.) .pull-left[ **Q: What's the difference between cloning and forking a repo?** A: Cloning directly ties your local version to the original repo, while forking creates a copy on your GitHub (which you can then clone). - Cloning makes it easier to fetch updates (and is often the best choice for new GitHub users), but forking has advantages too. ] .pull-right[ **Q: What happens when something goes wrong?**  and check out http://ohshitgit.com/. **Q: What happens when something goes horribly wrong?** A: Burn it down and start again. - http://happygitwithr.com/burn.html - This is a great advantage of Git's distributed nature. If something goes horribly wrong, there's usually an intact version somewhere else. ] --- # Coming up
 ### Get the course materials If you haven't done so already, now is a good time to clone/fork the course materials to your local computer. ### The first assignment Now that you've learned the necessary basics, Mock Assignment 0 is up on GitHub Classroom. Check it out to learn how to work on and submit assignments! ### Next lecture R and the tidyverse, and: good coding style!


Other
Home
Other
Code
code
Tools
tools
Links
Online Terminals and IDEs
Data Structure Visualizations
JavaScript's call stack/event loop/callback queue interact with each other
Design patterns php
PageSpeed Insights
Security Headers
Closure Compiler


Tactics Talk - How Middendorp Beat Mokwena
by Soccer LadumaOn Saturday, Kaizer Chiefs won a pulsating PSL game 3-2 against Orlando Pirates, but which tactical decisions by the coaches proved crucial?
- Chiefs dominate in the air
- Pirates use pace up front
- Lopsided Bucs shape
- Middendorp subs stop the bleeding
Read: Manyama: It’s Not Such A Big Thing
Chiefs Dominate In The Air
Early in this game, Amakhosi were extremely dangerous and dominant in aerial battles against a Pirates defence missing Happy Jele and Mthokozisi Dube through suspension and Thabiso Monyane to South Africa under 23 duty. The own goal came from a long throw, the second goal from a corner, and Chiefs had other good openings from headers for target men, Samir Nurkovic and Leonardo Castro. The Serbian striker won six aerial duels by the end of the game.
Pirates Use Pace Up Front
After seeing the impact of Gabadinho Mhango as a substitute in last week’s Telkom Knockout clash, Rulani Mokwena played the speedy forward from the start. After a tough opening period as a striker, he moved wide to a left winger role and caused all sorts of problems for Chiefs, setting up a clear chance for Thembinkosi Lorch and then scoring by cutting inside. Mhango also won the free-kick from which Vincent Pule scored. Lorch and Pule both joined the Malawian in attack and the front three had no defensive duties besides pressing and could focus on attacking a slow Amakhosi rear-guard.
Read: Khune To Play Hero For Chiefs?
Lopsided Bucs Shape
An average position map showed that Pirates focused most of their attacks down the left and rarely attacked up the right, with no right winger used and Abel Mabaso staying back to provide defensive cover from right back. Pirates delivered 17 crosses in open play with a massive 14 coming from the left flank.
Part of the reason for this strategy could be that Pirates wanted to keep Reeve Frosler too busy defensively to get forward, whilst they were not concerned by Yagan Sasman’s attacking threat on the other side.
Middendorp Subs Stop The Bleeding
Just as Pirates threatened to go in front, Chiefs stopped the pressure they were under somewhat by bringing on Siphosakhe Ntiya-Ntiya and Bernard Parker to dovetail on the right flank. That brought some more defensive control to stop Mhango and Paseka Mako, before Parker won the crucial penalty.
Post Selfie’s On Soccer Laduma’s Social Media App & Earn Airtime and more! Download Now
Do you think Chiefs deserved to win or did Pirates deserve a point or more from the game? Let us know by commenting below!


2FA DEMO | U2F Client
These demos make calls to a production U2F server.
Demos assume 1st Auth Factor has already been accomplished.
Providing: appId & account
U2F Hardware Key
- Lookup Registered Keys
- Register | Bad Origin
- Register | Timeout
- Register | Success
- Authenticate
Do this thing or that thing!
Single Use Backup Code
- Issue Codes
- Authenticate
Do this thing or that thing!
Temporary One-Time Password (TOTP)
- Lookup Registered Devices
- Register | Success
- Authenticate
Do this thing or that thing!
Check MFA Status
This API call indicates with MFA methods have been setup and provides all necessary payloads for U2F challenges.
Do this thing or that thing!
Check MFA Auth Logs
This API call indicates with MFA methods have been setup and provides all necessary payloads for U2F challenges.
Do this thing or that thing!


HTML & CSS
We're in week four of the Epicodus Evening Intro class. We've been learning Html and CSS. The last couple of weeks have been pretty slow because I've taken HTML and CSS before but it was a good refresher.
Our first code review was to create a landing page for our web programming portfolio. Some of the criteas included:
I didn't end up using Bootstrap. I played around with it for a bit before deciding that I didn't like it. I found Skeleton which I loved. It was pretty lightweight and super easy to figure out.
Another thing that I struggled with was committing regularly. I'm told that it will eventually become second nature but right now it feels more like a hassle. I keep forgetting to commit until I'm about an hour deep into the project.
Here's the final page that I submitted Click Here


--- layout: page title: Projects subtitle: Projects desc: It's all about developing new things everyday. permalink: /projects/ ---
It's all about developing new things everyday.
A Real Time comment system which is implemented using ReactJS and with the comments being save in Redux store.
Contributor to Drupal 8 Media Module under GSoC 16.
Open Source Contributor in FOSSASSIA for making the Frontend of Loklak API on Angular 2.0
Bulit a realtime Data Visualisation Model of the demographics in India using Fusion Charts and ChartJS in Angular 1.0
Static Website for VIT's International Cultural Festival - Riviera 2017.
CHENNAI HEAVY RAINS HELP PORTAL - Affected people in Chennai floods can visit this website to get help for rescue, food, shelter and can also access important helpline numbers.
Static Website for VIT University's Business School.
Static Website for VIT's Official Admissions Campaign in 2017 for the Engineering Entrance Exam.
Project PyPlot is a simple implementation of multiple libraries made using the language Python. It connects to the mySQL database and using the link in the database, downloads the pdb file and renders it in PyMol software. It further displays several information related to the protein.
Static Website for Institute of Industrial & Systems Engineers Chapter in VIT.
Static Website for SAE Convention 2015.
First mockup theme for Fitsquare App Landing- A Fitness App.
Landing page for VIT-AP University
Mockup theme for Tryofit App Landing - A Fitness App.
Static Website for VIT University's Official Technical Business Incubator.
Google Summer of Code 2017 Project, under FOSSASIA


Mood Teller
Home
About
Services
Contact
Mood Teller
Please type in your name and your current mood
Name:
Mood:
Tell Me
Clear Mood


The team behind MHEA, founded at the University of Washington, Seattle, includes undergraduates interested in studying a variety of academic disciplines. A passion for mental health advocacy is what unites us.
MHEA acts as an organization that stresses awareness of mental health and support to individuals in India through a peer to student model. These volunteers will attend local high schools and demonstrate both the importance of mental health, as well as their support for people afflicted. This increase of awareness and support will decrease mental health issues in the community and help the community as a whole.
In our endeavor to equip adolescents with a familiarity and understanding of mental illness, MHEA provides a platform for peers to lead one another towards a state of acceptance and recognition.
A few of my friends suffered from depression throughout high school and the lack of resources for them to turn to aggravated the issue. They didn’t have anybody to talk to for fear of being labeled by people. I want to see that this is no longer an issue, and that people get the help they need. I hope we finally get to see the day when young students in high school can perform to their full potential and are not held back by mental health issues that they can get help with.
Mental health is an important issue to me, and I have seen the negative repercussions of people who have had undiagnosed mental health problems. I have experienced and still sometimes experience situational depression myself here at the University of Washington. I know firsthand about the unhealthy implications and how easy it is to spiral downwards. I hope to contribute to a program that will provide the knowledge of mental health issues to individuals who are going through stressful times so that they can improve for the future.
I have always been interested in working in a global setting. Particularly, I have been interested in the different ways of thinking between cultures. My interest in this, paired with multiple personal experiences dealing with mental illness, contribute to my desire to see change in our world. Young people are the leaders and thinkers of the future, so I deeply believe that targeting students can be a worthy and effective cause.
We aim to provide a platform for peers to interact and lead one another towards awareness about mental health issues and coping with them. This conversation is initiated with the aim to destigmatize mental health.
Our trained volunteers conduct a series of peer-led discussion workshops for students in classes 9 to 12. Through these workshops, students get opportunities to develop important skills that help them cope and support a friend having issues with mental health.
Participating students learn about depression, anxiety, stress and suicide and their symptoms, treatments and how to cope with them. They are also equipped with strategies to support a friend.
Volunteers are trained by the MHEA team to successfully conduct these workshops, facilitate conversations about mental health among students and guide them to mental health resources in their city.
Sairandri is a sophomore at the University of Washington who plans to study neurobiology and psychology. She is a Peer Health Educator and conducts workshops, panels and other programmes to promote mental health awareness, healthy sexuality and wellness on campus.
Chelsea is a sophomore at the University of Washington studying neurobiology and psychology. Currently, Chelsea is developing yeast biosensors with her synthetic biology research group. Her personal interactions with mental health and experience as an EMT led to her passion for mental health advocacy.
Aniruddh is a sophomore at UW who loves to hike (or sleep) when he is not stressing over school. He plans into major in bioengineering and currently works in a research lab that is using stem cells to help with the regeneration of the liver.
Skyler has a passion for bioengineering and applied math, which includes computational modeling and statistics. He is a rising sophomore at the University of Washington, and hopes to join an MD PhD program after his undergraduate studies.
Kartik is a sophomore at the University of Washington, aiming to major in Computer Science. He is extremely passionate about Computer Science as a subject, and loves to learn about new technology. His main goal is to apply technology to solve problems in society.
Saasha is a Sophomore at the University of Washington who plans to study Computer Science and Design.
Ed is a Sophomore majoring in physics at the University of Washington.


Here I learned some advanced technologies and frameworks like Vue JS, React JS, Golang, Elastic Search, Docker, CircleCI. I worked on a syndication project(Fintep) and a matrimony project(Palkar) in Rails 5 and Rails 6 respectively.
This was my second company where I worked on a Treading project that was in Rails 2. The project was little bit challanging for me because it was in Rails 2 and very old project and also less co-workers in RoR. Here I mostly worked on report generation by writing SQL querries and payment gateways like Skrill, Neteller, Emerchantpay.
This is the company where I became an employee from a student. Here I experianced many interesting things those are new to me like HTML, CSS, Javascript, JQuery, Ruby on Rails, Git, Heroku, etc. I worked on a CRM application(WakeUpSales) and a Leave Tracking System.
Apart from being a web developer, I enjoy most of my time being outdoors. I like to visit new place.
I also like photography.


Java sample applications for AWS Lambda
The GitHub repository for this guide provides sample applications that demonstrate the use of Java in AWS Lambda. Each sample application includes scripts for easy deployment and cleanup, an AWS CloudFormation template, and supporting resources.
Sample Lambda applications in Java
-
blank-java
– A Java function that shows the use of Lambda's Java libraries, logging, environment variables, layers, AWS X-Ray tracing, unit tests, and the AWS SDK. -
java-basic
– A minimal Java function with unit tests and variable logging configuration. -
java-events
– A minimal Java function that uses the aws-lambda-java-events library with event types that don't require the AWS SDK as a dependency, such as Amazon API Gateway. -
java-events-v1sdk
– A Java function that uses the aws-lambda-java-events library with event types that require the AWS SDK as a dependency (Amazon Simple Storage Service (Amazon S3), Amazon DynamoDB, and Amazon Kinesis). -
s3-java
– A Java function that processes notification events from Amazon S3 and uses the Java Class Library (JCL) to create thumbnails from uploaded image files.
Use the blank-java
sample app to learn the basics, or as a starting point for your own application.
It shows the use of Lambda's Java libraries, environment variables, the AWS SDK, and
the AWS X-Ray SDK. It uses a
Lambda layer to package its dependencies separately from the function code, which
speeds up deployment times when you
are iterating on your function code. The project requires minimal setup and can be
deployed from the command line in
less than a minute.
The other sample applications show other build configurations, handler interfaces,
and use cases for services
that integrate with Lambda. The java-basic
sample shows a function with minimal dependencies. You can
use this sample for cases where you don't need additional libraries like the AWS SDK,
and can represent your
function's input and output with standard Java types. To try a different handler type,
you can simply change the
handler setting on the function.
Example java-basic/src/main/java/example/HandlerStream.java
// Handler value: example.HandlerStream public class HandlerStream implements RequestStreamHandler { Gson gson = new GsonBuilder().setPrettyPrinting().create(); @Override public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { LambdaLogger logger = context.getLogger(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("US-ASCII"))); PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream, Charset.forName("US-ASCII")))); try { HashMap event = gson.fromJson(reader, HashMap.class); logger.log("STREAM TYPE: " + inputStream.getClass().toString()); logger.log("EVENT TYPE: " + event.getClass().toString()); writer.write(gson.toJson(event)); ...
The java-events
and java-events-v1sdk
samples show the use of the event types provided
by the aws-lambda-java-events
library. These types represent the event documents that AWS services send to your function. java-events
includes handlers
for types that don't require additional dependencies. For event types like DynamodbEvent
that require
types from the AWS SDK for Java, java-events-v1sdk
includes the SDK in its build configuration.
Example java-events-v1sdk/src/main/java/example/HandlerDynamoDB.java
import com.amazonaws.services.lambda.runtime.events.DynamodbEvent; import com.amazonaws.services.lambda.runtime.events.DynamodbEvent.DynamodbStreamRecord; import com.amazonaws.services.dynamodbv2.model.Record; ... // Handler value: example.HandlerDynamoDB public class HandlerDynamoDB implements RequestHandler<DynamodbEvent, String>{ private static final Logger logger = LoggerFactory.getLogger(HandlerDynamoDB.class); Gson gson = new GsonBuilder().setPrettyPrinting().create(); @Override public String handleRequest(DynamodbEvent event, Context context) { String response = new String("200 OK"); for (DynamodbStreamRecord record : event.getRecords()){ logger.info(record.getEventID()); logger.info(record.getEventName()); logger.info(record.getDynamodb().toString()); } ...
For more highlights, see the other topics in this chapter.


Handling escaping in batch file parameters... reminds me how bad the "good old days" really were.
10/23/2008, 4:38:15 PM
Favs: 0
Retweets: 0
link--- layout: tweet ---
Handling escaping in batch file parameters... reminds me how bad the "good old days" really were.
10/23/2008, 4:38:15 PM
Favs: 0
Retweets: 0
link


This map is a zoomable, searchable network visualization of the Storm of Swords Network. The data was published by Dr. Andrew Beveridge at Macalaster College and this visualization was done by Bobby Norton.
A. Beveridge and J. Shan, "Network of Thrones," Math Horizons Magazine , Vol. 23, No. 4 (2016), pp. 18-22.
The visualization leverages SAND, py2cytoscape, and python-igraph to implement the following features:
You can find a Jupyter Notebook that will allow you to completely replicate this visualization on Github.
The app was made using Cytoscape.js based on their Wine and Cheese Demo.
Also see the SAND repo for examples of applying network analysis and visualization to systems architecture.
SAND is a network analytics toolkit and workflow written in Python. SAND focuses on the domain of network data in systems architecture, but the principles are useful for network analysis in other domains such as this social network. The Network of Thrones dataset provided a basis to calibrate SAND against an existing well-described network analysis. Running this dataset through the SAND workflow started as a case study and functional test, but became useful and entertaining in its own right.
Love it? Hate it? Let me know.


[% page.import({ title => 'What is Kwalitee?', description => 'The Perl Phalanx Project - What is Kwalitee?', }); %]
Measuring quality is hard, and so we coined the term Kwalitee which is measurable (but inexact quality), so we can know it when we see it.
If there is any difference between the docs, the code and the tests, it is a bug. Period. The bug might be in the docs or the tests, and the code is fine, but it's still a bug.
If there is ambiguity about how the code is supposed to work, it is a bug. The documentation must be clarified, and the code may be out of sync as well.
If a hoplite discovers something behaving "incorrectly", according to the hoplite, it may or may not be a bug, according to the author's intent.
is( unlink( $filename ), 1, "Remove $filename" ); ok( !-e $filename, "Actually gone" );


As of jQuery 1.5, $.ajax()
provides three means to extend its functionalities for sending, receiving, and managing ajax requests:
A prefilter is a callback function that is called before each request is sent, and prior to any $.ajax()
option handling.
Prefilters are registered using $.ajaxPrefilter()
, and a typical registration looks like this:
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
// Modify options, control originalOptions, store jqXHR, etc
});
where:
options
are the request optionsoriginalOptions
are the options as provided to the ajax method, unmodified and, thus, without defaults from ajaxSettingsjqXHR
is the jqXHR object of the requestPrefilters are a perfect fit when you need to handle custom options. For instance the following code would make it so $.ajax()
automatically aborts a request with the same url if the custom abortOnRetry
option is set to true
:
var currentRequests = {};
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
if ( options.abortOnRetry ) {
if ( currentRequests[ options.url ] ) {
currentRequests[ options.url ].abort();
}
currentRequests[ options.url ] = jqXHR;
}
});
Prefilters can also be used to modify existing options. For example, the following proxies cross-domain requests through http://mydomain.net/proxy/:
$.ajaxPrefilter(function( options ) {
if ( options.crossDomain ) {
options.url = "http://mydomain.net/proxy/" + encodeURIComponent( options.url );
options.crossDomain = false;
}
});
It is also possible to attach a prefilter to requests with a specific dataType. For example, the following applies the given prefilter to JSON and script requests only:
$.ajaxPrefilter( "json script", function( options, originalOptions, jqXHR ) {
// Modify options, control originalOptions, store jqXHR, etc
});
Finally, it is possible to redirect a request to another dataType by returning the target dataType. For example, the following sets a request as "script" if the URL had some specific properties defined in a custom isActuallyScript() function:
$.ajaxPrefilter(function( options ) {
if ( isActuallyScript( options.url ) ) {
return "script";
}
});
This would ensure not only that the request is considered "script" but also that all the prefilters specifically attached to the script dataType would be applied to it.
A converter is a callback function that is called when a response of a certain dataType is received while another dataType is expected.
Converters are stored into ajaxSettings and can be added globally as follows:
$.ajaxSetup({
converters: {
"text mydatatype": function( textValue ) {
if ( valid( textValue ) ) {
// Some parsing logic here
return mydatatypeValue;
} else {
// This will notify a parsererror for current request
throw exceptionObject;
}
}
}
});
Converters are useful to introduce custom dataTypes. They can also be used to transform data into desired formats. Note: all custom dataTypes must be lowercase.
With the example above, it is now possible to request data of type "mydatatype" as follows:
$.ajax( url, {
dataType: "mydatatype"
});
You can define converters "inline," inside the options of an ajax call. For example, the following code requests an XML document, then extracts relevant text from it, and parses it as "mydatatype":
$.ajax( url, {
dataType: "xml text mydatatype",
converters: {
"xml text": function( xmlValue ) {
// Extract relevant text from the xml document
return textValue;
}
}
});
A transport is an object that provides two methods, send
and abort
, that are used internally by $.ajax()
to issue requests. A transport is the most advanced way to enhance $.ajax()
and should be used only as a last resort when prefilters and converters are insufficient.
Since each request requires its own transport object instance, tranports cannot be registered directly. Therefore, you should provide a function that returns a transport instead.
Transports factories are registered using $.ajaxTransport()
. A typical registration looks like this:
$.ajaxTransport( function( options, originalOptions, jqXHR ) {
if( /* transportCanHandleRequest */ ) {
return {
send: function( headers, completeCallback ) {
/* send code */
},
abort: function() {
/* abort code */
}
};
}
});
where:
options
are the request optionsoriginalOptions
are the options as provided to the ajax method, unmodified and, thus, without defaults from ajaxSettingsjqXHR
is the jqXHR object of the requestheaders
is a map of request headers (key/value) that the transport can transmit if it supports itcompleteCallback
is the callback used to notify ajax of the completion of the requestcompleteCallback
has the following signature:
function( status, statusText, responses, headers ) {}
where:
status
is the HTTP status code of the response, like 200 for a typical success, or 404 for when the resource is not found.statusText
is the statusText of the response.responses
(Optional) is a map of dataType/value that contains the response in all the formats the transport could provide (for instance, a native XMLHttpRequest object would set reponses to { xml: XMLData, text: textData }
for a response that is an XML document)headers
(Optional) is a string containing all the response headers if the transport has access to them (akin to what XMLHttpRequest.getAllResponseHeaders()
would provide).Just like prefilters, a transport's factory function can be attached to specific dataType:
$.ajaxTransport( "script", function( options, originalOptions, jqXHR ) {
/* Will only be called for script requests */
});
The following example shows how a minimal image transport could be implemented:
$.ajaxTransport( "image", function( s ) {
if ( s.type === "GET" && s.async ) {
var image;
return {
send: function( _ , callback ) {
image = new Image();
function done( status ) {
if ( image ) {
var statusText = ( status == 200 ) ? "success" : "error",
tmp = image;
image = image.onreadystatechange = image.onerror = image.onload = null;
callback( status, statusText, { image: tmp } );
}
}
image.onreadystatechange = image.onload = function() {
done( 200 );
};
image.onerror = function() {
done( 404 );
};
image.src = s.url;
},
abort: function() {
if ( image ) {
image = image.onreadystatechange = image.onerror = image.onload = null;
}
}
};
}
});
The jQuery Ajax implementation comes with a set of standard dataTypes, such as text, json, xml, and html.
Use the converters
option in $.ajaxSetup()
to augment or modify the data type conversion strategies used by $.ajax()
.
The unminified jQuery source itself includes a list of default converters, which effectively illustrates how they can be used:
// List of data converters
// 1) key format is "source_type destination_type"
// (a single space in-between)
// 2) the catchall symbol "*" can be used for source_type
converters: {
// Convert anything to text
"* text": window.String,
// Text to html (true = no transformation)
"text html": true,
// Evaluate text as a json expression
"text json": jQuery.parseJSON,
// Parse text as xml
"text xml": jQuery.parseXML
}
When you specify a converters
option globally in $.ajaxSetup()
or per call in $.ajax()
, the object will map onto the default converters, overwriting those you specify and leaving the others intact.
For example, the jQuery source uses $.ajaxSetup()
to add a converter for "text script":
jQuery.ajaxSetup({
accepts: {
script: "text/javascript, application/javascript"
},
contents: {
script: /javascript/
},
converters: {
"text script": jQuery.globalEval
}
});


RNANO
Section: User Commands (1)Updated: version 2.0.0
Index Return to Main Contents
NAME
rnano - Restricted mode for Nano's ANOther editor, an enhanced free Pico cloneSYNOPSIS
rnano [OPTIONS] [[+LINE,COLUMN] FILE]...DESCRIPTION
This manual page briefly documents the rnano command.nano is a small, free and friendly editor which aims to replace Pico, the default editor included in the non-free Pine package. Rather than just copying Pico's look and feel, nano also implements some missing (or disabled by default) features in Pico, such as "search and replace" and "go to line and column number".
rnano is a restricted version of nano, which only edits specific files and doesn't allow the user access to the filesystem or a command shell.
In restricted mode, nano will not:
- [bu]
- read or write to any file not specified on the command line;
- [bu]
- read any nanorc files;
- [bu]
- allow suspending;
- [bu]
- allow a file to be appended to, prepended to, or saved under a different name;
- [bu]
-
use backup files or spell checking.
OPTIONS
- +LINE,COLUMN
- Places cursor at line number LINE and column number COLUMN (at least one of which must be specified) on startup, instead of the default of line 1, column 1.
- -?
- Same as -h (--help).
- -h (--help)
- Show a summary of command line options and exit.
- -V (--version)
- Show the current version number and exit.
See the nano(1) manpage for the complete documentation of nano.
BUGS
Please send any comments or bug reports to<EMAIL_ADDRESS>nano mailing list is available from<EMAIL_ADDRESS>To subscribe, email to<EMAIL_ADDRESS>with a subject of "subscribe".
HOMEPAGE
http://www.nano-editor.org/AUTHOR
Chris Allegretta<EMAIL_ADDRESS>et al (see AUTHORS for details). This manual page was originally written by Thijs Kinkhorst<EMAIL_ADDRESS>for the Debian system (but may be used by others).
Index
This document was created by man2html, using the manual pages.
Time: 05:29:10 GMT, December 24, 2015


By choosing this menu option you can decode a potential ASN.1 document via the dialog ASN.1 PIN request.
The ASN.1 structure will be displayed in a new window in ASN.1 dump format if the chosen file is an ASN.1 document indeed.
If there exists a PSE within the ASN.1 document which is also containing a certificate, then the certificate will be displayed in another window in plaintext format.
A proper information dialog is displayed if CrypTool cannot find any further ASN.1 structures.
Remark:
There is a certain chance that the PSE within the chosen ASN.1 document is PIN protected. In this case a PIN request dialog will prompt you for a correct PIN to assure that only authorized persons can access the certificate.


Must Watch: Shocking, Witchcraft 101 As Tree Mysteriously Grows Out Of A Car In France?
by LuckyShocking, Huroyi 101 as a tree grows out of a car in France?
Chances are, you may have already seen a viral video and pictures on social media in what appears to be an uncommon scene. In France, a tree mysteriously grew out of a car on the side of the road.
To a local, and probably a child, there can only be one explanation to it; Huroyi and nothing else.
A lot of superstitious conspiracies have already come out from a local African point of view; the European folk has adopted juju. Or it may be a case where witchcraft was done to a prospering African kid in Europe by a jealous neighbor back in Africa.
But to regular folk, all that is impossible. Turns out this is, in fact, a piece of art put up by a local theatre group called The Royal De Luxe, popularly known for impromptu pieces of art that defy logic like this one- as reported by Ouest-France.
Not much information has been reported on how such an enormous act was pulled through; but well, there can only be two logical explanations to it.
The bottom and top of the car are already pre-pierced from the side. Tow cuts were probably made just big enough for a tree to slide through, and the cuts hidden by a rubber roof sill on top and further hidden by the closed door.
Or, the tree just wasn’t there. A hole was pierced through on the car and a tree (artificial or natural) was cut out somewhere and later dug through a stationed car.
Hats off to the artists for the ingenious piece of art!
To View and Apply for the latest Jobs and Vacancies in Zimbabwe, Please Visit our Sister website iHarare Jobs


World Wide Web Access Statistics
All Accesses by Domain for IUSOCS
October 1998
Requests Received During Summary Period 46
Bytes Transmitted During Summary Period 1189403
Average Requests Received Daily 15
Average Bytes Transmitted Daily 396468
There were no accesses from this domain.
Requests Received During Summary Period 370
Bytes Transmitted During Summary Period 6395811
Average Requests Received Daily 17
Average Bytes Transmitted Daily 290719
Requests Received During Summary Period 45
Bytes Transmitted During Summary Period 121307
Average Requests Received Daily 3
Average Bytes Transmitted Daily 7582
Requests Received During Summary Period 33
Bytes Transmitted During Summary Period 247752
Average Requests Received Daily 3
Average Bytes Transmitted Daily 22523
Requests Received During Summary Period 179
Bytes Transmitted During Summary Period 571936
Average Requests Received Daily 22
Average Bytes Transmitted Daily 71492
There were no accesses from this domain.


I’m A Celebrity fans reckon Ian Wright will quit after last night’s foul-mouthed rant
He lashed out at campmate Andrew Maxwell
by Rebecca CarterViewers of I'm A Celebrity think Ian Wright could end up quitting the show.
On Wednesday night's episode, the former footballer snapped at campmate Andrew Maxwell after the comedian tried to encourage Ian to eat more of their crocodile dinner.
Ian insisted: "No I don't want none," to which Andrew replied: "Come on seriously Ian."
Read more: I'm A Celebrity fans stunned as Ian Wright snaps at Andrew Maxwell over dinner
Ian replied: "I really honestly don't want no more. [James Haskell] needs it more than I would."
Andrew pointed out: "There's two Ian," to which Ian said: "He can have another one if he wants. I don't want no more."
Andrew said: "Jesus, the drama. Just eat some!" to which Ian snapped: "I said I don't want no more [expletive] crocodile bruv. I don't want no more!"
In the Bush Telegraph, Ian said: "There's nothing more frustrating then when you're saying no to something and someone continues to ask you. It's annoying."
Andrew said in the Bush Telegraph: "I felt bad that I was pressurising [him] too much into eating it. He came back at me but I get it."
Ian added: "It's only four days in and it's already like that so we're going to have to see how it goes because tensions and frustrations will creep in.
"That is where the test is going to come as well for me if people start to get on my nerves. Up to this point no-one has done that but it's early doors."
Viewers were divided over the spat and some people reckon he'll quit the show.
One person said: "I think Ian will quit by [the] end of [the] week #imaceleb."
Another wrote: "Idk why but I can see Ian quitting."
Read more: I'm A Celebrity: The real reason Adele Roberts has a photo of Loose Women's Jane McDonald
A third agreed: "I think food is going to get too much for him."
Others think Ian could be the first celebrity voted out.
I'm A Celebrity continues tonight at 9pm on ITV.
Do you think Ian will quit? Leave us a comment on our Facebook page @EntertainmentDailyFix and let us know.


A.4 Housekeeping
1. Exits / Access Ways: Properly Marked, Maintained (Unobstructed 28" Minimum)
Non Compliant
Partially Compliant
Fully Compliant
N/A
Why partially / non compliant?
Upload any documentation / photos
no file selected
File uploads may not work on some mobile devices.
2. Trash Receptacles: Adequate Number & Maintained
Non Compliant
Partially Compliant
Fully Compliant
N/A
Why partially / non compliant?
Upload any documentation / photos
no file selected
File uploads may not work on some mobile devices.
3. Materials Storage - Orderly and Secure
Non Compliant
Partially Compliant
Fully Compliant
N/A
Why partially / non compliant?
Upload any documentation / photos
no file selected
File uploads may not work on some mobile devices.
4. Tools Storage - Orderly and Secure
Non Compliant
Partially Compliant
Fully Compliant
N/A
Why partially / non compliant?
Upload any documentation / photos
no file selected
File uploads may not work on some mobile devices.
5. No Trash Piles or Un-Kept Work Areas
Non Compliant
Partially Compliant
Fully Compliant
N/A
Why partially / non compliant?
Upload any documentation / photos
no file selected
File uploads may not work on some mobile devices.
6. Enclosed Trash Chutes (When In Excess of 20 Feet High)
Non Compliant
Partially Compliant
Fully Compliant
N/A
Why partially / non compliant?
Upload any documentation / photos
no file selected
File uploads may not work on some mobile devices.
7. Toilet Facilities (Adequate Number)
Non Compliant
Partially Compliant
Fully Compliant
N/A
Why partially / non compliant?
Upload any documentation / photos
no file selected
File uploads may not work on some mobile devices.
8. No Unprotected Rebar or Projecting Nails or Objects
Non Compliant
Partially Compliant
Fully Compliant
N/A
Why partially / non compliant?
Upload any documentation / photos
no file selected
File uploads may not work on some mobile devices.
9. Air Quality Control-Proper Ventilation
Non Compliant
Partially Compliant
Fully Compliant
N/A
Why partially / non compliant?
Upload any documentation / photos
no file selected
File uploads may not work on some mobile devices.
Notes:
Total Unanswered:
0
Total N/A Selected:
0
Total Not Compliant:
0
Total Partially Compliant:
0
Total Compliant:
0
Average of those Answered:
0
Save Answers and Resume Later


CowCrypt OpenSSL Interoperability Demo
CLICK HERE TO DECRYPT
Input Ciphertext (Base64):
Ciphertext (binary):
Ciphertext (hex):
Decrypted Plaintext:
Copyright © 2013
Jeff Lyon


<< Back to search
Last Updated: {{currentListing.dateUpdate | date : 'd MMMM yyyy'}}
Last Updated: {{currentListing.dateUpdated | date : 'd MMMM yyyy'}}
Owned by {{currentListing.owner}}
{{currentListing.summary}}
{{item}}
{{field.value}}


Matt k Productions
Merchandise
Videos
Beats
About
Home
Cart
Log in
Matthew
This paragraph that i amm writing
Test
These
Buttons
Out
Test So you Know what this bouta be
I dont even know how this works


Hello Friend!
Type the url below with 'http://' and make the botnet make a GET request on the website, like DDos
How this works?
Well, it's pretty simple, on android application has a firebase service waiting for the


I'm Aarushi Parashar, a Freshman majoring in Computer Science and minoring in Applied Mathematics and Operations Research and Management Sciences at Cornell University. Among my interests are neural networks, cognitive computing development, cloud and distributed computing, autonomous systems, and software engineering. In school, I am currently a software engineer at Cornell Mars Rover(CMR), a project team that designs and builds an autonomous rover. This summer I am a research intern at IBM working on building various neural network models to predict whether a small molecule will bind to a protein. This is currently my temporary website, so stay tuned for the official one to replace this sometime soon!


2013-09-11 To and from F
Hello Carlos,
I’m going to tell you a story. Since years I’ve been chasing a discontinued book from Julio Llamazares. He started writing poetry. He dried up. He made novel. He has not republished it for the respect it deserves. No verses come out. I had a photocopy of “The slowness of the oxen” (Llamazares 1985) and I was waiting to find it one way or another. Iberlibro has brought me closer to no less than the 1975 original edition. Write that one down in favor of suicide technology.
By the way, I acquired the first reissue, from 1985 in “Hiperión”, which was also there. A certain José González, allegedly in love with a certain Sara, bought it on Gran Vía and gave it to her, surely wanting to tell her through those poisonous pages so many things. He dated it as “7-X-85” with the decryption ‘opos-agricultural’85-’. Maybe she had abandoned him.
“The mirrors don’t know how to lie anymore,”6 says a song by Diego Vasallo. Judged by the absolutely flawless condition, better than most of newly released books and bought in bookstores, she didn’t even open it. Probably, she must have moved out from her place, why not because of the crisis, to a smaller flat, maybe after a separation, and she would do away with part of her library.
Ellipsis.
Good luck in your days before the start of Europe.
Incredible F., the life of books…
And how they know how to walk their own path, remember that you are not the final destination of that book, only a key piece in its progression. :-)
Who has found whom?
I am reading 100 years of solitude. Left half finished years ago… Mastery. I think that the first chapter is quite anti-science, but we will have to wait for him to define his position, if that is what he will do.
Greetings and enjoy your long-awaited and deserved treasure.
I have to make blog posts and, even more than illicit, I will occasionally ask you for information from your huge artistic and literary culture.
And in the memory is the origin of self-destruction7
Wow…
Instead, memories, mirages of fear, are sweet to the tongue, but gnaw the heart like vermin.8
Llamazares (1985)
Pffff… And I was thinking of imperfect past tenses… Even worse, subjunctive…
Carlos
PS: What is said is debt9. Why beauty matters
References
Llamazares, Julio. 1985. La Lentitud de Los Bueyes: Memoria de La Nieve. Vol. 81. Ediciones Hiperión.


@(user: securesocial.core.Identity)(implicit request: RequestHeader) @import securesocial.core.IdentityProvider @main("Leaderboard - QSLTagger", Some(user)) {
31 cards tagged.
24 cards tagged.
23 cards tagged.
13 cards tagged.


Generic Page
Simple page displayed by Flask
This is PhantomFlask, well known HTML5 Up Phantom design coded in Flask Microframework.
{% if current_user.is_authenticated %} You are authenticated, Logout {% else %} You are NOT authenticated, please Login {% endif %}
Flask is a Python web framework built with a small core and easy-to-extend philosophy. Flask is also easy to get started with as a beginner because there is little boilerplate code for getting a simple app up and running.
Get the source code or read more about this Flask application.
Simple page displayed by Flask
Learn Python
Read more about Flask Microframework
Learn More about Flask on FullStackPython.com
Python Tutorials, provided by RealPython.com
A must-read Flask tutorial, written by Miguel Grinberg
Learn how to bundle Flask with Vue.js
A curated list of awesome Flask resources and plugins, published on Github
Get more apps, coded in Flask


Item
Details
Origin:
Nairobi
Destination:
Mombasa
Price:
Kshs 1000
Departure Date:
10th July 2019
Departure Time
9:30 AM
Seatings Availabe:
23 seats
Bus License Number:
KDE 463E
Cancel Trip


| Statement Period | 01/06/2014-01/06/2015 |
| Merchant Name | Mark & Spencers |
| Customer Service | Website - businesstrack.com |
Merchant Statement Summary
| Product | Cost | Sales amount | Shipping cost | Units sold | Profit generated | Left in stock | Returns | Actions |
|---|---|---|---|---|---|---|---|---|
| T-shirts | 250 | 300 | 60 | 3453 | 76 | 453643 | 300 | |
| Baseball Hat | 457 | 204 | 35 | 6754 | 35 | 345623 | 546 | |
| Tennis Racket | 250 | 350 | 38 | 3289 | 45 | 54662 | 278 | |
| Gloves | 250 | 300 | 60 | 3453 | 76 | 453643 | 300 | |
| Shoes | 673 | 457 | 56 | 4467 | 98 | 345723 | 350 |


Go to the source code of this file.
Variables | |
| option_reg = 0xb11111111 | |
| intcon = 0b00000000 | |
| pie1 = 0x00000000 | |
| pir1 = 0b00000000 | |
| pcon = 0b00000000 | |
| osctune = 0b00000000 | |
| osccon = 0b01110000 | |
| gpio = 0b00000000 | |
| trisio = 0b00111000 | |
| wpu = 0b00000000 | |
| ioc = 0b00000000 | |
| t1con = 0b00000100 | |
| t2con = 0b00000000 | |
| cmcon0 = 0b00000111 | |
| cmcon1 = 0b00000000 | |
| vrcon = 0b00000000 | |
| adcon0 = 0b10001100 | |
| ansel = 0b00000000 | |
| ccp1con = 0b00000000 | |
| wdtcon = 0b00001000 | |
| adcon0 = 0b10001100 |
Definition at line 371 of file bc12f683-config-29.h.
| ansel = 0b00000000 |
Definition at line 396 of file bc12f683-config-29.h.
| ccp1con = 0b00000000 |
Definition at line 418 of file bc12f683-config-29.h.
| cmcon0 = 0b00000111 |
Definition at line 317 of file bc12f683-config-29.h.
| cmcon1 = 0b00000000 |
Definition at line 341 of file bc12f683-config-29.h.
| gpio = 0b00000000 |
Definition at line 202 of file bc12f683-config-29.h.
| intcon = 0b00000000 |
Definition at line 40 of file bc12f683-config-29.h.
| ioc = 0b00000000 |
Definition at line 244 of file bc12f683-config-29.h.
| option_reg = 0xb11111111 |
Definition at line 6 of file bc12f683-config-29.h.
| osccon = 0b01110000 |
Definition at line 172 of file bc12f683-config-29.h.
| osctune = 0b00000000 |
Definition at line 156 of file bc12f683-config-29.h.
| pcon = 0b00000000 |
Definition at line 135 of file bc12f683-config-29.h.
| pie1 = 0x00000000 |
Definition at line 73 of file bc12f683-config-29.h.
| pir1 = 0b00000000 |
Definition at line 101 of file bc12f683-config-29.h.
| t1con = 0b00000100 |
Definition at line 257 of file bc12f683-config-29.h.
| t2con = 0b00000000 |
Definition at line 298 of file bc12f683-config-29.h.
| trisio = 0b00111000 |
Definition at line 212 of file bc12f683-config-29.h.
| vrcon = 0b00000000 |
Definition at line 354 of file bc12f683-config-29.h.
| wdtcon = 0b00001000 |
Definition at line 445 of file bc12f683-config-29.h.
| wpu = 0b00000000 |
Definition at line 224 of file bc12f683-config-29.h.


{% extends "base.html" %} {% block content %}
Looks like you've lost your way!
The treats are in the other direction


History of my YouTube Channel
Starting Up
In 2015, I got my first ever console, the Xbox 360
I was very into gameplay recordings and YouTube, and so in 2016, I got my recording device. The Elgato HD60. To this day, I still sometimes use it! I used the Elgato to make '360 videos for the next year.
Moving On


| Topic | Speaker |
|---|---|
| Keynote speech on the past, present and future of Vue.js | Evan You - Vue.js creator |
| Scaling Vue in an existing stack | Roman Kuba – Senior SW Enginer @Codeship |
| Apollo, GraphQL and Vue: The ultimate stack | Guillaume Chau – Vue.js Core Team Member |
| Speed up your Vue.js development time with Nuxt.js | Alexandre Chopin – Nuxt.js co-author |
| State animations: Getting them right | Eduardo San Martin Morote - Vue.js Core Team Member |
| Building reusable UI components in Vue. What have we learned from building them for KendoUI | Plamen Zdrakov – Senior Developer @Progress |
| Topic | Speaker |
|---|---|
| Unit testing Vue components: Why test, what to test, and how to test Vue components | Edd Yerburgh – Vue.js Core Team Member |
| How to server-render an application with Vue.js | Sébastien Chopin – Nuxt.js co-author |
| Moving from Angular (V5+) to Vue | Gerard Sans – Google Developer Expert |
| Vue development in CodeSandbox | Ives van Hoorne – Developer @Catawiki |
| Create an engaging native mobile app with Vue and NativeScript | Jen Looper – Developer Advocate @Progress |
| Serverless functions and Vue.js: Focus on Vue application development by deploying and operating serverless architectures | Sarah Drasner – Senior Developer Advocate @Microsoft & Vue.js Core Team Member |
Unit Testing Vue Components
Tools:
Native mobile app with Vue and NativeScript


| 1 | package fr.sii.ogham.spring.common; | |
| 2 | ||
| 3 | public class PrefixSuffixProperties { | |
| 4 | // @formatter:off | |
| 5 | /** | |
| 6 | * You can set the path prefix for resource resolution. The aim is to define | |
| 7 | * only the name of the resource (or a subset) and the system will find it | |
| 8 | * for you. It avoids to explicitly write the whole path and let you change | |
| 9 | * the resource resolution easily. | |
| 10 | * | |
| 11 | * For example, you have one template located into | |
| 12 | * "/foo/template/createAccount.html" and you have one template located into | |
| 13 | * "/foo/template/resetPassword.html". | |
| 14 | * | |
| 15 | * So you can set the prefix path to "/foo/template/". You can now reference | |
| 16 | * the templates using only the file name: "createAccount.html" and | |
| 17 | * "resetPassword.html". | |
| 18 | * | |
| 19 | * Path prefix can be set globally, by template engine, by sending system | |
| 20 | * and by resolver. | |
| 21 | * For FreeMarker template engine, the priority order for | |
| 22 | * email and template loaded from classpath is (from highest priority to lowest): | |
| 23 | * | |
| 24 | * - (1) `ogham.email.freemarker.classpath.path-prefix`, | |
| 25 | * - (2) `ogham.email.template.classpath.path-prefix`, | |
| 26 | * - (3) `ogham.email.freemarker.path-prefix`, | |
| 27 | * - (4) `ogham.email.template.path-prefix`, | |
| 28 | * - (5) `ogham.template.path-prefix`, | |
| 29 | * - (6) `spring.freemarker.prefix` | |
| 30 | * | |
| 31 | * For Thymeleaf template engine, the priority order for | |
| 32 | * email and template loaded from classpath is (from highest priority to lowest): | |
| 33 | * | |
| 34 | * - (1) `ogham.email.thymeleaf.classpath.path-prefix`, | |
| 35 | * - (2) `ogham.email.template.classpath.path-prefix`, | |
| 36 | * - (3) `ogham.email.thymeleaf.path-prefix`, | |
| 37 | * - (4) `ogham.email.template.path-prefix`, | |
| 38 | * - (5) `ogham.template.path-prefix`, | |
| 39 | * - (6) `spring.thymeleaf.prefix` | |
| 40 | */ | |
| 41 | // @formatter:on | |
| 42 | private String pathPrefix; | |
| 43 | ||
| 44 | // @formatter:off | |
| 45 | /** | |
| 46 | * You can set the path suffix for resource resolution. The aim is to define | |
| 47 | * only the name of the resource (or a subset) and the system will find it | |
| 48 | * for you. It avoids to explicitly write the whole path and let you change | |
| 49 | * the resource resolution easily. | |
| 50 | * | |
| 51 | * For example, you have one template located into "createAccount.html" and | |
| 52 | * you have one template located into "resetPassword.html". | |
| 53 | * | |
| 54 | * So you can set the suffix path to ".html". You can now reference the | |
| 55 | * templates using the file name: "createAccount" and "resetPassword". | |
| 56 | * | |
| 57 | * Path suffix can be set globally, by template engine, by sending system | |
| 58 | * and by resolver. | |
| 59 | * For FreeMarker template engine, the priority order for | |
| 60 | * email and template loaded from classpath is (from highest priority to lowest): | |
| 61 | * | |
| 62 | * (1) `ogham.email.freemarker.classpath.path-suffix`, | |
| 63 | * (2) `ogham.email.template.classpath.path-suffix`, | |
| 64 | * (3) `ogham.email.freemarker.path-suffix`, | |
| 65 | * (4) `ogham.email.template.path-suffix`, | |
| 66 | * (5) `ogham.template.path-suffix`, | |
| 67 | * (6) `spring.freemarker.suffix` | |
| 68 | * | |
| 69 | * For Thymeleaf template engine, the priority order for | |
| 70 | * email and template loaded from classpath is (from highest priority to lowest): | |
| 71 | * | |
| 72 | * (1) `ogham.email.thymeleaf.classpath.path-prefix`, | |
| 73 | * (2) `ogham.email.template.classpath.path-prefix`, | |
| 74 | * (3) `ogham.email.thymeleaf.path-prefix`, | |
| 75 | * (4) `ogham.email.template.path-prefix`, | |
| 76 | * (5) `ogham.template.path-prefix`, | |
| 77 | * (6) `spring.thymeleaf.prefix` | |
| 78 | */ | |
| 79 | // @formatter:on | |
| 80 | private String pathSuffix; | |
| 81 | ||
| 82 | public String getPathPrefix() { | |
| 83 |
3
1. getPathPrefix : All method body replaced by: return "" → SURVIVED 2. getPathPrefix : All method body replaced by: return "A" → SURVIVED 3. getPathPrefix : All methods instructions replaced by: return null; → SURVIVED |
return pathPrefix; |
| 84 | } | |
| 85 | ||
| 86 | public void setPathPrefix(String pathPrefix) { | |
| 87 |
1
1. setPathPrefix : All method instructions removed → NO_COVERAGE |
this.pathPrefix = pathPrefix; |
| 88 | } | |
| 89 | ||
| 90 | public String getPathSuffix() { | |
| 91 |
3
1. getPathSuffix : All method body replaced by: return "" → SURVIVED 2. getPathSuffix : All method body replaced by: return "A" → SURVIVED 3. getPathSuffix : All methods instructions replaced by: return null; → SURVIVED |
return pathSuffix; |
| 92 | } | |
| 93 | ||
| 94 | public void setPathSuffix(String pathSuffix) { | |
| 95 |
1
1. setPathSuffix : All method instructions removed → NO_COVERAGE |
this.pathSuffix = pathSuffix; |
| 96 | } | |
| 97 | ||
| 98 | } | |
Mutations | ||
| 83 |
1.1 2.2 3.3 |
|
| 87 |
1.1 |
|
| 91 |
1.1 2.2 3.3 |
|
| 95 |
1.1 |


HTML Tags
Any document starts with a heading. You can use different sizes for your headings. HTML also has six levels of headings, which use the elements h1 h2 h3 h4 h5 and h6. While displaying any heading, browser adds one line before and one line after that heading.


Our sponsors this month:
SOLAR & ROOFING MADE SIMPLE
Come early! drinks and pizza being served starting 6PM, and presentations start at 7PM.


From: SUSAN TIJANI Attn: President/ Director Dear, I am SUSAN TIJANI the only daughter of late former Director of finance, Chief Vincent R. TIJANI of Sierra-Leone diamond and mining corporation. I must confess my agitation is real, and my words is my bond,in this proposal. My late father diverted this money meant for purchase of ammunition, for my country,during the peak of disastrous civil war in my country, now he I am residing under political Assylum with my younger brother LAWRENCE TIJANI who is 18 years old,Now the war in my country is over with the help of ECOMOG soldiers, the present government of Sierra Leone has revoked the passport of all officers who served under the former regime and now ask countries to expel such person at the same time freeze their account and confiscate their asset, it is on this note that I am contacting you, all I needed from you is to furnish me with your bank particulars: 1) Account name 2) Account number 3) Bank address, telephone and fax number 4) your private telephone /fax numbers For you to assist me transfer this money in your private bank account, the said amount is Eleven Million Dollars (US$<IP_ADDRESS> Million).I am compensating you with 20 % of the total money amount, now all my hope is banked on you and I really wants to invest this money in your country, were their is stability of Government, political and economic welfare.Honestly I want you to believe that this transaction is real and never a joke. My late father Chief Vincent gave me the deposit slip issued to him by the BANK on the date of deposit, for you to be clarify because, I do not expose my self to anybody I see, I believe that you are able to keep this transaction secret for me because this money is the hope of my life, it is important. Please write me immediately after you must have gone through my message fill free and make it urgent. That is the reason why I offered you 20 % of the total money amount, and in case of any other necessary expenses you might incure, I am resolving to give you an addition of 5% during this transaction. N.B Try and negotiate for me some profitable blue chip investment opportunities which is risky free which I can invest with this money when it is transferred to your account, personally I am interested in estate management and hotel business, please advise me. And promise me and my younger brother to be our guardian considering our situation and not to betray us. And my late father used me the only daughter as the beneficiary / next of kin on the day of deposit and also told me I need an assistance of a foreigner with a egitimate bank Account abroad who will stand as co-beneficiary and partner abroad to ensure a successful hitch free transfer of the fund abroad. Thanks and God bless. Yours truly, SUSAN TIJANI ________________________________________ Metti il faccione di Shrek sul tuo cellulare! http://www.specialeshrek.canale5.com


You have 9 notifications.
Database Repair
70%
Upgrade Progress
10%
750GB of 1,000GB Used
{$admin_username}


KRZYSZTOF KIESLOWSKI: I'M SO-SO A film review by James Berardinelli Copyright 1997 James Berardinelli
RATING (0 TO 10): 8.0 Alternative Scale: ***1/2 out of ****
Denmark/Poland, 1995 Running Length: 0:56 MPAA Classification: No MPAA Rating (Nothing offensive) Theatrical Aspect Ratio: 1.85:1 Shown at the Philadelphia Festival of World Cinema, 5/1/97, 5/6/97, &=20 5/11/97
Cast: Krzysztof Kieslowski Director: Krzysztof Wierzbicki Producer: Karen Hjort Cinematography: Jacek Petrycki Music: Zbigniew Preisner In Polish with subtitles
On March 13, 1996, the self-effacing Polish film maker, Krzysztof=20 Kieslowski, died of heart failure in a Warsaw hospital. The film world=20 mourned, especially when it was revealed that Kieslowski, who had been=20 retired since the completion of RED in 1994, was contemplating a return=20 to work with a new trilogy of films about heaven, hell, and limbo. What=20 we are left with in the wake of the director's passing, however is an=20 extraordinary r=E9sum=E9 that includes such memorable features as CAMERA=20 BUFF, DECALOGUE, THE DOUBLE LIFE OF VERONIQUE, and the THREE COLORS=20 trilogy (BLUE, WHITE, RED). Less than a year before his death,=20 Kieslowski agreed to be the subject of a short documentary by his long- time assistant, Krzysztof Wierzbicki. The hour long film, which was=20 made for Danish television, featured Kieslowski's recollections of his=20 life and movies, along with several candid shots of the director=20 relaxing and enjoying his retirement. What was initially intended as a=20 fairly inconsequential interview unwittingly turned into a remarkable=20 tribute. =20
Does I'M SO-SO offer any new insights into the director's psyche? =20 It does, even for those who have poured over his autobiography,=20 KIESLOWSKI ON KIESLOWSKI. During the course of one hour, there's hardly=20 any topic that goes untouched by Kieslowski, which speaks highly not=20 only of the subject of the film, but of the interviewer, Wierzbicki. =20 Kieslowski has always shunned the spotlight (preferring to "sit in a=20 dark room and smoke"), so it's a credit to this film's director that he=20 was able to present such a candid and moving portrait.
Kieslowski confesses that because he knows Wierzbicki (as well=20 several other men in the crew), "We can discuss=85 meaningful and personal= =20 topics." He goes on to talk about, in some detail, his philosophy of=20 documentary film making. After saying that he made documentaries --=20 movies about "people who lead real lives" -- to describe the world that=20 we live in, Kieslowski goes on to reveal a series of stringent=20 guidelines that he followed. For example, he believes that everyone is=20 entitled to their privacy and certain things should not be photographed=20 for the screen. "Can you film a real death and use it as a=20 documentary?" he asks. It's meant to be a redundant question.=20
Admitting that he turned the camera on himself in every picture=20 that he made (like the protagonist in CAMERA BUFF at the movie's end),=20 Kieslowski never saw himself as anything more than a film director with=20 a bleak view of the world. "I have only one good characteristic. I'm a=20 pessimist=85 The future is a black hole." He also doesn't claim to have=20 the answers to the questions posed by his films, saying that "Knowing is=20 not my business, not knowing is." And he indicates that he believes all=20 interpretations of his films to be valid, stating that he made movies so=20 that everyone could take something different from them.
I'M SO-SO presents a broad overview of Kieslowski's career, zeroing=20 in on a few select films for more in-depth discussion. These are: =20 1980's TALKING HEADS ("an experiment"), 1976's THE CALM, 1979's CAMERA=20 BUFF ("the film shows the camera's power"), 1981's BLIND CHANCE, 1988's=20 DECALOGUE ("we wanted to brush up those 10 well-written sentences"), and=20 1994's RED. At one point, Kieslowski also reveals that he once met an=20 Italian man who had experienced something very similar to the story=20 presented in THE DOUBLE LIFE OF VERONIQUE.
The title comes from Kieslowski's belief that people should not lie=20 about how they're feeling just for the sake of polite conversation. As=20 a result, when someone asks him how he's doing, instead of replying=20 "Well" or "Very well", he says "I'm so-so." In truth, however, there's=20 nothing "so-so" about this particular motion picture. KRZYSZTOF=20 KIESLOWSKI: I'M SO-SO is a striking picture of an extraordinary man who=20 made some of the most powerful films of the last two decades. This=20 movie will live alongside the director's body of work as an important=20 and informative companion piece.
- James Berardinelli e-mail<EMAIL_ADDRESS>ReelViews web site: http://www.cybernex.net/~berardin
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


Web Conferencing at The Working Centre
Hi! You have reached The Working Centre's web conferencing installation.
If you are trying to join a meeting, you need a link and probably a passcode. Get that from the meeting organizer.
If you work at the Working Centre and want to use this to organize web meetings of your own, contact the IT Department.
If you are a snoopy snoop who is snooping around, stop! Go watch the training videos below instead.


loading /scripts/script.js
loading /scripts/module-with-default.js
loading /scripts/module-with-named.js


Now the Background image is only shown once, andit is alos positioned away from the text
In this example we have also added a margin on the right side, so that the background image will not disturb the text


Stray Kids transport to another dimension in dynamic MV for 'Levanter'
by danisurstStray Kids is back with a new single!
On December 9 KST, the JYP Entertainment boy group revealed the music video for their new single "Levanter," the title track off their new album 'Clé: LEVANTER,' the latest in 'Clé' album series.
"Levanter" has a lyrical melody and lyrics that involve the theme of seeking your dream. The song was written and composed by group members 3RACHA, with the production handled by J.Y. Park and Herz Analog.
Meanwhile, the group's new album also features previously released singles "Double Knot" and "Astronaut."
Check out the music video for "Levanter" above!