[prev in list] [next in list] [prev in thread] [next in thread] 

List:       qgis-developer
Subject:    Re: [Qgis-developer] automatic sip files generation
From:       Matthias Kuhn <matthias () opengis ! ch>
Date:       2017-03-30 19:55:08
Message-ID: 8da584aa-a77a-0d8f-a116-17c21a596085 () opengis ! ch
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Hi

On 3/30/17 8:31 PM, Tim Sutton wrote:
> Hi
> 
> > On 30 Mar 2017, at 5:08 PM, Matthias Kuhn <matthias@opengis.ch
> > <mailto:matthias@opengis.ch>> wrote:
> > 
> > Hi Denis,
> > 
> > Thanks a lot for finishing this.
> > 
> > I am really excited and expect less troubles on the sip front in the
> > long-term.
> > 
> > Tim, actually the generated python code now includes python DocStrings,
> > so it should be much easier to inspect an appropriate python
> > documentation directly with `help(QgsVectorLayer)` etc.
> > 
> > And to automatically generate an up-to-date python documentation.
> 
> This is really great! I guess the next step would be to see if we can
> use autodoc to generate python documentation on the python libs. If
> that works it will go a long way towards bump starting the Python API
> work that Wes and Francisco were going to work on under a small QGIS
> funded project. The project never got out the starting gates because
> we could not come up with an elegant build system.
Having more people improve on this system will be very welcome, there
are plenty of nice little bells and whistles to add!

> 
> Might I suggest that we do our python documentation in a sphinx
> friendly way? So for example where you did:
> 
> @versionadded 3.0
> in https://github.com/qgis/QGIS/pull/4318/files#diff-356d7cb762f7b9dfa4526f102450a9aaR41
>  
> it would become
> 
> ..versionadded:: 3.0
> 
> See http://www.sphinx-doc.org/en/stable/markup/para.html
> 
> Since we are in green fields with python docstrings here it would be
> nice to have everything clean and neat and pythonic out the gate. Or
> are there some restrictions in the sippy annotations that require you
> to use a certain docstring style?
These doc strings are generated from the C++ doc strings. But since they
are a pretty simple syntax, it shouldn't be hard to improve sipify.pl to
also convert a set of doxygen tags to their pythonic equivalent. We
might want to unify the doxygen style as well within this process.

