<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Alexandre Beelen @ IAS - Posts</title><link href="http://www.ias.u-psud.fr/pperso/abeelen/" rel="alternate"></link><link href="http://www.ias.u-psud.fr/pperso/abeelen/feeds/posts.atom.xml" rel="self"></link><id>http://www.ias.u-psud.fr/pperso/abeelen/</id><updated>2017-06-02T00:00:00+02:00</updated><entry><title>STILTS and Python</title><link href="http://www.ias.u-psud.fr/pperso/abeelen/articles/stilts-and-python.html" rel="alternate"></link><published>2017-06-02T00:00:00+02:00</published><updated>2017-06-02T00:00:00+02:00</updated><author><name>Alexandre Beelen</name></author><id>tag:www.ias.u-psud.fr,2017-06-02:/pperso/abeelen/articles/stilts-and-python.html</id><summary type="html">&lt;p&gt;STILTS is a very useful program, in particular to convert [VOTABLE] between several serializations. But can be difficult to use outside of TOPCAT&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a href="http://www.star.bris.ac.uk/~mbt/stilts/sun256/sun256.html"&gt;STILTS&lt;/a&gt; is a very useful program, in particular to convert &lt;a href="http://www.ivoa.net/documents/VOTable/"&gt;VOTABLE&lt;/a&gt; between several serializations.  But can be difficult to use outside of &lt;a href="http://www.star.bris.ac.uk/~mbt/topcat/"&gt;TOPCAT&lt;/a&gt;. It is as simple as&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;stilts tcopy &lt;span class="nv"&gt;ifmt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;votable &lt;span class="nv"&gt;in&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;table.xml &lt;span class="nv"&gt;ofmt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;fits &lt;span class="nv"&gt;out&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;table.fits
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;to convert from an &lt;a href="http://www.ivoa.net/documents/VOTable/"&gt;VOTABLE&lt;/a&gt; in xml format to its fits serialization. However, &lt;a href="http://www.star.bris.ac.uk/~mbt/stilts/sun256/sun256.html"&gt;STILTS&lt;/a&gt; store most of the metadata of the &lt;a href="http://www.ivoa.net/documents/VOTable/"&gt;VOTABLE&lt;/a&gt; as bytes in the first extension as BINTABLE, with these comments :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;COMMENT The data in this primary HDU consists of bytes which                    
COMMENT comprise a VOTABLE document.                                            
COMMENT The VOTable describes the metadata of the table contained               
COMMENT in the following BINTABLE extension.                                    
COMMENT Such a BINTABLE extension can be used on its own as a perfectly         
COMMENT good table, but the information from this HDU may provide some          
COMMENT useful additional metadata.  
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Reading the binary table returns a lengthy array of indecipherable bytes. Hopefully Python can be of some helps, by transforming it into string representation of a bytearray.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;astropy.io&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;fits&lt;/span&gt;
&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;bytearray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getdata&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'table.fits'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This string is human readable but still not very useful in its form. But it can easily be parsed by &lt;a href="https://docs.python.org/2/library/xml.etree.elementtree.html"&gt;ElementTree&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;lxml&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;etree&lt;/span&gt;
&lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;etree&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fromstring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now we can easily access all the keys from the &lt;a href="http://www.ivoa.net/documents/VOTable/"&gt;VOTABLE&lt;/a&gt;, for, e.g. looking for the value of the &lt;code&gt;CreatorDate&lt;/code&gt; &lt;code&gt;PARAM&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;root.find(".//*[@name='CreatorDate']").attrib['value']
&lt;/pre&gt;&lt;/div&gt;</content><category term="STILTS"></category><category term="Python"></category><category term="Astropy"></category><category term="xml"></category></entry><entry><title>IDL &amp; MPI</title><link href="http://www.ias.u-psud.fr/pperso/abeelen/articles/idl-mpi.html" rel="alternate"></link><published>2016-06-07T00:00:00+02:00</published><updated>2016-06-07T00:00:00+02:00</updated><author><name>Alexandre Beelen</name></author><id>tag:www.ias.u-psud.fr,2016-06-07:/pperso/abeelen/articles/idl-mpi.html</id><summary type="html">&lt;p&gt;They are several ways of efficient programming with IDL. The most common way is to use the &lt;a href="https://www.harrisgeospatial.com/docs/the__thread_pool.html"&gt;IDL Thread Pool&lt;/a&gt;, which is implemented in several routines and operation on large arrays. But sometimes, matrix or large vector operations are not possible, and/or not sufficient. Sometimes, we would like to …&lt;/p&gt;</summary><content type="html">&lt;p&gt;They are several ways of efficient programming with IDL. The most common way is to use the &lt;a href="https://www.harrisgeospatial.com/docs/the__thread_pool.html"&gt;IDL Thread Pool&lt;/a&gt;, which is implemented in several routines and operation on large arrays. But sometimes, matrix or large vector operations are not possible, and/or not sufficient. Sometimes, we would like to break a simple &lt;a href="(https://www.harrisgeospatial.com/docs/for.htmll)"&gt;FOR loop&lt;/a&gt; into several parallel IDL sessions.&lt;/p&gt;
&lt;h2&gt;&lt;a href="https://www.harrisgeospatial.com/docs/IDL_IDLBridge.html"&gt;IDL_IDLBridge&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is the purpose of &lt;a href="https://www.harrisgeospatial.com/docs/IDL_IDLBridge.html"&gt;IDL_IDLBridge&lt;/a&gt; which allow to create sub instances of &lt;a href="http://www.harrisgeospatial.com/ProductsandSolutions/GeospatialProducts/IDL.aspx"&gt;IDL&lt;/a&gt; and control them within the original &lt;a href="http://www.harrisgeospatial.com/ProductsandSolutions/GeospatialProducts/IDL.aspx"&gt;IDL&lt;/a&gt; instance. A nice tutorial can be find &lt;a href="http://daedalus.as.arizona.edu/wiki/ParallelIDL"&gt;here&lt;/a&gt;, and Robert da Silva wrote the routine &lt;a href="http://slugidl.pbworks.com/w/page/37642590/split_for%20tutorial"&gt;split_for&lt;/a&gt; which allow to split simple loops without entering into the specific syntax of &lt;a href="https://www.harrisgeospatial.com/docs/IDL_IDLBridge.html"&gt;IDL_IDLBridge&lt;/a&gt;. Unfortunately, &lt;a href="https://www.harrisgeospatial.com/docs/IDL_IDLBridge.html"&gt;IDL_IDLBridge&lt;/a&gt; only creates new processes of &lt;a href="http://www.harrisgeospatial.com/ProductsandSolutions/GeospatialProducts/IDL.aspx"&gt;IDL&lt;/a&gt; on the same computer, as child processes, and sometimes, this is not enough.&lt;/p&gt;
&lt;p&gt;When dealing with a cluster of computer, the most convenient way to use several nodes is through &lt;a href="(https://en.wikipedia.org/wiki/Message_Passing_Interface)"&gt;MPI&lt;/a&gt;. At the expense of loosing the real purpose of &lt;a href="(https://en.wikipedia.org/wiki/Message_Passing_Interface)"&gt;MPI&lt;/a&gt;, i.e. passing messages, it is possible to launch several instances of &lt;a href="http://www.harrisgeospatial.com/ProductsandSolutions/GeospatialProducts/IDL.aspx"&gt;IDL&lt;/a&gt; in parallel, on one or several nodes in a cluster. It is thus possible to split a long and complex &lt;a href="(https://www.harrisgeospatial.com/docs/for.htmll)"&gt;FOR loop&lt;/a&gt; into several processes on potentially several nodes.&lt;/p&gt;
&lt;h2&gt;&lt;a href="http://www.harrisgeospatial.com/ProductsandSolutions/GeospatialProducts/IDL.aspx"&gt;IDL&lt;/a&gt; &amp;amp; &lt;a href="(https://en.wikipedia.org/wiki/Message_Passing_Interface)"&gt;MPI&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It is possible to launch several instance of &lt;a href="http://www.harrisgeospatial.com/ProductsandSolutions/GeospatialProducts/IDL.aspx"&gt;IDL&lt;/a&gt; using &lt;a href="(https://en.wikipedia.org/wiki/Message_Passing_Interface)"&gt;MPI&lt;/a&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;nMPI&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="c1"&gt;#ntasks&lt;/span&gt;
mpirun -n &lt;span class="nv"&gt;$nMPI&lt;/span&gt; idl mpi_poc.pro
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;will launch several independent &lt;a href="http://www.harrisgeospatial.com/ProductsandSolutions/GeospatialProducts/IDL.aspx"&gt;IDL&lt;/a&gt; processes, which will all run the same program &lt;code&gt;mpi_poc.pro&lt;/code&gt;. This would produce several times the exact same output. However, at least using the &lt;a href="https://www.open-mpi.org/"&gt;OpenMPI&lt;/a&gt; implementation, it is possible to retrieve &lt;code&gt;MPI_COMM_WORLD_RANK&lt;/code&gt; and &lt;code&gt;MPI_COMM_WORLD_SIZE&lt;/code&gt; as system variables and thus split any big &lt;a href="(https://www.harrisgeospatial.com/docs/for.htmll)"&gt;FOR loop&lt;/a&gt;. The results will then depends on the &lt;code&gt;MPI_COMM_WORLD_RANK&lt;/code&gt; value and could be saved using the rank as an unique identifier.&lt;/p&gt;
&lt;p&gt;I wrote a few &lt;a href="https://git.ias.u-psud.fr/abeelen/IDL/tree/master/mpi"&gt;simple scripts&lt;/a&gt; to help parallelize a long &lt;a href="(https://www.harrisgeospatial.com/docs/for.htmll)"&gt;FOR loop&lt;/a&gt;. Note however that combining the results of the &lt;a href="(https://www.harrisgeospatial.com/docs/for.htmll)"&gt;FOR loop&lt;/a&gt; will require disk IO and thus, the iterations of the &lt;a href="(https://www.harrisgeospatial.com/docs/for.htmll)"&gt;FOR loop&lt;/a&gt; should be rather CPU intensive in order to be efficient. The following example compute the sum of all indexes between two values.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c c-Singleline"&gt;;; mpi_poc.pro&lt;/span&gt;
&lt;span class="c c-Singleline"&gt;;; Let's compute the sum of all indexes between start and stop&lt;/span&gt;

