Friday, April 25, 2014

How to set up etags with emacs


  1. Create tags table:
    1. Navigate to the source code directory
    2. Run the command find . -name "*.[chCH]" -print | etags - (assuming that etags is already installed). This will create a TAGS file in the directory from which the aforementioned command is run
    3. In emacs do M-x visit-tags-table and navigate to the directory where the aforementioned command was run. This will load the TAGS table

Thursday, April 24, 2014

This summarizes the state of affairs in the past 2 weeks


Ubuntu: Updating repostiories

# make a backup of the repository
sudo cp /etc/apt/sources.list cp /etc/apt/sources.list.bkup

# manually edit the sources.list and add the repositories
sudo vi /etc/apt/sources.list

# update the repository information
sudo apt-get update

Saturday, January 18, 2014

Emacs configuration file

I’ve recently started using Emacs at work. I have used that at school earlier and then had to go to VI because none of the platforms that I worked on had enough space to support an Emacs editor. Emacs need some basic customisation before it can be used efficiently.

Here is a sample configuration file that I use. The comments provide explanation of the function of the various lines.



    ;;; Emacs Load Path
    (setq load-path (cons "~/emacs-config" load-path))
    ;;;(keyboard-translate ?\C-h ?\C-?)
    (global-set-key [(control h)] 'delete-backward-char)
    (global-set-key (kbd "C-^") 'help-command)
    (load "~/emacs-config/line-number")
    (load "~/emacs-config/whitespace-mode")
    (require 'whitespace)
    (setq whitespace-style '(face empty tabs lines-tail trailing))
    (global-whitespace-mode t)
    ;; Set emacs default C style to linux
    ;; Recommended https://www.kernel.org/doc/Documentation/CodingStyle
    (setq c-default-style "k&r")
    ;; Rationalize the undo operation in emacs
    (require 'redo+)
    (define-key global-map (kbd "C-q") 'undo)
    (define-key global-map (kbd "C-x C-q") 'redo)
    ;;; always print line numbers in the left margin
    (global-linum-mode t)
    ;;; Put backup files in a temp directory
    (setq backup-directory-alist
      `((".*" . ,temporary-file-directory)))
   (setq auto-save-file-name-transforms
      `((".*" ,temporary-file-directory t)))
    (show-paren-mode 1)
    ;;; Use spaces instead of tabs
    (setq-default indent-tabs-mode nil)
    ;; save desktop
    (desktop-save-mode 1)
    ;; speedbar in the same frame
    (require 'sr-speedbar)
    (load "~/emacs-config/sr-speedbar")
    ;; open speedbar on startup
    (sr-speedbar-open)
    ;; Make speedbar list C functions
    (add-to-list 'speedbar-fetch-etags-parse-list
         '("\\.c" . speedbar-parse-c-or-c++tag))
    ;; windmove for easier switch between windows
    (when (fboundp 'windmove-default-keybindings)
     (windmove-default-keybindings))
    ;; emacs dev IDE
    (global-ede-mode 1)
    (require 'semantic/sb)
    (semantic-mode 1)
    ;;;; This snippet enables lua-mode
    ;; This line is not necessary, if lua-mode.el is already on your load-path
   (autoload 'lua-mode "lua-mode" "Lua editing mode." t)
   (add-to-list 'auto-mode-alist '("\\.lua$" . lua-mode))
   (add-to-list 'interpreter-mode-alist '("lua" . lua-mode))
    ;; set tab width
    (setq default-tab-width 4)
    (setq tab-stop-list (number-sequence 4 200 4))
    ;; Goto a particular line
    (global-set-key "\C-xg" 'goto-line)
     (add-to-list 'load-path "~/emacs-config/anything-config")
    (require 'anything-config)
    (setq anything-sources
       (list anything-c-source-buffers
          anything-c-source-file-name-history
          anything-c-source-locate))
     (setq frame-title-format '("USER1"))
     ;;(setq frame-title-format (list "%b - " (getenv "USERNAME") "@" (getenv "USERDOMAIN")))
    ;; prevent checking for files changed on disk because vmplayer does not sync
    ;; http://stackoverflow.com/questions/2284703/emacs-how-to-disable-file-changed-on-disk-checking
    (defun ask-user-about-supersession-threat (fn)
      "blatantly ignore files that changed on disk"
      )
    (defun ask-user-about-lock (file opponent)
      "always grab lock"
      t)
 (global-set-key (kbd "<S-tab>") 'un-indent-by-removing-4-spaces)
 (defun un-indent-by-removing-4-spaces ()
  "remove 4 spaces from beginning of of line"
  (interactive)
  (save-excursion
   (save-match-data
    (beginning-of-line)
    ;; get rid of tabs at beginning of line
    (when (looking-at "^\\s-+")
     (untabify (match-beginning 0) (match-end 0)))
    (when (looking-at "^  ")
     (replace-match "")))))
 (custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
  '(column-number-mode t)
  '(show-paren-mode t)
  '(tool-bar-mode nil))
 (custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
  '(default ((t (:inherit nil :stipple nil :background "black" :foreground "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 98 :width normal :foundry "unknown" :family "DejaVu Sans Mono"))))

Monday, January 13, 2014

Using speech recognition (dragon naturally speaking) effectively

I work upwards of 10 hours a day on the computer and mobile phone. Needless to say, this is a potential to affect my health adversely. In order to reduce the strain on the fingers because of typing, I have been wanting to use speech recognition since about 2007. However, I could not use it as part of a daily routine because of the poor quality of speech recognition. 

I experimented with a variety of microphones, including those that were recommended by the vendors and popular sites such as this , but I would still not get an environment where I could just dictate sentences and not have to correct them after every few words. There was an additional problem of the program taking up a huge amount of memory. As a developer, I had to run other development packages on my computer simultaneously which caused the computer to slow down significantly.

A friend of mine told me that Dragon NaturallySpeaking version 12  has the ability of being able to dictate content wirelessly. This turned out to be a very useful feature. In fact, for me, it turned out to be a feature that helped me use voice recognition in my daily life instead of it just been a cool new software to try at times. I use the Dragon naturally speaking with the following arrangement:
  1. I have installed Dragon NaturallySpeaking on an Windows XP old laptop with 2G RAM. I connect to this wirelessly from  a dragon naturally speaking  app on my android mobile phone. Separately, on my main development machine, I login to the Windows XP laptop through remote desktop. I then dictate to Dragon NaturallySpeaking through the mobile phone and view the results on the Windows XP laptop using remote desktop.
  2. The superior quality of the microphone in the phone has dramatically help reduce voice recognition errors. Since the software is running on a separate machine, it does not slow down my main development machine.
Because of this feature, I have abandoned trying windows speech recognition, although I really liked it better while using browsers.

Friday, March 18, 2011

Some often used Openssl command:
For connecting to the openssl server:
openssl s_client -connect <Server-IP> -cipher
For connecting to the openssl server with client certificate
openssl s_client -connect <Server-IP> -cert <certificate path> -key <private key> 
For the server to be ready to accept connections
openssl s_server -cert <certificate path> -key <private path> -accept 443 -WWW
For seeing the plaintext contents of the SSL certificate
openssl x509 -in cert.pem -noout -text

Monday, March 14, 2011

SSL for the beginners

I often have to explain SSL to the sales people. Here is a short version of what I usually end up saying.
Let's say Bob and Alice wish to talk securely. The usual requirements would be that
1. No would should be able to eavesdrop on the conversation. This is fulfilled by encryption.
Additonally,
2. If both Bob and Alice cannot see each other, then both of them should be assured that they are talking to the right person. This is fulfilled by authentication.
3. No one should be able to modify the message that they send to each other. This is fulfilled by using message digests.
SSL stands for Secure sockets layer. It uses separate mechanisms to handle encryption, authentication and message digests.

Encryption is a way in which one can mathematically change the message to make it look like a random string. In other words, if Alice sends "Hello Bob" to Bob, the encrypted message may look like "xwygh" i.e. a random English message.
Authentication can be used by Alice / Bob to prove that they are indeed who they claim to be. One of the ways in which they can be achieved is to use a certificate. This certificate is issued by someone whom both Alice and Bob trust. In SSL parlance, this entity is called as the trusted certificate authority.Thus, when Alice presents a certificate and claims that it is signed by a trusted certificate authority that is also trusted by Bob, then Bob can be assured that Alice is indeed whom she claims to be.
Message digest is a short version of the message (or mathematically speaking, a hash of the message). The important property of this version is that the message cannot be recovered if someone looks at this version(again, mathematically speaking, this is a one way hash). So when Alice sends a message "Hello, Bob) to Bob, she also sends this version along with it. When Bob receives the message, he will again create a message digest over the message he received and compare the two digests. If someone modifies the message to "Bye, Bob", then the message digest that Bob creates will be different from the message digest that Bob receives. This will indicate to Bob that the message has been modified.