Wednesday, April 29, 2015

VIM hex editing

http://usevim.com/2012/06/20/vim-binary-files/
http://blog.changyy.org/2010/01/vim-hex-mode-16.html
http://vim.wikia.com/wiki/Hex_dump
http://vim.wikia.com/wiki/Improved_hex_editing

Thursday, April 23, 2015

My choice of UML diagramming tool

When reading OO codes, it's always good habits to draw UML diagrams for them(Class diagram, Sequential diagram, etc.) to help memorizing them better.

Currently I choose ArgoUML:
ArgoUML is the leading open source UML modeling tool and includes support for all standard UML 1.4 diagrams. It runs on any Java platform and is available in ten languages.

Steps to download and install under Ubuntu:
1. Download http://argouml-downloads.tigris.org/nonav/argouml-0.34/ArgoUML-0.34.tar.gz
2. Unzip to ~/ws/pkg/argouml-0.34/
3. Run by java -jar ~/ws/pkg/argouml-0.34/argouml.jar
4. Have fun.

Tutorials:
http://www.objectmentor.com/resources/articles/umlClassDiagrams.pdf
http://creately.com/diagram-type/article/simple-guidelines-drawing-uml-class-diagrams
http://www.tutorialspoint.com/uml/uml_class_diagram.htm
http://www.visual-paradigm.com/features/uml-and-sysml-modeling/?src=google&kw=class%20diagram&mt=p&net=g&plc=&gclid=CjwKEAjwsOKpBRCDtfOnzaDg3HsSJAAJ2oji0gt4d4JNFeLU8-fEveRwYXuEsXVxsLP4lJasV5IPmhoCz-zw_wcB#class-diagram

Reference:
http://stackoverflow.com/questions/15376/whats-the-best-uml-diagramming-tool
http://argouml.tigris.org/


Sunday, April 5, 2015

Boost.PropertyTree

What is Property Tree?
http://www.boost.org/doc/libs/1_57_0/doc/html/property_tree.html#boost_propertytree.intro

Five Minute Tutorial
http://www.boost.org/doc/libs/1_57_0/doc/html/boost_propertytree/tutorial.html

How to Populate a Property Tree
http://www.boost.org/doc/libs/1_57_0/doc/html/boost_propertytree/parsers.html






What do real-user-sys mean in the output of time(1)