&lt;span class="c c-Singleline"&gt;;; Retrieve the MPI RANK from system variables&lt;/span&gt;
mpi_rank, rank

start &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nb"&gt;stop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;
sum &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="c c-Singleline"&gt;;; Divide the task among the different MPI ranks&lt;/span&gt;
mpi_helper, start, &lt;span class="nb"&gt;stop&lt;/span&gt;, i_start, i_stop

&lt;span class="c c-Singleline"&gt;;; This is the main loop, should be an intensive task....&lt;/span&gt;
&lt;span class="k"&gt;FOR&lt;/span&gt; index&lt;span class="o"&gt;=&lt;/span&gt;i_start, i_stop&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;DO&lt;/span&gt; &lt;span class="k"&gt;BEGIN&lt;/span&gt; $
   &lt;span class="nb"&gt;PRINT&lt;/span&gt;, rank, index, FORMAT&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'("rank: ", I2, " doing ", I2)'&lt;/span&gt; &amp;amp;$
   &lt;span class="nb"&gt;WAIT&lt;/span&gt;, start &amp;amp;$
   sum &lt;span class="o"&gt;+=&lt;/span&gt; index

&lt;span class="c c-Singleline"&gt;;; save the result in an unique output file&lt;/span&gt;
&lt;span class="nb"&gt;SAVE&lt;/span&gt;, FILENAME&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;STRING&lt;/span&gt;(rank, FORMAT&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'("poc_",I2.2,".sav")'&lt;/span&gt;), sum

&lt;span class="c c-Singleline"&gt;;; Do not forget to exit at the end&lt;/span&gt;
&lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Launching 5 instances of this program with&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mpirun -n &lt;span class="m"&gt;5&lt;/span&gt; idl mpi_poc.pro
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;will result in 5  files&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;poc_00.sav  poc_01.sav  poc_02.sav  poc_03.sav  poc_04.sav
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;which can be combined using&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sum_combined &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
files &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;FILE_SEARCH&lt;/span&gt;(&lt;span class="s1"&gt;'poc_*.sav'&lt;/span&gt;)
&lt;span class="k"&gt;FOR&lt;/span&gt; iFile&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;, &lt;span class="nb"&gt;N_ELEMENTS&lt;/span&gt;(files)&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;DO&lt;/span&gt; &lt;span class="k"&gt;BEGIN&lt;/span&gt; $
   &lt;span class="nb"&gt;RESTORE&lt;/span&gt;, files[iFile] &amp;amp;$
   sum_combined &lt;span class="o"&gt;+=&lt;/span&gt; sum

&lt;span class="nb"&gt;PRINT&lt;/span&gt;, sum_combined
&lt;span class="nb"&gt;PRINT&lt;/span&gt;, &lt;span class="nb"&gt;TOTAL&lt;/span&gt;(&lt;span class="nb"&gt;INDGEN&lt;/span&gt;(&lt;span class="mi"&gt;11&lt;/span&gt;))
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;&lt;a href="http://www.harrisgeospatial.com/ProductsandSolutions/GeospatialProducts/IDL.aspx"&gt;IDL&lt;/a&gt; &amp;amp; &lt;a href="(https://en.wikipedia.org/wiki/Message_Passing_Interface)"&gt;MPI&lt;/a&gt; &amp;amp; &lt;a href="https://www.harrisgeospatial.com/docs/IDL_IDLBridge.html"&gt;IDL_IDLBridge&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When using a cluster of computer, it is thus possible to allocate several nodes and launch one instance of &lt;a href="http://www.harrisgeospatial.com/ProductsandSolutions/GeospatialProducts/IDL.aspx"&gt;IDL&lt;/a&gt; per node which will use efficiently all the core of the node using &lt;a href="https://www.harrisgeospatial.com/docs/IDL_IDLBridge.html"&gt;IDL_IDLBridge&lt;/a&gt;. For example, using the &lt;a href="http://slurm.schedmd.com/"&gt;slurm&lt;/a&gt; scheduler, one could setup a batch script as&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="c1"&gt;#SBATCH -N 2&lt;/span&gt;
&lt;span class="c1"&gt;#SBATCH -n 64&lt;/span&gt;
&lt;span class="c1"&gt;#SBATCH --exclusive&lt;/span&gt;
&lt;span class="c1"&gt;#SBATCH --job-name "MPI IDL"&lt;/span&gt;

