Installed a nice git repo viewer on my linux VM :
http://www.puschitz.com/InstallingTomcat.html
http://gitblit.com/setup.html
Installed a nice git repo viewer on my linux VM :
http://www.puschitz.com/InstallingTomcat.html
http://gitblit.com/setup.html
Video captured with Pentax K-01. Image sequences edited with Matlab’s image processing toolbox. Audio extracted with Xilisoft. Final video made with Avidemux. **
**Unfortunately, all the software and scripts in the world cannot make up for poor video-taking skills.
“In contrast with many engineers who make houses, cars, medicines, and clothing for human need and enjoyment, we make things that do not themselves directly satisfy human needs, but which others use in making things that enrich human living. In a word, the computer scientist is a toolsmith—no more, but no less.It is an honorable calling.
If we perceive our role aright, we then see more clearly the proper criterion for success: a toolmaker succeeds as, and only as, the users of his tool succeed with his aid. However shining the blade, however jeweled the hilt, however perfect the heft, a sword is tested only by cutting. That swordsmith is successful whose clients die of old age.”
Optional (on a machine with single processor, probably not needed – changes depending on ParaView implementation):
Start ParaView Server:
Command: cd PATH_TO_MPI mpiexec.exe -np NUM_PROCESSORS PATH_TO_PARAVIEW_BIN\pvserver.exe PATH_TO_CAVE\cave.pvx
Command: PATH_TO_PARAVIEW_BIN\pvserver.exe PATH_TO_CAVE\cave.pvx
The commands above will result in:
Waiting for client… Connection URL: cs://<machine_name>:11111 Accepting connection(s): <machine_name>:11111
Start VRPN Tracking Server: http://www.vrgeeks.org/vrpn/tutorial—use-vrpn#TOC-Configuring-VRPN-server
Start ParaView Client:
Command: PATH_TO_PARAVIEW_BIN\paraview.exe --server-url=cs://<machine_name_with_hostname>:11111 --state=PATH_TO_STATE_FILE/<state_file>.pvsm
PATH_TO_STATE_FILE = Path to the state file that contains VR Plugin configuration as stated in http://www.paraview.org/Wiki/ParaView/Users_Guide/CAVE_Display#Configure_Inputs
** Actually a large part of the panel will be blocked by the ParaView Splash image. The Splash Image can be disabled using the ParaView Setting panel. Just start the standard ParaView application (with the built-in server) and disable the Splash image before starting the server and client separately. http://www.paraview.org/Wiki/ParaView/Users_Guide/Settings
Standard way of adding a QDockWidget to a Plugin in ParaView:
Problem: pqVRConfigPanel, which extends QDockWidget, is not aware of VR Plugin instance, and VR Plugin instance is not aware of pqVRConfigPanel class. The QDockWidget signals cannot be connected VR Plugin slots.
Solution attempt 1:
Result:
Runtime error because pqVRStarter::onStartup() is called before ParaViewMainWindow (which extends QMainWindow) is finalized. The dockWidget could not be properly embedded in the UI.
Solution attempt 2 (to do):
* Qt prohibits a class that inherits from a Qt class to contain multiple inheritance since Qt classes are not implemented via virtual inheritance. To work around this, Qt interface can be used http://www.qtforum.org/article/13381/multiple-inheritance-and-qobject.html
** CMake Macro for creating pqDockWindowInterface:
# create implementation for a dock window interface
# ADD_PARAVIEW_DOCK_WINDOW(
# OUTIFACES
# OUTSRCS
# CLASS_NAME classname
# [DOCK_AREA areaname]
#
# CLASS_NAME: is the name of the class that implements a QDockWidget
# DOCK_AREA: option to specify the dock area (Left | Right | Top | Bottom)
# Left is the default
MACRO(ADD_PARAVIEW_DOCK_WINDOW OUTIFACES OUTSRCS)
SET(ARG_DOCK_AREA)
PV_PLUGIN_PARSE_ARGUMENTS(ARG "CLASS_NAME;DOCK_AREA" "" ${ARGN} )
IF(NOT ARG_DOCK_AREA)
SET(ARG_DOCK_AREA Left)
ENDIF(NOT ARG_DOCK_AREA)
SET(${OUTIFACES} ${ARG_CLASS_NAME})
CONFIGURE_FILE(${ParaView_CMAKE_DIR}/pqDockWindowImplementation.h.in
${CMAKE_CURRENT_BINARY_DIR}/${ARG_CLASS_NAME}Implementation.h @
ONLY)
CONFIGURE_FILE(${ParaView_CMAKE_DIR}/pqDockWindowImplementation.cxx.in
${CMAKE_CURRENT_BINARY_DIR}/${ARG_CLASS_NAME}Implementation.cxx
@ONLY)
GET_DIRECTORY_PROPERTY(include_dirs_tmp INCLUDE_DIRECTORIES)
SET_DIRECTORY_PROPERTIES(PROPERTIES INCLUDE_DIRECTORIES "${QT_INCLUDE_DIRS};${
PARAVIEW_GUI_INCLUDE_DIRS}")
SET(ACTION_MOC_SRCS)
QT4_WRAP_CPP(ACTION_MOC_SRCS ${CMAKE_CURRENT_BINARY_DIR}/${ARG_CLASS_NAME}Impl
ementation.h)
SET_DIRECTORY_PROPERTIES(PROPERTIES INCLUDE_DIRECTORIES "${include_dirs_tmp}")
SET(${OUTSRCS}
${CMAKE_CURRENT_BINARY_DIR}/${ARG_CLASS_NAME}Implementation.cxx
${CMAKE_CURRENT_BINARY_DIR}/${ARG_CLASS_NAME}Implementation.h
${ACTION_MOC_SRCS}
)
ENDMACRO(ADD_PARAVIEW_DOCK_WINDOW)
Note: STL here refers to SGI STL , not to be confused with the C++ Standard Library , which only recently include hash maps/sets in C++11 . For pre-C++11 users, hash maps/sets are included under the name unordered_map/unordered_set in std::tr1 as explained in the article:
From: http://www.drdobbs.com/cpp/c-stl-hash-containers-and-performance/198800559
tl;dr:
hash_maps store key/value pairs that have unique keys. hash_sets store unique values. hash_multimaps store key/value pairs with nonunique keys. hash_multisets store nonunique values When to use hash functions: =========================== trade offs - how often do the key/value pair change vs frequency & performance of accesses vs memory allocation Hash function: ============== Most primitives hash to themselves: integers, characters, and longs all simply cast to size_t SizeTCastHasher - hash based on memory location ShiftedPairHasher - hash a pair of integers (bitwise shift first integer, then XOR, to fit both integers in a size_t) Memory allocation: ================== Map --> RB tree , a few pointers, Hashmap - 193 buckets Must Benchmark: =============== Hash function calculation time vs hash function collision resolution Boost: ====== hash_combine