<commit_before>#+TITLE: Stuff To Do
#+LATEX_COMPILER: xelatex
#+LATEX_CLASS: article
#+LATEX_CLASS_OPTIONS: [12pt]
#+LATEX_HEADER: \usepackage{xltxtra}
#+LATEX_HEADER: \usepackage[margin=1in]{geometry}
#+LATEX_HEADER: \setmainfont[Ligatures={Common}]{Latin Modern Roman}

* Project Task List
  :PROPERTIES:
  :CUSTOM_ID: task-list
  :END:

** DONE Documentation default format
   CLOSED: [2018-02-15 Thu 21:29]
   :PROPERTIES:
   :CUSTOM_ID: todo-docs-default
   :END:

   Decide on a default file format for documentation.  The two main
   contenders being Org Mode, the default for the GnuPG Project and
   reStructuredText, the default for Python projects.  A third option
   of DITA XML was considered due to a number of beneficial features
   it provides.

   The decision was made to use Org Mode in order to fully integrate
   with the rest of the GPGME and GnuPG documentation.  It is possible
   to produce reST versions via Pandoc and DITA XML can be reached
   through converting to either Markdown or XHTML first.

** TODO Documentation HOWTO
   :PROPERTIES:
   :CUSTOM_ID: todo-docs-howto
   :END:

   Write a HOWTO style guide for the current Python bindings.

*** DONE Start python bindings HOWTO
    CLOSED: [2018-03-07 Wed 18:14]
    :PROPERTIES:
    :CUSTOM_ID: howto-start
    :END:

** TODO Documentation SWIG
   :PROPERTIES:
   :CUSTOM_ID: todo-docs-swig
   :END:

   Write documentation for the complete SWIG bindings demonstrating
   the correspondence with GPGME itself.

   Note: it is likely that this will be more in the nature of
   something to be used in conjunction with the existing GPGME
   documentation which makes it easier for Python developers to use.

** TODO GUI examples
   :PROPERTIES:
   :CUSTOM_ID: todo-gui-examples
   :END:

   Create some examples of using Python bindings in a GUI application
   to either match or be similar to the old GTK2 examples available
   with PyME.

** TODO Replace SWIG
   :PROPERTIES:
   :CUSTOM_ID: todo-replace-swig
   :END:

   Selecting SWIG for this project in 2002 was understandable and
   effectively the only viable option.  The options available now,
   however, are significantly improved and some of those would resolve
   a number of existing problems with using SWIG, particularly when
   running code on both POSIX compliant and Windows platforms.

   The long term goal is to replace SWIG by reimplementing the Python
   bindings using a more suitable means of interfacing with the GPGME
   C source code.

*** TODO Replacement for SWIG
    :PROPERTIES:
    :CUSTOM_ID: todo-replace-swig-replacement
    :END:

    Decide on a replacement for SWIG.  Currently CFFI is looking like
    the most viable candidate, but some additional testing and checks
    are yet to be completed.

** TODO API for an API
   :PROPERTIES:
   :CUSTOM_ID: todo-api-squared
   :END:

   A C API like GPGME is not what most modern developers think of when
   they hear the term API. Normally they think of something they can
   interact with like a RESTful web API.  Though RESTful is unlikely
   given the nature of GPGME and the process of encryption, it may be
   possible to provide a more familiar interface which can be utilised
   by developers of other languages for which bindings are not
   available or for which it is too difficult to create proper
   bindings.


* Project Task Details
  :PROPERTIES:
  :CUSTOM_ID: detailed-tasks
  :END:

** Working examples
   :PROPERTIES:
   :CUSTOM_ID: working-examples
   :END:

   The old GUI examples were unable to be retained since they depended
   on GTK2 and Python 2's integration with GTK2.

   Current GPGME examples so far only include command line tools or
   basic Python code for use with either Python 2.7 or Python 3.4 and
   above.

   Future GUI examples ought to utilise available GUI modules and
   libraries supported by Python 3.  This may include Qt frameworks,
   Tkinter, GTK3 or something else entirely.