mpirun -pernode idl mpi_poc.pro
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;which will launch 2 &lt;a href="http://www.harrisgeospatial.com/ProductsandSolutions/GeospatialProducts/IDL.aspx"&gt;IDL&lt;/a&gt; processes on two different nodes with a total of 64 cores.&lt;/p&gt;
&lt;p&gt;accept that the &lt;a href="https://www.harrisgeospatial.com/docs/IDL_IDLBridge.html"&gt;IDL_IDLBridge&lt;/a&gt; documentation state that :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: On UNIX systems, the IDL_IDLBridge requires that the DISPLAY environment variable be set to a valid X Windows display. If no display is available, execution of the IDL_IDLBridge will halt, with error messages that include:&lt;/p&gt;
&lt;p&gt;'IDL_IDLBridge: Unable to establish X Connection.'&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;which render the sbatch very impracticable, as one need to be sure that X11 is forwarded on all the allocated node of the cluster which are not known in advance. Thanks again &lt;a href="http://www.harrisgeospatial.com/ProductsandSolutions/GeospatialProducts/IDL.aspx"&gt;IDL&lt;/a&gt;... Hopefully &lt;a href="https://www.x.org/releases/X11R7.6/doc/man/man1/Xvfb.1.xhtml"&gt;Xvfb&lt;/a&gt; allows to run virtual x11 environment and thus&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;srun xvfb-run idl mpi_poc.pro
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;will be able to run.&lt;/p&gt;</content><category term="IDL"></category><category term="MPI"></category><category term="Parallel"></category><category term="Parallelization"></category></entry><entry><title>D3js test using mpld3</title><link href="http://www.ias.u-psud.fr/pperso/abeelen/articles/d3js-test-using-mpld3.html" rel="alternate"></link><published>2015-11-18T00:00:00+01:00</published><updated>2015-11-18T00:00:00+01:00</updated><author><name>Alexandre Beelen</name></author><id>tag:www.ias.u-psud.fr,2015-11-18:/pperso/abeelen/articles/d3js-test-using-mpld3.html</id><summary type="html">&lt;p&gt;Combining D3js mpld3 and Pelican&lt;/p&gt;</summary><content type="html">&lt;p&gt;After my initial testing of &lt;a href="http://d3js.org"&gt;D3js&lt;/a&gt;, I came accross &lt;a href="http://mpld3.github.io/"&gt;mpld3&lt;/a&gt; and I wanted to quickly know if it was possible to integrate those nice plot with &lt;a href="https://github.com/wrobstory/pelican_dynamic"&gt;pelican_dynamic&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I took the code from the &lt;a href="http://mpld3.github.io/examples/scatter_tooltip.html#scatter-tooltip"&gt;Scatter Plot With Tooltips&lt;/a&gt; example, and instead of showing the result with &lt;code&gt;mpld3.show()&lt;/code&gt;, I saved it using&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;mpld3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;save_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ScatterPlotWithTooltips.json'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Thus I just need to create a simple js file with&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getJSON&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"ScatterPlotWithTooltips.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="nx"&gt;mpld3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;draw_figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"fig_scatter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And by defining the proper &lt;div&gt; in the mardown document-relative&lt;/div&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"d3-chart"&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"fig_scatter"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Here is the result :&lt;/p&gt;
&lt;div class="d3-chart" id="fig_scatter"&gt;&lt;/div&gt;
&lt;p&gt;Isn't that a nice looking chart up there?&lt;/p&gt;</content><category term="D3js"></category><category term="mpl3d"></category></entry><entry><title>D3js Test</title><link href="http://www.ias.u-psud.fr/pperso/abeelen/articles/d3js-test.html" rel="alternate"></link><published>2015-11-16T00:00:00+01:00</published><updated>2015-11-16T00:00:00+01:00</updated><author><name>Alexandre Beelen</name></author><id>tag:www.ias.u-psud.fr,2015-11-16:/pperso/abeelen/articles/d3js-test.html</id><summary type="html">&lt;p&gt;This is a quick migration of old tests using D3js.&lt;/p&gt;</summary><content type="html">&lt;p&gt;This is a quick migration of old tests using &lt;a href="http://d3js.org"&gt;D3js&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Using the same &lt;a href="http://www.json.org"&gt;json&lt;/a&gt; file&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Carte des services informatiques"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nt"&gt;"children"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Services utilisateurs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nt"&gt;"children"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Comptes et accès"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nt"&gt;"children"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Régles générales"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Création compte"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Supression compte"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Modification du mot de passe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Modification des informations personnelles"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I wrote some simple &lt;a href="http://d3js.org"&gt;D3js&lt;/a&gt; javascript code following a tutorial&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;diameter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;960&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;tree_r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;d3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;360&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;diameter&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;separation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parent&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parent&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;diagonal_r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;d3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;svg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;diagonal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;radial&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;projection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;svg_r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;d3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;".d3-1"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"svg"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"width"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;diameter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"height"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;diameter&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"g"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"transform"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"translate("&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;diameter&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;","&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;diameter&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;")"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;d3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"ias.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;nodes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tree_r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="nx"&gt;links&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tree_r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;links&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;link_r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;svg_r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;selectAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;".link"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;links&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;enter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"class"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;diagonal_r&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;node_r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;svg_r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;selectAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;".node"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;enter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"g"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"class"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"transform"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"rotate("&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;")translate("&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;")"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;

  &lt;span class="nx"&gt;node_r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"circle"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"r"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4.5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;node_r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"dy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;".31em"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"text-anchor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;"start"&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"transform"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;"translate(8)"&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"rotate(180)translate(-8)"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;d3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;".d3-1"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"height"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;diameter&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;"px"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And putting everything back to &lt;a href="https://github.com/wrobstory/pelican_dynamic"&gt;pelican_dynamic&lt;/a&gt; div, magic happens :&lt;/p&gt;
