Latest Publications

Memory Imprint Studio Brand-new Website!!

Memory Imprint Studio gets a new face. We have redesigned our company site from grounds up. Old site is migrated to new home and is still functioning, under a new domain,

Memory Imprint Studio New Site

Portable Digital Picture Frame With Your 3D Photo Montage Video Clips!

After some extensive research, we have finally come up with an ideal encoding solution in order to play your 3d photo montage clip in digital picture frames.  This solution will allow your video to play smoothly at its best possible resolution.  For a limited time, you will get a digital photo frame for FREE (a $170 value) when you order any video production service from our website. We will retouch and customize your photos and your 3d photo montage video highlight clips to be displayed in the frame, in addition to a custom DVD.
digital photo frame
A full feature digital photo frames show off your memories on a HIGH 800×480 RESOLUTION SCREEN encased in a custom frame. The highly stylized digital photo frame accents any room with your personal memories in a beautiful frame. It’s the perfect gift for any special occasion or as a gift for friends or loved ones.
Showcase for a Digital Picture Frame with Custom 3D Photo Montage Clip.

The Org-Mode World

This is a top level heading [6/13]

  • [ ]
  • [X]
  • [ ]
  • [X]
  • [ ]
  • [ ]
  • [X]
  • [ ]
  • [X]
  • [X]
  • [ ]
  • [X]
  • [ ]
(println "hello world")
Table 1: This is the caption for the next table (or link)
a b
askldfaslkdjf asndkljaskldjakj
test test
test test
———————————- wrong

rlm’s website

Organize party

  • [ ] to do list 1
  • [ ]
  • [ ]
  • [ ]
  • [ ]
  • [ ]

use C-u C-c C-c initilize and M-S-RET to add more C-c C-c check

  • [ ] test sublist
  • [ ] sublist 2
  • [ ] sublist 3
  • [ ] sublist 4
  • [ ]

list for today [7/8][87%]

  • [X] call VHS customer
  • [X] call Jiang
  • [X] call Norman [2/2] Adel will have Surgery tomorron, spin problem effecting walking
    • [X] email to remind him of his PDF book
    • [X] remind Yi to send him more informaiton
  • [X] call audio customer called twice, no pickup, will call Monday
  • [X] call Gao Jian1
  • [X] lunch with myself
  • [X] call 刘 -no body pick up,
  • [ ] call Huang Wei

lunch with eve

#+BEGIN: clocktable :maxlevel 2 :scope subtree

Table 2: Clock summary at [2015-01-11 Sun 14:39]
Headline Time
Total time 0:14
TODO lunch with eve 0:14
(+ 1 2 3 4)

#C-c C-c to generate eveluation results

perl /home/tan/proj/explore-linux/perl/

Memmory Imprint Studio


;; Main extension directory and load files.
(setq load-path
      (append (list "~/config/emacs/extend") load-path))

