@ -0,0 +1,63 @@ |
|||||||
|
import os |
||||||
|
import subprocess |
||||||
|
from flask import Flask, request, jsonify |
||||||
|
from flask_flatpages import FlatPages |
||||||
|
from flask import render_template |
||||||
|
|
||||||
|
FLATPAGES_AUTO_RELOAD = True |
||||||
|
|
||||||
|
app = Flask(__name__) |
||||||
|
app.config.from_object(__name__) |
||||||
|
pages = FlatPages(app) |
||||||
|
application = app |
||||||
|
pages.get('foo') |
||||||
|
|
||||||
|
|
||||||
|
@app.route('/') |
||||||
|
def index(): |
||||||
|
articles = (p for p in pages if 'date' in p.meta) |
||||||
|
latest = sorted(articles, reverse=True, |
||||||
|
key=lambda p: p.meta['published']) |
||||||
|
return render_template('base.html', articles=latest) |
||||||
|
|
||||||
|
|
||||||
|
@app.route('/<path:path>/') |
||||||
|
def page(path): |
||||||
|
page = pages.get_or_404(path) |
||||||
|
return render_template('single.html', page=page) |
||||||
|
|
||||||
|
|
||||||
|
@app.route('/webhook', methods=['POST']) |
||||||
|
def webhook(): |
||||||
|
# Verify the secret (if you used one in Gitea) |
||||||
|
secret = "your_secret_here" # Replace with your actual secret |
||||||
|
if secret: |
||||||
|
if 'X-Gitea-Signature' not in request.headers: |
||||||
|
return "Unauthorized", 401 |
||||||
|
received_signature = request.headers['X-Gitea-Signature'] |
||||||
|
expected_signature = f"sha256={compute_signature(request.data, secret)}" |
||||||
|
if received_signature != expected_signature: |
||||||
|
return "Unauthorized", 401 |
||||||
|
|
||||||
|
# Perform Git pull to update the website's code |
||||||
|
repo_path = "/path/to/your/website/repo" # Replace with the actual path |
||||||
|
subprocess.run(['git', 'pull'], cwd=repo_path) |
||||||
|
|
||||||
|
# Restart the Flask app |
||||||
|
#restart_flask_app() |
||||||
|
|
||||||
|
return "Webhook received and processed successfully", 200 |
||||||
|
|
||||||
|
def compute_signature(data, secret): |
||||||
|
import hmac |
||||||
|
import hashlib |
||||||
|
return hmac.new(secret.encode('utf-8'), data, hashlib.sha256).hexdigest() |
||||||
|
|
||||||
|
def restart_flask_app(): |
||||||
|
# Customize this function to restart your Flask app (e.g., using gunicorn, systemd, etc.) |
||||||
|
# Example: subprocess.run(['systemctl', 'restart', 'your-flask-app.service']) |
||||||
|
pass |
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
app.run(host='0.0.0.0', port=5000) # Adjust the host and port as needed |
||||||
|
|
||||||
@ -0,0 +1,151 @@ |
|||||||
|
from flask import Flask , send_from_directory , request |
||||||
|
from flask_flatpages import FlatPages |
||||||
|
from flask import render_template |
||||||
|
import os |
||||||
|
|
||||||
|
FLATPAGES_EXTENSION = '.md' |
||||||
|
FLATPAGES_AUTO_RELOAD = True |
||||||
|
|
||||||
|
app = Flask(__name__) |
||||||
|
app.config['APPLICATION_ROOT'] = '/flaskapp' |
||||||
|
BASE_DIR = os.path.abspath(os.path.dirname(__file__)) |
||||||
|
FLATPAGES_MARKDOWN_EXTENSIONS = ['extra'] |
||||||
|
FLATPAGES_EXTENSION_CONFIGS = { |
||||||
|
'codehilite': { |
||||||
|
'linenums': 'True' |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
app.config.from_object(__name__) |
||||||
|
pages = FlatPages(app) |
||||||
|
application = app |
||||||
|
pages.get('foo') |
||||||
|
|
||||||
|
def Liste_cat(): |
||||||
|
articles = (p for p in pages if 'published' in p.meta) |
||||||
|
catList = [] |
||||||
|
for a in articles: |
||||||
|
catList.append(a.meta['cat']) |
||||||
|
catList = list(dict.fromkeys(catList)) |
||||||
|
return catList |
||||||
|
|
||||||
|
def imagelist(articlename): |
||||||
|
dir_path = os.path.dirname(os.path.realpath(articlename))+'/pages/' |
||||||
|
gallery_path = os.path.join(dir_path, articlename) |
||||||
|
if os.path.exists(gallery_path): |
||||||
|
images = [f for f in os.listdir(gallery_path) if f.endswith('.jpg') or f.endswith('.jpeg') or f.endswith('.png') or f.endswith('.gif')] |
||||||
|
return gallery_path ,images |
||||||
|
else: |
||||||
|
return None, None |
||||||
|
|
||||||
|
|
||||||
|
# this is chatgpt quick fix no love ! |
||||||
|
def is_time(value): |
||||||
|
try: |
||||||
|
datetime.strptime(value, '%H:%M:%S') # Adjust the format as needed |
||||||
|
return True |
||||||
|
except ValueError: |
||||||
|
return False |
||||||
|
|
||||||
|
|
||||||
|
@app.route('/') |
||||||
|
def index(): |
||||||
|
# Articles are pages with a publication date |
||||||
|
articles = (p for p in pages if 'published' in p.meta) |
||||||
|
latest = sorted(articles, reverse=True, |
||||||
|
key=lambda p: p.meta['published']) |
||||||
|
catList = Liste_cat() |
||||||
|
return render_template('index.html', articles=latest , catList=catList ) |
||||||
|
|
||||||
|
@app.route('/<path:path>') |
||||||
|
def page(path): |
||||||
|
page = pages.get_or_404(path) |
||||||
|
catList = Liste_cat() |
||||||
|
g_path, imgs = imagelist(path) |
||||||
|
# print(list(page.meta.values())) |
||||||
|
if imgs: |
||||||
|
return render_template('single.html', page=page ,catList=catList , g_path=g_path, imgs = imgs) |
||||||
|
else : |
||||||
|
return render_template('single.html', page=page ,catList=catList) |
||||||
|
|
||||||
|
@app.route('/info') |
||||||
|
def info(): |
||||||
|
page = pages.get_or_404('info') |
||||||
|
catList = Liste_cat() |
||||||
|
return render_template('staticpage.html', page=page , catList=catList) |
||||||
|
|
||||||
|
@app.route('/cat/<catname>') |
||||||
|
def catPage(catname): |
||||||
|
articles = (p for p in pages if 'published' in p.meta and 'cat' in p.meta and p.meta['cat']==catname ) |
||||||
|
latest = sorted(articles, reverse=True, |
||||||
|
key=lambda p: p.meta['published']) |
||||||
|
catList = Liste_cat() |
||||||
|
return render_template('index.html', articles=latest , catList=catList ) |
||||||
|
|
||||||
|
@app.route('/author/<authorname>') |
||||||
|
def authorPage(authorname): |
||||||
|
articles = (p for p in pages if 'published' in p.meta and 'author' in p.meta and p.meta['author']==authorname ) |
||||||
|
latest = sorted(articles, reverse=True, |
||||||
|
key=lambda p: p.meta['published']) |
||||||
|
catList = Liste_cat() |
||||||
|
return render_template('index.html', articles=latest , catList=catList ) |
||||||
|
|
||||||
|
|
||||||
|
@app.route('/pages/<path:path>') |
||||||
|
def serve_pages(path): |
||||||
|
return send_from_directory('pages', path) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/search', methods=['POST']) |
||||||
|
def search(): |
||||||
|
query = request.form['query'] |
||||||
|
print(query) |
||||||
|
catList = Liste_cat() |
||||||
|
# articles = (p for p in pages if 'published' in p.meta and query.lower() in metastr= lambda m : [item.lower() for item in list(p.meta.values())]) |
||||||
|
articles = (p for p in pages if 'published' in p.meta and any(isinstance(value,str) and query.lower() in value.lower() for value in p.meta.values())) |
||||||
|
return render_template('index.html', articles=articles ,catList=catList) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/webhook', methods=['POST']) |
||||||
|
def webhook(): |
||||||
|
# Verify the secret (if you used one in Gitea) |
||||||
|
secret = "your_secret_here" # Replace with your actual secret |
||||||
|
if secret: |
||||||
|
if 'X-Gitea-Signature' not in request.headers: |
||||||
|
return "Unauthorized", 401 |
||||||
|
received_signature = request.headers['X-Gitea-Signature'] |
||||||
|
expected_signature = f"sha256={compute_signature(request.data, secret)}" |
||||||
|
if received_signature != expected_signature: |
||||||
|
return "Unauthorized", 401 |
||||||
|
|
||||||
|
# Perform Git pull to update the website's code |
||||||
|
repo_path = "/path/to/your/website/repo" # Replace with the actual path |
||||||
|
subprocess.run(['git', 'pull'], cwd=repo_path) |
||||||
|
|
||||||
|
# Restart the Flask app |
||||||
|
#restart_flask_app() |
||||||
|
|
||||||
|
return "Webhook received and processed successfully", 200 |
||||||
|
|
||||||
|
def compute_signature(data, secret): |
||||||
|
import hmac |
||||||
|
import hashlib |
||||||
|
return hmac.new(secret.encode('utf-8'), data, hashlib.sha256).hexdigest() |
||||||
|
|
||||||
|
def restart_flask_app(): |
||||||
|
# Customize this function to restart your Flask app (e.g., using gunicorn, systemd, etc.) |
||||||
|
# Example: subprocess.run(['systemctl', 'restart', 'your-flask-app.service']) |
||||||
|
pass |
||||||
|
|
||||||
|
|
||||||
|
@app.errorhandler(404) |
||||||
|
def page_not_found(e): |
||||||
|
# note that we set the 404 status explicitly |
||||||
|
return "NOPE NOTHING HERE plz leave now 🛸" |
||||||
|
|
||||||
|
if __name__ == "__main__": |
||||||
|
app.run(host='0.0.0.0') |
||||||
@ -0,0 +1,38 @@ |
|||||||
|
title : article type |
||||||
|
author: zvevqx |
||||||
|
published: 2021-11-22 |
||||||
|
cat: linux |
||||||
|
desc: ws |
||||||
|
|
||||||
|
... |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# mon titre |
||||||
|
|
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
Her father remarried while at Burma and Kuntala returned to Odisha with her Mother. She settled in Khurdha with her mother after returning from Burma. In spite of total lack of women's education her mother's perseverance allowed her to receive a good education. She studied from Ravenshaw Girls High School and continued her education in Orissa Medical School, Cuttack (Now Srirama Chandra Bhanja Medical College and Hospital). She earned her L.M.P (Licentiate Medical Practitioners) degree in 1921 with a gold medal. She was fluent in Odia, Hindi, Bengali, English and Burmese.[5] Her father remarried while at Burma and Kuntala returned to Odisha with her Mother. She settled in Khurdha with her mother after returning from Burma. In spite of total lack of women's education her mother's perseverance allowed her to receive a good education. She studied from Ravenshaw Girls High School and continued her education in Orissa Medical School, Cuttack (Now Srirama Chandra Bhanja Medical College and Hospital). She earned her L.M.P (Licentiate Medical Practitioners) degree in 1921 with a gold medal. She was fluent in Odia, Hindi, Bengali, English and Burmese.[5] Her father remarried while at Burma and Kuntala returned to Odisha with her Mother. She settled in Khurdha with her mother after returning from Burma. In spite of total lack of women's education her mother's perseverance allowed her to receive a good education. She studied from Ravenshaw Girls High School and continued her education in Orissa Medical School, Cuttack (Now Srirama Chandra Bhanja Medical College and Hospital). She earned her L.M.P (Licentiate Medical Practitioners) degree in 1921 with a gold medal. She was fluent in Odia, Hindi, Bengali, English and Burmese.[5] Her father remarried while at Burma and Kuntala returned to Odisha with her Mother. She settled in Khurdha with her mother after returning from Burma. In spite of total lack of women's education her mother's perseverance allowed her to receive a good education. She studied from Ravenshaw Girls High School and continued her education in Orissa Medical School, Cuttack (Now Srirama Chandra Bhanja Medical College and Hospital). She earned her L.M.P |
||||||
|
|
||||||
|
some code ( add 1 **tab** before every line ) |
||||||
|
|
||||||
|
def Liste_cat(): |
||||||
|
articles = (p for p in pages if 'published' in p.meta) |
||||||
|
catList = [] |
||||||
|
for a in articles: |
||||||
|
catList.append(a.meta['cat']) |
||||||
|
catList = list(dict.fromkeys(catList)) |
||||||
|
return catList |
||||||
|
|
||||||
|
|
||||||
|
[un lien](https://google.com) |
||||||
|
|
||||||
|
- lest |
||||||
|
- tewt |
||||||
|
- trie |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
yyEach of these objects is associated to a path: the slash-separated (whatever the OS) name of the file it was loaded from, relative to the pages root, and excluding the extension. For example, for an app in |
||||||
@ -0,0 +1,38 @@ |
|||||||
|
title : Bash and terminal command |
||||||
|
author: zvevqx |
||||||
|
published: 2025-11-22 |
||||||
|
cat: linux |
||||||
|
desc: ws |
||||||
|
|
||||||
|
... |
||||||
|
|
||||||
|
👾 MOST OF THIS PAGE IS DIRECT OUTPUT OF CHATGPT 3.5 |
||||||
|
|
||||||
|
# Basic Bash Commands for Navigating a File System |
||||||
|
|
||||||
|
Here are some of the basic Bash commands you can use to navigate a file system: |
||||||
|
|
||||||
|
1. `pwd`: Displays the current working directory. |
||||||
|
2. `cd`: Changes the current working directory. |
||||||
|
* `cd <directory-name>`: Changes to the specified directory. |
||||||
|
* `cd ..`: Changes to the parent directory. |
||||||
|
* `cd /`: Changes to the root directory. |
||||||
|
* `cd ~`: Changes to the home directory. |
||||||
|
3. `ls`: Lists the contents of the current directory. |
||||||
|
* `ls <directory-name>`: Lists the contents of the specified directory. |
||||||
|
* `ls -l`: Lists the contents of the current directory in long format. |
||||||
|
* `ls -a`: Lists all contents of the current directory, including hidden files. |
||||||
|
4. `mkdir`: Creates a new directory. |
||||||
|
* `mkdir <directory-name>`: Creates a new directory with the specified name. |
||||||
|
5. `touch`: Creates a new file. |
||||||
|
* `touch <file-name>`: Creates a new file with the specified name. |
||||||
|
6. `cp`: Copies a file or directory. |
||||||
|
* `cp <source> <destination>`: Copies the file or directory from the source to the destination. |
||||||
|
7. `mv`: Moves a file or directory. |
||||||
|
* `mv <source> <destination>`: Moves the file or directory from the source to the destination. |
||||||
|
8. `rm`: Deletes a file or directory. |
||||||
|
* `rm <file-name>`: Deletes the specified file. |
||||||
|
* `rm -r <directory-name>`: Deletes the specified directory and its contents. |
||||||
|
|
||||||
|
These are just a few of the basic Bash commands you can use to navigate a file system. As you become more familiar with these commands, you can start to use more advanced commands to perform more complex tasks. |
||||||
|
|
||||||
@ -0,0 +1,88 @@ |
|||||||
|
title : Cheatsheet all |
||||||
|
author: zvevqx |
||||||
|
published: 2025-11-22 |
||||||
|
cat: linux |
||||||
|
desc: ws |
||||||
|
|
||||||
|
... |
||||||
|
|
||||||
|
👾 MOST OF THIS PAGE IS DIRECT OUTPUT OF CHATGPT 3.5 |
||||||
|
|
||||||
|
# Cheatsheet |
||||||
|
|
||||||
|
## Bash Commands |
||||||
|
|
||||||
|
| Command | Description | |
||||||
|
| --- | --- | |
||||||
|
| `cd [dir]` | change directory | |
||||||
|
| `ls` | list directory contents | |
||||||
|
| `pwd` | print working directory | |
||||||
|
| `mkdir [dir]` | create a new directory | |
||||||
|
| `rm [file]` | remove a file | |
||||||
|
| `rm -r [dir]` | remove a directory and its contents | |
||||||
|
| `cp [source] [destination]` | copy a file or directory | |
||||||
|
| `mv [source] [destination]` | move or rename a file or directory | |
||||||
|
| `cat [file]` | display the contents of a file | |
||||||
|
| `grep [pattern] [file]` | search for a pattern in a file | |
||||||
|
|
||||||
|
## Git Commands |
||||||
|
|
||||||
|
| Command | Description | |
||||||
|
| --- | --- | |
||||||
|
| `git init` | initialize a new Git repository | |
||||||
|
| `git add [file]` | add a file to the staging area | |
||||||
|
| `git commit -m "[message]"` | commit changes with a message | |
||||||
|
| `git status` | show the status of the repository | |
||||||
|
| `git log` | show the commit history | |
||||||
|
| `git push` | push changes to a remote repository | |
||||||
|
| `git pull` | pull changes from a remote repository | |
||||||
|
|
||||||
|
## SSH Commands |
||||||
|
|
||||||
|
| Command | Description | |
||||||
|
| --- | --- | |
||||||
|
| `ssh [user]@[host]` | connect to a remote host via SSH | |
||||||
|
| `scp [file] [user]@[host]:[destination]` | copy a file to a remote host | |
||||||
|
| `ssh-keygen` | generate an SSH key pair | |
||||||
|
| `ssh-copy-id [user]@[host]` | copy your SSH public key to a remote host | |
||||||
|
|
||||||
|
## Python Commands and Tools |
||||||
|
|
||||||
|
| Command | Description | |
||||||
|
| --- | --- | |
||||||
|
| `python` | start the Python interpreter | |
||||||
|
| `pip install [package]` | install a Python package | |
||||||
|
| `venv` | create and manage Python virtual environments | |
||||||
|
|
||||||
|
### Python Virtual Environments |
||||||
|
|
||||||
|
| Command | Description | |
||||||
|
| --- | --- | |
||||||
|
| `python3 -m venv [venv-name]` | create a new virtual environment | |
||||||
|
| `source [venv-name]/bin/activate` | activate the virtual environment | |
||||||
|
| `deactivate` | deactivate the virtual environment | |
||||||
|
|
||||||
|
## FFmpeg Commands |
||||||
|
|
||||||
|
| Command | Description | |
||||||
|
| --- | --- | |
||||||
|
| `ffmpeg -i [input] [output]` | convert a video or audio file | |
||||||
|
| `ffmpeg -i [input] -ss [time] -t [duration] [output]` | trim a video or audio file | |
||||||
|
| `ffmpeg -i [input] -vn -acodec [codec] [output]` | extract audio from a video file | |
||||||
|
| `ffmpeg -f concat -safe 0 -i [list.txt] -c copy [output]` | concatenate multiple video or audio files | |
||||||
|
|
||||||
|
## ImageMagick Commands |
||||||
|
|
||||||
|
| Command | Description | |
||||||
|
| --- | --- | |
||||||
|
| `convert [input] [output]` | convert an image format | |
||||||
|
| `mogrify -resize [size] [input]` | resize an image | |
||||||
|
| `montage [input1] [input2] -geometry [geometry] [output]` | create a montage of images | |
||||||
|
|
||||||
|
## Arduino Commands |
||||||
|
|
||||||
|
| Command | Description | |
||||||
|
| --- | --- | |
||||||
|
| `arduino-cli board list` | list available boards | |
||||||
|
| `arduino-cli compile --fqbn [board] [sketch]` | compile a sketch | |
||||||
|
| `arduino-cli upload -p [port] --fqbn [board |
||||||
@ -0,0 +1,79 @@ |
|||||||
|
title : cli image/video tools ( ffmpeg / imagemagick ) |
||||||
|
author: zvevqx |
||||||
|
published: 2025-11-22 |
||||||
|
cat: tools |
||||||
|
desc: ws |
||||||
|
|
||||||
|
... |
||||||
|
|
||||||
|
👾 MOST OF THIS PAGE IS DIRECT OUTPUT OF CHATGPT 3.5 |
||||||
|
|
||||||
|
# Multimedia Cheat Sheet - Advanced Commands |
||||||
|
|
||||||
|
Here are some advanced commands for two powerful multimedia tools: FFmpeg and ImageMagick. |
||||||
|
|
||||||
|
## FFmpeg Cheat Sheet |
||||||
|
|
||||||
|
FFmpeg is a powerful tool for manipulating video and audio files. |
||||||
|
|
||||||
|
### Basic Commands |
||||||
|
|
||||||
|
| Command | Description | |
||||||
|
| --- | --- | |
||||||
|
| `ffmpeg -i input.mp4 output.avi` | Convert MP4 file to AVI | |
||||||
|
| `ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:05 output.mp4` | Trim a video from 10 seconds to 15 seconds | |
||||||
|
| `ffmpeg -i input.mp4 -vn output.mp3` | Extract audio from a video file | |
||||||
|
| `ffmpeg -i input.mp4 -vf "scale=640:360" output.mp4` | Resize a video to 640x360 pixels | |
||||||
|
|
||||||
|
### Advanced Commands |
||||||
|
|
||||||
|
| Command | Description | |
||||||
|
| --- | --- | |
||||||
|
| `ffmpeg -i input.mp4 -filter_complex "[0:v]split[v1][v2];[v1]scale=640:360[v1out];[v2]scale=1280:720[v2out]" -map "[v1out]" -map "[v2out]" -preset ultrafast -c:v libx264 -c:a copy output.mp4` | Split a video into two different resolutions (640x360 and 1280x720) | |
||||||
|
| `ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4` | Add a watermark to a video | |
||||||
|
| `ffmpeg -i input.mp4 -af "pan=stereo|c0=c1|c1=c0" output.mp4` | Convert mono audio to stereo | |
||||||
|
| `ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset veryslow -c:a copy -movflags +faststart output.mp4` | Encode a video with a CRF value of 23 and a very slow preset, and enable fast start for streaming | |
||||||
|
|
||||||
|
## ImageMagick Cheat Sheet |
||||||
|
|
||||||
|
ImageMagick is a powerful tool for manipulating images. |
||||||
|
|
||||||
|
### Basic Commands |
||||||
|
|
||||||
|
| Command | Description | |
||||||
|
| --- | --- | |
||||||
|
| `convert input.jpg output.png` | Convert a JPEG file to PNG | |
||||||
|
| `convert input.png -resize 50% output.png` | Resize a PNG file to 50% of its original size | |
||||||
|
| `convert input.png -rotate 45 output.png` | Rotate a PNG file by 45 degrees | |
||||||
|
| `convert input.png -crop 100x100+10+10 output.png` | Crop a 100x100 pixel region of a PNG file, starting from the point (10,10) | |
||||||
|
|
||||||
|
### Advanced Commands |
||||||
|
|
||||||
|
| Command | Description | |
||||||
|
| --- | --- | |
||||||
|
| `convert input.png -morphology Convolve Sobel:1 output.png` | Apply a Sobel edge detection filter to a PNG file | |
||||||
|
| `convert input.png -colorspace Gray -negate output.png` | Convert a PNG file to grayscale and invert its colors | |
||||||
|
| `convert input.png -threshold 50% output.png` | Apply a binary threshold to a PNG file | |
||||||
|
| `convert input1.png input2.png -compose Difference -composite -normalize output.png` | Compute the absolute difference between two PNG files | |
||||||
|
|
||||||
|
### Batch Processing with Mogrify |
||||||
|
|
||||||
|
ImageMagick's `mogrify` command allows you to process multiple images in a directory at once. Here are some useful commands: |
||||||
|
|
||||||
|
| Command | Description | |
||||||
|
| --- | --- | |
||||||
|
| mogrify -resize 50% *.jpg | Resize all JPEG files in the current directory to 50% of their original size | |
||||||
|
| mogrify -format png *.jpg | Convert all JPEG files in the current directory to PNG | |
||||||
|
| mogrify -rotate 90 *.png | Rotate all PNG files in the current directory by 90 degrees | |
||||||
|
| mogrify -strip *.jpg | Remove EXIF data from all JPEG files in the current directory | |
||||||
|
|
||||||
|
Note that mogrify modifies the original files in place, so be sure to make a backup of your files before using this command |
||||||
|
|
||||||
|
| Command | Description| |
||||||
|
| --- | --- | |
||||||
|
| mogrify -resize 50% *.jpg | Resize all JPEG files in the current directory to 50% of their original size | |
||||||
|
| mogrify -format png *.jpg | Convert all JPEG files in the current directory to PNG | |
||||||
|
| mogrify -rotate 90 *.png | Rotate all PNG files in the current directory by 90 degrees | |
||||||
|
| mogrify -strip *.jpg | Remove EXIF data from all JPEG files in the current directory | |
||||||
|
|
||||||
|
**Note that mogrify modifies the original files in place, so be sure to make a backup of your files before using this command**. |
||||||
@ -0,0 +1,48 @@ |
|||||||
|
title : git and github basic |
||||||
|
author: zvevqx |
||||||
|
published: 2025-11-22 |
||||||
|
cat: linux |
||||||
|
desc: ws |
||||||
|
|
||||||
|
... |
||||||
|
|
||||||
|
👾 MOST OF THIS PAGE IS DIRECT OUTPUT OF CHATGPT 3.5 |
||||||
|
|
||||||
|
# Git and GitHub Basics |
||||||
|
|
||||||
|
## What is Git? |
||||||
|
Git is a free and open-source version control system that helps you keep track of changes made to your code over time. |
||||||
|
|
||||||
|
## What is GitHub? |
||||||
|
GitHub is a web-based platform that provides hosting for Git repositories. It also offers many collaboration features such as pull requests, code reviews, and issue tracking. |
||||||
|
|
||||||
|
## Getting Started |
||||||
|
To get started with Git and GitHub, follow these steps: |
||||||
|
|
||||||
|
1. Install Git on your computer. |
||||||
|
2. Create a GitHub account. |
||||||
|
3. Open your terminal or command prompt. |
||||||
|
4. Navigate to the directory where you want to create your project. |
||||||
|
5. Initialize a new Git repository using the command `git init`. |
||||||
|
|
||||||
|
## Basic Git Commands |
||||||
|
Here are some of the basic Git commands you will need to use: |
||||||
|
|
||||||
|
- `git status` - shows the status of your Git repository |
||||||
|
- `git add .` - adds all changes to the staging area |
||||||
|
- `git commit -m "commit message"` - commits changes to the local repository with a message |
||||||
|
- `git push` - pushes changes to the remote repository |
||||||
|
|
||||||
|
## Basic GitHub Commands |
||||||
|
Here are some of the basic GitHub commands you will need to use: |
||||||
|
|
||||||
|
- `git clone <repository url>` - clones a repository to your local machine |
||||||
|
- `git pull` - pulls changes from the remote repository to your local machine |
||||||
|
- `git branch` - shows a list of branches in the repository |
||||||
|
- `git checkout <branch name>` - switches to the specified branch |
||||||
|
- `git merge <branch name>` - merges the specified branch with the current branch |
||||||
|
- `git push <remote> <branch>` - pushes changes to a specific remote branch |
||||||
|
|
||||||
|
## Conclusion |
||||||
|
These are just the basics of Git and GitHub, but they should be enough to get you started with version control and collaborating with others on code. As you continue to use these tools, you will learn more advanced commands and techniques. |
||||||
|
|
||||||
@ -0,0 +1,17 @@ |
|||||||
|
title: info |
||||||
|
author: julien |
||||||
|
|
||||||
|
--- |
||||||
|
|
||||||
|
# contact |
||||||
|
|
||||||
|
0460 96 28 21 |
||||||
|
email@domain.com |
||||||
|
|
||||||
|
rue du sceptre 23 |
||||||
|
1050 ixelles |
||||||
|
|
||||||
|
=== |
||||||
|
|
||||||
|
# CV |
||||||
|
|
||||||
@ -0,0 +1,678 @@ |
|||||||
|
--- |
||||||
|
title: RESSOURCES |
||||||
|
author: zvevqx |
||||||
|
published: 2023-11-22 |
||||||
|
cat: various |
||||||
|
desc: ws |
||||||
|
... |
||||||
|
|
||||||
|
|
||||||
|
## coding |
||||||
|
|
||||||
|
### learning |
||||||
|
|
||||||
|
|
||||||
|
**** |
||||||
|
|
||||||
|
**Dive into python** |
||||||
|
|
||||||
|
- reference historique |
||||||
|
- tres complet |
||||||
|
- disponible en plusieurs langue |
||||||
|
|
||||||
|
[https://diveintopython3.net/](https://diveintopython3.net/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**lear X in Y minutes** |
||||||
|
|
||||||
|
- touts les languages sous forme d'une page *help* |
||||||
|
- bon moyen de comprendre |
||||||
|
- support aide memoire |
||||||
|
|
||||||
|
[https://learnxinyminutes.com/](https://learnxinyminutes.com/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**CodingBat** |
||||||
|
|
||||||
|
- `python` et `java` |
||||||
|
- suites d'exercices corrige |
||||||
|
- console python integre au site |
||||||
|
|
||||||
|
[https://codingbat.com/python](https://codingbat.com/python) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**CodeCademy** |
||||||
|
|
||||||
|
- formation a `python2` gratuite |
||||||
|
- multiple parcours d'apprentissage |
||||||
|
|
||||||
|
<mark> Service payant apres une periode de test et suivant les formations </mark> |
||||||
|
|
||||||
|
[https://www.codecademy.com/learn/learn-python](https://www.codecademy.com/learn/learn-python) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### language |
||||||
|
|
||||||
|
|
||||||
|
** |
||||||
|
**Arduino** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
- easy to learn |
||||||
|
- grande communautee |
||||||
|
- enormement de ressources et aide en ligne |
||||||
|
|
||||||
|
programation `hardware` sur des cartes de developpement du mm nom |
||||||
|
|
||||||
|
**** |
||||||
|
|
||||||
|
[https://www.arduino.cc/en/Guide/ArduinoUno](https://www.arduino.cc/en/Guide/ArduinoUno) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** |
||||||
|
**processing** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
> Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts. |
||||||
|
|
||||||
|
- base sur Java |
||||||
|
- beaucoup de librairie et d'integration possible (ex : `arduino` via `firmata`) |
||||||
|
- enormement de ressources et aide en ligne |
||||||
|
|
||||||
|
[https://processing.org/](https://processing.org/) |
||||||
|
[getting started](https://processing.org/tutorials/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** |
||||||
|
**PureData** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
- programation visuel / nodal |
||||||
|
- grande communautee |
||||||
|
- traiment image / video |
||||||
|
- creation musicale |
||||||
|
|
||||||
|
pendant `open-source` de `max-msp` |
||||||
|
|
||||||
|
[https://puredata.info/](https://puredata.info/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### IDE |
||||||
|
|
||||||
|
#### python |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** |
||||||
|
**Thonny** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
- `I.D.E` pour debutant |
||||||
|
- multi OS ( `linux`, `osx`, `win`) |
||||||
|
- interface graphique pour `pip` |
||||||
|
|
||||||
|
[https://thonny.org/](https://thonny.org/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** |
||||||
|
**idle** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
- ide pour et par `python` |
||||||
|
- console `python` |
||||||
|
|
||||||
|
[https://docs.python.org/3/library/idle.html](https://docs.python.org/3/library/idle.html) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** |
||||||
|
**programiz Online compiler** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
- ide pour et par `python` |
||||||
|
- console `python` |
||||||
|
|
||||||
|
[https://docs.python.org/3/library/idle.html](https://docs.python.org/3/library/idle.html) |
||||||
|
|
||||||
|
|
||||||
|
## software ressource |
||||||
|
|
||||||
|
### 2D drawing / plan / edition |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **INKSCAPE** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* : free / opensource |
||||||
|
*os* : linux / osx / win |
||||||
|
|
||||||
|
*use* vector graphic design software - illustrator like |
||||||
|
|
||||||
|
> |
||||||
|
- illustration / logo / plan for cnc and laser cut |
||||||
|
- could be use as gcode generator with **plugin** |
||||||
|
- lots of avialable plugin (box / gear / puzzle creation ) |
||||||
|
- import `.ai` from illustrator |
||||||
|
|
||||||
|
[inkscape web site ](https://inkscape.org/en/) |
||||||
|
[getting started ](https://inkscape.org/en/learn/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **libreCad** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free / opensource |
||||||
|
*os* linux / osx / win |
||||||
|
|
||||||
|
*use*: Cad drawing / techinical - autocad like |
||||||
|
|
||||||
|
> |
||||||
|
- create multiple `DXF` version to export |
||||||
|
|
||||||
|
[libreCad web site ](https://librecad.org/) |
||||||
|
[getting started ](https://wiki.librecad.org/index.php?title=Main_Page) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **Qcad** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* opensource / not Free (*free version avialable*) |
||||||
|
*os* linux / osx / win |
||||||
|
|
||||||
|
*use* Cad drawing / technical drawing ) - autocad like |
||||||
|
|
||||||
|
> |
||||||
|
- import / export `dwg` |
||||||
|
- isometric tools |
||||||
|
- active developpement and plugin |
||||||
|
- `CAM` plugin for Gcode generation |
||||||
|
|
||||||
|
[Qcad web site ](https://www.qcad.org/en/) |
||||||
|
[getting started ](https://www.qcad.org/doc/qcad/latest/reference/en/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **Gimp** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free / opensource |
||||||
|
*os* linux / osx / win |
||||||
|
|
||||||
|
*use* image manipulation / pixel drawing - photoshop like |
||||||
|
|
||||||
|
> |
||||||
|
- layer and mask |
||||||
|
- actively devellope |
||||||
|
|
||||||
|
[gimp web site ](https://www.gimp.org/) |
||||||
|
[getting started ](https://www.gimp.org/tutorials/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **krita** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free / opensource |
||||||
|
*os* linux / osx / win |
||||||
|
|
||||||
|
*use*: Dessin / annimation / illustration |
||||||
|
|
||||||
|
> |
||||||
|
- gestion de palette graphique |
||||||
|
- systeme d'animation frame par frame |
||||||
|
|
||||||
|
[libreCad web site ](https://krita.org/en/) |
||||||
|
[getting started ](https://wiki.librecad.org/index.php?title=Main_Page) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **Scibus** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free / opensource |
||||||
|
*os* linux / osx / win |
||||||
|
|
||||||
|
*use* print and book making / edition sofware - inDesign like |
||||||
|
|
||||||
|
> |
||||||
|
- prepress tool |
||||||
|
- gabarit |
||||||
|
|
||||||
|
[scribus website ](https://www.scribus.net/) |
||||||
|
[getting started ](https://wiki.scribus.net/canvas/Help:TOC) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 3d software |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **Blender** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free / opensource |
||||||
|
*os* linux / osx / win |
||||||
|
|
||||||
|
*use* 3d Modeling / animation / image creation. |
||||||
|
|
||||||
|
> |
||||||
|
- light and powerfull |
||||||
|
- lots of ressources online |
||||||
|
- news 3d printing pannel |
||||||
|
- all include (modeling texturing rendrering ) |
||||||
|
- can bu use to generate 3d gcode with `blenderCam` <mark>only' on specific blender version</mark> |
||||||
|
|
||||||
|
[blender website ](https://www.blender.org/) |
||||||
|
[getting started ](https://www.blender.org/support/tutorials/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **OpenScad** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free / opensource |
||||||
|
*os* linux / osx / win |
||||||
|
|
||||||
|
*use* 3d Modeling / part creation / |
||||||
|
|
||||||
|
<mark>code generated drawing</mark> |
||||||
|
|
||||||
|
> |
||||||
|
- light and powerfull |
||||||
|
- parametric solid modeling |
||||||
|
|
||||||
|
[openscad website ](http://www.openscad.org/) |
||||||
|
[getting started ](http://www.openscad.org/documentation.html) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **FreeCad** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free / opensource |
||||||
|
*os* linux / osx / win |
||||||
|
|
||||||
|
*use* 3d drawing / parametric design / part creation |
||||||
|
|
||||||
|
> |
||||||
|
- 2d / 3d software included |
||||||
|
- parametric solid modeling |
||||||
|
- new `path` workbench for Gcode creation (cnc) |
||||||
|
|
||||||
|
[freecad website ](https://www.freecadweb.org/) |
||||||
|
[getting started ](https://www.freecadweb.org/wiki/Getting_started) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **fusion360 autodesk** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* mountly plan / close source / *student free version* |
||||||
|
*os* ~~linux~~ / osx / win |
||||||
|
|
||||||
|
no plan for a `linux` version. |
||||||
|
|
||||||
|
*use* 3d Modeling / part creation / parametric |
||||||
|
|
||||||
|
> |
||||||
|
- powerfull |
||||||
|
- parametric solid modeling |
||||||
|
- widely used |
||||||
|
- `CAM` module include |
||||||
|
|
||||||
|
[autodesk Fusion360 website ](https://www.autodesk.com/products/fusion-360/students-teachers-educators) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **tinkerCad** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free / plan |
||||||
|
*os* Web Browser based |
||||||
|
|
||||||
|
*use* 3d Modeling / part creation / |
||||||
|
|
||||||
|
> |
||||||
|
- online / no installation require |
||||||
|
- parametric solid modeling |
||||||
|
|
||||||
|
[tinkercad web site ](https://www.tinkercad.com/) |
||||||
|
[getting started ](https://www.tinkercad.com/learn/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### CAM / machine control |
||||||
|
|
||||||
|
#### CNC / Laser |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **LaserWeb4** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free / opensource |
||||||
|
*os* linux / osx / win |
||||||
|
|
||||||
|
*use* Cnc / laser gcode creation & machine control (GBRL 1.1f min) |
||||||
|
|
||||||
|
> |
||||||
|
- light and powerfull |
||||||
|
- All include |
||||||
|
- easy to use |
||||||
|
- control both *CNC* and *Laser* (`GRBL` based) |
||||||
|
|
||||||
|
[laserWeb4 gitHub page ](https://github.com/LaserWeb/LaserWeb4) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**MakerCAM** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free |
||||||
|
*os* webBrowser app |
||||||
|
|
||||||
|
*use* CNC 2.5D gcode generator |
||||||
|
|
||||||
|
<mark>need FLASH to operate</mark> |
||||||
|
|
||||||
|
> |
||||||
|
- simple and easy to use |
||||||
|
- may cause problem in mm due to too much decimal. can be fix with python script [truncate](https://github.com/jhessig/metric-gcode-truncator) |
||||||
|
|
||||||
|
[makercam website ](http://makercam.com) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **Bcnc** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free / openSource |
||||||
|
*os* linux / osx / windows |
||||||
|
|
||||||
|
*use* CNC 2.5D gcode generator |
||||||
|
|
||||||
|
base on `python` |
||||||
|
|
||||||
|
> |
||||||
|
- lot of feature (bed leveling /gcode editor / gcode generator / various tools ) |
||||||
|
- grbl Based machine (`1.1f` min) |
||||||
|
|
||||||
|
[Bcnc gitHub Page ](https://github.com/vlachoudis/bCNC) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 3D print |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **Cura** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free / openSource |
||||||
|
*os* linux / osx / windows |
||||||
|
|
||||||
|
*use* Generate 3d printer gcode file and control |
||||||
|
|
||||||
|
> |
||||||
|
- lots of predefine printer parametre |
||||||
|
- lots of users |
||||||
|
|
||||||
|
[ultimaker Cura website ](https://ultimaker.com/en/products/ultimaker-cura-software) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **Slic3r** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free / openSource |
||||||
|
*os* linux / osx / windows |
||||||
|
|
||||||
|
*use* Generate 3d printer gcode file and control |
||||||
|
|
||||||
|
> |
||||||
|
- offert full control on parameter |
||||||
|
- lots of users and documentation |
||||||
|
- really good new feature in the prusa edition |
||||||
|
|
||||||
|
<mark>the new version is now from Prusa research</mark> |
||||||
|
|
||||||
|
[Slic3r Official website ](http://slic3r.org) |
||||||
|
[Slic3r Prusa edition website ](https://www.prusa3d.com/slic3r-prusa-edition/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** **Octoprint** |
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
*licence* free / openSource |
||||||
|
*os* linux / osx / windows |
||||||
|
|
||||||
|
*use* Print server for 3d printer / printer control / gcode creation from server (cura 1.5 || slicer ) |
||||||
|
|
||||||
|
> |
||||||
|
- full printer monitoring |
||||||
|
- pugin to add functionality |
||||||
|
- run on a `raspberryPi` and doest require a laptop or sd cad to operate machine (all can be done via local network) |
||||||
|
|
||||||
|
[octoprint website](https://octoprint.org/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## objet ressource and download |
||||||
|
|
||||||
|
### 3dprint / cnc / laser files |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**thingiverse** |
||||||
|
|
||||||
|
- 3d files (stl) objet and part |
||||||
|
- laser and cnc objet and part |
||||||
|
- some parametric model (*openScad*) |
||||||
|
|
||||||
|
[thingiverse](https://www.thingiverse.com/) |
||||||
|
|
||||||
|
**youimagine** |
||||||
|
|
||||||
|
- 3d files (stl) objet and part |
||||||
|
- laser and cnc objet and part |
||||||
|
|
||||||
|
[youimagine](https://www.youmagine.com/) |
||||||
|
|
||||||
|
**myminifactory** |
||||||
|
|
||||||
|
- 3d files ready to print |
||||||
|
|
||||||
|
[myminifactory](https://www.myminifactory.com/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Tutorial / howto |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**instructable** |
||||||
|
|
||||||
|
- all the tutorial you can think of |
||||||
|
- arduino |
||||||
|
- diy |
||||||
|
- robot ... |
||||||
|
|
||||||
|
[instructable ](https://www.instructables.com/) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### VARIOUS ONLINE RESSOURCES |
||||||
|
|
||||||
|
`Posted by u/morphfiend` |
||||||
|
|
||||||
|
#### Fusion360 |
||||||
|
|
||||||
|
- Lars Christensen - [https://www.youtube.com/user/cadcamstuff/playlists](https://www.youtube.com/user/cadcamstuff/playlists) |
||||||
|
- Start with the basics - [https://www.youtube.com/playlist?list=PLmA_xUT-8UlLmTvSAketheHaNQWxNA5yT](https://www.youtube.com/playlist?list=PLmA_xUT-8UlLmTvSAketheHaNQWxNA5yT) |
||||||
|
- Quick Tips & Best practices - [https://www.youtube.com/playlist?list=PLmA_xUT-8UlIh4hHJDCEDLPi3wQiMrPRY](https://www.youtube.com/playlist?list=PLmA_xUT-8UlIh4hHJDCEDLPi3wQiMrPRY) |
||||||
|
- Fusion 360 in 90 minutes - [https://academy.autodesk.com/course/129267/introduction-cad-learn-fusion-360-90-minutes](https://academy.autodesk.com/course/129267/introduction-cad-learn-fusion-360-90-minutes) |
||||||
|
- Autodesk Academy - [https://academy.autodesk.com/software/fusion-360](https://academy.autodesk.com/software/fusion-360) |
||||||
|
- Fusion 360 Parameters - [http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-76272551-3275-46C4-AE4D-10D58B408C20](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-76272551-3275-46C4-AE4D-10D58B408C20) |
||||||
|
|
||||||
|
#### OnShape |
||||||
|
|
||||||
|
- OnShape Tutorials - [https://www.onshape.com/videos/topic/tutorials](https://www.onshape.com/videos/topic/tutorials) |
||||||
|
- OnShape Tech Tips - [https://www.onshape.com/videos/topic/tech-tips](https://www.onshape.com/videos/topic/tech-tips) |
||||||
|
- CADSessions - [https://www.youtube.com/channel/UCVkrWFAz_F9mYhs3Q1V7ahA/video](https://www.youtube.com/channel/UCVkrWFAz_F9mYhs3Q1V7ahA/video) |
||||||
|
|
||||||
|
#### OpenSCAD |
||||||
|
|
||||||
|
- Cheat sheet - [http://www.openscad.org/documentation.html](http://www.openscad.org/documentation.html) |
||||||
|
- Paul Randall (does OpenSCAD and freecad) - [https://www.youtube.com/channel/UCnxMaGMCrWAQgwF61ISRpGw/](https://www.youtube.com/channel/UCnxMaGMCrWAQgwF61ISRpGw/) |
||||||
|
- OpenSCAD beginners tutorial - [http://edutechwiki.unige.ch/en/OpenScad_beginners_tutorial](http://edutechwiki.unige.ch/en/OpenScad_beginners_tutorial) |
||||||
|
|
||||||
|
#### Rhino 3D |
||||||
|
|
||||||
|
- Basics - [http://www.rhino3d.com/getting-started](http://www.rhino3d.com/getting-started) |
||||||
|
- Preparing for 3D Printing - [https://wiki.mcneel.com/rhino/3dprinting](https://wiki.mcneel.com/rhino/3dprinting) |
||||||
|
- Prepare your model for 3D Printing with Rhinoceros - [https://www.sculpteo.com/en/tutorial/prepare-your-model-3d-printing-rhinoceros/](https://www.sculpteo.com/en/tutorial/prepare-your-model-3d-printing-rhinoceros/) |
||||||
|
- Advanced Rhino and Grasshopper recorded college classes - [https://www.youtube.com/user/nsenske/playlists](https://www.youtube.com/user/nsenske/playlists) |
||||||
|
|
||||||
|
#### FreeCAD |
||||||
|
|
||||||
|
- FreeCAD tutorials - [https://www.freecadweb.org/wiki/Category:Tutorials](https://www.freecadweb.org/wiki/Category:Tutorials) |
||||||
|
- cad1919 (It is in a different language but uses graphics to help )- [https://www.youtube.com/user/cad1919/playlists](https://www.youtube.com/user/cad1919/playlists) |
||||||
|
- Invent Box Tutorials - [https://www.youtube.com/playlist?list=PL2935W76vRNFvUGefQr3q9P9eezJZyj-u](https://www.youtube.com/playlist?list=PL2935W76vRNFvUGefQr3q9P9eezJZyj-u) |
||||||
|
|
||||||
|
### 3D Modeling |
||||||
|
|
||||||
|
#### Blender 2.7 |
||||||
|
|
||||||
|
- BlenderGuru - [https://www.blenderguru.com](https://www.blenderguru.com) |
||||||
|
- Blendtuts - [https://www.blendtuts.com/tutorials/](https://www.blendtuts.com/tutorials/) |
||||||
|
- CGCookies Blender Basics - [https://cgcookie.com/course/blender-basics](https://cgcookie.com/course/blender-basics) |
||||||
|
- GameDevTV Complete Blender Course(Paid)- [https://www.udemy.com/blendertutorial/](https://www.udemy.com/blendertutorial/) |
||||||
|
- Blender Tutorial - [https://www.blender.org/support/tutorials/](https://www.blender.org/support/tutorials/) |
||||||
|
- Blender Fundamentals - [https://www.youtube.com/playlist?list=PLa1F2ddGya_8V90Kd5eC5PeBjySbXWGK1](https://www.youtube.com/playlist?list=PLa1F2ddGya_8V90Kd5eC5PeBjySbXWGK1) |
||||||
|
|
||||||
|
#### Blender 2.8 |
||||||
|
|
||||||
|
- YanSculpts - [https://www.youtube.com/playlist?list=PLvPwLecDlWRD_VK_2INC1VQ18dZdpDwLi](https://www.youtube.com/playlist?list=PLvPwLecDlWRD_VK_2INC1VQ18dZdpDwLi) |
||||||
|
- BlenderGuru 2.8 - [https://www.youtube.com/playlist?list=PLjEaoINr3zgH1JI7FtPX_Q9OGFhP-HCUV](https://www.youtube.com/playlist?list=PLjEaoINr3zgH1JI7FtPX_Q9OGFhP-HCUV) |
||||||
|
- CG Masters (Paid) - [https://cgmasters.net/training-courses/hard-surface-modeling-in-blender/](https://cgmasters.net/training-courses/hard-surface-modeling-in-blender/) |
||||||
|
|
||||||
|
#### 3ds Max |
||||||
|
|
||||||
|
- TopHATTwaffle - [https://www.youtube.com/playlist?list=PL-454Fe3dQH1WKJEL96bzelfn_2pxYjgf](https://www.youtube.com/playlist?list=PL-454Fe3dQH1WKJEL96bzelfn_2pxYjgf) |
||||||
|
- Autodesk 3ds max learning channel - [https://www.youtube.com/user/3dsMaxHowTos/playlists](https://www.youtube.com/user/3dsMaxHowTos/playlists) |
||||||
|
- Autodesk getting started in 3ds Max - [https://area.autodesk.com/tutorials/series/getting-started-in-3ds-max-2018/](https://area.autodesk.com/tutorials/series/getting-started-in-3ds-max-2018/) |
||||||
|
- Edge3Dcgi - [https://youtu.be/Q_Ks3QdmfvA](https://youtu.be/Q_Ks3QdmfvA) |
||||||
|
- Arrimus 3d - [https://www.youtube.com/playlist?list=PLxt9ZAGPLIpeB8TcHrpzxvEI4Ve3SfZBC](https://www.youtube.com/playlist?list=PLxt9ZAGPLIpeB8TcHrpzxvEI4Ve3SfZBC) |
||||||
|
|
||||||
|
#### 3D Sculpting |
||||||
|
Blender Sculpting |
||||||
|
|
||||||
|
- Grant Abbitt - [https://youtu.be/L3XtAFUWNuk](https://youtu.be/L3XtAFUWNuk) |
||||||
|
- YanSculpts - [https://youtu.be/N4D6F7mhi4I](https://youtu.be/N4D6F7mhi4I) |
||||||
|
|
||||||
|
#### Sculptrius |
||||||
|
|
||||||
|
- pixologic (near the bottome of the page) - [http://pixologic.com/sculptris/](http://pixologic.com/sculptris/) |
||||||
|
- Mr.Brooks - [https://vimeo.com/61128359](https://vimeo.com/61128359) |
||||||
|
- Sculptris cheat sheet - [http://members.casema.nl/jw.v.dronkelaar/sculptris_cheat_sheet.pdf](http://members.casema.nl/jw.v.dronkelaar/sculptris_cheat_sheet.pdf) |
||||||
|
|
||||||
|
#### 3DCoat |
||||||
|
|
||||||
|
- alienminefield - [https://www.youtube.com/playlist?list=PL17Z03Lf1lyKZsHLvg27ZP0kzVR_mvLpX](https://www.youtube.com/playlist?list=PL17Z03Lf1lyKZsHLvg27ZP0kzVR_mvLpX) |
||||||
|
- 3dcoat learn - [https://3dcoat.com/learn/](https://3dcoat.com/learn/) |
||||||
|
- gamedev the pipline - [https://youtu.be/_Mw3yv3hk38](https://youtu.be/_Mw3yv3hk38) |
||||||
|
- Pluralsight (Paid) - [https://www.pluralsight.com/courses/3d-coat-getting-started-2487](https://www.pluralsight.com/courses/3d-coat-getting-started-2487) |
||||||
|
|
||||||
|
#### zBrush |
||||||
|
|
||||||
|
- ZClassroom - [https://pixologic.com/zclassroom/](https://pixologic.com/zclassroom/) |
||||||
|
- Zbrushtuts - [http://zbrushtuts.com/](http://zbrushtuts.com/) |
||||||
|
- Zbrush for beginners - [https://www.youtube.com/watch?v=PO--0h8XHiw](https://www.youtube.com/watch?v=PO--0h8XHiw) |
||||||
|
- Edge-CGI 3D tutorials - [https://www.youtube.com/user/Edge3Dcgi/playlists](https://www.youtube.com/user/Edge3Dcgi/playlists) |
||||||
|
- Twitch for Pixologic - [https://www.twitch.tv/pixologic](https://www.twitch.tv/pixologic) |
||||||
|
- flippednormals - [https://youtu.be/_yKGfcp2z3k](https://youtu.be/_yKGfcp2z3k) |
||||||
|
|
||||||
|
#### Covers multiple pieces of software |
||||||
|
|
||||||
|
- Gnomon workshop (Paid) - [https://www.thegnomonworkshop.com/](https://www.thegnomonworkshop.com/) |
||||||
|
|
||||||
|
#### Special caseMeshmixer |
||||||
|
|
||||||
|
- Maker's Muse - [https://youtu.be/C9VDKb3W4qA](https://youtu.be/C9VDKb3W4qA) |
||||||
|
- Teaching Tech - [https://youtu.be/3GGnwDCFfv0](https://youtu.be/3GGnwDCFfv0) |
||||||
|
- Sculpteo - [https://youtu.be/WwIM4Fp2SgA](https://youtu.be/WwIM4Fp2SgA) |
||||||
|
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 1022 KiB |
|
After Width: | Height: | Size: 157 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 491 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 313 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 184 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 576 KiB |
|
After Width: | Height: | Size: 155 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 318 KiB |
|
After Width: | Height: | Size: 7.9 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 185 KiB |
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 167 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 206 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 368 KiB |
|
After Width: | Height: | Size: 9.1 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 80 KiB |
@ -0,0 +1,83 @@ |
|||||||
|
title : Raspberry pi headless setup 2023 |
||||||
|
author: zvevqx |
||||||
|
published: 2023-09-23 |
||||||
|
cat: linux |
||||||
|
desc: base commands to setup a rasbperrypi headless as rasbian 2023 |
||||||
|
|
||||||
|
... |
||||||
|
|
||||||
|
main source |
||||||
|
[https://www.raspberrypi.com/news/raspberry-pi-bullseye-update-april-2022/](https://www.raspberrypi.com/news/raspberry-pi-bullseye-update-april-2022/) |
||||||
|
|
||||||
|
|
||||||
|
# Flashing the SD card |
||||||
|
|
||||||
|
## the cli way on linux |
||||||
|
|
||||||
|
*you will need:* |
||||||
|
|
||||||
|
- sdcard (8go min) |
||||||
|
- sdcard reader |
||||||
|
|
||||||
|
*findind your sd card on the system* |
||||||
|
|
||||||
|
|
||||||
|
use the `lsblk` command to get the path to your sd card |
||||||
|
|
||||||
|
|
||||||
|
on Unix system (`linux`,`osx`) it sould look like : `/dev/sdX` |
||||||
|
if not sure execute `lsblk` with and without the sdcard inserted and compare |
||||||
|
|
||||||
|
### download os |
||||||
|
download the proper version from Raspberry pi website [link to website](https://www.raspberrypi.com/software/operating-systems/) |
||||||
|
|
||||||
|
### burn it to the sd card with the `dd` command |
||||||
|
🚨 this operation need `sudo` privileges ... be carefull |
||||||
|
|
||||||
|
`sudo dd if=PATH/TO/YOUR/IMAGEFILE.img of=PATH/TO/YOUR/SDCARD status=progress oflag=sync` |
||||||
|
|
||||||
|
and wait |
||||||
|
|
||||||
|
***done🤞*** |
||||||
|
|
||||||
|
## The Gui way |
||||||
|
|
||||||
|
download and install `rpi-imager` software on your computer and follow allong |
||||||
|
|
||||||
|
for linux |
||||||
|
`sudo apt install rpi-imager` |
||||||
|
|
||||||
|
link [https://www.raspberrypi.com/software/](https://www.raspberrypi.com/software/) |
||||||
|
|
||||||
|
|
||||||
|
--- |
||||||
|
|
||||||
|
# Enable `ssh` |
||||||
|
|
||||||
|
create an ampty file on the `bootfs` partition of the sd card |
||||||
|
|
||||||
|
cli |
||||||
|
` touch /PATH/TO/THE/PARTITION/ssh` |
||||||
|
|
||||||
|
--- |
||||||
|
|
||||||
|
# Create user and password |
||||||
|
|
||||||
|
Use `OpenSSL` to encrypt a password: |
||||||
|
`echo 'raspi_users_password' | openssl passwd -6 -stdin` |
||||||
|
|
||||||
|
Create a file named `userconf` in the root directory of the SD card’s boot partition |
||||||
|
|
||||||
|
` touch /PATH/TO/THE/PARTITION/userconf` |
||||||
|
|
||||||
|
Add a line of text to the new file in the following format: `username:encrypted_password` |
||||||
|
where username is the username you want to use to log in to the Rpi, and encrypted_password is the string generated with OpenSSL. |
||||||
|
|
||||||
|
example |
||||||
|
`julien:we342swe4422e@343w44@4453@3456` |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,91 @@ |
|||||||
|
title : software |
||||||
|
author: zvevqx |
||||||
|
published: 2021-11-22 |
||||||
|
cat: linux |
||||||
|
desc: ws |
||||||
|
|
||||||
|
... |
||||||
|
|
||||||
|
## wip list of software to look at |
||||||
|
|
||||||
|
|
||||||
|
## cli tools |
||||||
|
|
||||||
|
**potrace**: |
||||||
|
vectorisation tool ( like vetorisation dynamique in `illustrator` ) |
||||||
|
[potrace website](http://potrace.sourceforge.net/) |
||||||
|
|
||||||
|
**imagemagick**: |
||||||
|
swiss army knife image modification ( batch ... ) |
||||||
|
[imagemagick website](https://imagemagick.org/index.php) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## WM / DE |
||||||
|
|
||||||
|
**i3vm**: |
||||||
|
light window manager full option see also i3gap |
||||||
|
|
||||||
|
**dwm**: |
||||||
|
[suckless.org](suckless.org) ultralight wm |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## File manager |
||||||
|
|
||||||
|
### command line |
||||||
|
|
||||||
|
**nnn**: |
||||||
|
ultra light file manager [nnn github](https://github.com/jarun/nnn) |
||||||
|
**ranger**: |
||||||
|
python light file manager |
||||||
|
|
||||||
|
**mc**: |
||||||
|
midnight commander cli |
||||||
|
|
||||||
|
### gui |
||||||
|
|
||||||
|
**pcmanfm**: |
||||||
|
light and fast fm |
||||||
|
|
||||||
|
**krusader**: |
||||||
|
Mc like fm |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Web browser |
||||||
|
|
||||||
|
### cli |
||||||
|
|
||||||
|
**lynkx**: |
||||||
|
cli web browser |
||||||
|
|
||||||
|
### gui |
||||||
|
|
||||||
|
**surf**:webkit based simple webbroser by [suckless.org](suckless.org) |
||||||
|
|
||||||
|
**quteBrowser**: |
||||||
|
keyboard driven web browser [website](https://qutebrowser.org) |
||||||
|
|
||||||
|
## images viewers |
||||||
|
|
||||||
|
**sxiv**: |
||||||
|
simple X images viewer |
||||||
|
|
||||||
|
**Feh**: |
||||||
|
light image viewer |
||||||
|
|
||||||
|
**zathura**: |
||||||
|
light pdf / eps / gs viewer |
||||||
|
|
||||||
|
## various tools |
||||||
|
|
||||||
|
**SCIM**: |
||||||
|
Vim based Speadsheet editor |
||||||
|
|
||||||
|
**Entr**: |
||||||
|
pipe automatisation for almost everything |
||||||
|
|
||||||
|
**Calcurse**: |
||||||
|
calc and todo list in cli with vim binding |
||||||
@ -0,0 +1,38 @@ |
|||||||
|
title : galerie test |
||||||
|
author: zvevqx |
||||||
|
published: 2021-11-22 |
||||||
|
cat: template |
||||||
|
desc: ws |
||||||
|
|
||||||
|
... |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# mon titre |
||||||
|
|
||||||
|
|
||||||
|
 |
||||||
|
|
||||||
|
Her father remarried while at Burma and Kuntala returned to Odisha with her Mother. She settled in Khurdha with her mother after returning from Burma. In spite of total lack of women's education her mother's perseverance allowed her to receive a good education. She studied from Ravenshaw Girls High School and continued her education in Orissa Medical School, Cuttack (Now Srirama Chandra Bhanja Medical College and Hospital). She earned her L.M.P (Licentiate Medical Practitioners) degree in 1921 with a gold medal. She was fluent in Odia, Hindi, Bengali, English and Burmese.[5] Her father remarried while at Burma and Kuntala returned to Odisha with her Mother. She settled in Khurdha with her mother after returning from Burma. In spite of total lack of women's education her mother's perseverance allowed her to receive a good education. She studied from Ravenshaw Girls High School and continued her education in Orissa Medical School, Cuttack (Now Srirama Chandra Bhanja Medical College and Hospital). She earned her L.M.P (Licentiate Medical Practitioners) degree in 1921 with a gold medal. She was fluent in Odia, Hindi, Bengali, English and Burmese.[5] Her father remarried while at Burma and Kuntala returned to Odisha with her Mother. She settled in Khurdha with her mother after returning from Burma. In spite of total lack of women's education her mother's perseverance allowed her to receive a good education. She studied from Ravenshaw Girls High School and continued her education in Orissa Medical School, Cuttack (Now Srirama Chandra Bhanja Medical College and Hospital). She earned her L.M.P (Licentiate Medical Practitioners) degree in 1921 with a gold medal. She was fluent in Odia, Hindi, Bengali, English and Burmese.[5] Her father remarried while at Burma and Kuntala returned to Odisha with her Mother. She settled in Khurdha with her mother after returning from Burma. In spite of total lack of women's education her mother's perseverance allowed her to receive a good education. She studied from Ravenshaw Girls High School and continued her education in Orissa Medical School, Cuttack (Now Srirama Chandra Bhanja Medical College and Hospital). She earned her L.M.P |
||||||
|
|
||||||
|
some code ( add 1 **tab** before every line ) |
||||||
|
|
||||||
|
def Liste_cat(): |
||||||
|
articles = (p for p in pages if 'published' in p.meta) |
||||||
|
catList = [] |
||||||
|
for a in articles: |
||||||
|
catList.append(a.meta['cat']) |
||||||
|
catList = list(dict.fromkeys(catList)) |
||||||
|
return catList |
||||||
|
|
||||||
|
|
||||||
|
[un lien](https://google.com) |
||||||
|
|
||||||
|
- lest |
||||||
|
- tewt |
||||||
|
- trie |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
yyEach of these objects is associated to a path: the slash-separated (whatever the OS) name of the file it was loaded from, relative to the pages root, and excluding the extension. For example, for an app in |
||||||
|
After Width: | Height: | Size: 534 KiB |
|
After Width: | Height: | Size: 266 KiB |
|
After Width: | Height: | Size: 76 KiB |
@ -0,0 +1,107 @@ |
|||||||
|
title : VIM basics |
||||||
|
author: zvevqx |
||||||
|
published: 2025-11-22 |
||||||
|
cat: linux |
||||||
|
desc: ws |
||||||
|
|
||||||
|
... |
||||||
|
|
||||||
|
|
||||||
|
👾 MOST OF THIS PAGE IS DIRECT OUTPUT OF CHATGPT 3.5 |
||||||
|
|
||||||
|
# Vim Editor |
||||||
|
|
||||||
|
Vim is a powerful and popular text editor that runs in the command-line interface. It is known for its efficient and customizable editing features that allow users to edit text with speed and precision. |
||||||
|
|
||||||
|
# Main Vim Operations |
||||||
|
|
||||||
|
|
||||||
|
| Operation | Shortcut | Description | |
||||||
|
|-------------------------|---------------------------|----------------------------------------------------| |
||||||
|
| **Navigation** | | | |
||||||
|
| Move left | `h` | Move the cursor left. | |
||||||
|
| Move down | `j` | Move the cursor down. | |
||||||
|
| Move up | `k` | Move the cursor up. | |
||||||
|
| Move right | `l` | Move the cursor right. | |
||||||
|
| Move forward one word | `w` | Move forward one word. | |
||||||
|
| Move backward one word | `b` | Move backward one word. | |
||||||
|
| Move to end of line | `$` | Move to the end of the current line. | |
||||||
|
| Move to beginning | `0` | Move to the beginning of the current line. | |
||||||
|
| Move to end of file | `G` | Move to the end of the file. | |
||||||
|
| Move to beginning of file | `gg` | Move to the beginning of the file. | |
||||||
|
| Move to specific line | `<line_number>G` | Move to a specific line number. | |
||||||
|
| Move to matching bracket| `%` | Move to the matching parenthesis, bracket, or brace.| |
||||||
|
| Move to paragraph start | `{` | Move to the beginning of the current paragraph. | |
||||||
|
| Move to paragraph end | `}` | Move to the end of the current paragraph. | |
||||||
|
| Move half a page up | `Ctrl+u` | Move half a page up. | |
||||||
|
| Move half a page down | `Ctrl+d` | Move half a page down. | |
||||||
|
| **Editing** | | | |
||||||
|
| Insert before cursor | `i` | Insert text before the cursor. | |
||||||
|
| Insert at line start | `I` | Insert text at the beginning of the current line. | |
||||||
|
| Append after cursor | `a` | Append text after the cursor. | |
||||||
|
| Append at line end | `A` | Append text at the end of the current line. | |
||||||
|
| Open line below cursor | `o` | Open a new line below the current line and enter insert mode. | |
||||||
|
| Open line above cursor | `O` | Open a new line above the current line and enter insert mode. | |
||||||
|
| Delete character | `x` | Delete the character under the cursor. | |
||||||
|
| Delete current line | `dd` | Delete the current line. | |
||||||
|
| Yank (copy) current line| `yy` | Yank (copy) the current line. | |
||||||
|
| Paste after cursor | `p` | Paste the yanked text after the cursor. | |
||||||
|
| Paste before cursor | `P` | Paste the yanked text before the cursor. | |
||||||
|
| Undo | `u` | Undo the last change. | |
||||||
|
| Redo | `Ctrl+r` | Redo the last change. | |
||||||
|
| **Search and Replace** | | | |
||||||
|
| Search forward | `/search_term` | Search forward for "search_term." | |
||||||
|
| Search backward | `?search_term` | Search backward for "search_term." | |
||||||
|
| Move to next search result | `n` | Move to the next search result. | |
||||||
|
| Move to previous search result | `N` | Move to the previous search result. | |
||||||
|
| Replace on current line | `:s/search_term/replacement`| Replace "search_term" with "replacement" on the current line. | |
||||||
|
| Global replace | `:%s/search_term/replacement/g` | Replace "search_term" with "replacement" globally in the file. | |
||||||
|
| Turn off search highlighting | `:noh` | Turn off search result highlighting. | |
||||||
|
| **Saving and Quitting** | | | |
||||||
|
| Save | `:w` | Save the current file. | |
||||||
|
| Save as | `:w filename` | Save the current file as "filename." | |
||||||
|
| Quit | `:q` | Quit Vim. | |
||||||
|
| Quit without saving | `:q!` | Quit Vim without saving changes. | |
||||||
|
| Save and quit | `:wq` | Save changes and quit Vim. | |
||||||
|
| **Visual Mode** | | | |
||||||
|
| Enter visual mode | `v` | Enter visual mode to select text. | |
||||||
|
| Enter visual line mode | `V` | Enter visual line mode to select lines. | |
||||||
|
| Enter visual block mode | `Ctrl+v` | Enter visual block mode to select rectangular blocks of text. | |
||||||
|
|
||||||
|
|
||||||
|
## some more advance mouvments |
||||||
|
|
||||||
|
# Page and Line Movement Shortcuts in Vim |
||||||
|
|
||||||
|
Vim provides a rich set of keyboard shortcuts for efficient page and line movement within a text document. Below is a table of these shortcuts: |
||||||
|
|
||||||
|
| Shortcut | Description | |
||||||
|
|------------------------|---------------------------------------------------| |
||||||
|
| **Page Movement** | | |
||||||
|
| Page down | `Ctrl+f` or `Space` | |
||||||
|
| Page up | `Ctrl+b` or `Ctrl+u` | |
||||||
|
| Half a page down | `Ctrl+d` | |
||||||
|
| Half a page up | `Ctrl+u` | |
||||||
|
| Go to next page | `Ctrl+d` or `Ctrl+f` | |
||||||
|
| Go to previous page | `Ctrl+u` or `Ctrl+b` | |
||||||
|
| **Line Movement** | | |
||||||
|
| Move to beginning of line | `0` or `^` | |
||||||
|
| Move to end of line | `$` | |
||||||
|
| Move to next line | `j` or `↓` | |
||||||
|
| Move to previous line | `k` or `↑` | |
||||||
|
| Move down by `n` lines | `n` + `j` or `n` + `↓` | |
||||||
|
| Move up by `n` lines | `n` + `k` or `n` + `↑` | |
||||||
|
| Move to specific line | `:<line_number>` or `G` + `g` + `:<line_number>` | |
||||||
|
| **Scrolling** | | |
||||||
|
| Scroll the screen up | `Ctrl+y` | |
||||||
|
| Scroll the screen down | `Ctrl+e` | |
||||||
|
| Center the screen | `Ctrl+l` | |
||||||
|
| Move to the top | `H` | |
||||||
|
| Move to the middle | `M` | |
||||||
|
| Move to the bottom | `L` | |
||||||
|
| **Jumping** | | |
||||||
|
| Jump to beginning of file | `gg` | |
||||||
|
| Jump to end of file | `G` | |
||||||
|
| Jump to line in the middle | `M` + `G` | |
||||||
|
| Jump to last edit | `'` + `.` | |
||||||
|
|
||||||
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 260 KiB |
@ -0,0 +1,33 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html lang="fr"> |
||||||
|
<head> |
||||||
|
<meta charset="UTF-8"> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge"> |
||||||
|
<title>to do this - do that </title> |
||||||
|
<link rel="stylesheet" type="text/css" href="{{url_for('static', filename='style.css')}}"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
|
||||||
|
{% include 'menu.html' %} |
||||||
|
|
||||||
|
<div id="articles"> |
||||||
|
<ul> |
||||||
|
|
||||||
|
{% for article in articles %} |
||||||
|
<li> |
||||||
|
<a href="{{ url_for('index', _external=False) }}{{ article.path }}"> |
||||||
|
<h2 class="{{article.cat}}">{{article.title}}</h2> |
||||||
|
</a> |
||||||
|
<span class="categorie"><a href="{{ url_for('index', _external=False) }}cat/{{article.cat}}">{{article.cat}}</a></span> |
||||||
|
<span class="author"><a href="{{ url_for('index', _external=False) }}author/{{article.author}}">{{ article.author }}</a></span> |
||||||
|
<span class="date">{{ article.published }}</span> |
||||||
|
</li> |
||||||
|
{% endfor %} |
||||||
|
|
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script src="index.js"></script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,21 @@ |
|||||||
|
$(document).ready(function(){ |
||||||
|
wimg = $(".img_container").width(); |
||||||
|
console.log(wimg); |
||||||
|
$(".img_container").css("height",wimg); |
||||||
|
|
||||||
|
$(window).resize(function(){ |
||||||
|
wimg = $(".img_container").width(); |
||||||
|
console.log(wimg); |
||||||
|
$(".img_container").css("height",wimg); |
||||||
|
}) |
||||||
|
|
||||||
|
|
||||||
|
$('#gal .img_container img').click(function(){ |
||||||
|
// $(" #gal .img_container").removeClass("fullImg");
|
||||||
|
$(this).parent().toggleClass("fullImg"); |
||||||
|
}); |
||||||
|
|
||||||
|
}) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,52 @@ |
|||||||
|
@import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,500;0,800;1,400&display=swap'); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
body{ |
||||||
|
font-family: 'Open Sans', sans-serif; |
||||||
|
} |
||||||
|
a { |
||||||
|
text-decoration : none ; |
||||||
|
color : #000; |
||||||
|
} |
||||||
|
|
||||||
|
#works { |
||||||
|
display : grid ; |
||||||
|
grid-template-columns: 1fr 1fr 1fr 1fr 1fr; |
||||||
|
//column-gap: 10px; |
||||||
|
//row-gap : 10px; |
||||||
|
} |
||||||
|
|
||||||
|
.work{ |
||||||
|
position:relative; |
||||||
|
overflow:hidden; |
||||||
|
} |
||||||
|
|
||||||
|
#works .work .wimg { |
||||||
|
height : 250px; |
||||||
|
overflow:hidden; |
||||||
|
display:grid; |
||||||
|
} |
||||||
|
|
||||||
|
#works .work .wimg img { |
||||||
|
width : 130%; |
||||||
|
place-self: center; |
||||||
|
} |
||||||
|
|
||||||
|
.wdesc { |
||||||
|
background:rgba(255,255,255,0.5); |
||||||
|
border-radius: 10px; |
||||||
|
position: absolute; |
||||||
|
left : -100%; |
||||||
|
padding :10px; |
||||||
|
bottom:20px; |
||||||
|
transition : all 0.3s linear ; |
||||||
|
opacity : 0 ; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
.work:hover .wdesc { |
||||||
|
left:10px; |
||||||
|
opacity : 1 ; |
||||||
|
} |
||||||
|
|
||||||
@ -0,0 +1,345 @@ |
|||||||
|
@import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,500;0,800;1,400&display=swap'); |
||||||
|
@import url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.3/font/bootstrap-icons.css"); |
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600&display=swap'); |
||||||
|
|
||||||
|
*{ |
||||||
|
font-family:'Fira Code'; |
||||||
|
} |
||||||
|
|
||||||
|
body{ |
||||||
|
margin:0; |
||||||
|
padding:0; |
||||||
|
font-size : 10px; |
||||||
|
font-family:'Fira Code'; |
||||||
|
} |
||||||
|
|
||||||
|
#menu { |
||||||
|
display: grid; |
||||||
|
grid-template-columns: 8fr 2fr; |
||||||
|
} |
||||||
|
@media (max-width: 1080px) { |
||||||
|
#menu { |
||||||
|
grid-template-columns: 1fr; |
||||||
|
margin-bottom:40px |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
#menu ul { |
||||||
|
list-style: none; |
||||||
|
margin:0; |
||||||
|
padding:10px 20px; |
||||||
|
} |
||||||
|
|
||||||
|
#menu ul li { |
||||||
|
display:inline-block; |
||||||
|
margin-right:20px; |
||||||
|
} |
||||||
|
|
||||||
|
#menu ul li:first-of-type { |
||||||
|
font-size:2em; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#menu ul li a{ |
||||||
|
color: #000000; |
||||||
|
text-decoration : none; |
||||||
|
font-size : 2em; |
||||||
|
} |
||||||
|
|
||||||
|
#menu div form{ |
||||||
|
display: grid; |
||||||
|
grid-template-columns: 8fr 2fr; |
||||||
|
padding: 10px; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
#menu div form input{ |
||||||
|
/* border:1px solid; */ |
||||||
|
border-radius: 10px; |
||||||
|
font-size: 2em; |
||||||
|
text-align: center; |
||||||
|
color: #000; |
||||||
|
box-shadow: -1px -1px 1px -3px rgba(0,0,0,0.77) inset , |
||||||
|
1px 1px 1px -3px rgba(250,250,250,0.87) inset ; |
||||||
|
background: #fefefe; |
||||||
|
text-transform: uppercase; |
||||||
|
} |
||||||
|
|
||||||
|
#menu div form input:focus-visible{ |
||||||
|
outline: 1px solid #ddd; |
||||||
|
box-shadow: 5px 5px 5px -2px rgba(0,0,0,0.47) inset , |
||||||
|
-5px -5px 5px -3px rgba(250,250,250,0.87) inset; |
||||||
|
|
||||||
|
\ |
||||||
|
background: #fafafa; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#menu div form button{ |
||||||
|
margin-left:10px; |
||||||
|
border-radius:10px; |
||||||
|
font-size:3em; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#menu div form { |
||||||
|
height: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
a:hover{ |
||||||
|
color:#95a5a6 !important; |
||||||
|
} |
||||||
|
|
||||||
|
#articles ul { |
||||||
|
list-style:none; |
||||||
|
padding:0 0 0 0px; |
||||||
|
} |
||||||
|
|
||||||
|
#articles ul li{ |
||||||
|
font-size:1.5em; |
||||||
|
padding:10px 0; |
||||||
|
padding-left:20px; |
||||||
|
border-bottom: 1px solid #000000; |
||||||
|
} |
||||||
|
|
||||||
|
#articles ul li h2{ |
||||||
|
display: inline-block; |
||||||
|
margin:0; |
||||||
|
font-size:1.5em; |
||||||
|
padding-left:50px; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ul li h2{ |
||||||
|
position:relative; |
||||||
|
} |
||||||
|
ul li h2:before{ |
||||||
|
position:absolute; |
||||||
|
text-align:center; |
||||||
|
left:-20px; |
||||||
|
top:0; |
||||||
|
width:50px; |
||||||
|
display:block; |
||||||
|
font-size:1.3em; |
||||||
|
line-height:1em; |
||||||
|
} |
||||||
|
|
||||||
|
.robot:before{ |
||||||
|
content:"🤖"; |
||||||
|
} |
||||||
|
|
||||||
|
.various:before{ |
||||||
|
content:"💾"; |
||||||
|
} |
||||||
|
.internet:before{ |
||||||
|
content:"🛰"; |
||||||
|
} |
||||||
|
|
||||||
|
.linux:before{ |
||||||
|
content:"🐧"; |
||||||
|
} |
||||||
|
|
||||||
|
#articles ul li a { |
||||||
|
color : #000000; |
||||||
|
text-decoration:none; |
||||||
|
} |
||||||
|
#articles ul li a:hover { |
||||||
|
color : #0000ff; |
||||||
|
} |
||||||
|
#articles h2{ |
||||||
|
padding-right:20px; |
||||||
|
} |
||||||
|
#articles ul li span { |
||||||
|
outline: 1px solid #000; |
||||||
|
padding: 2px 10px; |
||||||
|
border-radius:3px; |
||||||
|
margin-left:10px; |
||||||
|
} |
||||||
|
|
||||||
|
#content-wrapper{ |
||||||
|
width:90%; |
||||||
|
margin:auto ; |
||||||
|
font-size:1.5em!important; |
||||||
|
} |
||||||
|
|
||||||
|
#content-wrapper p{ |
||||||
|
text-align:left; |
||||||
|
margin-left:10px |
||||||
|
} |
||||||
|
|
||||||
|
#content-wrapper pre{ |
||||||
|
// font-size:2em; |
||||||
|
color:#2c3e50; |
||||||
|
background:#ecf0f1; |
||||||
|
border-radius:3px; |
||||||
|
padding:8px; |
||||||
|
outline:3px #2c3e50 solid ; |
||||||
|
overflow-x : auto ; |
||||||
|
} |
||||||
|
|
||||||
|
#content-wrapper code{ |
||||||
|
color:#2c3e50; |
||||||
|
overflow-x : auto ; |
||||||
|
font-family:monospace; |
||||||
|
} |
||||||
|
|
||||||
|
#content-wrapper h1{ |
||||||
|
font-size : 2.5em; |
||||||
|
margin: 20px 0 0 -10px ; |
||||||
|
} |
||||||
|
|
||||||
|
#metad{ |
||||||
|
margin: 5px 0 30px 0; |
||||||
|
} |
||||||
|
|
||||||
|
#metad span { |
||||||
|
font-size : 1em; |
||||||
|
} |
||||||
|
|
||||||
|
#metad span:after{ |
||||||
|
content:" / "; |
||||||
|
margin: 0 0px 0 0px; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
#metad .cat { |
||||||
|
font-weight: bolder; |
||||||
|
} |
||||||
|
|
||||||
|
#metad .author { |
||||||
|
font-style: italic; |
||||||
|
} |
||||||
|
|
||||||
|
#metad .date { |
||||||
|
} |
||||||
|
|
||||||
|
table { |
||||||
|
border-collapse: collapse; |
||||||
|
width: 100%; |
||||||
|
margin-bottom: 20px; |
||||||
|
} |
||||||
|
|
||||||
|
th, td { |
||||||
|
text-align: left; |
||||||
|
padding: 8px; |
||||||
|
border: 1px solid #ddd; |
||||||
|
} |
||||||
|
|
||||||
|
tr:nth-child(even) { |
||||||
|
background-color: #f2f2f2; |
||||||
|
} |
||||||
|
|
||||||
|
th { |
||||||
|
background-color: #000; |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
img { |
||||||
|
width:100%; |
||||||
|
height:auto; |
||||||
|
max-width: 1080px; |
||||||
|
text-align: center; |
||||||
|
display: block; |
||||||
|
margin: auto; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//p img{ |
||||||
|
// width:150px; |
||||||
|
// height:auto; |
||||||
|
// float:left; |
||||||
|
// margin: 20px; |
||||||
|
// |
||||||
|
//} |
||||||
|
|
||||||
|
p strong img{ |
||||||
|
width:250px; |
||||||
|
} |
||||||
|
p em img{ |
||||||
|
width:150px; |
||||||
|
float:right; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
p{ |
||||||
|
line-height:1.2em; |
||||||
|
margin-top:1.5em; |
||||||
|
margin-bottom:1.5em; |
||||||
|
text-align:justify; |
||||||
|
// font-size:2em; |
||||||
|
} |
||||||
|
|
||||||
|
#gal { |
||||||
|
display : grid ; |
||||||
|
grid-template-columns: 1fr 1fr 1fr ; |
||||||
|
column-gap: 10px; |
||||||
|
row-gap: 10px; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
.img_container { |
||||||
|
position: relative; |
||||||
|
overflow: hidden; |
||||||
|
height: 120px; |
||||||
|
display: grid; |
||||||
|
align-content: center; |
||||||
|
align-items: center; |
||||||
|
justify-items: center; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
align-content: space-around; |
||||||
|
} |
||||||
|
|
||||||
|
.img_container img{ |
||||||
|
width:200%; |
||||||
|
} |
||||||
|
|
||||||
|
.fullImg{ |
||||||
|
grid-column: span 3; |
||||||
|
height: auto!important; |
||||||
|
} |
||||||
|
|
||||||
|
.fullImg img{ |
||||||
|
width:100%; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
key{ |
||||||
|
padding:1px 6px; |
||||||
|
border:1px solid lightgrey; |
||||||
|
border-radius: 5px; |
||||||
|
box-shadow: 1px 1px 0px 1px rgb(120# 20# 20) , |
||||||
|
-1px -1px 0px 1px rgb(220 ## 20## 20); |
||||||
|
|
||||||
|
background: #efefef; |
||||||
|
background: rgb(185# 85# 85); |
||||||
|
background: radial-gradient( rgba(200## 00# 90# ) 1%, rgba(225## 25## 25# ) 100%, rgba(185# 85# 85# ) 100%) |
||||||
|
; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@media (max-width: 600px) { |
||||||
|
|
||||||
|
#articles ul li span { |
||||||
|
display:none; |
||||||
|
} |
||||||
|
#menu ul li:first-of-type { |
||||||
|
outline: none; |
||||||
|
width:100%; |
||||||
|
} |
||||||
|
#menu ul li { |
||||||
|
outline: 1px solid #000; |
||||||
|
padding: 2px 10px; |
||||||
|
border-radius:3px; |
||||||
|
margin-left:4px; |
||||||
|
margin-bottom: 5px; |
||||||
|
margin-right:0; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
After Width: | Height: | Size: 534 KiB |
|
After Width: | Height: | Size: 266 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 260 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 388 KiB |
|
After Width: | Height: | Size: 203 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 27 KiB |
@ -0,0 +1,33 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html lang="fr"> |
||||||
|
<head> |
||||||
|
<meta charset="UTF-8"> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge"> |
||||||
|
<title>to do this - do that </title> |
||||||
|
<link rel="stylesheet" type="text/css" href="{{url_for('static', filename='style.css')}}"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
|
||||||
|
{% include 'menu.html' %} |
||||||
|
|
||||||
|
<div id="articles"> |
||||||
|
<ul> |
||||||
|
|
||||||
|
{% for article in articles %} |
||||||
|
<li> |
||||||
|
<a href="{{ url_for('index', _external=False) }}{{ article.path }}"> |
||||||
|
<h2 class="{{article.cat}}">{{article.title}}</h2> |
||||||
|
</a> |
||||||
|
<span class="categorie"><a href="{{ url_for('index', _external=False) }}cat/{{article.cat}}">{{article.cat}}</a></span> |
||||||
|
<span class="author"><a href="{{ url_for('index', _external=False) }}author/{{article.author}}">{{ article.author }}</a></span> |
||||||
|
<span class="date">{{ article.published }}</span> |
||||||
|
</li> |
||||||
|
{% endfor %} |
||||||
|
|
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script src="index.js"></script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,17 @@ |
|||||||
|
<div id="menu"> |
||||||
|
<nav> |
||||||
|
<ul> |
||||||
|
<li><a href="{{ url_for('index', _external=False) }}">[[🧠]]</a></li> |
||||||
|
{% for cat in catList : %} |
||||||
|
<li><a href="{{ url_for('index', _external=False) }}cat/{{cat}}">{{cat}}</a></li> |
||||||
|
{% endfor %} |
||||||
|
<li><a href="{{ url_for('index', _external=False) }}info">info</a></li> |
||||||
|
</ul> |
||||||
|
</nav> |
||||||
|
<div id="search-box"> |
||||||
|
<form action="/search" method="POST"> |
||||||
|
<input type="text" name="query" placeholder="Enter search query"> |
||||||
|
<button type="submit">~~></button> |
||||||
|
</form> |
||||||
|
</div> |
||||||
|
</div> |
||||||
@ -0,0 +1,37 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html lang="fr"> |
||||||
|
<head> |
||||||
|
<meta charset="UTF-8"> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge"> |
||||||
|
<title>tdtdt: {{page.title}} </title> |
||||||
|
<link rel="stylesheet" type="text/css" href="{{url_for('static', filename='style.css')}}"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
|
||||||
|
{% include 'menu.html' %} |
||||||
|
|
||||||
|
<div id="content-wrapper"> |
||||||
|
<h1>{{ page.title }}</h1> |
||||||
|
<div id="metad"> |
||||||
|
<span class="cat">{{ page.cat }}</span> |
||||||
|
<span class="author">{{ page.author }}</span> |
||||||
|
<span class="date">{{ page.published }}</span> |
||||||
|
</div> |
||||||
|
<div id="content"> |
||||||
|
{{ page }} |
||||||
|
</div> |
||||||
|
<div id="gal"> |
||||||
|
{% for img in imgs : %} |
||||||
|
<div class = "img_container"> |
||||||
|
{% set img_url = page.path + '/' + img %} |
||||||
|
<img src="pages/{{page.path}}/{{img}}"/> |
||||||
|
</div> |
||||||
|
{% endfor %} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> |
||||||
|
<script src="{{url_for('static', filename='main.js')}}"></script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,24 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html lang="fr"> |
||||||
|
<head> |
||||||
|
<meta charset="UTF-8"> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge"> |
||||||
|
<title>log website</title> |
||||||
|
<link rel="stylesheet" type="text/css" href="{{url_for('static', filename='style.css')}}"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
|
||||||
|
{% include 'menu.html' %} |
||||||
|
|
||||||
|
<div id="content-wrapper"> |
||||||
|
<h1>{{ page.title }}</h1> |
||||||
|
<div id="content"> |
||||||
|
PAGE PAS SINGLE |
||||||
|
{{ page }} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script src="index.js"></script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,247 @@ |
|||||||
|
<# |
||||||
|
.Synopsis |
||||||
|
Activate a Python virtual environment for the current PowerShell session. |
||||||
|
|
||||||
|
.Description |
||||||
|
Pushes the python executable for a virtual environment to the front of the |
||||||
|
$Env:PATH environment variable and sets the prompt to signify that you are |
||||||
|
in a Python virtual environment. Makes use of the command line switches as |
||||||
|
well as the `pyvenv.cfg` file values present in the virtual environment. |
||||||
|
|
||||||
|
.Parameter VenvDir |
||||||
|
Path to the directory that contains the virtual environment to activate. The |
||||||
|
default value for this is the parent of the directory that the Activate.ps1 |
||||||
|
script is located within. |
||||||
|
|
||||||
|
.Parameter Prompt |
||||||
|
The prompt prefix to display when this virtual environment is activated. By |
||||||
|
default, this prompt is the name of the virtual environment folder (VenvDir) |
||||||
|
surrounded by parentheses and followed by a single space (ie. '(.venv) '). |
||||||
|
|
||||||
|
.Example |
||||||
|
Activate.ps1 |
||||||
|
Activates the Python virtual environment that contains the Activate.ps1 script. |
||||||
|
|
||||||
|
.Example |
||||||
|
Activate.ps1 -Verbose |
||||||
|
Activates the Python virtual environment that contains the Activate.ps1 script, |
||||||
|
and shows extra information about the activation as it executes. |
||||||
|
|
||||||
|
.Example |
||||||
|
Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv |
||||||
|
Activates the Python virtual environment located in the specified location. |
||||||
|
|
||||||
|
.Example |
||||||
|
Activate.ps1 -Prompt "MyPython" |
||||||
|
Activates the Python virtual environment that contains the Activate.ps1 script, |
||||||
|
and prefixes the current prompt with the specified string (surrounded in |
||||||
|
parentheses) while the virtual environment is active. |
||||||
|
|
||||||
|
.Notes |
||||||
|
On Windows, it may be required to enable this Activate.ps1 script by setting the |
||||||
|
execution policy for the user. You can do this by issuing the following PowerShell |
||||||
|
command: |
||||||
|
|
||||||
|
PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser |
||||||
|
|
||||||
|
For more information on Execution Policies: |
||||||
|
https://go.microsoft.com/fwlink/?LinkID=135170 |
||||||
|
|
||||||
|
#> |
||||||
|
Param( |
||||||
|
[Parameter(Mandatory = $false)] |
||||||
|
[String] |
||||||
|
$VenvDir, |
||||||
|
[Parameter(Mandatory = $false)] |
||||||
|
[String] |
||||||
|
$Prompt |
||||||
|
) |
||||||
|
|
||||||
|
<# Function declarations --------------------------------------------------- #> |
||||||
|
|
||||||
|
<# |
||||||
|
.Synopsis |
||||||
|
Remove all shell session elements added by the Activate script, including the |
||||||
|
addition of the virtual environment's Python executable from the beginning of |
||||||
|
the PATH variable. |
||||||
|
|
||||||
|
.Parameter NonDestructive |
||||||
|
If present, do not remove this function from the global namespace for the |
||||||
|
session. |
||||||
|
|
||||||
|
#> |
||||||
|
function global:deactivate ([switch]$NonDestructive) { |
||||||
|
# Revert to original values |
||||||
|
|
||||||
|
# The prior prompt: |
||||||
|
if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { |
||||||
|
Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt |
||||||
|
Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT |
||||||
|
} |
||||||
|
|
||||||
|
# The prior PYTHONHOME: |
||||||
|
if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { |
||||||
|
Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME |
||||||
|
Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME |
||||||
|
} |
||||||
|
|
||||||
|
# The prior PATH: |
||||||
|
if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { |
||||||
|
Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH |
||||||
|
Remove-Item -Path Env:_OLD_VIRTUAL_PATH |
||||||
|
} |
||||||
|
|
||||||
|
# Just remove the VIRTUAL_ENV altogether: |
||||||
|
if (Test-Path -Path Env:VIRTUAL_ENV) { |
||||||
|
Remove-Item -Path env:VIRTUAL_ENV |
||||||
|
} |
||||||
|
|
||||||
|
# Just remove VIRTUAL_ENV_PROMPT altogether. |
||||||
|
if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { |
||||||
|
Remove-Item -Path env:VIRTUAL_ENV_PROMPT |
||||||
|
} |
||||||
|
|
||||||
|
# Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: |
||||||
|
if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { |
||||||
|
Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force |
||||||
|
} |
||||||
|
|
||||||
|
# Leave deactivate function in the global namespace if requested: |
||||||
|
if (-not $NonDestructive) { |
||||||
|
Remove-Item -Path function:deactivate |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
<# |
||||||
|
.Description |
||||||
|
Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the |
||||||
|
given folder, and returns them in a map. |
||||||
|
|
||||||
|
For each line in the pyvenv.cfg file, if that line can be parsed into exactly |
||||||
|
two strings separated by `=` (with any amount of whitespace surrounding the =) |
||||||
|
then it is considered a `key = value` line. The left hand string is the key, |
||||||
|
the right hand is the value. |
||||||
|
|
||||||
|
If the value starts with a `'` or a `"` then the first and last character is |
||||||
|
stripped from the value before being captured. |
||||||
|
|
||||||
|
.Parameter ConfigDir |
||||||
|
Path to the directory that contains the `pyvenv.cfg` file. |
||||||
|
#> |
||||||
|
function Get-PyVenvConfig( |
||||||
|
[String] |
||||||
|
$ConfigDir |
||||||
|
) { |
||||||
|
Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" |
||||||
|
|
||||||
|
# Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). |
||||||
|
$pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue |
||||||
|
|
||||||
|
# An empty map will be returned if no config file is found. |
||||||
|
$pyvenvConfig = @{ } |
||||||
|
|
||||||
|
if ($pyvenvConfigPath) { |
||||||
|
|
||||||
|
Write-Verbose "File exists, parse `key = value` lines" |
||||||
|
$pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath |
||||||
|
|
||||||
|
$pyvenvConfigContent | ForEach-Object { |
||||||
|
$keyval = $PSItem -split "\s*=\s*", 2 |
||||||
|
if ($keyval[0] -and $keyval[1]) { |
||||||
|
$val = $keyval[1] |
||||||
|
|
||||||
|
# Remove extraneous quotations around a string value. |
||||||
|
if ("'""".Contains($val.Substring(0, 1))) { |
||||||
|
$val = $val.Substring(1, $val.Length - 2) |
||||||
|
} |
||||||
|
|
||||||
|
$pyvenvConfig[$keyval[0]] = $val |
||||||
|
Write-Verbose "Adding Key: '$($keyval[0])'='$val'" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return $pyvenvConfig |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
<# Begin Activate script --------------------------------------------------- #> |
||||||
|
|
||||||
|
# Determine the containing directory of this script |
||||||
|
$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition |
||||||
|
$VenvExecDir = Get-Item -Path $VenvExecPath |
||||||
|
|
||||||
|
Write-Verbose "Activation script is located in path: '$VenvExecPath'" |
||||||
|
Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" |
||||||
|
Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" |
||||||
|
|
||||||
|
# Set values required in priority: CmdLine, ConfigFile, Default |
||||||
|
# First, get the location of the virtual environment, it might not be |
||||||
|
# VenvExecDir if specified on the command line. |
||||||
|
if ($VenvDir) { |
||||||
|
Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" |
||||||
|
} |
||||||
|
else { |
||||||
|
Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." |
||||||
|
$VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") |
||||||
|
Write-Verbose "VenvDir=$VenvDir" |
||||||
|
} |
||||||
|
|
||||||
|
# Next, read the `pyvenv.cfg` file to determine any required value such |
||||||
|
# as `prompt`. |
||||||
|
$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir |
||||||
|
|
||||||
|
# Next, set the prompt from the command line, or the config file, or |
||||||
|
# just use the name of the virtual environment folder. |
||||||
|
if ($Prompt) { |
||||||
|
Write-Verbose "Prompt specified as argument, using '$Prompt'" |
||||||
|
} |
||||||
|
else { |
||||||
|
Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" |
||||||
|
if ($pyvenvCfg -and $pyvenvCfg['prompt']) { |
||||||
|
Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" |
||||||
|
$Prompt = $pyvenvCfg['prompt']; |
||||||
|
} |
||||||
|
else { |
||||||
|
Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" |
||||||
|
Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" |
||||||
|
$Prompt = Split-Path -Path $venvDir -Leaf |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Write-Verbose "Prompt = '$Prompt'" |
||||||
|
Write-Verbose "VenvDir='$VenvDir'" |
||||||
|
|
||||||
|
# Deactivate any currently active virtual environment, but leave the |
||||||
|
# deactivate function in place. |
||||||
|
deactivate -nondestructive |
||||||
|
|
||||||
|
# Now set the environment variable VIRTUAL_ENV, used by many tools to determine |
||||||
|
# that there is an activated venv. |
||||||
|
$env:VIRTUAL_ENV = $VenvDir |
||||||
|
|
||||||
|
if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { |
||||||
|
|
||||||
|
Write-Verbose "Setting prompt to '$Prompt'" |
||||||
|
|
||||||
|
# Set the prompt to include the env name |
||||||
|
# Make sure _OLD_VIRTUAL_PROMPT is global |
||||||
|
function global:_OLD_VIRTUAL_PROMPT { "" } |
||||||
|
Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT |
||||||
|
New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt |
||||||
|
|
||||||
|
function global:prompt { |
||||||
|
Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " |
||||||
|
_OLD_VIRTUAL_PROMPT |
||||||
|
} |
||||||
|
$env:VIRTUAL_ENV_PROMPT = $Prompt |
||||||
|
} |
||||||
|
|
||||||
|
# Clear PYTHONHOME |
||||||
|
if (Test-Path -Path Env:PYTHONHOME) { |
||||||
|
Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME |
||||||
|
Remove-Item -Path Env:PYTHONHOME |
||||||
|
} |
||||||
|
|
||||||
|
# Add the venv to the PATH |
||||||
|
Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH |
||||||
|
$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" |
||||||
@ -0,0 +1,69 @@ |
|||||||
|
# This file must be used with "source bin/activate" *from bash* |
||||||
|
# you cannot run it directly |
||||||
|
|
||||||
|
deactivate () { |
||||||
|
# reset old environment variables |
||||||
|
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then |
||||||
|
PATH="${_OLD_VIRTUAL_PATH:-}" |
||||||
|
export PATH |
||||||
|
unset _OLD_VIRTUAL_PATH |
||||||
|
fi |
||||||
|
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then |
||||||
|
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" |
||||||
|
export PYTHONHOME |
||||||
|
unset _OLD_VIRTUAL_PYTHONHOME |
||||||
|
fi |
||||||
|
|
||||||
|
# This should detect bash and zsh, which have a hash command that must |
||||||
|
# be called to get it to forget past commands. Without forgetting |
||||||
|
# past commands the $PATH changes we made may not be respected |
||||||
|
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then |
||||||
|
hash -r 2> /dev/null |
||||||
|
fi |
||||||
|
|
||||||
|
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then |
||||||
|
PS1="${_OLD_VIRTUAL_PS1:-}" |
||||||
|
export PS1 |
||||||
|
unset _OLD_VIRTUAL_PS1 |
||||||
|
fi |
||||||
|
|
||||||
|
unset VIRTUAL_ENV |
||||||
|
unset VIRTUAL_ENV_PROMPT |
||||||
|
if [ ! "${1:-}" = "nondestructive" ] ; then |
||||||
|
# Self destruct! |
||||||
|
unset -f deactivate |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
# unset irrelevant variables |
||||||
|
deactivate nondestructive |
||||||
|
|
||||||
|
VIRTUAL_ENV="/home/zvevqx/LAB/work/www/webhookstest/venv" |
||||||
|
export VIRTUAL_ENV |
||||||
|
|
||||||
|
_OLD_VIRTUAL_PATH="$PATH" |
||||||
|
PATH="$VIRTUAL_ENV/bin:$PATH" |
||||||
|
export PATH |
||||||
|
|
||||||
|
# unset PYTHONHOME if set |
||||||
|
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) |
||||||
|
# could use `if (set -u; : $PYTHONHOME) ;` in bash |
||||||
|
if [ -n "${PYTHONHOME:-}" ] ; then |
||||||
|
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" |
||||||
|
unset PYTHONHOME |
||||||
|
fi |
||||||
|
|
||||||
|
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then |
||||||
|
_OLD_VIRTUAL_PS1="${PS1:-}" |
||||||
|
PS1="(venv) ${PS1:-}" |
||||||
|
export PS1 |
||||||
|
VIRTUAL_ENV_PROMPT="(venv) " |
||||||
|
export VIRTUAL_ENV_PROMPT |
||||||
|
fi |
||||||
|
|
||||||
|
# This should detect bash and zsh, which have a hash command that must |
||||||
|
# be called to get it to forget past commands. Without forgetting |
||||||
|
# past commands the $PATH changes we made may not be respected |
||||||
|
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then |
||||||
|
hash -r 2> /dev/null |
||||||
|
fi |
||||||
@ -0,0 +1,26 @@ |
|||||||
|
# This file must be used with "source bin/activate.csh" *from csh*. |
||||||
|
# You cannot run it directly. |
||||||
|
# Created by Davide Di Blasi <davidedb@gmail.com>. |
||||||
|
# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com> |
||||||
|
|
||||||
|
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate' |
||||||
|
|
||||||
|
# Unset irrelevant variables. |
||||||
|
deactivate nondestructive |
||||||
|
|
||||||
|
setenv VIRTUAL_ENV "/home/zvevqx/LAB/work/www/webhookstest/venv" |
||||||
|
|
||||||
|
set _OLD_VIRTUAL_PATH="$PATH" |
||||||
|
setenv PATH "$VIRTUAL_ENV/bin:$PATH" |
||||||
|
|
||||||
|
|
||||||
|
set _OLD_VIRTUAL_PROMPT="$prompt" |
||||||
|
|
||||||
|
if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then |
||||||
|
set prompt = "(venv) $prompt" |
||||||
|
setenv VIRTUAL_ENV_PROMPT "(venv) " |
||||||
|
endif |
||||||
|
|
||||||
|
alias pydoc python -m pydoc |
||||||
|
|
||||||
|
rehash |
||||||
@ -0,0 +1,69 @@ |
|||||||
|
# This file must be used with "source <venv>/bin/activate.fish" *from fish* |
||||||
|
# (https://fishshell.com/); you cannot run it directly. |
||||||
|
|
||||||
|
function deactivate -d "Exit virtual environment and return to normal shell environment" |
||||||
|
# reset old environment variables |
||||||
|
if test -n "$_OLD_VIRTUAL_PATH" |
||||||
|
set -gx PATH $_OLD_VIRTUAL_PATH |
||||||
|
set -e _OLD_VIRTUAL_PATH |
||||||
|
end |
||||||
|
if test -n "$_OLD_VIRTUAL_PYTHONHOME" |
||||||
|
set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME |
||||||
|
set -e _OLD_VIRTUAL_PYTHONHOME |
||||||
|
end |
||||||
|
|
||||||
|
if test -n "$_OLD_FISH_PROMPT_OVERRIDE" |
||||||
|
set -e _OLD_FISH_PROMPT_OVERRIDE |
||||||
|
# prevents error when using nested fish instances (Issue #93858) |
||||||
|
if functions -q _old_fish_prompt |
||||||
|
functions -e fish_prompt |
||||||
|
functions -c _old_fish_prompt fish_prompt |
||||||
|
functions -e _old_fish_prompt |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
set -e VIRTUAL_ENV |
||||||
|
set -e VIRTUAL_ENV_PROMPT |
||||||
|
if test "$argv[1]" != "nondestructive" |
||||||
|
# Self-destruct! |
||||||
|
functions -e deactivate |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
# Unset irrelevant variables. |
||||||
|
deactivate nondestructive |
||||||
|
|
||||||
|
set -gx VIRTUAL_ENV "/home/zvevqx/LAB/work/www/webhookstest/venv" |
||||||
|
|
||||||
|
set -gx _OLD_VIRTUAL_PATH $PATH |
||||||
|
set -gx PATH "$VIRTUAL_ENV/bin" $PATH |
||||||
|
|
||||||
|
# Unset PYTHONHOME if set. |
||||||
|
if set -q PYTHONHOME |
||||||
|
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME |
||||||
|
set -e PYTHONHOME |
||||||
|
end |
||||||
|
|
||||||
|
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" |
||||||
|
# fish uses a function instead of an env var to generate the prompt. |
||||||
|
|
||||||
|
# Save the current fish_prompt function as the function _old_fish_prompt. |
||||||
|
functions -c fish_prompt _old_fish_prompt |
||||||
|
|
||||||
|
# With the original prompt function renamed, we can override with our own. |
||||||
|
function fish_prompt |
||||||
|
# Save the return status of the last command. |
||||||
|
set -l old_status $status |
||||||
|
|
||||||
|
# Output the venv prompt; color taken from the blue of the Python logo. |
||||||
|
printf "%s%s%s" (set_color 4B8BBE) "(venv) " (set_color normal) |
||||||
|
|
||||||
|
# Restore the return status of the previous command. |
||||||
|
echo "exit $old_status" | . |
||||||
|
# Output the original/"old" prompt. |
||||||
|
_old_fish_prompt |
||||||
|
end |
||||||
|
|
||||||
|
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" |
||||||
|
set -gx VIRTUAL_ENV_PROMPT "(venv) " |
||||||
|
end |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
#!/home/zvevqx/LAB/work/www/webhookstest/venv/bin/python |
||||||
|
# -*- coding: utf-8 -*- |
||||||
|
import re |
||||||
|
import sys |
||||||
|
from flask.cli import main |
||||||
|
if __name__ == '__main__': |
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) |
||||||
|
sys.exit(main()) |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
#!/home/zvevqx/LAB/work/www/webhookstest/venv/bin/python |
||||||
|
# -*- coding: utf-8 -*- |
||||||
|
import re |
||||||
|
import sys |
||||||
|
from markdown.__main__ import run |
||||||
|
if __name__ == '__main__': |
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) |
||||||
|
sys.exit(run()) |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
#!/home/zvevqx/LAB/work/www/webhookstest/venv/bin/python |
||||||
|
# -*- coding: utf-8 -*- |
||||||
|
import re |
||||||
|
import sys |
||||||
|
from pip._internal.cli.main import main |
||||||
|
if __name__ == '__main__': |
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) |
||||||
|
sys.exit(main()) |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
#!/home/zvevqx/LAB/work/www/webhookstest/venv/bin/python |
||||||
|
# -*- coding: utf-8 -*- |
||||||
|
import re |
||||||
|
import sys |
||||||
|
from pip._internal.cli.main import main |
||||||
|
if __name__ == '__main__': |
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) |
||||||
|
sys.exit(main()) |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
#!/home/zvevqx/LAB/work/www/webhookstest/venv/bin/python |
||||||
|
# -*- coding: utf-8 -*- |
||||||
|
import re |
||||||
|
import sys |
||||||
|
from pip._internal.cli.main import main |
||||||
|
if __name__ == '__main__': |
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) |
||||||
|
sys.exit(main()) |
||||||
@ -0,0 +1 @@ |
|||||||
|
/usr/bin/python |
||||||
@ -0,0 +1 @@ |
|||||||
|
python |
||||||
@ -0,0 +1 @@ |
|||||||
|
python |
||||||
@ -0,0 +1 @@ |
|||||||
|
pip |
||||||