Cheers
Matthias
> Regards
> 
> Tim
> 
> > 
> > Cheers
> > Matthias
> > 
> > On 03/30/2017 05:02 PM, Denis Rouzaud wrote:
> > > 
> > > 
> > > Le jeu. 30 mars 2017 Ã  16:56, Tim Sutton <tim@kartoza.com
> > > <mailto:tim@kartoza.com>
> > > <mailto:tim@kartoza.com>> a écrit :
> > > 
> > > Hi
> > > 
> > > > On 30 Mar 2017, at 3:18 PM, Denis Rouzaud
> > > > <denis.rouzaud@gmail.com <mailto:denis.rouzaud@gmail.com>
> > > > <mailto:denis.rouzaud@gmail.com>> wrote:
> > > > 
> > > > Dear all,
> > > > 
> > > > I'd like to raise the attention on a new workflow I just merged to
> > > > automatically generate SIP files using the header as source only.
> > > > 
> > > > A PR is pending for the documentation, but you can read it here
> > > > https://github.com/3nids/QGIS-Documentation/blob/6e3a9fb6f98a2869aef27c01b7ab70eb0a4c7556/source/docs/developers_guide/codingstandards.rst#sip-bindings
> > > >  (waiting to be merged).
> > > > 
> > > > For the moment, only 3 files are generated (qgsattributes,
> > > > qgsfeature and qgsvectorlayer). One can starts adding new files to
> > > > the process by adapting their header and removing them from
> > > > python/auto_sip.blacklist.
> > > 
> > > This is really great! A couple of questions:
> > > 
> > > 1) the blacklist implies that any new .h files added to the source
> > > tree will automatically have sip bindings generated unless you
> > > explicitly blacklist them?
> > > 
> > > 
> > > As soon as you add the include in python/core/core.sip (or gui,
> > > analysis), the SIP is considered as automatically generated from header
> > > except if you blacklist it.
> > > 
> > > 
> > > 2) are you thinking to maintain the sip files in Git still or remove
> > > the from revision in favour of having them as build time artifacts
> > > only? I ask this because I often direct people to use the sip files
> > > as a reference guide for the python API if they want to dig under
> > > the hood a bit more.
> > > 
> > > 
> > > The goal is to remove the SIP files and have them created on build time.
> > > But:
> > > 1) I except a few errors in the script to arise (so better to have an
> > > easy access to the SIP files)
> > > 2) it needs to reach a significant point of ported headers.
> > > 
> > > So, in a somehow close or far future, yes they'll be removed from source
> > > (hence no blacklist anymore only manual files such as
> > > core/conversions.sip).
> > > 
> > > 
> > > _______________________________________________
> > > Qgis-developer mailing list
> > > Qgis-developer@lists.osgeo.org <mailto:Qgis-developer@lists.osgeo.org>
> > > List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> > > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> > > 
> > _______________________________________________
> > Qgis-developer mailing list
> > Qgis-developer@lists.osgeo.org <mailto:Qgis-developer@lists.osgeo.org>
> > List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> 
> —
> 
> 
> 
> 
> 
> 
> 
> 
> 
> *Tim Sutton*
> 
> *Co-founder:* Kartoza
> *Project chair:* QGIS.org <http://QGIS.org>
> 
> Visit http://kartoza.com <http://kartoza.com/> to find out about open
> source:
> 
> Desktop GIS programming services
> Geospatial web development
> GIS Training
> Consulting Services
> 
> *Skype*: timlinux 
> *IRC:* timlinux on #qgis at freenode.net <http://freenode.net>
> 
> Kartoza is a merger between Linfiniti and Afrispatial
> 