;;; emacs appearance
(tool-bar-mode -1)
(scroll-bar-mode -1)
(menu-bar-mode -1)
(column-number-mode 1)
(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
(if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
(if (fboundp 'menu-bar-mode) (menu-bar-mode -1))
;; set font to terminus if possible and in graphics mode
(if (display-graphic-p)
    (set-face-attribute 'default nil :font "Terminus"))
(setq frame-title-format "emacs -- rlm") ;only in x terminal.
(setq inhibit-startup-message 't)

(setq load-path 
       (list "~/config/emacs/extend/color-themes") 

(require 'color-theme)
;;  CHOOSE only ONE of these color themes!

;;; Leuven -- primary colors on white.  Great for Org mode especially!
        ;; (setq max-lisp-eval-depth 1000)
        ;; (load "color-theme-leuven")
        ;; (color-theme-leuven)
;;; Zenburn -- magical, unobstrusive dark theme
(load "zenburn")
(setenv "DARKTERM" "yes")

;;; firefox-like font size adjustment
(defvar rlm-default-font-size 139)
(defvar rlm-font-size 

(defun change-font-size (num)
  (setq rlm-font-size (+ rlm-font-size num))
  (message (number-to-string rlm-font-size))
  (set-face-attribute 'default nil 
                      :height rlm-font-size))

(defun font-increase () 
  (change-font-size 3))

(defun font-decrease () 
  (change-font-size -3))

(defun font-restore ()
  (setq rlm-font-size rlm-default-font-size)
  (change-font-size 0))

(global-set-key (kbd "C-+") 'font-increase)
(global-set-key (kbd "C--") 'font-decrease)
(global-set-key (kbd "C-=") 'font-restore)

(change-font-size 0)

;; IRC config
(require 'tls)

(require 'erc)
(defun start-irc ()
  (erc :server "" 
       :full-name "Tan" ;; change to your name
       :nick "cryoguy" ;; change to your nick
       :port 6667
       :password (read-passwd "Enter IRC password: ")))

;;; Print Buffer to PDF
(defun print-to-pdf ()
  (switch-to-buffer "*PostScript*")
  (write-file "/tmp/")
  (kill-buffer "")
  (setq pdf-target-name (make-temp-file "/home/tan/tmp/pdf-out/" nil ".pdf"))
  ;; (setq pdf-target-name
  ;;    (concat "/home/r/tmp/pdf-out/" (buffer-name) ".pdf"))
  (setq cmd (concat "ps2pdf14 /tmp/ " "\"" pdf-target-name "\""))
  (shell-command cmd)
  (shell-command "rm /tmp/")
  (message (concat "Saved to:  " pdf-target-name)))

(global-set-key (kbd "C-c C-p") 'print-to-pdf)

;;; Terminal Emulation
(require 'multi-term)
(setq multi-term-program "/bin/bash")

;;; Fullscreen Mode
;; From
(defun toggle-fullscreen (&optional f)
  (let ((current-value (frame-parameter nil 'fullscreen)))
     nil 'fullscreen
     (if (equal 'fullboth current-value)
         (if (boundp 'old-fullscreen) old-fullscreen nil)
       (progn (setq old-fullscreen current-value)

(global-set-key [f11] 'toggle-fullscreen)

;;; Clojure
(add-to-list 'load-path "~/config/emacs/extend")
(add-to-list 'load-path "~/config/emacs/extend/clojure-mode")
(require 'clojure-mode)
(require 'highlight-parentheses)
(add-hook 'clojure-mode-hook (lambda () (highlight-parentheses-mode t)))
(setq hl-paren-colors
      '("#87ff00" "#87ff00" "#87ff00"  
        "#87ff00" "#87ff00" "#87ff00"
        "#87ff00" "#87ff00" "#87ff00"
        "#87ff00" "#87ff00" "#87ff00"
        "#87ff00" "#87ff00" "#87ff00"
        "#87ff00" "#87ff00" "#87ff00"
        "#87ff00" "#87ff00" "#87ff00"
        "#87ff00" "#87ff00" "#87ff00"
        "#87ff00" "#87ff00" "#87ff00"
        "#87ff00" "#87ff00" "#87ff00"
        "#87ff00" "#87ff00" "#87ff00"
        "#87ff00" "#87ff00" "#87ff00"
        "#87ff00" "#87ff00" "#87ff00"))
(add-hook 'clojure-mode-hook 'turn-on-auto-fill)
(require 'nrepl)
(load "flash-paren")
(flash-paren-mode 1)
(setq flash-paren-delay 0.1)

;;; Scheme
;; scheme REPL

;;; For 6.945 -- advanced symbolic programming
;; (setq scheme-root 
;;       "/home/r/proj/6.945/scheme")

;; (setq scheme-program-name
;;       (concat
;;        scheme-root "/bin/mit-scheme "
;;        "--library " scheme-root "/lib/mit-scheme-c "
;;        "--band " scheme-root "/lib/mit-scheme-c/ "
;;        "-heap 200000"))

;; For 6.946 -- SICM
(setq scheme-root 

(setq scheme-program-name
       scheme-root "/mit-scheme/bin/scheme "
       "--library " scheme-root "/mit-scheme/lib "
       ;;"--band " scheme-root "/lib/mit-scheme-c/ "
       "-heap 200000"))

;; scheme completeion
(require 'scheme-complete)
(autoload 'scheme-smart-complete "scheme-complete" nil t)
(autoload 'scheme-get-current-symbol-info 
          "scheme-complete" nil t)

 '(define-key scheme-mode-map "\t" 'scheme-complete-or-indent))

 '(define-key inferior-scheme-mode-map "\t" 'scheme-complete-or-indent))

(add-hook 'scheme-mode-hook
  (lambda ()
    (make-local-variable 'eldoc-documentation-function)
    (setq eldoc-documentation-function 

(setq lisp-indent-function 'scheme-smart-indent-function)

;; mit-scheme documentation
(require 'mit-scheme-doc)

 '(define-key scheme-mode-map (kbd "M-.") 'mit-scheme-doc-lookup))

 '(define-key inferior-scheme-mode-map (kbd "M-.")

;;; Org Mode
(setq load-path (cons "~/config/emacs/extend/org-mode/lisp" load-path))
(setq load-path (cons "~/config/emacs/extend/org-mode/contrib/lisp" load-path))
(require 'org)
(require 'org-crypt)
; Encrypt all entries before saving
; GPG key to use for encryption
(setq org-crypt-key "057B932E")
(global-set-key [f9] 'org-decrypt-entry)
(global-set-key [f10] 'org-decrypt-entry)
;; don't use the dumb timestamp option
(setq org-publish-use-timestamps-flag nil)
;; org mode activation
(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
(setq org-log-done t)
;; make the fonts of program source code appear as it normally
;; does in the language's major mode
(setq org-src-fontify-natively 't)
;; when switching to code-edit mode, replace the entire current 
;; window.
(setq org-src-window-setup 'current-window)
;; more crufty awsomeness -- keep source code the same between
;; org and the major mode editing window
(setq org-src-preserve-indentation 't)
;; don't ask to evaulate code, just do it.  
(setq org-confirm-babel-evaluate nil)
;;; soooooo SAD.....
(setq org-export-html-preamble nil)
;; I don't like html export to take forever, or require a lisp
;; connection, and instead would rather individually export stuff.
(setq org-export-babel-evaluate nil)
(setq org-export-html-coding-system 'utf-8)
(setq org-babel-default-header-args
      '((:session . "none")
        (:results . "replace")
        (:exports . "code")
        (:cache . "no")
        (:noweb . "yes")
        (:mkdirp . "yes")
        (:hlines . "no")
        (:tangle . "no")
        (:padnewline . "yes")))
 (kbd "C-*") 
 (lambda () 
   (org-table-recalculate 'iterate)))

;;; RLM Custom Global Keybindings
(global-set-key [f1]  'compile)

(global-set-key [f5] 'replace-string)

 (lambda () 
   (let ((current-prefix-arg '(1)))
         (call-interactively 'shell-command))))

(global-set-key "\C-e" 'end-of-line)
(global-set-key [f12] 'next-error)
(global-set-key [f1] 'compile)
(global-set-key [f13] 'other-window)     ;; needs xmodmap support
(global-set-key [f12] 'switch-to-buffer) ;; needs xmodmap support

;;; Miscelaneous Config

(setq-default ispell-program-name "aspell")
(setq slime-net-coding-system 'utf-8-unix)
(setq require-final-newline nil)
(setq mode-require-final-newline nil)
(setq make-backup-files nil) 

;I must fight the backup files!
;maybe we can just disable them?
(setq backup-inhibited t)
(setq auto-save-default nil)
(setq make-backup-files nil)

(setq auto-mode-alist
      (cons '("\\.m" . octave-mode) auto-mode-alist))

(setq x-select-enable-clipboard 't)

;; from
;;  make-emacs-stop-asking-active-processes-exist-kill-them-and-exit-anyway

(defadvice save-buffers-kill-emacs (around no-query-kill-emacs activate)
  "Prevent annoying \"Active processes exist\" query when you quit Emacs."
  (flet ((process-list ())) ad-do-it))

(require 'uniquify) 
(setq uniquify-buffer-name-style 'forward)
(put 'erase-buffer 'disabled nil)

;; activate auto-fill-mode for various other modes
(add-hook 'text-mode-hook 'turn-on-auto-fill)
(add-hook 'scheme-mode-hook 'turn-on-auto-fill)
(load "malycon")

;; Playground for Tan

;; Org-capture setting
;;org-capture.el and Firefox extention used for FF capture to work.
;;  -a life saver

(setq load-path (cons "~/config/emacs/extend/org-mode/lisp" load-path))
(setq load-path (cons "~/config/emacs/extend/org-mode/contrib/lisp" load-path))
;; Agenda setup
(setq org-agenda-files (quote ("~/org"
;;(require 'org-annotation-helper)

;;(setq org-default-notes-file (concat org-directory "/"))
(define-key global-map "\C-cc" 'org-capture)
(require 'org-protocol)
'(org-default-notes-file "~/org/")
'(org-directory "~/org")


;;Following are generated automatically from customizing template, changing
;;too much will break the built in customization interface. Missing parens
;;will generate initializing warning and prohibit the saving of cutomization
;;setting.  Make small changes, and use uncomment to debug. -Tan

 ;; 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.
    (("w" "Default Capture Template" entry
      (file+headline "" "Firefox")
      "* TODO %T\n  %c\n  %i
 Tan's Note:%?" :prepend t :jump-to-captured t :empty-lines-after 1 :unnarrowed t)
     ("a" "Appointment Book" entry
      (file+datetree+prompt "")
      "%T%?" :prepend t :immediate-finish t :empty-lines-after 1 :unnarrowed t :table-line-pos t :kill-buffer t)
     ("v" "Word of the Day" item
      (file "")
      "%T\n %?" :prepend t :empty-lines 1  :empty-lines-after 1 :unnarrowed t :table-line-pos t :kill-buffer t)
     ("c" "Time Tracking" entry
      "" :prepend t :immediate-finish t :jump-to-captured t :empty-lines 1 :empty-lines-before 1 :empty-lines-after 1 :clock-in t :clock-keep t :clock-resume t :unnarrowed t :table-line-pos t :kill-buffer t)
     ("m" "MIS New Customer" table-line
      (file "")
      "%T\n  %^G %^G   %:fName %:company %:subject %:notes%?" :prepend t :immediate-finish t :jump-to-captured t :empty-lines 1 :unnarrowed t :table-line-pos t :kill-buffer t)
     ("b" "Other Stuff" entry
      (file+datetree "")
      "" :prepend t :immediate-finish t :jump-to-captured t :empty-lines 1 :empty-lines-before 1 :empty-lines-after 1 :clock-in t :clock-keep t :clock-resume t :unnarrowed t :table-line-pos t :kill-buffer t)

;; install dropbox as a service in Arch Linux Box first
;; mobileorg settings
(setq org-directory "~/org")
(setq org-mobile-inbox-for-pull "~/org/")
(setq org-mobile-directory "~/Dropbox/Apps/MobileOrg")
;;(setq org-mobile-files '("~/org/"))

(setq load-path (cons "~/config/emacs/extend/org2blog/" load-path))
(require 'org2blog-autoloads)

(setq org2blog/wp-blog-alist
         :url ""
         :username "admin"
         :default-title "Org Mode World"
         :default-categories ("org2blog""Org-Mode" "Emacs")
         :tags-as-categories nil)

 ;; 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.

(add-to-list ‘load-path “~/path/to/org/protocol/”)



long phone call to catch up, may insterested in Market America Business, use C-c C-x f to add footnote, C-c C-c to jump between definition and reference.

Error: 500 – String could not be parsed as XML in Joomla site with Google map Plugin

We have built a Joomla site (with Joomla 3.1) for a client a while ago.

The website worked fine until I checked it today and for some reason, when you click on Contact page (with Google Maps by Reumer) I get this error.

Error: 500 – String could not be parsed as XML

It turned out be that Google have changed their Google maps API. The Joomla site is using the googlemaps plugin (mosmap) v 2.18. This does not work with the new API. After updating the new plugin with following steps, everyone is back to normal.

1. Install the new version 3.1. Note: This is a new plugin, it does not replace the version 2.x plugin!
2. Do not open the plugin configuration! First you need to enable the new system plugin called “System – Google Map” in the list of plugins by clicking the red dot in the status column. This is the only way to copy all your parameters from the old plugin to the new one!
3. After enabling the plugin in the correct way you can check if the settings of the old plugin are copied correctly by opening the new plugin configuration settings.
4. After that you can disable the old system plugin called “Google Map”

Happy coding!


Our Photo Restoration and Photo Retouch Service

A regular customer becomes a good friend and comes to us with a 4×6 photo of their lovely dog. She wants a new background with a enlargement of 20×30. Following is what we did and what she says in reply to our follow-up email.

“Are you kidding? It’s framed and on the wall and you can’t have it back – we LOVE it!!! “

Background removal

Memory Imprint Studio is a Top Merchant in 2012

Memory Imprint Studio is a Top Merchant in 2012 at Merchant Circle.

Memory Imprint Studio is a top merchant at merchant circle

Help Japan!

Japan is still battling a nuclear and humanitarian crisis a month after a magnitude 9.0 quake and spawned deadly tsunami. Japanese is one of the most resilient, courageous and gracious people. Help Japan anyway you can. You can help through following organizations: