Friday, November 11, 2016

Monday, November 7, 2016

VMWare Unity Mode on Ubuntu 16.04 LTS

Some users want to run Linux desktop guests  "seamlessly" within host operating systems, for which, VMWare Hypervisors  provides a functionality called VMware "Unity" mode.

This post is about how we can enable the Unity mode on Linux desktop guests running Ubuntu 16.04,  well, if you are willing to settle on an older version of WMware Workstation or Player.

In fact,  it becomes difficult to enable the "Unity" mode for Linux guests. If you visit my older post on enabling VMware Unity mode on Ubuntu 14.04, you can see many have encountered difficulties, myself included.  In particular, it is getting more difficult to enable the Unity mode on recent releases of desktop editions of Linux distributions. In my opinion, the difficulties come form the following three sources,

  • Apparently, VMWare has recently dropped the support of Unity mode for Linux guests. You can infer this by comparing the documentation of VMware Workstation Player 12 with that of the previous version of the player, the VMware Player 7. VMware's Workstation Player 12 documentation now states,
    Use Unity Mode
    You can switch virtual machines that have Windows XP or later guest operating systems to Unity mode to display applications directly on the host system desktop.
    On the contrary, VMware Player 7 documentation states,
    Use Unity Mode
    You can switch virtual machines that have Linux or Windows 2000 or later guest operating systems to Unity mode to display applications directly on the host system desktop.
    It is clearly that Linux support has been dropped.

  • Unity mode requires MetaCity or KDE,  which does not appear to be the default and optimization objective for major Linux distributions.

  • VMWare Unity mode's installation software does not know how to interact with systemd that has gradually becomes the default choice of the init service on most Linux distributions.

However, having observed the above, we actually have a solution.
  • Hypervisor. We need to stick to the version of VMware Workstation or Player that supports the Unity mode. The newest version of Player that supports the Unity mode is actually VMWare Player 7.1.4. You can download it from VMware

  • Linux Guest Dekstop  Environment. We need to stick to Gnome 2 MetaCity or KDE. 