&lt;div class="d3-1"&gt;&lt;/div&gt;
&lt;p&gt;and following the &lt;a href="http://d3js.org"&gt;D3js&lt;/a&gt; tutorials :&lt;/p&gt;
&lt;div class="d3-2"&gt;&lt;/div&gt;
&lt;p&gt;or even with a bit of dynamics :&lt;/p&gt;
&lt;div class="d3-3"&gt;&lt;/div&gt;</content><category term="D3js"></category></entry><entry><title>From XSLT to Pelican</title><link href="http://www.ias.u-psud.fr/pperso/abeelen/articles/from-xslt-to-pelican.html" rel="alternate"></link><published>2015-11-03T00:00:00+01:00</published><updated>2015-11-03T00:00:00+01:00</updated><author><name>Alexandre Beelen</name></author><id>tag:www.ias.u-psud.fr,2015-11-03:/pperso/abeelen/articles/from-xslt-to-pelican.html</id><summary type="html">&lt;p&gt;Writing and publishing a website used to be a painful process. Some years ago, I developped a simple xslt framework to produce my personnal web pages from simple xml files. This was in part because I did not liked any of the big CMS out at that time, requiring database …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Writing and publishing a website used to be a painful process. Some years ago, I developped a simple xslt framework to produce my personnal web pages from simple xml files. This was in part because I did not liked any of the big CMS out at that time, requiring database backend,  and also that I wanted to learn XSLT processing. CSS was a must and compliance with W3C standards whitout saying. As long as I did not wanted to change much on the site, this was ok, and the site was pretty robust since 2005.&lt;/p&gt;
&lt;div class="section" id="before"&gt;
&lt;h2&gt;Before&lt;/h2&gt;
&lt;p&gt;So I needed a simple framework, what is better than homemade ? So lets remove the style, and start writing content, and only (mostly) content and metadata.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c"&gt;&amp;lt;!-- index.xml --&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;?DOCTYPE page SYSTEM "my_pages.dtd"?&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;?xml-stylesheet type="text/xsl" href="my_pages.xsl.xml"?&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;page&lt;/span&gt; &lt;span class="na"&gt;icon=&lt;/span&gt;&lt;span class="s"&gt;"stock_home"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Home&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;text&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"section-id"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Global Section Name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Blah Blah&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- and any basic html tags --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/text&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/page&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Simple enough, &lt;a class="reference external" href="https://www.gnu.org/software/emacs"&gt;emacs&lt;/a&gt; made, now we need to transform that into a proper html static page, using &lt;a class="reference external" href="http://www.w3.org/TR/1999/REC-xslt-19991116"&gt;xsl transformation&lt;/a&gt;, this was supposedly the future of &lt;a class="reference external" href="http://www.w3.org/TR/xhtml1"&gt;xhtml&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c"&gt;&amp;lt;!-- my_pages.xslt --&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;?xml version="1.0"  encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;xsl:stylesheet&lt;/span&gt; &lt;span class="na"&gt;version=&lt;/span&gt;&lt;span class="s"&gt;"1.0"&lt;/span&gt;
  &lt;span class="na"&gt;xmlns:xsl=&lt;/span&gt;&lt;span class="s"&gt;"http://www.w3.org/1999/XSL/Transform"&lt;/span&gt;
  &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;"http://www.w3.org/1999/xhtml"&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;xsl:output&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"xml"&lt;/span&gt; &lt;span class="na"&gt;indent=&lt;/span&gt;&lt;span class="s"&gt;"yes"&lt;/span&gt; &lt;span class="na"&gt;encoding=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;
  &lt;span class="na"&gt;doctype-system=&lt;/span&gt;&lt;span class="s"&gt;"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"&lt;/span&gt;
  &lt;span class="na"&gt;doctype-public=&lt;/span&gt;&lt;span class="s"&gt;"-//W3C//DTD XHTML 1.1//EN"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;xsl:include&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"header.xsl"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;xsl:include&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"footer.xsl"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;"page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;xsl:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"body"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;xsl:call-template&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"make-header"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"pageCell"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!--pageCell--&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"pageName"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;xsl:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"img"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;xsl:attribute&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"src"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      icons/&lt;span class="nt"&gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;"@icon"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;.png
    &lt;span class="nt"&gt;&amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;xsl:attribute&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"alt"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;page icon&lt;span class="nt"&gt;&amp;lt;/xsl:attribute&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/xsl:element&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

