Dr. Neil Gunther edited this page Jan 7, 2017 · 57 revisions
Clone this wiki locally

PDQ 7 Development

The primary goal for this release is to make PDQ acceptable for uploading to CRAN. This is a non-trivial exercise because there is some legacy C code in the PDQ library that needs to be reorganized while, at the same time, keeping it consistent for programmatically porting to other languages besides R—chiefly Perl (for the book) and Python.

To get there, the following steps have been identified.

High Priority

  1. Migrate from SourceForge to GitHub.
  2. Change the return type for the following functions from int to void: PDQ_CreateOpen(), PDQ_CreateClosed(), PDQ_CreateNode(), and PDQ_CreateMultiNode(). Using the returned int as a counter was deprecated in version 6.1.1. Must be coordinated with SWIG config files.
  3. Expose the functions PDQ_GetNodesCount() and PDQ_GetStreamsCount() (already in PDQ_Lib.h since PDQ 5.0) to other languages besides C, ~~and update user manual. Check they work in C. These functions compensate for the void-ing of the PDQ_Create functions.
  4. Convert PDQ-R to Rcpp interface.
  5. Clean out the examples/ directory and other contributed code directories leaving only examples that actually use the PDQ C library.
  6. Update all the Help .Rd files.
  7. Rationalize the R demo models.
  8. Fix compiler warning: ./PDQ_Lib.h:40:24: warning: conversion from string literal to 'char *' is deprecated
  9. Add unit tests for PDQ C library as well as Perl, Python, and R languages.
  10. Get PDQ interface accepted on CRAN repository.
  11. Add the ability to solve multi-server queueing nodes servicing an arbitrary number of workloads.
  12. Halt execution if queueing network definition is incomplete per PDQ 6.2.0 note.
  13. Check for duplicate names of PDQ nodes and streams before calling Solve().

Low Priority

  1. Get interface accepted on CPAN and PyPI.
  2. Convert to build system with Cmake rather than makefiles.
  3. Allow longer text in SetComment().
  4. What is the purpose of GetComment() in PDQ_Lib.h? Either expose it or remove it.
  5. Rename PDQ functions and update user manual:
    • GetThruMax to GetThruputMax
    • GetResponse to GetResponseTime
    • CreateOpen to CreateOpenWork
    • CreateClosed to CreateClosedWork
  6. Allow Report() to accept file pointer as arg and update user manual.
  7. Get rid of PDQ_xxx_p() prototypes, which are legacy hangovers for the Solaris SE toolkit.
    • The _p refers to doubles recast as pointers *double
    • The procedure body uses those pointers rather than doubles
  8. Rename should_be_class to pdq_class?
  9. Add PDQ network visualization
    • Parse PDQ code to adjacency matrix (extension of duplicate name detection)
    • Render PDQ queueing network dynamically in browser, e.g., vis.js network
    • vis.js can import Graphviz code
    • Use PNG icons as vis.js nodes (?)
  10. In Perl 5, use pdq means the pdq:: qualifier is not necessary (unlike require pdq). This does not seem to work as advertised in PDQ. It may be a SWIG problem. Possibly the same issue exists with PyDQ.
  11. Allow GetThruMax() to be used for TRANS class (i.e., open QNMs).