** Documentation
   :PROPERTIES:
   :CUSTOM_ID: documentation
   :END:

   The legacy documentation which no longer applies to the Python
   bindings has been removed.

   Current and future documentation will adhere to the GnuPG standard
   of using Org Mode and not use the reStructuredText (reST) format
   more commonly associated with Python documentation.  The reasons
   for this are that this project is best served as shipping with the
   rest of GPGME and the documentation ought to match that.  There are
   also aspects of Org Mode's publishing features which are superior
   to the defaults of reST, including the capacity to generate fully
   validating strict XHTML output.

   If reST files are required at a later point for future inclusion
   with other Python packages, then that format can be generated from
   the .org files with Pandoc before being leveraged by either
   Docutils, Sphinx or something else.

   While there are some advanced typesetting features of reST which
   are not directly available to Org Mode, more often than not those
   features are best implemented with either HTML and CSS, with LaTeX
   to produce a PDF or via a number of XML solutions.  Both reST and
   Org Mode have multiple paths by which to achieve all of these.
<commit_msg>doc: Added multiple TODOs for inclusion in the HOWTO<commit_after>#+TITLE: Stuff To Do
#+LATEX_COMPILER: xelatex
#+LATEX_CLASS: article
#+LATEX_CLASS_OPTIONS: [12pt]
#+LATEX_HEADER: \usepackage{xltxtra}
#+LATEX_HEADER: \usepackage[margin=1in]{geometry}
#+LATEX_HEADER: \setmainfont[Ligatures={Common}]{Latin Modern Roman}

* Project Task List
  :PROPERTIES:
  :CUSTOM_ID: task-list
  :END:

** DONE Documentation default format
   CLOSED: [2018-02-15 Thu 21:29]
   :PROPERTIES:
   :CUSTOM_ID: todo-docs-default
   :END:

   Decide on a default file format for documentation.  The two main
   contenders being Org Mode, the default for the GnuPG Project and
   reStructuredText, the default for Python projects.  A third option
   of DITA XML was considered due to a number of beneficial features
   it provides.

   The decision was made to use Org Mode in order to fully integrate
   with the rest of the GPGME and GnuPG documentation.  It is possible
   to produce reST versions via Pandoc and DITA XML can be reached
   through converting to either Markdown or XHTML first.

** STARTED Documentation HOWTO
   :PROPERTIES:
   :CUSTOM_ID: todo-docs-howto
   :END:

   - State "STARTED"    from "TODO"       [2018-03-08 Thu 13:59] \\
     Started yesterday.
   Write a HOWTO style guide for the current Python bindings.

*** DONE Start python bindings HOWTO
    CLOSED: [2018-03-07 Wed 18:14]
    :PROPERTIES:
    :CUSTOM_ID: howto-start
    :END:

*** TODO Include certain specific instructions in the HOWTO
    :PROPERTIES:
    :CUSTOM_ID: howto-requests
    :END:

    Some functions can be worked out from the handful of examples
    available, but many more can't and I've already begun receiving
    requests for certain functions to be explained.

**** TODO Standard scenarios
     :PROPERTIES:
     :CUSTOM_ID: howto-the-basics
     :END:

     What everyone expects: encryption, decryption, signing and verifying.

**** TODO Key control
     :PROPERTIES:
     :CUSTOM_ID: howto-key-control
     :END:

     Generating keys, adding subkeys, revoking subkeys (and keeping
     the cert key), adding and revoking UIDs, signing/certifying keys.

**** TODO Key control
     :PROPERTIES:
     :CUSTOM_ID: howto-key-selection
     :END:

     Selecting keys to encrypt to or manipulate in other ways (e.g. as
     with key control or the basics).