[....]
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This go on and on to construct the web page, with some common header/menu&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c"&gt;&amp;lt;!-- header.xsl --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"html-header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;
Alexandre Beelen @ IAS - &lt;span class="nt"&gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"author"&lt;/span&gt;      &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Alexandre Beelen"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"keywords"&lt;/span&gt;    &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"astrophysics, astronomy, quasars, black hole, cosmology, IAS, Orsay, MIC, Insitut   d'Astrophysique Spatiale"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Homepage of Alexandre Beelen"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"page-topic"&lt;/span&gt;  &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"science"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"expires"&lt;/span&gt;     &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"robots"&lt;/span&gt;      &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"INDEX,FOLLOW"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"page.css"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/css"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"make-header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"Header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"HeaderTitle"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"http://www.ias.u-psud.fr/pperso/abeelen"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Alexandre Beelen @ IAS&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"HeaderTitleLinks"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"http://www.ias.fr"&lt;/span&gt;                    &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hlink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;IAS&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; |
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"http://www.mpifr-bonn.mpg.de"&lt;/span&gt;         &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hlink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;MPIfR&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; |
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"http://www.astro.uni-bonn.de/~webrai"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hlink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;AIfA&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; |
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"http://www.obspm.fr"&lt;/span&gt;                  &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hlink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Obspm&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"HeaderNav"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"index.html"&lt;/span&gt;                            &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"glink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Home&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; :
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"cv.html"&lt;/span&gt;                               &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"glink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;C.V.&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; :
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"talk.html"&lt;/span&gt;                             &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"glink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Talk &lt;span class="ni"&gt;&amp;amp;amp;&lt;/span&gt; Posters&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; :
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"publication.html"&lt;/span&gt;                      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"glink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Publications&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; :
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"database.xml"&lt;/span&gt;                          &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"glink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;High-z CO database&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; :
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"software.html"&lt;/span&gt;                         &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"glink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Tools&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; :
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"http://www.astro.uni-bonn.de/boawiki/"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"glink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Open Boa&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; :
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"http://www.ias.u-psud.fr/sanepic/"&lt;/span&gt;     &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"glink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;SANEPIC&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; :
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"schedule.html"&lt;/span&gt;                         &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"glink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Schedule&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;where all the links are hardcoded in the file directly. Same goes for the footer. Of course you need a Makefile produce all the pages, and even publish them through a rsync and ssh commands&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;SHELL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; /bin/sh
&lt;span class="nv"&gt;srcdir&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; .
&lt;span class="nv"&gt;outdir&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;srcdir&lt;span class="k"&gt;)&lt;/span&gt;/html
&lt;span class="nv"&gt;addstuff&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;srcdir&lt;span class="k"&gt;)&lt;/span&gt;/download &lt;span class="k"&gt;$(&lt;/span&gt;srcdir&lt;span class="k"&gt;)&lt;/span&gt;/icons &lt;span class="k"&gt;$(&lt;/span&gt;srcdir&lt;span class="k"&gt;)&lt;/span&gt;/pictures page.css sitemap.xml

&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;
&lt;span class="nf"&gt;web&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="n"&gt;software&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="n"&gt;talk&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="n"&gt;cv&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="n"&gt;publication&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="n"&gt;schedule&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="n"&gt;gildas&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt;

