Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • R3/school/courses
  • vilem.ded/courses
  • todor.kondic/courses
  • noua.toukourou/courses
  • nene.barry/courses
  • laurent.heirendt/courses
  • marina.popleteeva/courses
  • jenny.tran/courses
8 results
Show changes
Commits on Source (254)
Showing
with 417 additions and 21 deletions
...@@ -10,9 +10,9 @@ rm -rf $rootDir/public ...@@ -10,9 +10,9 @@ rm -rf $rootDir/public
rm -rf $rootDir/theme rm -rf $rootDir/theme
mkdir $rootDir/public mkdir $rootDir/public
if [[ $CI_COMMIT_BRANCH == "develop" ]]; then if [[ $CI_COMMIT_REF_NAME == "develop" ]]; then
version="latest"; version="latest";
elif [[ $CI_COMMIT_BRANCH == "master" ]]; then elif [[ $CI_COMMIT_REF_NAME == "master" ]]; then
version="stable"; version="stable";
else else
version="unstable"; version="unstable";
...@@ -33,7 +33,7 @@ nBlades=0 ...@@ -33,7 +33,7 @@ nBlades=0
for d in $(find . -maxdepth 1 -type d) for d in $(find . -maxdepth 1 -type d)
do do
if [[ "${d}" == *20* ]]; then if [[ "${d}" == *20* ]]; then
cd "${d}" pushd "${d}"
echo "changed to ${d}" echo "changed to ${d}"
for d1 in $(find . -maxdepth 1 -type d) for d1 in $(find . -maxdepth 1 -type d)
do do
...@@ -46,20 +46,23 @@ do ...@@ -46,20 +46,23 @@ do
# create the required folders in public # create the required folders in public
mkdir -p $rootDir/public/$BLADE/$version mkdir -p $rootDir/public/$BLADE/$version
# change to the blade directory to be built echo "going to $BLADE..."
cd $BLADE pushd $BLADE
# run contribute # run contribute
cp ../../template/Gruntfile.coffee . cp -v ../../template/Gruntfile.coffee .
ln -s ../../theme/package.json package.json ln -sv ../../theme/package.json package.json
ln -s ../../theme theme ln -sv ../../theme theme
# install npm # install npm
yarn global add grunt-cli generator-reveal echo "installing deps"
yarn add grunt-cli generator-reveal grunt
yarn install yarn install
grunt dist echo "running dist"
mv public/* $rootDir/public/$BLADE/$version/. yarn exec grunt dist
echo "copying to common public dir"
cp -rLv public/* $rootDir/public/$BLADE/$version/.
echo " > latest built for file set ${BLADE}" echo " > latest built for file set ${BLADE}"
...@@ -75,10 +78,10 @@ do ...@@ -75,10 +78,10 @@ do
echo "autoredirect file set" echo "autoredirect file set"
# move back out # move back out
cd .. popd
echo " > -----------------------------------------------------" echo " > -----------------------------------------------------"
fi fi
done done
cd "${rootDir}" popd
fi fi
done done
...@@ -19,7 +19,7 @@ localroot = os.getcwd() ...@@ -19,7 +19,7 @@ localroot = os.getcwd()
# generate the index properly speaking # generate the index properly speaking
cardDirs = ["2021", "2020", "2019"] cardDirs = ["2023", "2022", "2021", "2020", "2019"]
index='' index=''
# determine first the directories # determine first the directories
...@@ -68,4 +68,4 @@ with open(indexFile, 'w') as file: ...@@ -68,4 +68,4 @@ with open(indexFile, 'w') as file:
file.write(filedata) file.write(filedata)
print("\n > New index generated and saved in " + indexFile) print("\n > New index generated and saved in " + indexFile)
os.chdir("..") os.chdir("..")
\ No newline at end of file
*.ai
site/ site/
courses.lcsb.uni.lu courses.lcsb.uni.lu
index.html index.html
...@@ -22,3 +23,4 @@ package.json ...@@ -22,3 +23,4 @@ package.json
./theme/package.json ./theme/package.json
__pycache__/ __pycache__/
contribute.egg-info/ contribute.egg-info/
.*.swp
...@@ -56,7 +56,7 @@ build:website: ...@@ -56,7 +56,7 @@ build:website:
JEKYLL_ENV: production JEKYLL_ENV: production
build:courses: build:courses:
image: git-r3lab.uni.lu:4567/r3/docker/nodejs-yarn-grunt image: node:19-bullseye
stage: build stage: build
rules: rules:
- if: $CI_COMMIT_BRANCH == "develop" - if: $CI_COMMIT_BRANCH == "develop"
...@@ -72,6 +72,7 @@ upload: ...@@ -72,6 +72,7 @@ upload:
stage: deploy stage: deploy
image: alpine image: alpine
before_script: before_script:
- apk add rsync
- 'which ssh-agent || ( apk add --update openssh )' - 'which ssh-agent || ( apk add --update openssh )'
- eval $(ssh-agent -s) - eval $(ssh-agent -s)
- echo "$B64SSHPRIVKEY" | base64 -d | tr -d '\r' | ssh-add - > /dev/null - echo "$B64SSHPRIVKEY" | base64 -d | tr -d '\r' | ssh-add - > /dev/null
...@@ -83,5 +84,5 @@ upload: ...@@ -83,5 +84,5 @@ upload:
- if: $CI_COMMIT_BRANCH == "develop" - if: $CI_COMMIT_BRANCH == "develop"
- if: $CI_COMMIT_BRANCH == "master" - if: $CI_COMMIT_BRANCH == "master"
script: script:
- scp -P $SSHPORT -r site/* $SSHCONNECT:~/web/latest - rsync -ravu --info=progress2 -e "ssh -p $SSHPORT" site/* $SSHCONNECT:~/web/latest
- scp -P $SSHPORT -r public/* $SSHCONNECT:~/web/latest - rsync -ravu --info=progress2 -e "ssh -p $SSHPORT" public/* $SSHCONNECT:~/web/latest
[submodule "theme"] [submodule "theme"]
path = theme path = theme
url = https://git-r3lab.uni.lu/R3/outreach/theme.git url = https://gitlab.lcsb.uni.lu/R3/outreach/theme.git
# Best practices # Best practices
* `pull` before `push` * `pull` before `push` and, generally, before starting to work
* Work on your <font color="red">own</font> branch (in your own fork), and **not** on `master` and **not** on `develop` * Work on your <font color="red">own</font> branch (in your own fork), and **not** on `master` and **not** on `develop`
* Do **not push** to `master`, but **submit a Pull Request (PR)** * Do **not push** to `master`, but **submit a Pull Request (PR)**
* Get your code **reviewed** by your peers (submit a PR!) * Get your code **reviewed** by your peers (submit a PR!)
......
...@@ -74,7 +74,11 @@ $ git status ...@@ -74,7 +74,11 @@ $ git status
```bash ```bash
$ git diff $ git diff
``` ```
exit with `q` exit with `q`.
<br>
![bulb](slides/img/bulb.png) If it is a long diff, you can display additional lines with space.
......
# Code versioning
<div style="position:absolute; width:40%">
**git**
* Current standard for code versioning
* Maintain versions of your code as it develops
* Local system, which does not require an online repository
* Repositories allow distributed development
<img align="middle" height="300px" src="slides/img/Git-logo.png">
</div>
<div class="fragment" style="position:absolute; left:50%; width:40%"">
**git@lcsb**
* Recommended, supported repository
* Allows tracking of issues
* Ready for continous integration - code checked on commits to the repository.
* [https://git-r3lab.uni.lu](https://git-r3lab.uni.lu)
**Use at LCSB**
* All analyses code should be in a repository
* Minimally at submission of a manuscript
* Better daily
* Even better "analyses chunkwise"
</div>
<div style="position:absolute; width:45%; left:50%; top:28em; text-align:right">
<a href="https://howto.lcsb.uni.lu/?policies:LCSB-POL-BIC-07" style="color:grey; font-size:0.8em;">LCSB-POL-BIC-07 Source Code Management Policy</a>
</div>
# Data housekeeping
## File names
<div style="display:flex; position:static; width:100%">
<div class="fragment" data-fragment-index="0" style="position:static; width:30%">
### General pricinples
* Machine readable
* Human readable
* Plays well with default ordering
</div>
<div class="fragment" data-fragment-index="1" style="position:absolute; left:33%; width:30%">
### Separators
* No spaces
* Underscore to separate
* Hyphen to combine
</div>
<div class="fragment" data-fragment-index="2" style="position:absolute; left:66%; width:30%">
### Date format follows **ISO 8601**<br>
2018-12-03<br>
2018-12-06_1700
</div>
</div>
<div class="fragment" data-fragment-index="3" style="width:100%; position:static">
<div style="position:absolute;width:55%">
<b>Bad</b> names
```bash
PhD-project-Jan19 alldata_final.foo
Finacial detailes BIocore 19/11/12.xls
ATACseq1Londonmapped.bam
Hlad.jez.M-L-průtoky JíObj.z Ohře-od 10-2011.xlsx
```
</div>
<div style="position:relative;width:55%; bottom:20%; left:50%">
<b>Good</b> names
```bash
Iris-setosa_samples_1927-05-12.csv
PI102_Mouse12_EEG_2018-11-03_1245.tsv
Bioinfiniti_FullProposal_2018-11-15_1655.do
```
</div>
</div>
<br>
<br>
<div class="fragment" data-fragment-index="3" style="width:100%;">
From Jenny Bryan by CC-BY
(https://speakerdeck.com/jennybc/how-to-name-files)
</div>
# Data housekeeping
## File organization
* Have folder organization conventions for your **group**
* Per Paper
* Per Study/Project
* Per Collaborator
* Keep <b>readme files</b> for data
* Title
* Date of Creation/Receipt
* Instrument or software specific information
* People involved
* Relations between multiple files/folders
* Separate files you are actively working from the old ones
* Orient newcomers to the group's conventions
# Data housekeeping
<div style="position:absolute">
## When working
* Clarify and separate source and intermediate data
* Keep data copies to a **minimum**
* Cleanup post-analysis
* Cleanup copies created for presentations or for sharing
</div>
<div style="position:relative;left:50%; width:40%">
<img src="slides/img/cleaning-table.jpg" height="450px">
</div>
# Data housekeeping
## End of project
* handover data to a new responsible when leaving
* data should be kept as a single copy on server-side storage
* no copies on desktops and external devices
* non-proprietary formats
* minimal metadata
* sensitive data (e.g. whole genome) **must** be encrypted
<br/>
<br/>
* If not specified otherwise, data must be kept for **10 years** following project end for reproducibility purposes
<aside class="notes">
Note: sometimes it is hard to find/understand dataset 10 days old
</aside>
## In doubt on data archival?
Contact R<sup>3</sup> for support on archival of datasets using tickets:
* https://service.uni.lu/sp
* Home > Catalog > LCSB > Biocore: Application services > Request for: Support
<div style="position:absolute; width:45%; left:50%; top:28em; text-align:right">
<a href=" https://howto.lcsb.uni.lu/?policies:LCSB-POL-BIC-03" style="color:grey; font-size:0.8em;">Research Data Retention and Archival Policy</a>
</div>
# Data housekeeping - Summary
## Server is your friend!
* Allows a consistent backup policy for your datasets
* Keeps number of copies to minimum
* Specification of clear access rights
* High accessibility
* Data are discoverable
* Server can't be stolen
## General guidelines
* Use institutional media for storage of **all** data
* Research data (particularly sensitive data) should be in a single source location
* Enable encryption for data stored on movable media
* Clarify and separate source and intermediate data
* Disable write access to relevant source data (read-only)
* Backup research data!
* Download Anti-virus software
* Generate checksums
# Data and metadata
<div style="display:grid;grid-gap:100px;grid-template-columns: 40% 40%">
<div >
## Data
* "*information in digital form that can be transmitted or processed*"
<p align="right">-- Merriam-Webster dictionary</p>
* "*information in an electronic form that can be stored and processed by a computer*"
<p align="right">--Cambridge dictionary</p>
</div>
<div>
## Metadata
* data describing other data
* information that is given to describe or help you use other information
* metadata are data
* can be processed and analyzed
</div>
</div>
<div class="fragment">
## Metadata examples:
<div style="position:absolute">
<ul>
<li> LabBook </li>
<li> author/owner of the data</li>
<li> origin of the data
<li> data type
</ul>
</div>
<div style="position:absolute;left:25%">
<ul>
<li> description of content </li>
<li> modification date </li>
<li> description of modification </li>
<li> location </li>
</ul>
</div>
<div style="position:relative;left:50%;top:0.7em">
<ul>
<li> calibration readings</li>
<li> software/firmware version</li>
<li> data purpose</li>
<li> means of creation</li>
</ul>
</div>
</div>
<div class="fragment">
<br>
</center>
<center style="color:red">!Insufficient metadata make the data useless!</center>
</div>
<aside class="notes">
Sometimes metadata collection takes more time than data collection
</aside>
# LCSB research data
three categories:
* **Primary data**
* scientific data
* measurements, images, observations, notes, surveys, ...
* models, software codes, libraries, ...
* metadata directly describing the data
* data dictionaries
* format, version, coverage descriptions, ...
* **Research record**
* description of the research process, including experiment
* experiment set-up
* followed protocols
* ...
* **Project accompanying documentation**
* ethical approvals, information on the consent
* collaboration agreements
* intellectual property ownership
* other relevant documentation
<div style="position:absolute; width:45%; left:50%; top:28em; text-align:right;">
<a href="https://howto.lcsb.uni.lu/internal/policies/LCSB-POL-BIC-03/" style="color:grey; font-size:0.8em;">LCSB-POL-BIC-03 Research Data Retention and Archival Policy</a>
</div>
\ No newline at end of file
# Typical flow of data
<div style="display:grid;grid-gap:10px;grid-template-columns: 30% 20% 30%;
grid-auto-flow:column;grid-template-rows: repeat(4,auto);position:relative;left:8%">
<div class="content-box fragment" data-fragment-index="1">
<div class="box-title red">Source data</div>
<div class="content">
* Experimental results
* Large data sets
* Manually collected data
* External
</div>
</div>
<div class="content-box fragment" data-fragment-index="2">
<div class="box-title yellow">Intermediate</div>
<div class="content">
* Derived data
* Tidy data
* Curated sets
</div>
</div>
<div class="content-box fragment" data-fragment-index="3">
<div class="box-title blue">Analyses</div>
<div class="content">
* Exploratory
* Model building
* Hypothesis testing
</div>
</div>
<div class="content-box fragment" data-fragment-index="4">
<div class="box-title green">Dissemination</div>
<div class="content">
* Manuscript, report, presentation, ...
</div>
</div>
<center>
<img src="slides/img/data-flow_sources.png" height=60%>
</center>
<center>
<img src="slides/img/data-flow_transformation.png" height=60%>
</center>
<center>
<img src="slides/img/data-flow_chart.png" height=60%>
</center>
<center>
<img src="slides/img/data-flow_paper.png" height=60%>
</center>
<div class="content-box fragment" data-fragment-index="5">
<div class="box-title red">Preserve</div>
<div class="content">
* Version data sets
* Backup
* Protect
</div>
</div>
<div class="content-box fragment" data-fragment-index="6">
<div class="box-title yellow">Reproduce</div>
<div class="content">
* Automate your builds
* Use workflow tools (e.g. Snakemake)
</div>
</div>
<div class="content-box fragment" data-fragment-index="7">
<div class="box-title blue">Trace</div>
<div class="content">
* Multiple iterations.
* Code versioning (Git)
</div>
</div>
<div class="content-box fragment" data-fragment-index="8">
<div class="box-title green">Track</div>
<div class="content">
* Through multiple versions
</div>
</div>
</div>
<aside class="notes">
flow of the data is downstream (mostly), but you are going back and forth
applies to all data (financial report, lab safety assessment)
</aside>
# FAIR (meta)data principles
* dates back to 2014
* well accepted by scientific community
* necessity in data driven science
* officially embraced by EU and G20
* required by funding agencies and journal publishers
<center>
<img src="slides/img/fair-principles.png" height="400px">
</center>
<br>
<br>
# LCSB How-Tos
<br>
https://howto.lcsb.uni.lu/
<center>
<img src="slides/img/howtocard.png" width="50%">
</center>
../../../../2020/2020-06-09_IT101-DM/slides/img/3pillars-full.png
\ No newline at end of file
../../../../2020/2020-06-09_IT101-DM/slides/img/DinoSequentialSmaller.gif
\ No newline at end of file
../../../../2020/2020-06-09_IT101-DM/slides/img/Git-logo.png
\ No newline at end of file
../../../../2020/2020-06-09_IT101-DM/slides/img/LCSB_storages_backed-up.png
\ No newline at end of file
../../../../2020/2020-06-09_IT101-DM/slides/img/LCSB_storages_backup.png
\ No newline at end of file
../../../../2020/2020-06-09_IT101-DM/slides/img/LCSB_storages_full.png
\ No newline at end of file
../../../../2020/2020-06-09_IT101-DM/slides/img/LCSB_storages_personal-crossed.png
\ No newline at end of file