Converting MoinMoin pages to Nikola

I have another wiki to take notes. These are written using the MoinMoin syntax, which is nice, but I found no converter from MoinMoin to anything compatible with Nikola.

Following this post http://carreau.github.io/posts/06-NBconvert-Doc-Draft.html , I thought I might give it a try using ipython within nikola:

In [1]:
URL = 'https://URL/cgi-bin/index.cgi/SciBlog/2005-10-29?action=print'

NOTE: this should not be tried with these URLS as they do not exist anymore...

First thoughts...

In [2]:
#import requests
#response = requests.get(URL)
In [3]:
import urllib
f = urllib.urlopen(URL)
pagehtml = f.read()
In [4]:
print len(pagehtml)
13569

... using pandoc

In [7]:
import subprocess
def html2rst(html):
    p = subprocess.Popen(['pandoc', '--from=html', '--to=rst'],
                         stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    return p.communicate(html)[0]
In [8]:
pagerst = html2rst(pagehtml)
print pagerst[-200:]
| et/ScientificPython>`__              |
                                                                             
+--------------------------------------+--------------------------------------+


In [9]:
!nikola new_post --title="05-10-29 craac" --tag="cnrs, craac"
Creating New Post
-----------------

Title: 05-10-29 craac
Scanning posts........done!
[2014-02-11T16:16:23Z] ERROR: new_post: The title already exists!
In [10]:
tmplt = """
.. title: 05-10-29 craac
.. slug: 05-10-29-craac
.. date: 2005-10-29 14:15:23
.. description: importing from moinmoin to nikola
.. type: text
.. tags: cnrs, craac

"""
pagerst = tmplt + pagerst
In [14]:
if False:
    f = file('05-10-29-craac.rst', 'w')
    f.write(pagerst)
    f.close()
In [15]:
!cat '05-10-29-craac.rst'
.. title: 05-10-29 craac
.. slug: 05-10-29-craac
.. date: 2005-10-29 14:15:23
.. description: importing from moinmoin to nikola
.. type: text
.. tags: cnrs, craac

CRAAC 2005
==========

2005-10-24

Récapitulatif de votre saisie : ce document sera soumis au visa de votre
directeur

Compte rendu annuel d'activité des chercheurs du CNRS Année 2004 - 2005

Identité

Nom (nom de jeune fille) PERRINET Prénom Laurent Date de naissance
23/02/1973 Grade CR2 N° d'agent QAF195447 Téléphone 04 91 16 43 64
Télécopie 04 91 16 43 64 Adresse électronique
`laurent.perrinet@incm.cnrs-mrs.fr <mailto:laurent.perrinet@incm.cnrs-mrs.fr>`__
Section(s) du Comité National 7 Département scientifique Sciences de la
vie Délégation régionale Provence Affectation

Intitulé de l'unité Institut de neurosciences cognitives de la
méditerranée - INCM Code unité UMR6193 Directeur Driss BOUSSAOUD Adresse
électronique du directeur
`driss.boussaoud@incm.cnrs-mrs.fr <mailto:driss.boussaoud@incm.cnrs-mrs.fr>`__
Adresse 31 Chemin Joseph Aiguier

-  13402 MARSEILLE CEDEX 20

Téléphone 04 91 16 43 18 Télécopie 04 91 77 49 69 Délégation Provence
Site Web Distinction(s)

Qualification

Habilitation à diriger des recherches non Doctorat d'Etat non Doctorat
oui Année d'obtention 2003 Qualification "Maître de conférences" non
Qualification "Professeur" non Période d'inactivité

Mobilité(s) antérieure(s)

Activités de recherche développées

Rattachement à(aux) activité(s) de recherche de l'unité UMR6193

Intitulé d'activité Date fin du rattachement

-  DYNAMIQUE DE LA PERCEPTION VISUELLE ET DE L'ACTION (DyVA)

Mots clés des sections/CID du Comité national

Section 1 : Équations aux dérivées partielles, optimisation, contrôle,
théorie du signal Section 1 : Probabilités, processus et algorithmes
stochastiques, statistique, analyses des données Section 7 :
Intelligence artificielle : raisonnement, décision, apprentissage
Section 7 : Modélisation, analyse, commande et supervision des systèmes
dynamiques Section 27 : Neurosciences comportementales et cognitives
normales et pathologiques, homme et modèles animaux, imagerie cérébrale
fonctionnelle Section 27 : Modélisation des processus cognitifs et
neurosciences computationnelles Publication(s), parue(s) ou sous presse,
dans des revues à comité de lecture

Référence FISCHER, S.; REDONDO, R.; PERRINET, L.; CRISTOBAL, G. (2005),
«Sparse gabor wavelets by local operations.», Proceedings SPIE, volume
5839 of Bioengineered and Bioinspired Systems, 75 86 PERRINET L. Feature
detection using spikes : the greedy approach. Journal of Physiology,
Paris (special issue) - Sous presse PERRINET L., SAMUELIDES S., THORPE
S.,. Coding static natural images using spiking event times: do neuron
cooperate?. IEEE Transactions on Neural Networks. . . . 15. . .
1164-1175. . PERRINET L.,. Finding independent components using spikes:
A natural result of hebbian learning in a spike coding scheme. Natural
Computing . . . . 3. . . 159-175-. . PERRINET L.;. Emergence of filters
from natural scenes in a sparse spike coding scheme. Neurocomputing. . .
. 58-60. . . 821-826. . PERRINET, L; (2005), «Efficient source detection
using integrate-and-fire neurons.», In W. Duch et al., editor, ICANN
2005, Lecture Notes in Computer Science, volume 3696, pages 167-72
Rafael Redondo, Sylvain Fischer, Laurent Perrinet, and Gabriel
Cristobal. Simple cells modeling through a sparse overcomplete gabor
wavelet representation based on local inhibition and facilitation. In
Gustavo Linan-Cembrano Ricardo A. Carmona, editor, Perception, volume 34
of Bioengineered and Bioinspired Systems II, page 238, August 2005.
Publication(s), parue(s) ou sous presse, dans des revues sans comité de
lecture

Ouvrage(s) ou chapitre(s) d'ouvrage(s), paru(s) ou sous presse

Participation à des manifestations scientifiques

Manifestation Dynn - ACI Temps et Cerveau Type de manifestation (
national ) Lieu Cannes ( FRANCE ) Durée 3 (jour(s))

Manifestation ECVP Type de manifestation ( international ) Lieu La
Corogne ( ESPAGNE ) Durée 5 (jour(s))

Manifestation ICANN Type de manifestation ( international ) Lieu
Varsovie ( POLOGNE ) Durée 5 (jour(s))

Manifestation Maths et Cerveau Type de manifestation ( international )
Lieu Paris ( FRANCE ) Durée 15 (jour(s))

Manifestation Pre-FACETS Workshop on Simulation and Computation Type de
manifestation ( international ) Lieu Graz ( AUTRICHE ) Durée 4 (jour(s))

Activité éditoriale

Rapporteur/Relecteur dans des revues Informations complémentaires
Advanced Concepts for Intelligent Vision Systems (Sept 20-23, 2005,
University of Antwerp, Antwerp, Belgium,
`http://acivs.org/acivs2005/ <http://acivs.org/acivs2005/>`__)

Rapporteur/Relecteur dans des revues Informations complémentaires Neural
Information Processing

Rapporteur/Relecteur dans des revues Informations complémentaires Neural
Processing Letters

Rapporteur/Relecteur dans des revues Informations complémentaires
International Journal of Neural Systems (IJNS)

Séjour(s) dans d'autres laboratoires

Objet Visite et collaboration avec Bruno Olshausen Organisme Redwood
Neuroscience Institute Pays ETATS UNIS Unité RNI Durée annuelle 30 (j)

Objet Collaboration avec Sylvain Fischer et Gabriel Cristobal -
co-publications Organisme CSIC Pays ESPAGNE Unité Instituto de Optica
Durée annuelle 30 (j)

Mission(s) sur le terrain

Formation personnelle

Collaborations

Organisme partenaire CNRS Pays FRANCE ( Europe ) Unité partenaire UMR
Mouvement et Perception Intitulé ANR RETINAE Cadre de la coopération
Nature de l'activité

Organisme partenaire INRIA Pays FRANCE ( Europe ) Unité partenaire
Odyssee Intitulé FACETS Cadre de la coopération AUTRE - contrat europeen
Nature de l'activité Participation à un réseau

Organisme partenaire SUPAERO - CERT Pays FRANCE ( Europe ) Unité
partenaire ONERA Intitulé Reseau Dynn - ACI Temps et Cerveau Cadre de la
coopération Nature de l'activité Participation à un réseau

Encadrement et animation scientifique

Animation scientifique Participation et organisation dans la formation
interne organisee par l'INCM. Enseignement

Valorisation et partenariat

Vulgarisation

Type d'information Intitulé Type de participation Intervention en milieu
scolaire Fete de la Science Participation ponctuelle Administration de
la recherche

--------------

-- `LaurentPerrinet </LaurentPerrinet/LaurentPerrinet>`__ 2005-10-29
13:50:37

and now ... deploy!

another page

In [16]:
DATE, TIME = '2010-06-24', '13:36:57'
TITLE, TAGS = 'installing SUMATRA', 'python, sciblog'

What about doing that directly from the url:

In [17]:
import urllib
import subprocess
def url2rst(url):
    f = urllib.urlopen(URL)
    html = f.read()
    p = subprocess.Popen(['pandoc', '--from=html', '--to=rst'],
                         stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    return p.communicate(html)[0]
In [21]:
URL = 'https://URL.net/LaurentPerrinet/SciBlog/%s?action=print' % DATE
pagerst = url2rst(URL)
10-06-24 installing SUMATRA 10-06-24-installing-SUMATRA
In [22]:
TIMEDTITLE = DATE[2:] + ' ' + TITLE
SLUG = DATE[2:] + '-' + TITLE.replace(' ', '-')
print TIMEDTITLE, SLUG
10-06-24 installing SUMATRA 10-06-24-installing-SUMATRA
In [19]:
tmplt = """\
.. title: %s %s
.. slug: %s
.. date: %s %s
.. type: text
.. tags: %s

""" % (DATE[2:], TITLE, SLUG, DATE, TIME, TAGS)
print tmplt + pagerst
.. title: 10-06-24 installing SUMATRA
.. slug: 10-06-24-installing-SUMATRA
.. date: 2010-06-24 13:36:57
.. type: text
.. tags: python, sciblog

--------------

installing SUMATRA
==================

+-----------------------+
| 2010-06-24 13:36:57   |
+-----------------------+

-  notes from the
   `CodeJamNr4 </LaurentPerrinet/FACETS%20CodeJam%20Workshop%20#A4>`__
-  this was using a fresh install of ETS 6.2

dependencies
------------

-  pysvn :

   -  had to uninstall stuff from MacPorts

      ::

          sudo port uninstall --follow-dependents subversion 

   -  `get
      pysvn <http://pysvn.tigris.org/servlets/ProjectDocumentList?folderID=1762&expandFolder=1762&folderID=5842>`__

      -  make :

         ::

             cd Source
             python setup.py backport
             Create the Makefile using python setup.py configure
             make

   -  install

      ::

          sudo rsync -av pysvn /Library/Frameworks/Python.framework/Versions/6.2/lib/python2.6/site-packages/

      -  pysvn 1.7.1 worked for me

-  mercurial

   ::

       sudo easy_install mercurial

-  django

   ::

       sudo easy_install django django_tagging

with hg
-------

::

      525  svn export ../sci/dyva/Motion/particles hg_particles
      526  cd hg_particles/
      527  hg init
      528  hg add MotionParticles.py experiment_all.py 
      529  hg commit
      530  hg commit -m 'test'
      531  echo $USER
      532  vim .hgrc
      533  vim ~/.hgrc
      534  hg commit -m 'my first HG commit'
      535  vim ~/.hgrc
      536  ipython
      537  ls
      538  smt init sumatraTest_hg
      539  smt info

with svn
--------

::

      501  cd sci/dyva/Motion/particles/
      502  smt init -h
      503  smt init sumatraTest
      504  smt info
     511  smt configure --simulator=python --main=experiment_all.py 
      512  smt info
      513  smtweb &
      514  ls -a
      515  rm -fr .smt
      516  smt init sumatraTest
      517  smtweb &
      518  open experiment_all.py 
      519  touch fake.param
      520  smt run
      521  smt run -s python -m experiment_dot.py fake.param 
      522  smt info
      523  smt configure -h
      524  smt configure -c diff
      525  smt info
      526  smt run -s python -m experiment_dot.py fake.param 
      529  smt run -s python -m experiment_dot.py fake.param 
      534  rm mat/dot.npy 
      535  python experiment_dot.py fake.param 
      536  ls
      537  smt help configure
      538  smt configure -d ./figures/
      539  smt info
      540  smt configure -s python -m experiment_dot.py
      541  smt run fake.param 
      542  rm mat/dot.npy 
      543  smt run fake.param 
      544  ls figures/
      545  rm figures/dot_*
      546  smt run fake.param 
      547  smt info
      548  smt configure -d ./figures
      549  smt info
      550  rm figures/dot_*png
      551  smt configure -d ./figures
      552  smt run fake.param 
      553  smt comment "apparently, it is worth NaN shekels."
      554  smt tag codejam
      558  rm figures/dot_*png
      559  rm mat/dot.npy 
      560  smt run --reason="test effect of a bigger dot" fake.param dot_size=0.1
      561  ls
      562  ls -al .smt/
      563  less .smt/simulation_records 
      564  sqlite3 .smt/simulation_records 

--------------

`TagSciBlog </LaurentPerrinet/TagSciBlog>`__

In [20]:
import os
os.system('nikola new_post --title="%s" --tag="%s"' % (TITLE, TAGS))
f = file(SLUG + '.rst', 'w')
f.write(tmplt + pagerst)
f.close()

Next steps: automatizing extraction of metadata: date and tags

In [1]:
!cd ..
!nikola new_post -f ipynb --title="14-02-15-converting-moinmoin-pages-to-nikola" --tags="ipython, nikola, moinmoin"
Creating New Post
-----------------

Title: 14-02-15-converting-moinmoin-pages-to-nikola
Scanning posts........done!
Your post's metadata is at:  posts/14-02-15-converting-moinmoin-pages-to-nikola.meta
[2014-02-15T14:09:31Z] NOTICE: new_post: Your post's text is at: posts/14-02-15-converting-moinmoin-pages-to-nikola.ipynb