**** TODO S/MIME
     :PROPERTIES:
     :CUSTOM_ID: howto-s-mime
     :END:

     Eventually add some of this, but it the OpenPGP details are far
     more important at the moment.

** TODO Documentation SWIG
   :PROPERTIES:
   :CUSTOM_ID: todo-docs-swig
   :END:

   Write documentation for the complete SWIG bindings demonstrating
   the correspondence with GPGME itself.

   Note: it is likely that this will be more in the nature of
   something to be used in conjunction with the existing GPGME
   documentation which makes it easier for Python developers to use.

** TODO GUI examples
   :PROPERTIES:
   :CUSTOM_ID: todo-gui-examples
   :END:

   Create some examples of using Python bindings in a GUI application
   to either match or be similar to the old GTK2 examples available
   with PyME.

** TODO Replace SWIG
   :PROPERTIES:
   :CUSTOM_ID: todo-replace-swig
   :END:

   Selecting SWIG for this project in 2002 was understandable and
   effectively the only viable option.  The options available now,
   however, are significantly improved and some of those would resolve
   a number of existing problems with using SWIG, particularly when
   running code on both POSIX compliant and Windows platforms.

   The long term goal is to replace SWIG by reimplementing the Python
   bindings using a more suitable means of interfacing with the GPGME
   C source code.

*** TODO Replacement for SWIG
    :PROPERTIES:
    :CUSTOM_ID: todo-replace-swig-replacement
    :END:

    Decide on a replacement for SWIG.  Currently CFFI is looking like
    the most viable candidate, but some additional testing and checks
    are yet to be completed.

** TODO API for an API
   :PROPERTIES:
   :CUSTOM_ID: todo-api-squared
   :END:

   A C API like GPGME is not what most modern developers think of when
   they hear the term API. Normally they think of something they can
   interact with like a RESTful web API.  Though RESTful is unlikely
   given the nature of GPGME and the process of encryption, it may be
   possible to provide a more familiar interface which can be utilised
   by developers of other languages for which bindings are not
   available or for which it is too difficult to create proper
   bindings.


* Project Task Details
  :PROPERTIES:
  :CUSTOM_ID: detailed-tasks
  :END:

** Working examples
   :PROPERTIES:
   :CUSTOM_ID: working-examples
   :END:

   The old GUI examples were unable to be retained since they depended
   on GTK2 and Python 2's integration with GTK2.

   Current GPGME examples so far only include command line tools or
   basic Python code for use with either Python 2.7 or Python 3.4 and
   above.

   Future GUI examples ought to utilise available GUI modules and
   libraries supported by Python 3.  This may include Qt frameworks,
   Tkinter, GTK3 or something else entirely.

** Documentation
   :PROPERTIES:
   :CUSTOM_ID: documentation
   :END:

   The legacy documentation which no longer applies to the Python
   bindings has been removed.

   Current and future documentation will adhere to the GnuPG standard
   of using Org Mode and not use the reStructuredText (reST) format
   more commonly associated with Python documentation.  The reasons
   for this are that this project is best served as shipping with the
   rest of GPGME and the documentation ought to match that.  There are
   also aspects of Org Mode's publishing features which are superior
   to the defaults of reST, including the capacity to generate fully
   validating strict XHTML output.

   If reST files are required at a later point for future inclusion
   with other Python packages, then that format can be generated from
   the .org files with Pandoc before being leveraged by either
   Docutils, Sphinx or something else.

   While there are some advanced typesetting features of reST which
   are not directly available to Org Mode, more often than not those
   features are best implemented with either HTML and CSS, with LaTeX
   to produce a PDF or via a number of XML solutions.  Both reST and
   Org Mode have multiple paths by which to achieve all of these.

{'fraction_non_alphanumeric': 0.045862924617095915, 'fraction_numerical': 0.00804312483956533, 'mean_word_length': 3.467889908256881, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '325448', 'n_tokens_mistral': 3440, 'n_tokens_neox': 3249, 'n_words': 1600}