[From http://man7.org/linux/man-pages/man1/time.1.html and http://man7.org/linux/man-pages/man2/times.2.html]
---------------------------------------------------------------------------
(i)   the elapsed real time between invocation and termination,
(ii)  the user CPU time (the sum of the tms_utime and tms_cutime values in a struct tms as returned by times(2))
(iii) the system CPU time (the sum of the tms_stime and tms_cstime values in a struct tms as returned by times(2)).

real  = Elapsed real (wall clock) time
user  = tms_utime + tms_cutime
sys   = tms_stime + tms_cstime

struct tms {
  clock_t tms_utime;  /* user time */
  clock_t tms_stime;  /* system time */
  clock_t tms_cutime; /* user time of children */
  clock_t tms_cstime; /* system time of children */
};
---------------------------------------------------------------------------

[From Ubuntu "$ man time"]
---------------------------------------------------------------------------
real %e
user %U
sys %S

The resource specifiers, which are a superset of those recognized by the tcsh(1) builtin `time' command, are:
%      A literal `%'.
E      Elapsed real (wall clock) time used by the process, in [hours:]minutes:seconds.
P      Percentage of the CPU that this job got.  This is just user + system times divided by the total running time. It also prints a percentage sign.
S      Total number of CPU-seconds used by the system on behalf of the process (in kernel mode), in seconds.
U      Total number of CPU-seconds that the process used directly (in user mode), in seconds.
e      Elapsed real (wall clock) time used by the process, in seconds.
---------------------------------------------------------------------------

References:
http://stackoverflow.com/questions/556405/what-do-real-user-and-sys-mean-in-the-output-of-time1
http://blog.he96.com/2011/01/linux-timewhat-do-real-user-and-sys.html
http://yuanfarn.blogspot.tw/2012/08/linux-time.html

Use valgrind's callgrind tool to find out the most time consuming function in your application

  1. Use "$ valgrind --tool=callgrind ./APPLICATION ..." to analyze application performance,
     it will generate a callgrind output(ex:callgrind.out.7722) to help you get performance informations:
      $ valgrind --tool=callgrind ./your_application param1 param2 ...
     
  2. Use kcachegrind tool to visualize callgrind output:
      $ sudo apt-get install kcachegrind
      $ kcachegrind callgrind.out.7722
     
  3. REF: http://baptiste-wicht.com/posts/2011/09/profile-c-application-with-callgrind-kcachegrind.html

Monday, March 9, 2015

Using gvim under Cygwin

Today I am trying to using gvim under Cygwin console but it failed:
$ which vim
/usr/bin/vim

$ which gvim
/usr/bin/gvim

$ gvim
E233: <δΈθƒ½ι–‹ε•Ÿ X Server DISPLAY>
Press ENTER or type command to continue

From below link we know I have to install X-Server to Cygwin:
http://stackoverflow.com/questions/12430633/how-can-i-get-mintty-cygwin-terminal-to-open-gvim-in-a-new-window

Here are how to install and enable X-Server under Cygwin:
[Official site]
http://x.cygwin.com/

[Installing Cygwin/X]
A listing of the Cygwin/X packages is given below; a listing of the general Cygwin packages would be beyond the scope of this document.
Cygwin/X packages are located in the X11 category.
  • xorg-server (required, the Cygwin/X X Server)
  • xinit (required, scripts for starting the X server: xinitstartxstartwin (and a shortcut on the Start Menu to run it), startxdmcp.bat )
  • xorg-docs (optional, man pages)
  • xlaunch (optional, a wizard for starting X sessions)
  • You may also select any X client programs you want to use, and any fonts you would like to have available.
  • You may also want to ensure that the openssh package is selected if you wish to use ssh connections to run remote X clients.
  • You may also want to ensure that the inetutils or rsh packages are selected if you wish to use telnet or rsh connections to run remote X clients. (not recommended)
[Starting Cygwin/X]
$ startxwin

Welcome to the XWin X Server
Vendor: The Cygwin/X Project
Release: 1.17.1.0
OS: CYGWIN_NT-6.1 TW1W7D-400077 1.7.35(0.287/5/3) 2015-03-04 12:09 x86_64
OS: Windows 7 Service Pack 1 [Windows NT 6.1 build 7601] (Win64)
Package: version 1.17.1-2 built 2015-02-23

XWin was started with the following command line:

/usr/bin/XWin :0 -multiwindow -auth /home/linst/.serverauth.7912

(II) xorg.conf is not supported
(II) See http://x.cygwin.com/docs/faq/cygwin-x-faq.html for more information
LoadPreferences: /home/linst/.XWinrc not found
LoadPreferences: Loading /etc/X11/system.XWinrc
LoadPreferences: Done parsing the configuration file...
winDetectSupportedEngines - DirectDraw4 installed, allowing ShadowDDNL
winDetectSupportedEngines - Returning, supported engines 00000005
winSetEngine - Multi Window or Rootless => ShadowGDI
winScreenInit - Using Windows display depth of 32 bits per pixel
winAllocateFBShadowGDI - Creating DIB with width: 3520 height: 1080 depth: 32
winFinishScreenInitFB - Masks: 00ff0000 0000ff00 000000ff
winInitVisualsShadowGDI - Masks 00ff0000 0000ff00 000000ff BPRGB 8 d 24 bpp 32
MIT-SHM extension disabled due to lack of kernel support
XFree86-Bigfont extension local-client optimization disabled due to lack of shared memory support in the kernel
glWinSelectGLimplementation: Loaded 'cygnativeGLthunk.dll'
(II) AIGLX: Testing pixelFormatIndex 5
GL_VERSION:     4.5.0 NVIDIA 347.25
GL_VENDOR:      NVIDIA Corporation
GL_RENDERER:    GeForce GT 640/PCIe/SSE2
(II) AIGLX: enabled GLX_SGI_make_current_read
(II) AIGLX: enabled GLX_MESA_copy_sub_buffer
(II) AIGLX: enabled GLX_SGI_swap_control and GLX_MESA_swap_control
(II) AIGLX: enabled GLX_SGIX_pbuffer
(II) AIGLX: enabled GLX_ARB_multisample and GLX_SGIS_multisample
(II) 482 pixel formats reported by wglGetPixelFormatAttribivARB
(II) AIGLX: Set GLX version to 1.4
(II) 323 fbConfigs
(II) ignored pixel formats: 0 not OpenGL, 54 RBGA float, 69 RGBA unsigned float, 0 unknown pixel type, 36 unaccelerated
(II) GLX: Initialized Win32 native WGL GL provider for screen 0
winPointerWarpCursor - Discarding first warp: 1760 540
(--) 8 mouse buttons found
(--) Setting autorepeat to delay=500, rate=31
(--) Windows keyboard layout: "00000409" (00000409) "US", type 4
(--) Found matching XKB configuration "English (USA)"
(--) Model = "pc105" Layout = "us" Variant = "none" Options = "none"
Rules = "base" Model = "pc105" Layout = "us" Variant = "none" Options = "none"
winInitMultiWindowWM - DISPLAY=:0.0
winMultiWindowXMsgProc - DISPLAY=:0.0
winProcEstablishConnection - winInitClipboard returned.
winClipboardThreadProc - DISPLAY=:0.0
OS maintains clipboard viewer chain: yes
winInitMultiWindowWM - XOpenDisplay () returned and successfully opened the display.
winMultiWindowXMsgProc - XOpenDisplay () returned and successfully opened the display.
winClipboardProc - XOpenDisplay () returned and successfully opened the display.
winMultiWindowXMsgProcErrorHandler - ERROR: BadMatch (invalid parameter attributes)

After that, a new window will opened, you can now start gvim($ gvim) correctly!

[Switching out of Cygwin/X]
[Stopping Cygwin/X]

Qt 5.4 CMake Manual

This manual details the specifics of how to use Qt 5 with CMake. The minimum version required to use Qt5 is CMake 2.8.3, but 2.8.11 is recommended.

http://doc.qt.io/qt-5/cmake-manual.html