Here the script in Python : https://github.com/CYBERNEURONES/Python/blob/master/JoplinCleanRessource.py
#
# Version 1
# for Python 3
#
# ARIAS Frederic
# Sorry ... It's difficult for me the python :)
#
from time import gmtime, strftime
import time
import json
import requests
import os
import sqlite3
import re
#conn = sqlite3.connect('my_db.db')
find_this = "\(:/"
#c = conn.cursor()
#c.execute('''DROP TABLE LINK''')
#conn.commit()
#c.execute('''CREATE TABLE LINK (ID_NOTE text, ID_RESOURCE text, CHECKSUM_MD5 text)''')
#conn.commit()
#IP
ip = "127.0.0.1"
port = "41184"
token = "Put the token here"
nb_request = 0
my_body = ""
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
url_notes = (
"http://"+ip+":"+port+"/notes?"
"token="+token
)
nb_total_ressource = 0
nb_local_ressource = 0
ALL_ID = {}
try:
resp = requests.get(url_notes, headers=headers)
nb_request += 1
resp.raise_for_status()
resp_dict = resp.json()
#print(resp_dict)
for my_note in resp_dict:
nb_local_ressource = 0
my_body = my_note.get('body')
my_ressource = [m.start() for m in re.finditer(find_this, my_body)]
for my_ressource_x in my_ressource:
nb_total_ressource += 1
nb_local_ressource += 1
my_ressource_id = my_body[my_ressource_x+3:my_ressource_x+32+3]
print(nb_local_ressource,":",my_note.get('id'),":",my_ressource_id)
ALL_ID[my_ressource_id]=my_note.get('id')
#c.execute(sql_request)
#conn.commit()
except requests.exceptions.HTTPError as e:
print("Bad HTTP status code:", e)
except requests.exceptions.RequestException as e:
print("Network error:", e)
nb_keep = 0
nb_remove = 0
url_resources = (
"http://"+ip+":"+port+"/resources?"
"token="+token
)
try:
resp = requests.get(url_resources, headers=headers)
nb_request += 1
resp.raise_for_status()
resp_dict = resp.json()
#print(resp_dict)
for my_resource in resp_dict:
my_id = my_resource.get('id')
if my_id in ALL_ID:
print("Keep for notes",ALL_ID[my_id])
nb_keep += 1
else:
print("Remove");
nb_remove += 1
url_resources_delete = (
"http://"+ip+":"+port+"/resources/"+my_id+"?"
"token="+token
)
try:
resp2 = requests.delete(url_resources_delete, headers=headers)
resp.raise_for_status()
nb_request += 1
except requests.exceptions.HTTPError as e:
print("Bad HTTP status code:", e)
except requests.exceptions.RequestException as e:
print("Network error:", e)
except requests.exceptions.HTTPError as e:
print("Bad HTTP status code:", e)
except requests.exceptions.RequestException as e:
print("Network error:", e)
#conn.close()
print("nb_request",nb_request,"nb_total_ressource : ",nb_total_ressource," nb_local_ressource : ",nb_local_ressource)
print("nb_keep",nb_keep,"nb_remove",nb_remove);
Here the result :
J’ai essayé de faire une installation de cmake, et j’ai eu l’erreur :
$ brew install cmake
/usr/local/Homebrew/Library/Homebrew/utils/lock.sh: line 27: /usr/local/var/homebrew/locks/update: Permission denied
-e:1:in `initialize': Bad file descriptor (Errno::EBADF)
from -e:1:in `new'
from -e:1:in ' Error: Another active Homebrew update process is already in progress. Please wait for it to finish or terminate it to continue. Error: The following directories are not writable by your user: ...
Pour fixer le problème j’ai fait :
Quand j’essaye de faire le build de dlib j’ai l’erreur suivante :
In file included from /private/var/folders/72/mwd843qs5dnfxxzc5zzwx5mw0000gn/T/pip-install-yx4dc86g/dlib/dlib/gui_widgets/fonts.cpp:16:
/private/var/folders/72/mwd843qs5dnfxxzc5zzwx5mw0000gn/T/pip-install-yx4dc86g/dlib/dlib/gui_widgets/nativefont.h:27:10: fatal error: 'X11/Xlib.h' file not found
#include <X11/Xlib.h>
^~~~~~~~~~~~
1 error generated.
make[2]: *** [dlib_build/CMakeFiles/dlib.dir/gui_widgets/fonts.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [dlib_build/CMakeFiles/dlib.dir/all] Error 2
make: *** [all] Error 2
Pour fixer le problème :
ln -s /opt/X11/include/X11 /usr/local/include/X11
J’ai donc pu faire la compilation de dlib qui est utilisé par face_recognition :
$ pip install face_recognition
Collecting face_recognition
Using cached https://files.pythonhosted.org/packages/3f/ed/ad9a28042f373d4633fc8b49109b623597d6f193d3bbbef7780a5ee8eef2/face_recognition-1.2.3-py2.py3-none-any.whl
Requirement already satisfied: numpy in /usr/local/lib/python3.7/site-packages (from face_recognition) (1.16.1)
Requirement already satisfied: Pillow in /usr/local/lib/python3.7/site-packages (from face_recognition) (5.4.1)
Collecting dlib>=19.7 (from face_recognition)
Using cached https://files.pythonhosted.org/packages/35/8d/e4ddf60452e2fb1ce3164f774e68968b3f110f1cb4cd353235d56875799e/dlib-19.16.0.tar.gz
Requirement already satisfied: face-recognition-models>=0.3.0 in /usr/local/lib/python3.7/site-packages (from face_recognition) (0.3.0)
Collecting Click>=6.0 (from face_recognition)
Using cached https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl
Building wheels for collected packages: dlib
Building wheel for dlib (setup.py) ... done
Stored in directory: /Users/.../Library/Caches/pip/wheels/ce/f9/bc/1c51cd0b40a2b5dfd46ab79a73832b41e7c3aa918a508154f0
Successfully built dlib
Installing collected packages: dlib, Click, face-recognition
Successfully installed Click-7.0 dlib-19.16.0 face-recognition-1.2.3
A suivre.
Quand on fait un Takeout sur Google on a des fichiers Takeout-XX qui font 2 Go maximum, ensuite il faut recomposer le fichier Takeout de base. Pour faire cela sous Mac rien de plus facile, avant de copier il faut maintenir la touche Option ( c.a.d. ALT). On a alors dans le menu la possibilité de fusionner.
La nouvelle version arrive avec quelques fix et des améliorations :


On peut même faire du KaTeX !
J’ai voulu tester Joplin https://joplin.cozic.net entièrement, pas seulement la synchronisation de 2 ou 3 fichiers.
J’ai donc fait une base de 2465 notes, et 9787 images :
: "Total folders: 32"
: "Total notes: 2465"
: "Total resources: 9787"
Mon fichier WebDEV :
$ du -sh WebDAV/
2,7G WebDAV/
$ ls -l WebDAV/*.md | wc -l
-bash: /bin/ls: Argument list too long
0
Il y a tellement de fichier que la commande “ls” plante :) , en fait il y a 13051 fichiers pour 2,7 Go. Le fichier le plus gros fait 13 Ko.
Step 0 : Install Joplin and activate the REST API ( https://joplin.cozic.net/api/ ) .
Step 1: Install nltk and worldcloud with pip ( for more information see https://www.datacamp.com/community/tutorials/wordcloud-python )
Step 3.a : Run this scripts for Title (change the token)
#
# Version 1
# for Python 3
#
# ARIAS Frederic
# Sorry ... It's difficult for me the python :)
#
from time import gmtime, strftime
import time
import json
import requests
import os
import nltk
nltk.download('punkt')
nltk.download('stopwords')
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from wordcloud import WordCloud
import numpy as np
import matplotlib.pyplot as plt
#IP
ip = "127.0.0.1"
#Port
port = "41184"
#Token
token = "Put your token here"
nb_request = 0
my_title = ""
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
url_notes = (
"http://"+ip+":"+port+"/notes?"
"token="+token
)
try:
resp = requests.get(url_notes, headers=headers)
nb_request += 1
resp.raise_for_status()
resp_dict = resp.json()
#print(resp_dict)
for my_note in resp_dict:
#print(my_note.get('id'))
my_title += my_note.get('title')
except requests.exceptions.HTTPError as e:
print("Bad HTTP status code:", e)
except requests.exceptions.RequestException as e:
print("Network error:", e)
# Create a word cloud image
stopwords = stopwords.words('french')
wc = WordCloud(background_color="white", max_words=5000, stopwords=stopwords, contour_width=3, contour_color='firebrick')
wc.generate(my_title)
wc.to_file("jopling_title.png")
plt.figure(figsize=[18,8])
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()
Step 3.b : Run this scripts for Body (change the token)
Awesome Note 2, it’s very popular on iPad :

The new All-in-one Organizer, Awesome Note 2 is integrated with note and schedule management.
And now it’s available!!WONDERFUL WRITING FEATURES
· It can be used not only for simple notes, but also rich and wonderful writing tool.
· Make notes even more powerful to add photos, voice recording and drawings.
· Easily create diary notes to display feeling, weather or road map information.
Step 0 : Install Joplin and activate the REST API ( https://joplin.cozic.net/api/ ) .
Step 1: Install gmplot with pip
$ pip install gmplot
Collecting gmplot
Downloading https://files.pythonhosted.org/packages/e2/b1/e1429c31a40b3ef5840c16f78b506d03be9f27e517d3870a6fd0b356bd46/gmplot-1.2.0.tar.gz (115kB)
100% |████████████████████████████████| 122kB 1.0MB/s
Requirement already satisfied: requests in /usr/local/lib/python3.7/site-packages (from gmplot) (2.21.0)
Requirement already satisfied: urllib3<1.25,>=1.21.1 in /usr/local/lib/python3.7/site-packages (from requests->gmplot) (1.24.1)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/site-packages (from requests->gmplot) (2018.11.29)
Requirement already satisfied: idna<2.9,>=2.5 in /usr/local/lib/python3.7/site-packages (from requests->gmplot) (2.8)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.7/site-packages (from requests->gmplot) (3.0.4)
Building wheels for collected packages: gmplot
Building wheel for gmplot (setup.py) ... done
Stored in directory: /Users/...../Library/Caches/pip/wheels/81/6a/76/4dd6a7cc310ba765894159ee84871e8cd55221d82ef14b81a1
Successfully built gmplot
Installing collected packages: gmplot
Successfully installed gmplot-1.2.0
The source code : (change your token)