File Transfer Widget

The lab needs a file-transfer widget to support app development. It should have the ability to:

  1. Interface with Dropbox (i.e., transfer user-specified files to the server).
  2. Interface with Google drive.
  3. Interface with OneDrive.
  4. Interface with Box.
  5. Upload files directly from the hard drive, using this very nice bootstrap plugin.

Each of these systems should be accessible through the same functions. So, for example, to identify a file I would always call the same TypeScript function, which would accept as one of its parameters which external file system to use (e.g., fileSystem = “DROPBOX”).

Here are the functions needed:

  1. Authenticate the user.
  2. Allow the user to specify which external file to transfer.
  3. Transfer the file from the remote system.
  4. Upload a file to the remote system.
  5. List the files on a remote drive.
  6. Delete/move remote files.

There are published packages that can do this, but as best I can tell they have some limitations:

  1. Dependency on external servers via REST API (which may or may not be here 5 years from now).
  2. Require a subscription.

It would be good to investigate before starting to make sure there isn’t suitable code already published.

I imagine this project will be publicly available and open sourced.

3DMol Mesh Data Extractor

This project focuses on extending 3DMol.js with functions that make the meshes it generates accessible to outside frameworks. 3DMol.js is a great web-based molecular visualizer. It’s very well suited for displaying molecules, but I’m also interested in better accessing the meshes it renders (e.g., it can quickly render surface representations in a browser!). The mesh data (vertices, vertex colors, normals) could then be imported into other 3D environments (e.g., babylon.js, three.js, Blender, etc.).

More Generalized AJAX

Our lab creates free drug-discovery apps that run both in the cloud (through a browser) and on the desktop (using nw.js). These apps are based mostly on Typescript. The web-based versions communicate with our remote servers through ajax calls, mostly to node.js cgi scripts. We need to be able to do the same on the desktop versions of our apps.

This project involves creating a Typescript function that:

  1. Accepts POST data as input.
  2. Detects whether or not it’s being run from within a browser or nw.js.
  3. Passes the POST data through AJAX if it’s in a browser, or to a local file if running in nw.js.
  4. Accepts a callback function to process the returned data.

The AJAX should be managed using JQuery’s $.ajax function.

Menu System

Our lab creates applications that run on both the web (through the browser) and the desktop (through nw.js). These applications are based mostly on Javascript (Typescript, really). The way web and desktop apps manage menus are very different, though. Desktop menus tend to look like this:



Web menus look like this:

We need a single Typescript function that accepts a json object that fully describes how a menu should behave (i.e., the structure, which functions to call when clicked, etc.). This function should support disabled menu items, as well as separator bars. Based on a boolean parameter (isBrowser), the function renders a browser-based menu  or a windows-based/nw.js menu.

PubChem API

When we discover a new molecule that might one day be developed into a drug, it’s helpful to know if other scientists have discovered that that same molecule is useful elsewhere. This project involves creating a TypeScript function that:

  1. As input, accepts a molecule represented as a smiles string.
  2. Makes an AJAX call to the PubChem servers to download information about that molecule. This link and this link should be helpful. We’re especially interested in learning if the molecule was active in any bioassays (perhaps here)?
  3. The function encodes that data and returns it as a JSON.