Skip to content
Robert Haschke edited this page Apr 28, 2020 · 1 revision

Project Management

Motivation

  • organize your work in a project
    • define tasks
    • define milestones
    • track bugs
  • documentation: wiki
    • specifications
    • development history
  • http://www.redmine.org

CITEC redmine

Configuring a project: Settings

  • Overview: describe your project to the world
  • Modules: choose redmine modules to be used
  • Members: project members and their roles
  • Versions: define target versions / milestones for your project issues can be associated to those milestones
  • Issue categories and associated assignees
  • Repositories: create git or subversion repo(s) hosted by redmine permissions are derived from project permissions
    • reporter can read
    • developer can read + write
    • manager can configure redmine
    • coordinate can create sub projects

Creating issues: New issue

  • Choose the type: bug, feature, meeting, task, to-do, etc.
  • Specify the Subject
  • Describe the issue
  • Choose Status, Priority, Assignee
  • Assign parent task
  • Define deadline and estimated workload

Project Managment

  • Activity: monitor project development history
  • Roadmap: list issues sorted by associated version / milestone
  • Issues: list issues in table view
  • Gantt: list issues in calender view, grouped by milestones
  • News: announce new, latest ones will show up on overview page
  • Wiki
  • Repository

Integrated Development Environment (IDE)

Requirements

code handling

  • syntax highlighting
  • code completion (context-sepcific)
  • code navigation
    • finding files
    • finding definitions
    • folding
  • version control

development

  • project config management
  • compiling from editor
    • navigation to errors
    • online syntax checking
  • integrated debugging
    • set + visualize breakpoints
    • evaluate expressions
  • code coverage analysis
  • profiling

Options

  • kate
  • qtcreator
  • Visual Studio code
  • geany
  • NetBeans
  • eclipse
  • emacs cedet+ecb
  • vim / gvim

Comparison

kate qtcreator geany emacs gvim
highlighting x x x x x
completion x (x) p p
file browser x x x p p
methods browser x x p p
folding x x x p p
refactoring x p
project mgmt x x p ?
version control x p p p
compilation x x x p
syntax check x p
debugging x p x p

Suggestions

Sanetizers

  • accessing bad pointers or stack addresses
    • leads to unpredictable behaviour
    • often will crash your program
  • check validity of pointer + stack addresses
    • valgrind: external tool, monitoring all memory allocation + deallocation nicely integrated in QtCreator, but slow
    • AddressSanetizer
      • augments code during compilation, much faster
      • activate with: -DCMAKE_CXX_FLAGS="-fsanitize=address -fno-omit-frame-pointer -O1"
      • disable leak detection: export ASAN_OPTIONS="detect_leaks=0"
      • augment existing binaries: export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so

CMake

Overview

  • meta-make system
  • creates build config for make, Visual Studio, Eclipse, etc. (cross-plattform)
  • CMakeLists.txt $\rightarrow$ cmake $\rightarrow$ CMakeCache.txt + Makefiles
  • powerful scripting language
    • to locate libraries,
    • configure your project
    • catkin (from ROS) builds on top

Typical CMakeLists.txt

cmake_minimum_required (VERSION 3.2)
project (<name> VERSION 0.1 LANGUAGES CXX)

include_directories(src/include)
find_package(Qt5 REQUIRED COMPONENTS Widgets)

add_library(lib${PROJECT_NAME} foo1.cpp foo2.cpp)
add_executable(${PROJECT_NAME} main.cpp bar.cpp)
target_link_libraries(${PROJECT_NAME} lib${PROJECT_NAME})

enable_testing()
add_subdirectory(test)
add_test(testMaster toDo)

Resources

vdemo

Motivation

  • start, stop, monitor, inspect processes ... in a multi-machine environment ... from a central place
  • common interface to start / stop components
  • shell + tcltk based scripting
  • one ssh connection to each host machine
    • remote shell invocation
    • launching X windows on local or remote machine
  • screen to hide/show processes

Example

screenshot vdemo

example component_script

function component {
   # switch on lights
   dmxGui $ON --no-gui
   read
}

function on_stop {
   # switch off lights
   dmxGui -c M0 --no-gui
}

source "$VDEMO_root/vdemo_standard_component_suffix.sh"
  • component: start a component
  • stop_component
  • on_stop: called after stopping
  • on_check alive test
    • return 0 (success)

master demo script

export VDEMO_demoRoot="${BASH_SOURCE[0]%/*}"
...
export VDEMO_components="\
gefen_matrix,$basepc,-v CFG=$cfgdir/$DEMO_CFG/gefen.conf -L 0 -n:\
$(SPREAD_COMPONENTS $basepc $armpc $handpc $visionpc):\
$(XCF_COMPONENTS $MEDIATOR):\
$SPEECH_COMPONENTS:\
hardware:\
$ROSCORE_COMPONENTS:\
$MOTORHAND_COMPONENTS:"

folder layout of ni-system-start

  • README.md
  • generic
    • vdemo
      • components
    • hsm
    • python
    • server
    • postures
  • demo
    • vdemo
      • components