&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;web&lt;/span&gt;
  cp -fr &lt;span class="k"&gt;$(&lt;/span&gt;addstuff&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;outdir&lt;span class="k"&gt;)&lt;/span&gt;
  rsync -qavz -e ssh &lt;span class="k"&gt;$(&lt;/span&gt;outdir&lt;span class="k"&gt;)&lt;/span&gt;/* abeelen@www:web_perso
  ssh abeelen@www.ias.u-psud.fr chgrp -R www web_perso
  ssh abeelen@www.ias.u-psud.fr chmod -R a+r web_perso

&lt;span class="nf"&gt;.SUFFIXES&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="nf"&gt;.SUFFIXES&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; .&lt;span class="n"&gt;html&lt;/span&gt; .&lt;span class="n"&gt;xml&lt;/span&gt;

&lt;span class="nf"&gt;%.html&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; %.&lt;span class="n"&gt;xml&lt;/span&gt;
  xsltproc -o &lt;span class="k"&gt;$(&lt;/span&gt;outdir&lt;span class="k"&gt;)&lt;/span&gt;/&lt;span class="nv"&gt;$@&lt;/span&gt; my_pages.xsl $&amp;lt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Everything was working fined and was fully &lt;a class="reference external" href="https://validator.w3.org/"&gt;W3C HTML 1.1 compliant&lt;/a&gt;.  And you can still see it at work &lt;a class="reference external" href="old-site/html/index.html"&gt;there&lt;/a&gt;. But it was rigid, very rigid... And crazy to maintain... It's 2015 after all !&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="after"&gt;
&lt;h2&gt;After&lt;/h2&gt;
&lt;p&gt;Fast forward to 2015, during a power outage, and with only access to Internet, I started the project to migrate my website. After a rapid survey of simple static web site generator, I decided to use &lt;a class="reference external" href="http://docs.getpelican.com"&gt;Pelican&lt;/a&gt; mainly for its simplicity and the capability to use either &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Markdown"&gt;Markdown&lt;/a&gt; or &lt;a class="reference external" href="http://docutils.sourceforge.net/docs/ref/rst/introduction.html"&gt;reStructuredTex&lt;/a&gt;. Simple enough to use, eigher with &lt;a class="reference external" href="https://www.gnu.org/software/emacs"&gt;emacs&lt;/a&gt;  or &lt;a class="reference external" href="https://atom.io"&gt;atom&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The previous home page could be written as a simple file&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Home
====

Global Section Name
-------------------

blah blah
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You could choose a theme and voilà ! So how did it go ? I just started a &lt;a class="reference external" href="http://docs.getpelican.com"&gt;Pelican&lt;/a&gt; tutorial and finished with a full site in half a day. You start by creating a skeleton project&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;gt; pelican-quickstart
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;and fill the &lt;cite&gt;content/pages&lt;/cite&gt; directory with cleaned version of my previously generated html pages translated to &lt;a class="reference external" href="http://docutils.sourceforge.net/docs/ref/rst/introduction.html"&gt;reStructuredTex&lt;/a&gt; with &lt;a class="reference external" href="http://pandoc.org/"&gt;pandoc&lt;/a&gt;. The basic pages were there.&lt;/p&gt;
&lt;p&gt;I just had to find a nice theme, and I quickly choose the &lt;a class="reference external" href="http://getbootstrap.com/"&gt;bootstrap&lt;/a&gt; framework through the &lt;cite&gt;pelican-bootstrap3&lt;/cite&gt; theme. And I just had to put everything under revision control using git. And I was done with this website. And well, I could also push it with a Makefile !&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="even-more"&gt;
&lt;h2&gt;Even more&lt;/h2&gt;
&lt;p&gt;The journey did not end by with only migrating the old pages to a new simpler system, but it is now easy to add new features with &lt;a class="reference external" href="https://github.com/getpelican/pelican-plugins"&gt;pelican-plugins&lt;/a&gt;, so here is a list of plugins I used :&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;better_tables, twitter_bootstrap_rst_directives, bootstrapify&lt;ul&gt;
&lt;li&gt;allow a cleaner presentation with &lt;a class="reference external" href="https://github.com/DandyDev/pelican-bootstrap3"&gt;pelican-bootstrap3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;sitemap&lt;ul&gt;
&lt;li&gt;for a better indexation in web crawler, not having to produce it by hand is a real plus&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;tag_cloud&lt;ul&gt;
&lt;li&gt;to produce a tag_cloud on the sidebard, utility is still to be proven...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;render_math&lt;ul&gt;
&lt;li&gt;allows a clean integration of &lt;a class="reference external" href="https://www.mathjax.org/"&gt;MathJax&lt;/a&gt;. Adding math is now as simple as writing &lt;span class="math"&gt;\(\LaTeX\)&lt;/span&gt; both with &lt;a class="reference external" href="http://docutils.sourceforge.net/docs/ref/rst/introduction.html"&gt;reStructuredTex&lt;/a&gt; and &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Markdown"&gt;Markdown&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;tipue_search&lt;ul&gt;
&lt;li&gt;allows for simple search over the static website&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;pelican_dynamic&lt;ul&gt;
&lt;li&gt;to be able to use &lt;a class="reference external" href="http://d3js.org/"&gt;D3js&lt;/a&gt; easily within &lt;a class="reference external" href="http://docs.getpelican.com"&gt;Pelican&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="configuration"&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="http://docs.getpelican.com"&gt;Pelican&lt;/a&gt; and &lt;a class="reference external" href="https://github.com/DandyDev/pelican-bootstrap3"&gt;pelican-bootstrap3&lt;/a&gt; allow for a very fine tuning of the created website. One can very simply define which pages are displayed in the menu, and in which order using the meta data &lt;cite&gt;sortorder&lt;/cite&gt; for example.&lt;/p&gt;
&lt;p&gt;The web site can very easily be tracked with &lt;a class="reference external" href="http://piwik.org/"&gt;piwik&lt;/a&gt; or &lt;a class="reference external" href="https://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt;. One can still transfert standalone files, as I needed for the &lt;a class="reference external" href="https://www.ias.u-psud.fr/pperso/abeelen/database.html"&gt;Molecular Database&lt;/a&gt;, or even a copy of my &lt;a class="reference external" href="http://www.ias.u-psud.fr/pperso/abeelen/old-site/html"&gt;old website&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;script type='text/javascript'&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    var location_protocol = (false) ? 'https' : document.location.protocol;
    if (location_protocol !== 'http' &amp;&amp; location_protocol !== 'https') location_protocol = 'https:';
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = location_protocol + '//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML';
    mathjaxscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('SansSerif' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_SansSerif');" +
                "VARIANT['bold'].fonts.unshift('MathJax_SansSerif-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_SansSerif-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_SansSerif-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_SansSerif');" +
                "VARIANT['bold'].fonts.unshift('MathJax_SansSerif-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_SansSerif-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_SansSerif-italic');" +
            "});" +
        "}";
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="git"></category><category term="xml"></category><category term="python"></category><category term="Pelican"></category><category term="IAS"></category><category term="Web"></category></entry><entry><title>SVN to GIT</title><link href="http://www.ias.u-psud.fr/pperso/abeelen/articles/svn-to-git.html" rel="alternate"></link><published>2015-11-02T00:00:00+01:00</published><updated>2016-06-07T00:00:00+02:00</updated><author><name>Alexandre Beelen</name></author><id>tag:www.ias.u-psud.fr,2015-11-02:/pperso/abeelen/articles/svn-to-git.html</id><summary type="html">&lt;p&gt;I wanted to move from an bulky svn repository containing several projects to smaller git repositories to allow for easy distribution of the files and tracking of the code. Of course, while doing that, I wanted to keep the file history... I could not use the classic &lt;a class="reference external" href="https://git-scm.com/docs/git-filter-branch"&gt;filter-branch&lt;/a&gt; as I …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I wanted to move from an bulky svn repository containing several projects to smaller git repositories to allow for easy distribution of the files and tracking of the code. Of course, while doing that, I wanted to keep the file history... I could not use the classic &lt;a class="reference external" href="https://git-scm.com/docs/git-filter-branch"&gt;filter-branch&lt;/a&gt; as I wanted to extract only a few files withing a directory.&lt;/p&gt;
&lt;p&gt;So... First step is to checkgout the svn repository with git :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;git svn clone &lt;span class="nv"&gt;$SVN_REPO_URL&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$SVN_REPO_URL&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;or, if you have already done it, you can update the repository with&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$SVN_REPO_URL&lt;/span&gt;
git svn rebase
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;then you would extract the history of the desired files into a patch file&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;git log --pretty&lt;span class="o"&gt;=&lt;/span&gt;email --patch-with-stat --reverse --full-index --binary path/to/file* &amp;gt; /tmp/patch
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will generate a full patch to the file, from its creation to the last commit. The (old) path in the patch file are relative to the old svn structure. Thus one could change it to reflect the new desired path structure&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sed -i -e &lt;span class="s1"&gt;'s/old\/path\///g'&lt;/span&gt; /tmp/patch
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;for example to remove all the path for the new repository&lt;/p&gt;
&lt;p&gt;And after creating a new git repository, and within the repository, you can replay the file creation and modification with&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mkdir &lt;span class="nv"&gt;$GIT_REPO&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$GIT_REPO&lt;/span&gt;
git init .
git am &amp;lt; /tmp/patch
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will recreate the files, with their history, in the newly created git repository.&lt;/p&gt;
</content><category term="svn"></category><category term="git"></category></entry><entry><title>Gildas Tips &amp; Tricks</title><link href="http://www.ias.u-psud.fr/pperso/abeelen/articles/gildas-tips-tricks.html" rel="alternate"></link><published>2010-01-04T00:00:00+01:00</published><updated>2010-01-04T00:00:00+01:00</updated><author><name>Alexandre Beelen</name></author><id>tag:www.ias.u-psud.fr,2010-01-04:/pperso/abeelen/articles/gildas-tips-tricks.html</id><summary type="html">&lt;p class="first last"&gt;Long forgotten &lt;a class="reference external" href="https://www.iram.fr/IRAMFR/GILDAS"&gt;GILDAS&lt;/a&gt; Tips &amp;amp; Tricks.&lt;/p&gt;
</summary><content type="html">&lt;div class="panel panel-warning"&gt;
&lt;div class="panel-heading"&gt;
Warning&lt;/div&gt;
&lt;div class="panel-body"&gt;
Long forgotten &lt;a class="reference external" href="https://www.iram.fr/IRAMFR/GILDAS"&gt;GILDAS&lt;/a&gt; Tips &amp;amp; Tricks. This should probably be extended. Using more examples, in particular for clic and mapping&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="gildas-clic"&gt;
&lt;h2&gt;Gildas/Clic&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Change the bandpass calibrator :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code literal-block"&gt;
let band_source "sourcename" after clicking on select
180 degree Jumpy Phase :
set phase degree jumpy
PLOT /IDENTIFY col
SOLVE phase /PLOT
&lt;/pre&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Change the number of time interval for spline interpolation :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code literal-block"&gt;
SET STEP 4 (in hours, default 3)
&lt;/pre&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Make polynomial phase fit instead of spline :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code literal-block"&gt;
SOLVE phase /PLOT /POLYNOMIAL 6
&lt;/pre&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Remove the last drawn plot layer :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code literal-block"&gt;
CLEAR seg
Plot the closure relations :
PLOT closure
&lt;/pre&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Change the averaging in time when plotting :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code literal-block"&gt;
SET AVERAGING none
SET AVERAGING TIME 5 (seconds)
&lt;/pre&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Change the reference antenna for RF and phase calibration :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code literal-block"&gt;
SET REFERENCE x (logical number)
&lt;/pre&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;See the correspondance physical/logical antenna :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code literal-block"&gt;
SET ANTENNA ALL
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="gildas-mapping"&gt;
&lt;h2&gt;Gildas/Mapping&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Reproject one image to another :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code literal-block"&gt;
run reproject
&lt;/pre&gt;
&lt;/div&gt;
</content><category term="gildas"></category><category term="iram"></category><category term="tips"></category></entry></feed>