--- /dev/null
+
+# Coding Convention
+
+NNStreamer Application follows [The Coding Style of GStreamer](https://gstreamer.freedesktop.org/documentation/frequently-asked-questions/developing.html#what-is-the-coding-style-for-gstreamer-code) for coding convention.
+
+
+Basically, the core and almost all plugin modules use K&R with 2-space indenting. Just follow what's already there and you'll be fine. We only require code files to be indented, header may be indented manually for better readability. Please use spaces for indenting, not tabs, even in header files.
+
+When you push your commits, ALWAYS run `gst-indent` to submit a commit with style change.
+If there is a change due to code style issues, make two separate commits: (Please do not include other codes' style change in the same commit)
+- commit with style change only (i.e., commit gst-indent-formatted original code - not your code change)
+- commit with your code change only (i.e., contents only).
+
+```bash
+$ ./common/gst-indent <file-name>
+```
--- /dev/null
+# How to Contribute
+
+## Coding Convention
+Consistent code conventions are important for several reasons:
+* *Most importantly:* To make it easy to read and understand the code. Remember: you may be the only one writing the code initially, but many people will need to read, understand, modify, and fix the code over its lifetime. These conventions attempt to make this task much easier. If the code consistently follows these standards, it improves developer understanding across the entire source base.
+* To make it easy to debug the code, with both a system call tracer and GNU debuggers. It should be easy to set breakpoints, view locals, and display and view data structures.
+* To attempt to improve code quality through consistency, and requiring patterns that are less likely to result in bugs either initially, or after code modification.
+
+## Code Reviews and PRs
+
+Please review incoming PRs; regardless whether you are a maintainer, a designated reviewer, or just a passer-by.
+
+If you are a maintainer or reviewer of the specific component, you are obligated to review incoming related PRs within some reasonable time frame.
+However, even if you are not a reviewer (designated by committer or maintainers) or maintainer, as long as you are in this project, you need to give feedback on PRs especially if you are working on similar topics/components.
+
+The submitter has the first responsibility of keeping the created PR clean and neat (rebase whenever there are merge conflicts), following up the feedback, testing when needed.
+
+### Any commits are required to be reviewed and approved before merged.
+
+## Signing off commits
+
+Each commit is required to be signed-off by the corresponding author.
+With properly configured development environment, you can add sign-off for a commit with ```-s``` option: e.g., ```git commit -s```.
+[Here is some stories on sign-off](https://stackoverflow.com/questions/1962094/what-is-the-sign-off-feature-in-git-for)
+
+- How to give the developers zero cost:
+```bash
+$ vi ~/.gitconfig
+ [user]
+ name = Gildong Hong
+ email = gildong.hong@samsung.com
+$ git commit -s <file-name>
+// -s (--signoff) means automated signed-off-by statement
+```
+
+### What does it mean to sign off commits for authors?
+
+It means that you are legally responsible for the given commit that, according to your best knowledge,
+- It is the original work of the author (no plagiarism or copy-pasting from external work)
+- It does not have any patents, license, or copyright issues.
+- You are granting all related rights to the community or project (depending on the licenses)
+
+Usually, you are not allowed to push commits of other's work; however, you may do so if you
+- Maintain the original authorship in the git commit (you can edit authors of a given commit: ```$ man git commit```)
+- You can sure there is no patents, licenses, or copyright issues.
+- You can grant all related rights to the community or project (depending on the licenses)
+
+From Torvalds' (original author of Linux and git) git repo, (documentation about git commit message tags)[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/5.Posting.rst]
+> Signed-off-by: this is a developer's certification that he or she has
+ the right to submit the patch for inclusion into the kernel. It is an
+ agreement to the Developer's Certificate of Origin, the full text of
+ which can be found in Documentation/process/submitting-patches.rst. Code without a
+ proper signoff cannot be merged into the mainline.
+
+## How to contribute to GStreamer community
+* https://gstreamer.freedesktop.org/documentation/contribute/index.html
--- /dev/null
+#!/usr/bin/env bash
+
+#
+# Steps:
+#
+# 1. Download corresponding html file for some README.md:
+# curl -s $1
+#
+# 2. Discard rows where no substring 'user-content-' (github's markup):
+# awk '/user-content-/ { ...
+#
+# 3.1 Get last number in each row like ' ... </span></a>sitemap.js</h1'.
+# It's a level of the current header:
+# substr($0, length($0), 1)
+#
+# 3.2 Get level from 3.1 and insert corresponding number of spaces before '*':
+# sprintf("%*s", substr($0, length($0), 1)*3, " ")
+#
+# 4. Find head's text and insert it inside "* [ ... ]":
+# substr($0, match($0, /a>.*<\/h/)+2, RLENGTH-5)
+#
+# 5. Find anchor and insert it inside "(...)":
+# substr($0, match($0, "href=\"[^\"]+?\" ")+6, RLENGTH-8)
+#
+
+gh_toc_version="0.4.8"
+
+gh_user_agent="gh-md-toc v$gh_toc_version"
+
+#
+# Download rendered into html README.md by its url.
+#
+#
+gh_toc_load() {
+ local gh_url=$1
+
+ if type curl &>/dev/null; then
+ curl --user-agent "$gh_user_agent" -s "$gh_url"
+ elif type wget &>/dev/null; then
+ wget --user-agent="$gh_user_agent" -qO- "$gh_url"
+ else
+ echo "Please, install 'curl' or 'wget' and try again."
+ exit 1
+ fi
+}
+
+#
+# Converts local md file into html by GitHub
+#
+# ➥ curl -X POST --data '{"text": "Hello world github/linguist#1 **cool**, and #1!"}' https://api.github.com/markdown
+# <p>Hello world github/linguist#1 <strong>cool</strong>, and #1!</p>'"
+gh_toc_md2html() {
+ local gh_file_md=$1
+ URL=https://api.github.com/markdown/raw
+ TOKEN="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/token.txt"
+ if [ -f "$TOKEN" ]; then
+ URL="$URL?access_token=$(cat $TOKEN)"
+ fi
+ curl -s --user-agent "$gh_user_agent" \
+ --data-binary @"$gh_file_md" -H "Content-Type:text/plain" \
+ $URL
+}
+
+#
+# Is passed string url
+#
+gh_is_url() {
+ case $1 in
+ https* | http*)
+ echo "yes";;
+ *)
+ echo "no";;
+ esac
+}
+
+#
+# TOC generator
+#
+gh_toc(){
+ local gh_src=$1
+ local gh_src_copy=$1
+ local gh_ttl_docs=$2
+
+ if [ "$gh_src" = "" ]; then
+ echo "Please, enter URL or local path for a README.md"
+ exit 1
+ fi
+
+
+ # Show "TOC" string only if working with one document
+ if [ "$gh_ttl_docs" = "1" ]; then
+
+ echo "Table of Contents"
+ echo "================="
+ echo ""
+ gh_src_copy=""
+
+ fi
+
+ if [ "$(gh_is_url "$gh_src")" == "yes" ]; then
+ gh_toc_load "$gh_src" | gh_toc_grab "$gh_src_copy"
+ else
+ gh_toc_md2html "$gh_src" | gh_toc_grab "$gh_src_copy"
+ fi
+}
+
+#
+# Grabber of the TOC from rendered html
+#
+# $1 — a source url of document.
+# It's need if TOC is generated for multiple documents.
+#
+gh_toc_grab() {
+ # if closed <h[1-6]> is on the new line, then move it on the prev line
+ # for example:
+ # was: The command <code>foo1</code>
+ # </h1>
+ # became: The command <code>foo1</code></h1>
+ sed -e ':a' -e 'N' -e '$!ba' -e 's/\n<\/h/<\/h/g' |
+ # find strings that corresponds to template
+ grep -E -o '<a\s*id="user-content-[^"]*".*</h[1-6]' |
+ # remove code tags
+ sed 's/<code>//' | sed 's/<\/code>//' |
+ # now all rows are like:
+ # <a id="user-content-..." href="..."><span ...></span></a> ... </h1
+ # format result line
+ # * $0 — whole string
+ echo -e "$(awk -v "gh_url=$1" '{
+ print sprintf("%*s", substr($0, length($0), 1)*3, " ") "* [" substr($0, match($0, /a>.*<\/h/)+2, RLENGTH-5)"](" gh_url substr($0, match($0, "href=\"[^\"]+?\" ")+6, RLENGTH-8) ")"}' | sed 'y/+/ /; s/%/\\x/g')"
+}
+
+#
+# Returns filename only from full path or url
+#
+gh_toc_get_filename() {
+ echo "${1##*/}"
+}
+
+#
+# Options hendlers
+#
+gh_toc_app() {
+ local app_name="gh-md-toc"
+
+ if [ "$1" = '--help' ] || [ $# -eq 0 ] ; then
+ echo "GitHub TOC generator ($app_name): $gh_toc_version"
+ echo ""
+ echo "Usage:"
+ echo " $app_name src [src] Create TOC for a README file (url or local path)"
+ echo " $app_name - Create TOC for markdown from STDIN"
+ echo " $app_name --help Show help"
+ echo " $app_name --version Show version"
+ return
+ fi
+
+ if [ "$1" = '--version' ]; then
+ echo "$gh_toc_version"
+ return
+ fi
+
+ if [ "$1" = "-" ]; then
+ if [ -z "$TMPDIR" ]; then
+ TMPDIR="/tmp"
+ elif [ -n "$TMPDIR" -a ! -d "$TMPDIR" ]; then
+ mkdir -p "$TMPDIR"
+ fi
+ local gh_tmp_md
+ gh_tmp_md=$(mktemp $TMPDIR/tmp.XXXXXX)
+ while read input; do
+ echo "$input" >> "$gh_tmp_md"
+ done
+ gh_toc_md2html "$gh_tmp_md" | gh_toc_grab ""
+ return
+ fi
+
+ for md in "$@"
+ do
+ echo ""
+ gh_toc "$md" "$#"
+ done
+
+ echo ""
+ echo "Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc)"
+}
+
+#
+# Entry point
+#
+gh_toc_app "$@"
--- /dev/null
+
+# How to archive large files with git-lfs
+In order to archive a big data such as map, training, network model, and image data,
+We recommend that you use `git-lfs`command as a official process.
+Note that github does not support uploading big files more than +100MB by default.
+You do not need to operate your own development server to archive big files thanks to `git-lfs` facility.
+You can upload +100MB data files to github.sec.samsung.net with `git-lfs` package.
+
+Git Large File Storage (LFS) replaces large files such as audio samples, videos, datasets, and graphics
+with text pointers inside Git, while storing the file contents on a remote server like GitHub.com
+or GitHub Enterprise. Note that Git LFS requires Git v1.8.5 or higher.
+
+# Install git-lfs package
+Packagecloud (https://packagecloud.io) hosts `git-lfs` packages with apt/deb for popular Linux distribution such as Ubuntu.
+```bash
+$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
+$ sudo apt install git-lfs
+```
+If you are using another Linux distribution such as Fedora, Please refer to the below webpage.
+* Installing git-lfs: https://github.com/git-lfs/git-lfs/blob/v2.4.0/INSTALLING.md#installing-on-linux-using-packagecloud
+
+# Case study: TF-Vision_EvaluationSet Repository
+Note that default branch must be `tizen` instead of `master` in case of TAOS. We assume that you have to upload LibreOffice Installer
+(251MB) in a github repository.
+
+Clone the github repository with upstream and origin.
+```bash
+$ mkdir TF-Vision_EvaluationSet
+$ cd TF-Vision_EvaluationSet
+$ git remote add upstream https://github.sec.samsung.net/RS7-AutoDriving/TF-Vision_EvaluationSet.git
+$ git remote add origin https://github.sec.samsung.net/<your_github_id>/TF-Vision_EvaluationSet.git
+$ git fetch upstream
+$ git pull upstream tizen
+```
+
+You need to setup the global Git hooks for Git LFS.
+```bash
+$ git lfs install
+$ wget http://mirrors.adams.edu/LibreOffice/win/LibreOffice_6.0.4_Win_x86.msi
+```
+
+Add all *.msi files through Git LFS.
+```bash
+$ git lfs track "*.msi"
+```
+
+Now you are ready to push some commits
+```bash
+$ git add LibreOffice_6.0.4_Win_x86.msi
+$ git commit -m "add msi file"
+```
+
+You can confirm that Git LFS is managing your *.msi file.
+```bash
+$ git lfs ls-files
+# Push your files to the Git remote
+$ git push origin <your-branch-name>
+```
+
+# How to remove large file from commit history
+
+* Method 1:
+```bash
+$ firefox https://rtyley.github.io/bfg-repo-cleaner/
+$ java -jar bfg-x.x.x.jar --strip-blobs-bigger-than 100M
+$ git repack && git gc
+```
+
+* Method 2:
+```bash
+$ git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.data' -- --all
+$ rm -Rf .git/refs/original
+$ rm -Rf .git/logs/
+$ git gc --aggressive --prune=now
+$ git count-objects -v
+```
+
+# Reference
+* Getting Started: https://github.com/git-lfs/git-lfs/tree/v2.4.0#getting-started
+* Git extension for versioning large files: https://git-lfs.github.com