For Ubuntu 16.04, we can enable Unity mode using VMware Player  by following the steps below,
  • Download and install VMware Player 7.1.4. Note that neither any version older than 7.1.4 nor any version newer than VMware Player, such as VMware Workstation 12 will work.

  • In Ubuntu 16.04, install Gnome Flashback as follows,
    sudo apt-get install gnome-flashback gnome-session-flashback

  • From the menu of VMware Player, choose "Player", "Manage", and "Install VMware Tools" (or Reinstall VMware Tools"). Make sure that you are installing VMwareTools 9.9.5. Earlier version would crash the vmtools library at the Ubuntu guest when you attempt to switch to Unity mode.

  • In the Ubuntu Linux guest, extract the mounted VMwareTools image, and run "" to install the VMware Tools.

  • Upon successfully installation of the VMware Tools, log out.
  • When you log in, on the screen of the Display Manager, make sure that you select "GNOME Flashback (Metacity)" as shown below.

  • Upon log in, you should be able to switch to the VMware Unity mode.

Sunday, November 6, 2016

Mounting Shared Directory at the Host using Open VM Tools

Open VM Tools is a user space tools for Linux virtual machines. To mount a directory shared by the host to a VMware Linux guest, we can use vmhgfs-fuse.

First, we can figure out what has been shared at the host to the guest Linux system using vmware-hgfsclient, which is simply to enter the command in the Linux guest.


Assume that the output is shared_foo and we want to mount it at /mnt/hgfs/foo at the guest Linux system, we can run the following command at the Linux guest,

     vmhgfs-fuse .host:/shared_foo /mnt/hgfs/foo

To mount the directory at the boot time, we can add a line similar to the following to the /etc/fstab at the Linux guest,

     .host:/shared_foo /mnt/hgfs/foo fuse.vmhgfs-fuse allow_other 0 0

You can also add different mounting options. For instance, in the following, the shared directory will be shown as owned by user foo_user and group foo_group, and with umask=022 applied.

     .host:/shared_foo /mnt/hgfs/foo fuse.vmhgfs-fuse allow_other,uid=foo_user,gid=foo_group,umask=022 0 0

Saturday, November 5, 2016

Setting up Jekyll on Ubuntu 16.04

I recently set up Jekyll 3 on Ubuntu 16.04. The procedure is simple, works on Ubuntu 14.04, and perhaps also works on other versions of Ubuntu and other Linux distributions.

  1. Create a directory for your Jekyll site. For instance, let us call it "mysite".
           mkdir mysite
  2. Go to the site directory, and create a file called "Gemfile". The file defines Ruby applications dependencies. Since Jekyll is a Ruby application. This file defines the dependencies for Jekyll. It is quite simple, and the following shell command will create the file with sufficient content.
           cd mysite
           echo "source ''" > Gemfile
           echo "gem 'execjs'" >> Gemfile
           echo "gem 'therubyracer'" >> Gemfile
           echo "gem 'github-pages', group: :jekyll_plugins" >> Gemfile
  3. Now install Ruby and other necessary packages.
           sudo apt-get install ruby ruby-dev ruby-bundler zlib1g-dev build-essential

  4. Finally, install Jekyll and its dependencies. On the site directory where Gemfile is, do the following,
           bundle install
  5. To build the Jekyll site, do the following on the site directory,
           bundle exec jekyll build
  6. You can serve the site by the following command,
           bundle exec jekyll serve --host= --port=4000

Friday, November 4, 2016

Installing Ruby 2.3 on Ubuntu 14.04 or Older

Ubuntu 14.04 comes with the version 1.9 of Ruby. I need a new version of Ruby. To install any version of 2.0 - 2.3, we can use the brightbox repository as follows,

$ sudo apt-add-repository ppa:brightbox/ruby-ng
$ sudo apt-get update
$ sudo apt-get install ruby2.3  # or ruby2.2
$ sudo apt-get install ruby2.3-dev 

Data Sets (for Research and for Fun)

Below are a few places you can find data sets,  perhaps, for your own research and for fun.

Thursday, October 27, 2016

Copying Files to Network Shared Folder Crashes Windows 10 Explorer

I sometimes copy files to network shared folders on a Windows 10 host. The action often crashes the Windows 10 explorer, and you would observe that  the Windows 10 explorer is terminated and restarted  when this happens.

A solution that has helped me was from this discussion. That is, check the "Always show icons, never thumbnails" from the "Folder View". As the following screen captures shows, to access the Folder View, you need to  choose "View" from the Folder window, click "Option" from the Ribbon, and choose "Change folder and search options". On the "Folder and Search Options" popup window, select the "View" tab, and from the Fold View, check "Always show icons, never thumbnails", and click the "OK" button to confirm.

Sunday, October 16, 2016

Flashed Android Phone Staying in Boot Animation Cycle

I have an old HTC EVO 4G LTE Android phone. It is dubbed code name "jewel". I was flashing it with a CyanogenMod custom ROM following the instruction on CyanogenMod's website. However, once I finished the flashing process, and the phone stays in boot animation cycle, i.e., it would boot into the HTC logo, and the screen would turn dark, and the process repeats.

It turns out the boot image was not installed properly. To fix it, extract the boot.img from the custom ROM zip file, and upload the boot image to the phone, and boot the phone into fastboot mode, and run the following command,

fastboot flash boot boot.img

This procedure is discussed in an thread.

Monday, October 10, 2016

Free SSL Certificates

It has many benefits for using SSL to enable HTTPS for web services as discussed therein.  In fact, you can access this blog via HTTPS as Google states. It is possible that you can obtain free certificates from a very limited list of providers. Previously, I took a note on "Free SSL Certificates for Securing E-mails and Websites".

I came across Let's Encrypt that can provide free SSL certificates and has a protocol that allows a web service to obtain the certificates "on the fly".

Here is a list of information that may be of your interest before you try.  You can certainly find out the information for their website.

Monday, September 5, 2016

Switching Back to Upstart on Ubuntu 16.04 LTS

Ubuntu 16.04 LTS has adopted systemd as its default system and service manager, i.e., the init manager. Although systemd offers many benefits, such as, aggressively starting services concurrently, you may sometimes want to switch back to upstart, the older system and service manager for Ubuntu because some services that you still have to run depend on it. Below are the steps that you can play with to switch to back upstart. However, since Ubuntu 16.04 is now designed with systemd as default system and service manager, many other services and applications are not designed to work without systemd. As a result, the following steps, as a few readers have noticed, may render your Ubuntu installation unusable. To run a Linux system without using systemd, the best approach is, to select and set up a Linux distribution that does not rely on systemd. See the Without-Systemd Wiki for more information and a list of Linux distributions.

  1. Install upstart-sysv and remove systemd-sysv.
    sudo apt-get install upstart-sysv

  2. Update Ubuntu to reflect the change that you just made.
    sudo update-initramfs -u

  3. Now you need to remove a few remaining systemd package in the system. This step removes package including libpam-systemd.
    sudo apt-get purge systemd

    If you do not perform this step, you will see an error message as follows after you reboot the system and log back in.
    [   26.664057] systemd-logind[4445]: Failed to start user service, ignoring: Unknown unit: user@1000.service

  4. Now reboot and log back in. You should see your system with a clean bill of health with upstartd back at the helm.

Sunday, August 14, 2016

PyDev in Eclipse Cannot Locate multiprocessing.Process

I am using PyDev with Eclipse. Recently, I found that PyDev complains that it cannot find multiprocessing.Process when it analyzes the code, as such, it marked "Process" as a symbol that cannot be resolved in a statement as below, although I can run and debug the script without any problems,

    from multiprocessing import Process

A discussion at Stackoverflow comes to rescue and provides the following answer,

"If you're using Eclipse and PyDev you need to include 'multiprocessing' as a forced builtin for the python interpreter."

The question becomes, how may we add a forced builtin? The answer is in this PyDev manual page, that is,
  1. Go to: window > preferences > PyDev > Interpreter - (Python/Jython/IronPython).
  2. Choose the interpreter you have installed in your computer.
  3. Select "Forced Buildins", and choose "New", finally, add "multiprocessing".

Sunday, August 7, 2016

Developing Google Apps Scripts Add-ons

This posts provides a brief review on the advanced techniques to develop, manage revisions, and publish Google Apps Scripts add-ons.

It is assumed that you have installed the node-google-apps-script that provides gapps and authenticated it with Google Apps engine, and uses Eclipse to manage the Google Apps Scripts add-ons projects.

Initiating a Project

  • Create a new Google Apps Script project remotely at, name the project properly, and allow it to save to the Google Drive. Note that the project will be stored in your Google drive. You should also now look up the the project id, which can be accomplished by at, going to "File", and then "Project properties", finally, locating the "Script ID".
  • Create a JavaScript project locally using Eclipse or some other IDEs of your choice.
  • Initialize  the project with gapps locally as follows,
    gapps init my_project_id

    Note that my_project_id must be replaced by the actual project id.

Developing and Revision Management

You can now develop the project locally and manage it using any revision management system you prefer, such as git.

Be aware that locally, the main script is named as Code.js instead of It will be automatically named as when it is uploaded to your Google drive.

Uploading Project

Having tested your code, you can now upload our project to the Google Drive.

gapps upload

Publishing Project

To publish the Google Scripts Add-on projects to the Google Chrome Web Store, you must first have a verified Google Chrome Web Store Console account, without which, you will not be able to publish your project and at present, the website does not give you much meaningful error messages either.

Therefore, you must first verify your account at Google Chrome Web Store Console site, for which, Google requires you to pay a nominal fee, at  the time this post is written, $5.

Once you meet the above requirement, to publish an add-on, or to update an published add-on. Detail information is in this piece of Google documentation. In the nutshell, at, choose "Publish", and then select "Publish as Web Add-on".

Friday, August 5, 2016

Installing Adobe Reader in Ubuntu 16.04 LTS

For those who like Adobe Reader to read PDF files, you may find it difficult to install Adobe Reader on Ubuntu 16.04 LTS systems. Assembling information from a few posts, here is the solution that worked for me,

sudo apt-get clean all
sudo add-apt-repository "deb precise partner"
sudo apt-get update
sudo apt-get install adobereader-enu
sudo add-apt-repository -r "deb precise partner"
sudo apt-get clean all
sudo apt-get update

If you are on a x64 system, you may see many annoying warning messages when you run acroreader, such as,

(acroread:19366): Gtk-WARNING **: Unable to locate theme engine in module_path: "murrine",
Gtk-Message: Failed to load module "canberra-gtk-module"
Gtk-Message: Failed to load module "gail"
Gtk-Message: Failed to load module "atk-bridge"

To get rid of the warning messages, install these four packages gtk2-engines-murrine, libcanberra-gtk-module, libatk-adaptor, and libgail-commonfor i386 as follows,

sudo apt-get install gtk2-engines-murrine:i386 libcanberra-gtk-module:i386 libatk-adaptor:i386 libgail-common:i386

If you are running Gnome like I do, then the last step is to set up default application for open PDF files. This is to edit the /etc/gnome/defaults.list file.

sudo gedit /etc/gnome/defaults.list
The editing is to find and replace the line



and add the following lines to the end of the file,


Finally, run nautilus to apply change if you do not wish to log out and log back in.

nautilus -q

Saturday, July 23, 2016

Managing Python Environment using Anaconda

Previously, we discussed that you could manage multiple versions of Python runtime environment on Linux systems using python-virtualenv. This post is a note on how we may manage Python runtime environment using Anaconda. Anaconda is a cross-platform tool, and runs on Windows, Mac OS X, and Linux.

Below are steps tested on a Windows 10 system.
  1. Download Anaconda package and install it.
  2. You can now see that Python is installed
    C:\Users\DemoUser>python --version
    Python 3.5.2 :: Anaconda 4.1.1 (64-bit)

  3. See this page for how to manage different version of Python environment. Below shows how we may bring Python up-to-date.
    C:\Users\DemoUser>conda update python
    Fetching package metadata .......
    # All requested packages already installed.
    # packages in environment at C:\Anaconda3:
    # python 3.5.2

Of course, we can do more with Anaconda, such as, manage Python packages. Below shows that we can install Gensim and all its dependencies in one single step.

C:\Users\DemoUser>conda install -y gensim
Fetching package metadata .......
Solving package specifications: ..........

Package plan for installation in environment C:\Anaconda3:

The following packages will be downloaded:

    package                    |            build
    bz2file-0.98               |           py35_0           6 KB
    conda-env-2.5.2            |           py35_0          67 KB
    conda-4.1.9                |           py35_0         247 KB
    smart_open-1.3.3           |           py35_0          28 KB
    gensim-0.12.4              |      np111py35_0         2.2 MB
                                           Total:         2.6 MB

The following NEW packages will be INSTALLED:

    bz2file:    0.98-py35_0
    gensim:     0.12.4-np111py35_0
    smart_open: 1.3.3-py35_0

The following packages will be UPDATED:

    conda:      4.1.6-py35_0       --> 4.1.9-py35_0
    conda-env:  2.5.1-py35_0       --> 2.5.2-py35_0

Fetching packages ...
bz2file-0.98-p 100% |###############################| Time: 0:00:00  95.70 kB/s
conda-env-2.5. 100% |###############################| Time: 0:00:00 245.29 kB/s
conda-4.1.9-py 100% |###############################| Time: 0:00:01 155.70 kB/s
smart_open-1.3 100% |###############################| Time: 0:00:00 205.54 kB/s
gensim-0.12.4- 100% |###############################| Time: 0:00:15 150.04 kB/s
Extracting packages ...
[      COMPLETE      ]|##################################################| 100%
Unlinking packages ...
[      COMPLETE      ]|##################################################| 100%
Linking packages ...
[      COMPLETE      ]|##################################################| 100%

Note that in the above we install packages for DemoUser. To install packages system-wide, we need to be elevated to system administrator.

Wednesday, July 20, 2016

Plagiarism Checking Tools

As the title suggests, here is a list of plagiarism checking tools, some of which offer free services,

Saturday, July 9, 2016

Running Multiple Versions of Python on a Single Linux System

While some Python applications are written in Python 3, some others are still being maintained and developed in Python 2. That is to say, there is a need to run multiple versions of Python on a single system. The following steps show that you can install multiple versions of Python on a single Linux system, and activate and deactivate the version you wish to use conveniently by leveraging on virtual python environments. Note that the following steps are tested on a Debian-based Linux system, such as Debian Linux and Ubuntu Linux

  1. Install the Python 2 and Python 3 if you have not done so.
    sudo apt-get install python python3

  2. Install python-virtualenv packages. This step is the key.
    sudo apt-get install python-virtualenv

  3. Show that you have both python 2 and 3 binaries. In the Linux system I am using for this post, the python binary by default points to Python 2's binary. Yours may differ.
    $ python --version
    Python 2.7.6
    $ python3 --version
    Python 3.4.3

  4. To develop or run some applications in python 3, we need to activate Python 3. Then, first create a directory as the working directory for the Python 3 application. For instance, we name the directory as proj_python_3.
    $ mkdir proj_python_3

  5. Now switch to the directory.
    cd proj_python_3
    $ which python3

  6. Then activate Python 3, we first need to set up an environment in the working directory for Python 3.
    $ virtualenv -p /usr/bin/python3 .env
    Running virtualenv with interpreter /usr/bin/python3
    Using base prefix '/usr'
    New python executable in .env/bin/python3
    Also creating executable in .env/bin/python
    Installing setuptools, pip...done.

  7. Now we can activate Python 3 any time we wish after we switch to the working directory.
    $ pwd
    $ . .env/bin/activate

    Note that the prompt shows that you are under a virtual environment for Python 3. You can show that the activated Python version is Python 3.
    (.env)$ python --version
    Python 3.4.3

  8. To deactivate the virtual environment, run the following,
    (.env)$ deactivate
    $ python --version
    Python 2.7.6

At present, the working directory for the virtual python environment must be on a file system that supports symbolic links; otherwise step 6 will fail.

Monday, March 14, 2016

Diagnosing Windows File and Printer Share

When we find that the Windows File and Printer Share does not work as we desire, e.g., you may observe an error as follows,

System error 53 has occurred.

The network path was not found.

many factors can contribute to the problem, commonly,
  • Name resolution including both Domain Name Resolution (DNS) and NetBIOS Name Resolution
  • Windows Firewall
I find that it is efficient to follow the steps below to diagnose the problems, where we assume that a resource, "MYSHARE" is shared on a remote host with DNS name "MYHOST.MYDOMAIN.COM", NetBIOS name "MYHOST", and IP address ""
  1. Disable Windows Firewall on the remote host
  2. Check any of special hidden administrative shares is accessible on the client host using the remote host's IP address, e.g.,
    net use \\\Admin$

    If the resource is accessible, you will be prompted for username or password, e.g.,
    C:\>net use \\\admin$
    The password is invalid for \\\Admin$.
    Enter the user name for '':

  3. If Step 2 fails,it is likely that you have forgotten to share the resource. Follow the Microsoft's guideline to share the resource.
  4. If Step 2 succeeds, check if the remote host's NetBIOS name registered and resolved on the client host,
    C:\>nbtstat -a myhost

    Depending on the number of interfaces that the client machine has, it may take a while. Regardless, it should show that the NetBIOS Name "myhost" should be registered on the network interface via which the remote machine is accessible, e.g.,
    Ethernet 3:
    Node IpAddress: [] Scope Id: []
               NetBIOS Remote Machine Name Table
           Name               Type         Status
        MYHOST         <20>  UNIQUE      Registered
        MYHOST         <00>  UNIQUE      Registered
        WORKGROUP      <00>  GROUP       Registered
        WORKGROUP      <1e>  GROUP       Registered
        MAC Address = 66-11-22-33-44-55
    where we assume the client host's IP address is

  5. If Step 4 fails, you must set up the NetBIOS name properly on the remote host by following Microsoft's guideline. You may also refer to this article on NetBIOS naming.
  6. Then, you can now try to access the shared resource on the remote host using the resource name and the remote host's NetBIOS name. The resource should be in the form of "\\MYHOST\MYSHARE".
    net use \\MYHOST\MYSHARE

    Or, if you need to provide a different Windows credential,

  7. Now enable Windows Firewall and repeat Step 6. If Step 6 is successful, the Windows Firewall has already been configured to allow the Windows File and Printer share. If not, allow the Windows File and Printer Share in the Window Firewall, following the Windows guideline.

Thursday, March 3, 2016

Extra Fonts for LaTex using Texlive on Ubuntu

One day, when I compiled a LaTex file, I encountered the following error,

-- Verifying Times compatible math font.
** Times compatible math font not found, forcing.
** No Times compatible math font package found. newtxmath is required.

! LaTeX Error: File `newtxmath.sty' not found.

It appears that others also encountered similar. The solution is simple. It is just to install additional fonts that are Times compatible. I am using Texlive on a Ubuntu system. On Ubuntu, perhaps, other Debian-based Linux system, you can install additional fonts for LaTeX as follows,

sudo apt-get install texlive-fonts-extra

The error went away after I installed the package.

Wednesday, March 2, 2016

Yahoo Calendar on Mozilla Thunderbird with Lightning and on Android Devices

I have had plenty of difficulties to put Yahoo Calendar on Mozilla Thunderbird with Lightning and on Android Devices.

If you still want to use Yahoo! Calendar and have difficulties to put it on Mozilla Thunderbird and on Android Devices. This post may be helpful to you.

Yahoo! Calendar on Thunderbird

It appears straightforward to put Yahoo Calendar on Thunderbird. As documented in Mozilla documentation entitled "Thunderbird and Yahoo" and  Yahoo documentation entitled "Sync Yahoo Calendar with Mozilla Lightning", it appears that it is well established that Thunderbird with Lightning add-on should work with Yahoo Calendar.

However, you may notice two issues.
  • If you follow Yahoo's instruction in  "Sync Yahoo Calendar with Mozilla Lightning" to use  iCalendar as the means to access Yahoo Calendar on Thunderbird with Lightning, you only get read access, that is, you cannot create or change any events in Yahoo Calendar on Thunderbird with Lightning. Therefore, a better approach is to use Yahoo CalDAV services as instructed in "Sync Yahoo Calendar on Multiple Devices". However, the Yahoo CalDav URL is actually in the following format, 

  • If you set up Lightning to access Yahoo Calendar via its CalDAV service, you may encounter authentication problem. I encountered the authentication problem myself. Many others also encountered the same problem, for example, this and this. A few suggest that you should change your Yahoo password after you encounter the password authentication problem. I have tried it, and it worked for a while and the problem always reappeared. Finally, I realize that Thunderbird with Lightning has yet to support two-factor authentication (sometimes called two-step authentication) and have to treat Thunderbird with Lightning as an "old app" that does not support two-step authentication. 
Below is what Google says about the apps that do not support two-step authentication,

" When you sign up for 2-Step Verification, we normally send you verification codes. However, these codes do not work with some apps and devices, like Gmail on your iPhone or iPad, Thunderbird, and Outlook. Instead, you’ll need to authorize the app or device the first time you use it to sign in to your Google Account by generating and entering an App password. "

Below is what Yahoo says about the apps that do not support two-step authentication,

" Some 3rd party apps, such as iOS Mail, Android Mail, and Outlook, don't work with two-step verification, on-demand passwords (ODP) or Account Key enabled. To use these apps, you'll need to generate an app-specific password. This isn't a new password for your account. It's a one-time password to validate you're authorizing access to your account from a non-Yahoo app."
Therefore, the solution to put Yahoo Calendar on Thunderbird on Lightning is to follow the steps below,

  1. Following Yahoo's instruction, enable two-step authentication and generate an 16-character app password. Note the password. You will not be able to view it again.
  2. Following Mozilla's instruction, add Yahoo Calendar to Lightning using the 16-character app password.
I have not encounter any synchronization problem and authentication problem after I have done the above setup.

Yahoo! Calendar on Android Devices

The Google Play store has a few CalDAV clients. I use a free calendar app called SolCalendar that supports CalDAV services.

The only issue that I had was that it often encountered password authentication issue with Yahoo CalDAV service.

The solution is that you treat the SolCalendar as an old app that does not support two-step authentication and create an 16-character app password for it, following Yahoo's instruction.


Monday, February 29, 2016

Exchange Calendars in Mozilla Thunderbird with Lightning

This post shows how you may add your Exchange Server calendar to Thunderbird with Lightning Add-on.

1. Install Thunderbird with Lightning. 

Download Thunderbird from Mozilla. The most recent reversions, such as, version 38.6.0 has already included Lightning.

2. Install the Exchange Calendar Lightning Add-on

The Exchange Calendar Lightning Add-on was previously the Exchange EWS Provider Add-on for Lightning that was developed at 1st Setup. It is now being maintained and developed by Ericsson.

Download the binary build of the recent version from its release channel. For instance, you can download directly the binary build of the per-release v3.6-beta1, exchangecalendar-v3.6.0-beta1.xpi.  Save the xpi file and note the location.

Now, you can install the Lightning Add-on.

  1. On Thunderbird, switch to the Calendar Tab by pressing "CTRL-SHIFT-C".
  2. Then go to "Tools", then "Add-ons", "Settings", "Install Add-on from File ...", and finally, select the downloaded xpi file to install. Upon completion, restart Thunderbird. 

3. Add an Exchange Calendar to Thunderbird. 

This step turns out to be a trick part. If you network administrator is cooperative and publicizes the settings for your Exchange Server, your life can be easier. Unfortunately, it has been not my case. Below are the steps you may try.

(1). Set up Exchange Calendar in Thunderbird using Exchange's autodiscovery function

You may follow the instruction provided by the developers of the Exchange Calendar Lightning Add-on and attempt to set up your Exchange calendar in Thunderbird Lighting.  The instruction is "How to Add Your Calendar to Thunderbird".

If this attempt fails, you may try the second approach below.

(2). Set up Set up Exchange Calendar in Thunderbird mannually

When you come to this step, the last attempt must have failed. However, it still sometimes provide you with a piece of useful information, that is, the "Primary email address" that may not necessarily be what you think it should be.

You may follow the steps outlined in "Add a Microsoft Office 365 Calendar" at 1-st Setup.

However, I found that in my case the "Primary email address" and the "Username" were different and the Username must take the form of "" while the "Primary email address" takes the form of "".

You may have to try both combinations to see which one works for you.


  1. Leah S., "Office 365 (Thunderbird) - Exchange Calendar and Tasks Add-On for Lightning,", retrieved on February 29, 2016
  2. Leah S., "Office 365 (Thunderbird) - Configure Thunderbird,", retrieved on February 29, 2016
  3. Mozilla Support Forum, "Thunderbird does not work with office 365,", retrieved on February 29, 2016
  4. Mozilla Developers, "Thunderbird Lightning User Interface,", retrieved on February 29, 2016
  5. 1st Setup Admin, "Add a Microsoft Office 365 Calendar,", retrieved on February 29, 2016
  6. 1st Setup Admin, "Exchange EWS Provider Add-on for Lightning," , retrieved on February 29, 2016
  7. Ericsson Exchange Calendar Team on Github, "How to Add Your Calendar to Thunderbird,", retrieved on February 29, 2016
  8. Ericsson Exchange Calendar Team on Github, "Exchange Calendar Lightning Add-on Release,", retrieved on February 29, 2016

Monday, February 22, 2016

Funding STEM at the Cost of Liberal Arts?

Again, STEM or not? I saw an article in New York Times on funding STEM at the cost of liberal arts. This argument has been going on for a while and this New York Times article is not going to be the last one. Many feel very strong about this, for it or against it.

I am using this post as a bookmark for this type of news articles. I'll come back and add more ...

A Rising Call to Promote STEM Education and Cut Liberal Arts Funding, By PATRICIA COHENFEB. NY Times. 21, 2016.

On Exception Handling

Exception and error handling is a subtle and important issue. This is just a note on a few good reads on exception handling.

Wednesday, February 17, 2016

Tools for Writing

This is just a bookmark on a number of writing tools,
  • Jupyter Notebook. "The Jupyter Notebook is a web application for interactive data science and scientific computing."
  • Authorea. Authorea is the collaborative editor for research. Write and manage your documents in one place, for free. 
  •  Overleaf. Overleaf is a collaborative writing and publishing system for writing and previewing in LaTex.