[Attachment #5 (multipart/related)]

[Attachment #7 (text/html)]

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p>Hi<br>
    </p>
    <div class="moz-cite-prefix">On 3/30/17 8:31 PM, Tim Sutton wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:5C8A99CD-55FF-4E10-A136-C81A4C812DEE@kartoza.com">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      Hi
      <div class=""><br class="">
        <div>
          <blockquote type="cite" class="">
            <div class="">On 30 Mar 2017, at 5:08 PM, Matthias Kuhn &lt;<a
                href="mailto:matthias@opengis.ch" class=""
                moz-do-not-send="true">matthias@opengis.ch</a>&gt;
              wrote:</div>
            <br class="Apple-interchange-newline">
            <div class=""><span style="font-family: Helvetica-Light;
                font-size: 14px; font-style: normal; font-variant-caps:
                normal; font-weight: normal; letter-spacing: normal;
                orphans: auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" class="">Hi
                Denis,</span><br style="font-family: Helvetica-Light;
                font-size: 14px; font-style: normal; font-variant-caps:
                normal; font-weight: normal; letter-spacing: normal;
                orphans: auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <br style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" class="">Thanks
                a lot for finishing this.</span><br style="font-family:
                Helvetica-Light; font-size: 14px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; orphans: auto; text-align:
                start; text-indent: 0px; text-transform: none;
                white-space: normal; widows: auto; word-spacing: 0px;
                -webkit-text-stroke-width: 0px;" class="">
              <br style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" class="">I am
                really excited and expect less troubles on the sip front
                in the</span><br style="font-family: Helvetica-Light;
                font-size: 14px; font-style: normal; font-variant-caps:
                normal; font-weight: normal; letter-spacing: normal;
                orphans: auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" \
class="">long-term.</span><br  style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <br style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" class="">Tim,
                actually the generated python code now includes python
                DocStrings,</span><br style="font-family:
                Helvetica-Light; font-size: 14px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; orphans: auto; text-align:
                start; text-indent: 0px; text-transform: none;
                white-space: normal; widows: auto; word-spacing: 0px;
                -webkit-text-stroke-width: 0px;" class="">
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" class="">so it
                should be much easier to inspect an appropriate python</span><br
                style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" class="">documentation
                directly with `help(QgsVectorLayer)` etc.</span><br
                style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <br style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" class="">And
                to automatically generate an up-to-date python
                documentation.</span><br style="font-family:
                Helvetica-Light; font-size: 14px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; orphans: auto; text-align:
                start; text-indent: 0px; text-transform: none;
                white-space: normal; widows: auto; word-spacing: 0px;
                -webkit-text-stroke-width: 0px;" class="">
            </div>
          </blockquote>
          <div><br class="">
          </div>
          <div>This is really great! I guess the next step would be to
            see if we can use autodoc to generate python documentation
            on the python libs. If that works it will go a long way
            towards bump starting the Python API work that Wes and
            Francisco were going to work on under a small QGIS funded
            project. The project never got out the starting gates
            because we could not come up with an elegant build system.</div>
        </div>
      </div>
    </blockquote>
    Having more people improve on this system will be very welcome,
    there are plenty of nice little bells and whistles to add!<br>
    <br>
    <blockquote type="cite"
      cite="mid:5C8A99CD-55FF-4E10-A136-C81A4C812DEE@kartoza.com">
      <div class="">
        <div>
          <div><br class="">
          </div>
          <div>Might I suggest that we do our python documentation in a
            sphinx friendly way? So for example where you did:</div>
          <div><br class="">
          </div>
          <div>@versionadded 3.0 in <a
href="https://github.com/qgis/QGIS/pull/4318/files#diff-356d7cb762f7b9dfa4526f102450a9aaR41"
                
              class="" \
moz-do-not-send="true">https://github.com/qgis/QGIS/pull/4318/files#diff-356d7cb762f7b9dfa4526f102450a9aaR41</a></div>
  <div><br class="">
          </div>
          <div>it would become</div>
          <div><br class="">
          </div>
          <div>..versionadded:: 3.0</div>
        </div>
      </div>
    </blockquote>
    <blockquote type="cite"
      cite="mid:5C8A99CD-55FF-4E10-A136-C81A4C812DEE@kartoza.com">
      <div class="">
        <div>
          <div><br class="">
          </div>
          <div>See <a
              href="http://www.sphinx-doc.org/en/stable/markup/para.html"
              class="" \
moz-do-not-send="true">http://www.sphinx-doc.org/en/stable/markup/para.html</a></div> \
<div><br class="">  </div>
          <div>Since we are in green fields with python docstrings here
            it would be nice to have everything clean and neat and
            pythonic out the gate. Or are there some restrictions in the
            sippy annotations that require you to use a certain
            docstring style?</div>
        </div>
      </div>
    </blockquote>
    These doc strings are generated from the C++ doc strings. But since
    they are a pretty simple syntax, it shouldn't be hard to improve
    sipify.pl to also convert a set of doxygen tags to their pythonic
    equivalent. We might want to unify the doxygen style as well within
    this process.<br>
    <br>
    Cheers<br>
    Matthias<br>
    <blockquote type="cite"
      cite="mid:5C8A99CD-55FF-4E10-A136-C81A4C812DEE@kartoza.com">
      <div class="">
        <div>
          <div>Regards</div>
          <div><br class="">
          </div>
          <div>Tim</div>
          <br class="">
          <blockquote type="cite" class="">
            <div class=""><br style="font-family: Helvetica-Light;
                font-size: 14px; font-style: normal; font-variant-caps:
                normal; font-weight: normal; letter-spacing: normal;
                orphans: auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" class="">Cheers</span><br
                style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" class="">Matthias</span><br
                style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <br style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" class="">On
                03/30/2017 05:02 PM, Denis Rouzaud wrote:</span><br
                style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <blockquote type="cite" style="font-family:
                Helvetica-Light; font-size: 14px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; orphans: auto; text-align:
                start; text-indent: 0px; text-transform: none;
                white-space: normal; widows: auto; word-spacing: 0px;
                -webkit-text-size-adjust: auto;
                -webkit-text-stroke-width: 0px;" class=""><br class="">
                <br class="">
                Le jeu. 30 mars 2017 à 16:56, Tim Sutton &lt;<a
                  href="mailto:tim@kartoza.com" class=""
                  moz-do-not-send="true">tim@kartoza.com</a><br class="">
                &lt;<a href="mailto:tim@kartoza.com" class=""
                  moz-do-not-send="true">mailto:tim@kartoza.com</a>&gt;&gt;
                a écrit :<br class="">
                <br class="">
                   Hi<br class="">
                <br class="">
                <blockquote type="cite" class="">   On 30 Mar 2017, at
                  3:18 PM, Denis Rouzaud &lt;<a
                    href="mailto:denis.rouzaud@gmail.com" class=""
                    moz-do-not-send="true">denis.rouzaud@gmail.com</a><br
                    class="">
                     &lt;<a href="mailto:denis.rouzaud@gmail.com"
                    class="" \
moz-do-not-send="true">mailto:denis.rouzaud@gmail.com</a>&gt;&gt;  wrote:<br \
class="">  <br class="">
                     Dear all,<br class="">
                  <br class="">
                     I'd like to raise the attention on a new workflow I
                  just merged to<br class="">
                     automatically generate SIP files using the header
                  as source only.<br class="">
                  <br class="">
                     A PR is pending for the documentation, but you can
                  read it here<br class="">
                     <a
href="https://github.com/3nids/QGIS-Documentation/blob/6e3a9fb6f98a2869aef27c01b7ab70eb0a4c7556/source/docs/developers_guide/codingstandards.rst#sip-bindings"
  class="" moz-do-not-send="true">https://github.com/3nids/QGIS-Documentation/blob/6e3 \
a9fb6f98a2869aef27c01b7ab70eb0a4c7556/source/docs/developers_guide/codingstandards.rst#sip-bindings</a><br
  class="">
                     (waiting to be merged).<br class="">
                  <br class="">
                     For the moment, only 3 files are generated
                  (qgsattributes,<br class="">
                     qgsfeature and qgsvectorlayer). One can starts
                  adding new files to<br class="">
                     the process by adapting their header and removing
                  them from<br class="">
                     python/auto_sip.blacklist.<br class="">
                </blockquote>
                <br class="">
                   This is really great! A couple of questions:<br
                  class="">
                <br class="">
                   1) the blacklist implies that any new .h files added
                to the source<br class="">
                   tree will automatically have sip bindings generated
                unless you<br class="">
                   explicitly blacklist them?<br class="">
                <br class="">
                <br class="">
                As soon as you add the include in python/core/core.sip
                (or gui,<br class="">
                analysis), the SIP is considered as automatically
                generated from header<br class="">
                except if you blacklist it.<br class="">
                <br class="">
                <br class="">
                   2) are you thinking to maintain the sip files in Git
                still or remove<br class="">
                   the from revision in favour of having them as build
                time artifacts<br class="">
                   only? I ask this because I often direct people to use
                the sip files<br class="">
                   as a reference guide for the python API if they want
                to dig under<br class="">
                   the hood a bit more.<br class="">
                <br class="">
                <br class="">
                The goal is to remove the SIP files and have them
                created on build time.<br class="">
                But:<br class="">
                1) I except a few errors in the script to arise (so
                better to have an<br class="">
                easy access to the SIP files)<br class="">
                2) it needs to reach a significant point of ported
                headers.<br class="">
                <br class="">
                So, in a somehow close or far future, yes they'll be
                removed from source<br class="">
                (hence no blacklist anymore only manual files such as
                core/conversions.sip).<br class="">
                <br class="">
                <br class="">
                _______________________________________________<br
                  class="">
                Qgis-developer mailing list<br class="">
                <a href="mailto:Qgis-developer@lists.osgeo.org" class=""
                  moz-do-not-send="true">Qgis-developer@lists.osgeo.org</a><br
                  class="">
                List info:<span class="Apple-converted-space"> </span><a
