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

Friday, February 27, 2015

Using Homebrew to install missing cscope/Exuberant Ctags/wget package on my MAC

I am using Homebrew as my MAC package manager now, here's my steps to install missing wget/cscope packages to my macbook pro:

1. Search if there is a "cscope" FORMULA in current Homebrew library:
$ brew search cscope
cscope


2. Start to install cscope:
$ brew install cscope
==> Downloading https://homebrew.bintray.com/bottles/cscope-15.8a.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring cscope-15.8a.yosemite.bottle.tar.gz
🍺  /usr/local/Cellar/cscope/15.8a: 10 files, 736K


3. Install Exuberant ctags:
$ brew search ctags
ctags      rbenv-ctags
homebrew/php/phpctags

$ brew install ctags
==> Downloading https://homebrew.bintray.com/bottles/ctags-5.8.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring ctags-5.8.yosemite.bottle.tar.gz
==> Caveats
Under some circumstances, emacs and ctags can conflict. By default,
emacs provides an executable `ctags` that would conflict with the
executable of the same name that ctags provides. To prevent this,
Homebrew removes the emacs `ctags` and its manpage before linking.

However, if you install emacs with the `--keep-ctags` option, then
the `ctags` emacs provides will not be removed. In that case, you
won't be able to install ctags successfully. It will build but not
link.
==> Summary
🍺  /usr/local/Cellar/ctags/5.8: 8 files, 364K


4. Same way to install wget:
$ brew install wget
==> Installing wget dependency: openssl
==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring openssl-1.0.2.yosemite.bottle.tar.gz
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /usr/local/etc/openssl/certs

and run
  /usr/local/opt/openssl/bin/c_rehash

This formula is keg-only, which means it was not symlinked into /usr/local.

Mac OS X already provides this software and installing another version in
parallel can cause all kinds of trouble.

Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/openssl/lib
    CPPFLAGS: -I/usr/local/opt/openssl/include

==> Summary
🍺  /usr/local/Cellar/openssl/1.0.2: 459 files, 18M
==> Installing wget
==> Downloading https://homebrew.bintray.com/bottles/wget-1.16.1.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring wget-1.16.1.yosemite.bottle.tar.gz
🍺  /usr/local/Cellar/wget/1.16.1: 9 files, 940K


References:
http://bearlin001.blogspot.tw/2015/02/homebrew-missing-package-manager-for-os.html

Homebrew: The missing package manager for OS

This is the steps I install homebrew to my macbook pro:

1. Install Homebrew itself:
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
==> This script will install:
/usr/local/bin/brew
/usr/local/Library/...
/usr/local/share/man/man1/brew.1

Press RETURN to continue or any other key to abort
==> /usr/bin/sudo /bin/mkdir /usr/local

WARNING: Improper use of the sudo command could lead to data loss
or the deletion of important system files. Please double-check your
typing when using sudo. Type "man sudo" for more information.

To proceed, enter your password, or type Ctrl-C to abort.

Password:
==> /usr/bin/sudo /bin/chmod g+rwx /usr/local
==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local
==> /usr/bin/sudo /bin/mkdir /Library/Caches/Homebrew
==> /usr/bin/sudo /bin/chmod g+rwx /Library/Caches/Homebrew
==> Downloading and installing Homebrew...
remote: Counting objects: 233669, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 233669 (delta 0), reused 0 (delta 0), pack-reused 233666
Receiving objects: 100% (233669/233669), 29.63 MiB | 423.00 KiB/s, done.
Resolving deltas: 100% (175242/175242), done.
From https://github.com/Homebrew/homebrew
 * [new branch]      master     -> origin/master
HEAD is now at 00667c7 go: show what arch and os is currently building
==> Installation successful!
==> Next steps
Run `brew doctor` before you install anything
Run `brew help` to get started


2. Run Homebrew doctor:
$ brew doctor
Your system is ready to brew.

3. Install package:
$ brew install wget
==> Installing wget dependency: openssl
==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring openssl-1.0.2.yosemite.bottle.tar.gz
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /usr/local/etc/openssl/certs

and run
  /usr/local/opt/openssl/bin/c_rehash

This formula is keg-only, which means it was not symlinked into /usr/local.

Mac OS X already provides this software and installing another version in
parallel can cause all kinds of trouble.

Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/openssl/lib
    CPPFLAGS: -I/usr/local/opt/openssl/include

==> Summary
🍺  /usr/local/Cellar/openssl/1.0.2: 459 files, 18M
==> Installing wget
==> Downloading https://homebrew.bintray.com/bottles/wget-1.16.1.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring wget-1.16.1.yosemite.bottle.tar.gz
🍺  /usr/local/Cellar/wget/1.16.1: 9 files, 940K

4. Update Homebrew:
$ brew update
Already up-to-date.

5. Homebrew helps:
$ brew --help
Example usage:
  brew [info | home | options ] [FORMULA...]
  brew install FORMULA...
  brew uninstall FORMULA...
  brew search [foo]
  brew list [FORMULA...]
  brew update
  brew upgrade [FORMULA...]
  brew pin/unpin [FORMULA...]

Troubleshooting:
  brew doctor
  brew install -vd FORMULA
  brew [--env | config]

Brewing:
  brew create [URL [--no-fetch]]
  brew edit [FORMULA...]
  open https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Formula-Cookbook.md

Further help:
  man brew
  brew home


References:
http://brew.sh/
https://blog.engineyard.com/2010/homebrew-os-xs-missing-package-manager/ https://github.com/Homebrew/homebrew

Monday, February 23, 2015

QFontMetrics Class

http://doc.qt.io/qt-5/qfontmetrics.html
http://doc.qt.io/qt-5/qfont.html

https://www.google.com.tw/search?q=QFontMetrics&lr=lang_zh-CN%7Clang_zh-TW&es_sm=122&biw=1920&bih=955&tbs=lr:lang_1zh-CN%7Clang_1zh-TW&source=lnms&tbm=isch&sa=X&ei=FiDsVJfRCsacugTskILYDQ&ved=0CAsQ_AUoBA

https://developer.apple.com/library/mac/documentation/TextFonts/Conceptual/CocoaTextArchitecture/Art/glyph_metrics_2x.png