Aujourd’hui, les grandes entreprises et administrations publiques hésitent entre continuer à utiliser des logiciels propriétaires ou basculer vers les Logiciels Libres. Pourtant, la plupart des logiciels libres sont capables de bien traiter les données issues des logiciels propriétaire, et parfois avec une meilleur compatibilité.
C’est alors la barrière de la prise en main qui fait peur, et pourtant...
Les logiciels libres
L’aspect « Logiciel Libre » permet une évolution rapide et une plus grande participation des utilisateurs. Les aides et tutoriels foisonnent sur Internet ou sont directement inclus dans le logiciel lui-même.
Enfin, les concepteurs sont plus proches des utilisateurs, ce qui rend les logiciels libres plus agréable à utiliser et conviviaux.
Grâce à la disponibilité des logiciels libres, vous trouverez facilement des services de support techniques et la licence n’est plus un frein à l’utilisation de ces logiciels par votre personnel.
Notre support technique concerne essentiellement les logiciels libres, que ce soit sous forme de services ponctuels ou de tutoriels.
- Février 2021 -
Sommaire
Devlog
Dans ce journal, nous verrons comment Pétrolette est maintenant capable d'importer le fichier OPML d'export de NetVibes.
Rappel
Pétrolette est une page d'accueil de lecture d'actualités, libre. Elle est immédiatement utilisable sans inscription avec la même URL dans le navigateur du bureau ou celui d'un appareil mobile.
OPML
La structure du fichier est un peu étrange :
<?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0">
<head>
<title>UserName</title>
<type>Private</type>
<creationDate>2021-02-05 06:56:35</creationDate>
</head>
<body>
<outline title="Tab1" cols="4" layout="4-0">
<outline title="FeedTitle" xmlUrl="https://www.example.com/rss" htmlUrl="https://www.example.com/rss" type="rss" row="562.5" col="1"/>
<outline title="FeedTitle" xmlUrl="https://www.example.com/rss" htmlUrl="https://www.example.com/rss" type="rss" row="1562.5" col="1"/>
</outline>
<outline title="Blogs" cols="4" layout="4-0">
<outline title="FeedTitle" xmlUrl="https://www.example.com/rss" htmlUrl="https://www.example.com/rss" type="rss" row="500" col="1"/>
<outline title="15ISSD" xmlUrl="https://www.example.com/rss" htmlUrl="https://www.example.com/rss" type="rss" row="5000" col="1"/>
<outline title="FeedTitle" xmlUrl="https://www.example.com/rss" htmlUrl="https://www.example.com/rss" type="rss" row="7000" col="1"/>
</outline>
<outline title="Tab2" cols="3" layout="3-0">
<outline title="FeedTitle" xmlUrl="https://www.example.com/rss" htmlUrl="https://www.example.com/rss" type="rss" row="125" col="1"/>
<outline title="FeedTitle" xmlUrl="https://www.example.com/rss" htmlUrl="https://www.example.com/rss" type="rss" row="250" col="1"/>
</outline>
</body>
</opml>
Redondances
On peut se demander à quoi sert l'attribut "cols" de chaque tab, puisque les flux eux-mêmes ont un paramètre "col" pour indiquer où ils se trouvent dans le tab..?
Chez nous, c'est plus simple:
[
{"name":"news",
"columns": [
[
{"url":"https://www.sciencemag.org/rss/weekly_news_email.xml","type":"photo","limit": 1,"status":"off"},
{"url":"http://rss.sciam.com/ScientificAmerican-Global","type":"mixed","limit": 6,"status":"on"}
],
[
{"url":"https://www.reddit.com/r/worldnews.rss","type":"mixed","limit": 6,"status":"off"},
{"url":"https://www.npr.org/rss/rss.php?id=1001","type":"mixed","limit": 4,"status":"on"}
],
[
{"url":"http://explainxkcd.com/rss.xml","type":"photo","limit": 4,"status":"on"},
{"url":"http://xkcd.com/rss.xml","type":"photo","limit": 2,"status":"on"}
],
[
{"url":"https://www.ignant.com/category/architecture/feed/","type":"photo","limit": 6,"status":"on"}
]
]
},
{"name":"tek",
"columns": [
[
{"url":"http://feeds.bbci.co.uk/news/technology/rss.xml","type":"mixed","limit": 6,"status":"on"},
{"url":"http://feeds.feedburner.com/hackaday/LgoM/","type":"mixed","limit": 8,"status":"on"},
{"url":"https://hackernoon.com/feed","type":"mixed","limit": 8,"status":"off"}
],
[
{"url":"https://hacks.mozilla.org/feed/","type":"mixed","limit": 4,"status":"on"},
{"url":"http://feeds.arstechnica.com/arstechnica/index","type":"mixed","limit": 6,"status":"on"}
]
]
}
]
XMLtoJSON
Apres avoir parsé le XML, on se retrouve avec ça:
[
{
"name": "Tab1",
"cols": "2",
"columns": [
{
"col": "1",
"url": "http://example.com/rss"
},
{
"col": "1",
"url": "http://example.com/rss"
},
{
"col": "2",
"url": "http://example.com/rss"
}
]
},
{
"name": "Tab2",
"cols": "3",
"columns": [
{
"col": "1",
"url": "http://example.com/rss"
},
{
"col": "1",
"url": "http://example.com/rss"
},
{
"col": "3",
"url": "http://example.com/rss"
}
]
}
]
Objets et tableaux
Il nous faut donc simplifier tout ça, mais on ne peut pas itérer sur les feeds, puisqu'il ne sont pas rangés dans un container "tab"…
var xml2json = new PTL.util.XMLtoJSON(),
objson = xml2json.fromStr(xml),
dbparsed = JSON.stringify(objson),
all = objson.opml.body.outline,
allTabs = [];
var totalNbOfFeed = 0;
for (var nbOfTabs in all) {
var tabs = all[nbOfTabs],
feeds = tabs.outline;
for (var key in tabs.outline[0]) {
var tab = tabs[key],
thisTab = {},
thisTabFeeds = [],
thisColFeeds = [];
for (var nbOfFeeds in feeds) {
var thisFeed = {};
totalNbOfFeed++;
thisFeed.status = "on";
thisFeed.limit = 6;
thisFeed.type = "mixed";
thisFeed.url = feeds[nbOfFeeds]["@attributes"].xmlUrl;
thisIndex = Number(feeds[nbOfFeeds]["@attributes"].col) - 1;
if (!thisColFeeds[thisIndex]) thisColFeeds[thisIndex] = []; // C'est là que ça se passe
thisColFeeds[thisIndex].push(thisFeed);
}
thisTabFeeds.push(thisColFeeds);
thisTab.columns = thisColFeeds;
thisTab.name = tab.title;
}
allTabs.push(thisTab);
}
PTL.util.console(PTL.tr('Found %1 groups containing %2 feeds', nbGroups, nbFeeds), 'success');
À la première occurrence du champ "col" on initialise un tableau qui va recevoir tous les flux (feeds) qui ont le même paramètre, qu'on met dans l'objet thisTab.columns, qu'on met dans le tableau allTabs.
On ajoute des valeurs par défaut à la volée: status
(feed dé/plié), limit
(le nombre d'articles), et type
(texte, photo, mixed).
Donc au moment de l'import on teste
- Si le fichier est du json valide ;
- si ce fichier est un fichier prétrolette (on loope sur tous les tabs, qui doivent tous avoir un param. "columns") ;
- Ou si au contraire, c'est du XML (
xml.startsWith('<?xml version="1.0" encoding="UTF-8"?>')
)
- Sinon erreur
Notification discrète
Pour avertir l'utilisateur autrement qu'avec un méchant dialog, j'ai bricolé un petit systeme de notification non intrusive:
$('#notify').fadeIn('fast', 'linear', function() {
setTimeout(function() {
$notify.fadeOut('slow');}, 5000);
});
Navigation au clavier
Ah oui, j'oubliais ; Pétrolette est depuis le début navigable au clavier, mais il fallait mettre le focus sur un onglet, c'est maintenant le cas au démarrage:
$('#tabs').find('li[tabindex="0"]:first-child').focus();
RERO
Voilà :) Prochaine épisode : Le scrolling infini dans les flux.
Si vous voulez que Pétrolette importe un autre type de fichier de flux, merci de l'attacher à un ticket.
Commentaires :
voir le flux Atom
ouvrir dans le navigateur
LinuxFr.org : Journaux
La version 2.0 de WhosWho est sortie
- 15 mai -
Bonjour Nal,Je viens de publier la version 2.0 de WhosWho, mon logiciel pour faire des trombinoscopes, dont j'avais parlé il y a longtemps dans (...)
décrire une une image avec une iA locale
- 8 mai -
Aujourd'hui c'est fourien™, petit tuto sans prétention!Pour décrire des images en utilisant une iA localement j'utilise LLaVA qui fait partie de (...)
antistress adventure in Flatpak land
- 30 avril -
Hello nal, ça faisait un bail !Certain (il se reconnaîtra) m'a demandé de le tenir au courant lorsque j'aurai basculé sur un usage de Firefox (...)
Téléphone sous Linux ?
- 25 avril -
Aujourd'hui, avoir un téléphone avec un Android libéré, c'est possible, on pense en particulier à Murena.Avoir un téléphone sous GNU/Linux, c'est (...)
Quand votre voiture vous espionne… et vous le fait payer
- 23 avril -
Ceci se passe aux États-Unis, pour l’instant, aucune preuve qu’une telle fuite existe en Europe. Mais… si votre assurance augmente brutalement, (...)