href="https://lists.osgeo.org/mailman/listinfo/qgis-developer" class=""
                  moz-do-not-send="true">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a><br
  class="">
                Unsubscribe:<span class="Apple-converted-space"> </span><a
href="https://lists.osgeo.org/mailman/listinfo/qgis-developer" class=""
                  moz-do-not-send="true">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a><br
  class="">
                <br class="">
              </blockquote>
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" \
class="">_______________________________________________</span><br  \
style="font-family: Helvetica-Light; font-size: 14px;  font-style: normal; \
font-variant-caps: normal;  font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" class="">Qgis-developer
                mailing list</span><br style="font-family:
                Helvetica-Light; font-size: 14px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; orphans: auto; text-align:
                start; text-indent: 0px; text-transform: none;
                white-space: normal; widows: auto; word-spacing: 0px;
                -webkit-text-stroke-width: 0px;" class="">
              <a href="mailto:Qgis-developer@lists.osgeo.org"
                style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-size-adjust: auto;
                -webkit-text-stroke-width: 0px;" class=""
                moz-do-not-send="true">Qgis-developer@lists.osgeo.org</a><br
                style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" class="">List
                info:<span class="Apple-converted-space"> </span></span><a
href="https://lists.osgeo.org/mailman/listinfo/qgis-developer"
                style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-size-adjust: auto;
                -webkit-text-stroke-width: 0px;" class=""
                moz-do-not-send="true">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a><br
  style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;"
                class="">
              <span style="font-family: Helvetica-Light; font-size:
                14px; font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                float: none; display: inline !important;" class="">Unsubscribe:<span
                  class="Apple-converted-space"> </span></span><a
                href="https://lists.osgeo.org/mailman/listinfo/qgis-developer"
                style="font-family: Helvetica-Light; font-size: 14px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-size-adjust: auto;
                -webkit-text-stroke-width: 0px;" class=""
                moz-do-not-send="true">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a></div>
  </blockquote>
        </div>
        <br class="">
        <div class="">
          <div style="color: rgb(0, 0, 0); font-family: Helvetica;
            font-size: 12px; font-style: normal; font-variant-ligatures:
            normal; font-variant-position: normal; font-variant-caps:
            normal; font-variant-numeric: normal;
            font-variant-alternates: normal; font-variant-east-asian:
            normal; font-weight: normal; letter-spacing: normal;
            orphans: auto; text-indent: 0px; text-transform: none;
            white-space: normal; widows: auto; word-spacing: 0px;
            -webkit-text-stroke-width: 0px; line-height: normal;
            text-align: center;" class=""><span>—</span></div>
          <div style="color: rgb(0, 0, 0); font-family: Helvetica;
            font-size: 12px; font-style: normal; font-variant-ligatures:
            normal; font-variant-position: normal; font-variant-caps:
            normal; font-variant-numeric: normal;
            font-variant-alternates: normal; font-variant-east-asian:
            normal; letter-spacing: normal; orphans: auto; text-indent:
            0px; text-transform: none; white-space: normal; widows:
            auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
            line-height: normal; text-align: center;" class="">
            <div style="color: rgb(0, 0, 0); font-family: Helvetica;
              font-size: 12px; font-style: normal; font-variant-caps:
              normal; font-weight: normal; letter-spacing: normal;
              orphans: auto; text-align: center; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-size-adjust: auto;
              -webkit-text-stroke-width: initial;
              font-variant-ligatures: normal; font-variant-position:
              normal; font-variant-numeric: normal;
              font-variant-alternates: normal; font-variant-east-asian:
              normal; margin: 0px; line-height: normal;
              -webkit-text-stroke-color: rgb(0, 0, 0); min-height:
              14px;" class=""><br class="">
            </div>
            <br class="Apple-interchange-newline" style="color: rgb(0,
              0, 0); font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant-caps: normal;
              font-weight: normal; letter-spacing: normal; orphans:
              auto; text-align: center; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-size-adjust: auto;
              -webkit-text-stroke-width: 0px;">
            <span style="color: rgb(0, 0, 0); font-family: Helvetica;
              font-size: 12px; font-style: normal; font-variant-caps:
              normal; font-weight: normal; letter-spacing: normal;
              orphans: auto; text-align: center; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-size-adjust: auto;
              -webkit-text-stroke-width: 0px;"><span><span><span><span><span><img
                          apple-inline="yes"
                          id="7E67CBA5-AC01-4C37-8203-F6ACD701E252"
                          src="cid:part15.BDC22BF4.E0BC1B07@opengis.ch"
                          class=""></span>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0); min-height: 14px;" class=""><br
                          class="Apple-interchange-newline">
                        <br class="Apple-interchange-newline">
                        <br class="Apple-interchange-newline">
                        <br class="Apple-interchange-newline">
                        <br class="Apple-interchange-newline">
                        <br class="">
                      </div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0); min-height: 14px;" class=""><br
                          class="">
                      </div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0);" class=""><b class="">Tim Sutton</b></div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0); min-height: 14px;" class=""><br
                          class="">
                      </div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0);" class=""><b class="">Co-founder:</b><span
                          class="Apple-converted-space"> </span>Kartoza</div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0);" class=""><b class="">Project
                          chair:</b><span style="font-weight: normal;"
                          class=""><span class="Apple-converted-space"> </span><a
                            href="http://QGIS.org" class=""
                            moz-do-not-send="true">QGIS.org</a></span></div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0); min-height: 14px;" class=""><br
                          class="">
                      </div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0);" class="">Visit <a
                          href="http://kartoza.com/" class=""
                          moz-do-not-send="true"><span
                            style="-webkit-text-stroke-color: rgb(71,
                            135, 255);" class="">http://kartoza.com</span></a> to
                        find out about open source:</div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0); min-height: 14px;" class=""><br
                          class="">
                      </div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0);" class="">Desktop GIS programming
                        services</div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0);" class="">Geospatial web
                        development</div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0);" class="">GIS Training</div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0);" class="">Consulting Services</div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0); min-height: 14px;" class=""><br
                          class="">
                      </div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0);" class=""><b class="">Skype</b>:
                        timlinux </div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0);" class=""><b class="">IRC:</b><span
                          class="Apple-converted-space"> </span>timlinux
                        on #qgis at <a href="http://freenode.net"
                          class="" moz-do-not-send="true">freenode.net</a></div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0);" class=""><br class="">
                      </div>
                      <div style="color: rgb(0, 0, 0); font-family:
                        Helvetica; font-size: 12px; font-style: normal;
                        font-variant-caps: normal; font-weight: normal;
                        letter-spacing: normal; orphans: auto;
                        text-align: center; text-indent: 0px;
                        text-transform: none; white-space: normal;
                        widows: auto; word-spacing: 0px;
                        -webkit-text-size-adjust: auto;
                        -webkit-text-stroke-width: initial;
                        font-variant-ligatures: normal;
                        font-variant-position: normal;
                        font-variant-numeric: normal;
                        font-variant-alternates: normal;
                        font-variant-east-asian: normal; margin: 0px;
                        line-height: normal; -webkit-text-stroke-color:
                        rgb(0, 0, 0);" class="">Kartoza is a merger
                        between Linfiniti and Afrispatial</div>
                    </span></span></span></span></span></div>
        </div>
        <br class="">
      </div>
    </blockquote>
    <br>
  </body>
</html>


["KartozaNewLogoThumbnail.jpg" (image/jpeg)]
[Attachment #9 (text/plain)]

_______________________________________________
Qgis-developer mailing list
Qgis-developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic