Compare commits
2 Commits
170ede89f8
...
95d9a50c02
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
95d9a50c02 | ||
|
|
463540770a |
15
home/.vscode/launch.json
vendored
Normal file
15
home/.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "chrome",
|
||||
"request": "launch",
|
||||
"name": "Launch Chrome against localhost",
|
||||
"url": "http://localhost:8080",
|
||||
"webRoot": "${workspaceFolder}"
|
||||
}
|
||||
]
|
||||
}
|
||||
246
home/adb-music-sync/adb-music-sync.py
Normal file
246
home/adb-music-sync/adb-music-sync.py
Normal file
@@ -0,0 +1,246 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import shlex
|
||||
import subprocess
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
from typing import List, Tuple, Optional
|
||||
|
||||
# --- Configuration ---
|
||||
HOME = Path.home()
|
||||
SOURCES = [
|
||||
HOME / "Music",
|
||||
HOME / "Downloads",
|
||||
]
|
||||
DEST_ON_PHONE = "/sdcard/Music"
|
||||
# Model tag as seen in `adb devices -l` (e.g., ... model:AGM_M7 ...)
|
||||
ADB_MODEL_MATCH = ["AGM_M7", "AGM", "M7"]
|
||||
POLL_INTERVAL_SEC = 60
|
||||
SIZE_LIMIT_BYTES = 7 * 1024 ** 3 # 7 GiB
|
||||
MUSIC_EXTS = {".mp3", ".m4a", ".ogg", ".aac", ".opus", ".alac", ".flac"}
|
||||
|
||||
# If you have a static Wi-Fi ADB endpoint, set it here (e.g., "192.168.1.50:5555").
|
||||
ADB_IP_PORT: Optional[str] = None
|
||||
|
||||
# --- Helpers ---
|
||||
def run(cmd: List[str], check: bool = False, text: bool = True, timeout: Optional[int] = None) -> subprocess.CompletedProcess:
|
||||
try:
|
||||
return subprocess.run(cmd, check=check, text=text, capture_output=True, timeout=timeout)
|
||||
except Exception as e:
|
||||
return subprocess.CompletedProcess(cmd, returncode=1, stdout="", stderr=str(e))
|
||||
|
||||
|
||||
def ensure_adb_server() -> None:
|
||||
run(["adb", "start-server"]) # best-effort
|
||||
|
||||
|
||||
def list_adb_devices() -> List[str]:
|
||||
proc = run(["adb", "devices", "-l"]) # do not check, we parse regardless
|
||||
if proc.returncode != 0:
|
||||
return []
|
||||
lines = [ln.strip() for ln in proc.stdout.splitlines()]
|
||||
# skip header line: "List of devices attached"
|
||||
if lines and lines[0].lower().startswith("list of devices"):
|
||||
lines = lines[1:]
|
||||
return [ln for ln in lines if ln]
|
||||
|
||||
|
||||
def adb_connect_if_needed():
|
||||
if not ADB_IP_PORT:
|
||||
return
|
||||
devices = list_adb_devices()
|
||||
if any(ADB_IP_PORT in ln for ln in devices):
|
||||
return # already connected
|
||||
run(["adb", "connect", ADB_IP_PORT])
|
||||
|
||||
|
||||
def is_agm_connected() -> bool:
|
||||
devices = list_adb_devices()
|
||||
for ln in devices:
|
||||
if "device" in ln and not ln.endswith("offline"):
|
||||
if any(tag in ln for tag in ADB_MODEL_MATCH):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def gather_music_files() -> List[Tuple[Path, Path, float, int]]:
|
||||
# Returns list of tuples: (root_dir, file_path, mtime, size)
|
||||
entries: List[Tuple[Path, Path, float, int]] = []
|
||||
for root in SOURCES:
|
||||
try:
|
||||
if not root.exists():
|
||||
continue
|
||||
for dirpath, _, filenames in os.walk(root):
|
||||
dpath = Path(dirpath)
|
||||
for fn in filenames:
|
||||
p = dpath / fn
|
||||
if p.suffix.lower() not in MUSIC_EXTS:
|
||||
continue
|
||||
try:
|
||||
st = p.stat()
|
||||
entries.append((root, p, st.st_mtime, st.st_size))
|
||||
except Exception:
|
||||
continue
|
||||
except Exception:
|
||||
continue
|
||||
# newest first by mtime
|
||||
entries.sort(key=lambda t: t[2], reverse=True)
|
||||
return entries
|
||||
|
||||
|
||||
def select_up_to_size(entries: List[Tuple[Path, Path, float, int]], limit_bytes: int) -> List[Tuple[Path, Path, int]]:
|
||||
selected: List[Tuple[Path, Path, int]] = []
|
||||
total = 0
|
||||
for root, p, _mt, sz in entries:
|
||||
if total >= limit_bytes:
|
||||
break
|
||||
selected.append((root, p, sz))
|
||||
total += sz
|
||||
return selected
|
||||
|
||||
|
||||
def adb_shell(cmd: str) -> subprocess.CompletedProcess:
|
||||
# Single string executed via adb shell
|
||||
return run(["adb", "shell", cmd])
|
||||
|
||||
|
||||
def remote_size(adb_path: str) -> Optional[int]:
|
||||
# Uses stat if available; returns None if missing
|
||||
# Escape path for shell
|
||||
qpath = shlex.quote(adb_path)
|
||||
proc = adb_shell(f"stat -c %s {qpath}")
|
||||
if proc.returncode != 0 or not proc.stdout.strip():
|
||||
return None
|
||||
out = proc.stdout.strip()
|
||||
if "No such file" in out or "not found" in out:
|
||||
return None
|
||||
try:
|
||||
return int(out.splitlines()[-1].strip())
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def ensure_remote_dir(adb_path: str) -> None:
|
||||
# mkdir -p dirname
|
||||
dirname = os.path.dirname(adb_path)
|
||||
if not dirname:
|
||||
return
|
||||
adb_shell(f"mkdir -p {shlex.quote(dirname)}")
|
||||
|
||||
|
||||
def have_ffmpeg() -> bool:
|
||||
proc = run(["ffmpeg", "-version"])
|
||||
return proc.returncode == 0
|
||||
|
||||
|
||||
def transcode_flac_to_mp3(src: Path) -> Optional[Path]:
|
||||
try:
|
||||
tmp = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False)
|
||||
tmp_path = Path(tmp.name)
|
||||
tmp.close()
|
||||
except Exception:
|
||||
return None
|
||||
cmd = [
|
||||
"ffmpeg",
|
||||
"-y",
|
||||
"-i",
|
||||
str(src),
|
||||
"-vn",
|
||||
"-c:a",
|
||||
"libmp3lame",
|
||||
"-q:a",
|
||||
"2",
|
||||
str(tmp_path),
|
||||
]
|
||||
proc = run(cmd)
|
||||
if proc.returncode != 0:
|
||||
try:
|
||||
tmp_path.unlink(missing_ok=True) # type: ignore[arg-type]
|
||||
except Exception:
|
||||
pass
|
||||
return None
|
||||
return tmp_path
|
||||
|
||||
|
||||
def push_file(local_path: Path, remote_path: str, size: int) -> bool:
|
||||
# Skip if same size exists
|
||||
rsz = remote_size(remote_path)
|
||||
if rsz is not None and rsz == size:
|
||||
print(f"[=] Skip (same size): {local_path} -> {remote_path}")
|
||||
return True
|
||||
ensure_remote_dir(remote_path)
|
||||
proc = run(["adb", "push", "-p", str(local_path), remote_path])
|
||||
if proc.returncode == 0:
|
||||
print(f"[+] Pushed: {local_path} -> {remote_path}")
|
||||
return True
|
||||
else:
|
||||
print(f"[!] Push failed: {local_path}\n{proc.stderr}")
|
||||
return False
|
||||
|
||||
|
||||
def sync_latest_batch():
|
||||
entries = gather_music_files()
|
||||
if not entries:
|
||||
print("[i] No music files found.")
|
||||
return
|
||||
batch = select_up_to_size(entries, SIZE_LIMIT_BYTES)
|
||||
print(f"[i] Selected {len(batch)} files up to {SIZE_LIMIT_BYTES/(1024**3):.2f} GiB")
|
||||
for root, p, sz in batch:
|
||||
try:
|
||||
rel = p.relative_to(root)
|
||||
except Exception:
|
||||
rel = p.name # fallback
|
||||
if p.suffix.lower() == ".flac":
|
||||
if not have_ffmpeg():
|
||||
print(f"[!] ffmpeg not available, skipping: {p}")
|
||||
continue
|
||||
mp3_tmp = transcode_flac_to_mp3(p)
|
||||
if not mp3_tmp:
|
||||
print(f"[!] Transcode failed, skipping: {p}")
|
||||
continue
|
||||
try:
|
||||
if isinstance(rel, Path):
|
||||
rel_mp3 = rel.with_suffix(".mp3")
|
||||
remote = f"{DEST_ON_PHONE.rstrip('/')}/{rel_mp3.as_posix()}"
|
||||
else:
|
||||
remote = f"{DEST_ON_PHONE.rstrip('/')}/{Path(rel).with_suffix('.mp3').as_posix()}"
|
||||
msz = mp3_tmp.stat().st_size
|
||||
push_file(mp3_tmp, remote, msz)
|
||||
finally:
|
||||
try:
|
||||
mp3_tmp.unlink()
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
remote = f"{DEST_ON_PHONE.rstrip('/')}/{rel.as_posix()}"
|
||||
push_file(p, remote, sz)
|
||||
|
||||
|
||||
def main():
|
||||
print("[i] adb-music-sync daemon starting...")
|
||||
ensure_adb_server()
|
||||
connected_prev = False
|
||||
while True:
|
||||
try:
|
||||
ensure_adb_server()
|
||||
adb_connect_if_needed()
|
||||
connected = is_agm_connected()
|
||||
if connected and not connected_prev:
|
||||
print("[+] AGM M7 connected. Starting sync of latest ~7 GiB...")
|
||||
sync_latest_batch()
|
||||
elif not connected and connected_prev:
|
||||
print("[-] AGM M7 disconnected.")
|
||||
connected_prev = connected
|
||||
time.sleep(POLL_INTERVAL_SEC)
|
||||
except KeyboardInterrupt:
|
||||
print("[i] Exiting on user interrupt.")
|
||||
sys.exit(0)
|
||||
except Exception as e:
|
||||
print(f"[!] Error in main loop: {e}")
|
||||
time.sleep(POLL_INTERVAL_SEC)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
78
home/adb-music-sync/install.sh
Normal file
78
home/adb-music-sync/install.sh
Normal file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SILENT=false
|
||||
LOG_PREFIX="[adb-music-sync]"
|
||||
|
||||
PYTHON_SCRIPT="$HOME/.linux-env/adb-music-sync/adb-music-sync.py"
|
||||
INSTALL_TARGET="$HOME/.local/bin/adb-music-sync.py"
|
||||
AUTOSTART_DIR="$HOME/.config/autostart"
|
||||
AUTOSTART_FILE="$AUTOSTART_DIR/adb-music-sync.desktop"
|
||||
|
||||
log() {
|
||||
if [ "$SILENT" = true ]; then return; fi
|
||||
echo "$LOG_PREFIX $*"
|
||||
}
|
||||
|
||||
check_and_install_deps() {
|
||||
# Minimal dependency: adb
|
||||
if ! command -v adb >/dev/null 2>&1; then
|
||||
if command -v apt >/dev/null 2>&1; then
|
||||
log "[+] Installation d'adb (apt) ..."
|
||||
sudo apt update -y && sudo apt install -y adb
|
||||
elif command -v dnf >/dev/null 2>&1; then
|
||||
log "[+] Installation d'adb (dnf) ..."
|
||||
sudo dnf install -y android-tools
|
||||
elif command -v pacman >/dev/null 2>&1; then
|
||||
log "[+] Installation d'adb (pacman) ..."
|
||||
sudo pacman -Sy --noconfirm android-tools
|
||||
else
|
||||
log "[!] adb introuvable et gestionnaire de paquets inconnu. Installez adb manuellement."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
install_script() {
|
||||
check_and_install_deps
|
||||
|
||||
log "[+] Copie du script Python..."
|
||||
mkdir -p "$(dirname "$INSTALL_TARGET")"
|
||||
cp "$PYTHON_SCRIPT" "$INSTALL_TARGET"
|
||||
chmod +x "$INSTALL_TARGET"
|
||||
|
||||
log "[+] Création du fichier autostart..."
|
||||
mkdir -p "$AUTOSTART_DIR"
|
||||
cat > "$AUTOSTART_FILE" <<EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Exec=$INSTALL_TARGET
|
||||
Hidden=false
|
||||
NoDisplay=false
|
||||
X-GNOME-Autostart-enabled=true
|
||||
Name=ADB Music Sync
|
||||
Comment=Lance la synchronisation de ~5GiB de musique vers l'AGM M7 à la connexion ADB
|
||||
EOF
|
||||
|
||||
log "[✓] Installation terminée. Le script se lancera automatiquement à l'ouverture de session."
|
||||
}
|
||||
|
||||
uninstall_script() {
|
||||
log "[+] Suppression du script Python et autostart..."
|
||||
rm -f "$INSTALL_TARGET"
|
||||
rm -f "$AUTOSTART_FILE"
|
||||
log "[✓] Désinstallation terminée."
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
uninstall)
|
||||
uninstall_script
|
||||
;;
|
||||
silent)
|
||||
SILENT=true
|
||||
uninstall_script &>/dev/null || true
|
||||
install_script &>/dev/null
|
||||
;;
|
||||
*)
|
||||
install_script
|
||||
;;
|
||||
esac
|
||||
9
home/applications/android-wifi/android-wifi.desktop
Normal file
9
home/applications/android-wifi/android-wifi.desktop
Normal file
@@ -0,0 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Name=Android WiFi
|
||||
Comment=Mirror and control Android devices over Wi-Fi
|
||||
Exec=/home/valere/.local/bin/android-wifi.sh
|
||||
Icon=/home/valere/.local/share/icons/android-wifi.svg
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Utility;
|
||||
StartupNotify=true
|
||||
15
home/applications/android-wifi/android-wifi.sh
Normal file
15
home/applications/android-wifi/android-wifi.sh
Normal file
@@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Try to connect via scrcpy first
|
||||
if ! scrcpy; then
|
||||
# If scrcpy fails, try the alternative method
|
||||
echo "If scrcpy fails, try the alternative method"
|
||||
adb tcpip 5555 >/dev/null 2>&1 || true
|
||||
MAC="0c:52:03:1e:89:9a"
|
||||
for i in $(seq 1 254); do ping -c1 -W1 192.168.1.$i >/dev/null 2>&1 & done; wait
|
||||
line=$(ip neigh | grep -i "$MAC" | head -n1 || true)
|
||||
ip=$(printf "%s" "$line" | awk '{print $1}')
|
||||
echo "${ip}:5555"
|
||||
adb connect "${ip}:5555"
|
||||
scrcpy
|
||||
fi
|
||||
16
home/applications/android-wifi/android-wifi.svg
Normal file
16
home/applications/android-wifi/android-wifi.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" version="1.1">
|
||||
<path style="opacity:0.2" d="m 16.846877,12 c -1.116351,0 -2.227419,0.912229 -2.015075,2 l 3.122973,16 -5.596557,11.109375 C 11.959876,41.871734 11.885244,42.336988 12.177176,43 c 0.278672,0.632897 0.998812,1 1.747448,1 H 24 34.075375 c 0.748637,0 1.468777,-0.367103 1.747448,-1 0.291932,-0.663012 0.217302,-1.128266 -0.181041,-1.890625 L 30.045225,30 33.168198,14 c 0.212344,-1.087771 -0.898724,-2 -2.015075,-2 H 24 Z"/>
|
||||
<path style="fill:#cccccc" d="m 16.846877,11 c -1.116351,0 -2.227419,0.912229 -2.015075,2 l 3.122973,16 -5.596557,11.109375 C 11.959876,40.871734 11.885244,41.336988 12.177176,42 c 0.278672,0.632897 0.998812,1 1.747448,1 H 24 34.075375 c 0.748637,0 1.468777,-0.367103 1.747448,-1 0.291932,-0.663012 0.217302,-1.128266 -0.181041,-1.890625 L 30.045225,29 33.168198,13 c 0.212344,-1.087771 -0.898724,-2 -2.015075,-2 H 24 Z"/>
|
||||
<rect style="opacity:0.2" width="40" height="32" x="4" y="6" rx="2" ry="2"/>
|
||||
<path style="fill:#e4e4e4" d="m 4,33 v 2 c 0,1.108 0.892,2 2,2 h 36 c 1.108,0 2,-0.892 2,-2 v -2 z"/>
|
||||
<path style="opacity:0.1" d="m 11.494141,15 a 1.5,1.5 0 0 0 -0.832032,0.255859 1.5,1.5 0 0 0 -0.40625,2.082032 l 3.13086,4.654297 C 10.404945,24.606192 8.4012371,28.299159 8.0019531,32.460938 7.9284599,34.000879 9.5546875,34 9.5546875,34 H 38.40625 c 0,0 1.672856,-3.38e-4 1.591797,-1.617188 -0.416529,-4.131451 -2.415618,-7.796833 -5.380859,-10.394531 l 3.126953,-4.65039 a 1.5,1.5 0 0 0 -0.40625,-2.082032 1.5,1.5 0 0 0 -1.125,-0.228515 1.5,1.5 0 0 0 -0.957032,0.634765 l -3.072265,4.566407 C 29.78649,18.814887 26.990024,18 24.001953,18 c -2.989385,0 -5.786177,0.815488 -8.183594,2.230469 l -3.074218,-4.56836 A 1.5,1.5 0 0 0 11.787109,15.027344 1.5,1.5 0 0 0 11.494141,15 Z"/>
|
||||
<path style="fill:#077063" d="M 6,5 C 4.892,5 4,5.892 4,7 V 33 H 44 V 7 C 44,5.892 43.108,5 42,5 Z"/>
|
||||
<path style="opacity:0.1;fill:#ffffff" d="M 6,5 C 4.892,5 4,5.892 4,7 V 8 C 4,6.892 4.892,6 6,6 h 36 c 1.108,0 2,0.892 2,2 V 7 C 44,5.892 43.108,5 42,5 Z"/>
|
||||
<path style="fill:none;stroke:#30dd81;stroke-width:3;stroke-linecap:round" d="M 15.1998,21.000026 11.5,15.5"/>
|
||||
<path style="fill:none;stroke:#30dd81;stroke-width:3;stroke-linecap:round" d="M 32.799764,21.000026 36.5,15.5"/>
|
||||
<path style="fill:#30dd81" d="m 24.002386,17.000034 c -8.355868,0 -15.2214979,6.346843 -15.9999669,14.460906 C 7.9289259,33.000882 9.5544999,33 9.5544999,33 H 38.406003 c 0,0 1.672201,-3.35e-4 1.591142,-1.617185 C 39.182807,23.305596 32.331836,17.000034 24.002386,17.000034 Z"/>
|
||||
<path style="opacity:0.2" d="m 16,25 a 1.9999959,1.9999959 0 0 0 -2,2 1.9999959,1.9999959 0 0 0 2,2 1.9999959,1.9999959 0 0 0 2,-2 1.9999959,1.9999959 0 0 0 -2,-2 z m 16,0 a 1.9999959,1.9999959 0 0 0 -2,2 1.9999959,1.9999959 0 0 0 2,2 1.9999959,1.9999959 0 0 0 2,-2 1.9999959,1.9999959 0 0 0 -2,-2 z"/>
|
||||
<path style="fill:#ffffff" d="M 15.999996,24.000008 A 1.9999959,1.9999959 0 0 1 17.999992,26.000004 1.9999959,1.9999959 0 0 1 15.999996,28 1.9999959,1.9999959 0 0 1 14,26.000004 1.9999959,1.9999959 0 0 1 15.999996,24.000008 Z"/>
|
||||
<path style="fill:#ffffff" d="M 31.999996,24.000008 A 1.9999959,1.9999959 0 0 1 33.999991,26.000004 1.9999959,1.9999959 0 0 1 31.999996,28 1.9999959,1.9999959 0 0 1 30,26.000004 1.9999959,1.9999959 0 0 1 31.999996,24.000008 Z"/>
|
||||
<path style="fill:#ffffff;opacity:0.2" d="M 11.494141 14 A 1.5 1.5 0 0 0 10.662109 14.255859 A 1.5 1.5 0 0 0 10.115234 16.001953 A 1.5 1.5 0 0 1 10.662109 15.255859 A 1.5 1.5 0 0 1 11.494141 15 A 1.5 1.5 0 0 1 11.787109 15.027344 A 1.5 1.5 0 0 1 12.744141 15.662109 L 15.818359 20.230469 C 18.215776 18.815488 21.012568 18 24.001953 18 C 26.990024 18 29.78649 18.814887 32.183594 20.228516 L 35.255859 15.662109 A 1.5 1.5 0 0 1 36.212891 15.027344 A 1.5 1.5 0 0 1 37.337891 15.255859 A 1.5 1.5 0 0 1 37.910156 16.001953 A 1.5 1.5 0 0 0 37.337891 14.255859 A 1.5 1.5 0 0 0 36.212891 14.027344 A 1.5 1.5 0 0 0 35.255859 14.662109 L 32.183594 19.228516 C 29.78649 17.814887 26.990024 17 24.001953 17 C 21.012568 17 18.215776 17.815488 15.818359 19.230469 L 12.744141 14.662109 A 1.5 1.5 0 0 0 11.787109 14.027344 A 1.5 1.5 0 0 0 11.494141 14 z M 35.033203 21.369141 L 34.617188 21.988281 C 37.477056 24.493668 39.433905 27.993356 39.943359 31.945312 C 39.986866 31.783283 40.008864 31.598575 39.998047 31.382812 C 39.601372 27.448291 37.768055 23.938648 35.033203 21.369141 z M 12.970703 21.373047 C 10.220358 23.959215 8.3822757 27.496796 8.0019531 31.460938 C 7.9920657 31.668114 8.0150508 31.844846 8.0585938 32 C 8.5570234 28.027243 10.515755 24.509049 13.386719 21.992188 L 12.970703 21.373047 z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
11
home/applications/install.sh
Normal file
11
home/applications/install.sh
Normal file
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
# desktop apps
|
||||
cp ~/.linux-env/applications/*/*.desktop ~/.local/share/applications/
|
||||
cp ~/.linux-env/applications/*/*.sh ~/.local/bin/
|
||||
cp ~/.linux-env/applications/*/*.svg ~/.local/share/icons/
|
||||
|
||||
chmod +x ~/.local/share/applications/*.desktop
|
||||
chmod +x ~/.local/bin/*.sh
|
||||
|
||||
update-desktop-database ~/.local/share/applications/
|
||||
gtk-update-icon-cache ~/.local/share/icons/ # inutile sauf si tu fais un vrai thème d'icônes
|
||||
BIN
home/applications/ratio-master/RM.exe
Normal file
BIN
home/applications/ratio-master/RM.exe
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/blingring.torrent
Normal file
BIN
home/applications/ratio-master/blingring.torrent
Normal file
Binary file not shown.
@@ -0,0 +1,7 @@
|
||||
<client name="Azureus 3.0.5.0" author="seba14.org" version="1.0" processname="azureus"> <query>info_hash={infohash}&peer_id={peerid}&supportcrypto=1&port={port}&azudp={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0{event}&numwant={numwant}&no_peer_id=1&compact=1&key={key}&azver=3</query>
|
||||
<headers>User-Agent: Azureus 3.0.5.0;Windows XP;Java 1.6.0_05_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_Content-type: application/x-www-form-urlencoded_nl_</headers>
|
||||
<peer_id prefix="-AZ3050-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
|
||||
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="true"/>
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="BitComet 1.07" author="seba14.org" version="1.0" processname="bitcomet">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&natmapped=1&localip={localip}&port_type=wan&uploaded={uploaded}&downloaded={downloaded}&left={left}&numwant={numwant}&compact=1&no_peer_id=1&key={key}{event}</query>
|
||||
<headers>Host: {host}_nl_Connection: close_nl_Accpet: */*_nl_Accept-Encoding: gzip_nl_User-Agent: BitComet/1.7.12.3_nl_Pragma: no-cache_nl_Cache-Control: no-cache_nl_</headers>
|
||||
<peer_id prefix="-BC0107-" type="random" length="12" urlencoding="true" upperCase="true" value="" />
|
||||
<key type="numeric" length="5" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="true"/>
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="BitComet 1.13" author="seba14.org" version="1.0" processname="bitcomet">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&natmapped=1&localip={localip}&port_type=wan&uploaded={uploaded}&downloaded={downloaded}&left={left}&numwant={numwant}&compact=1&no_peer_id=1&key={key}{event}</query>
|
||||
<headers>Host: {host}_nl_Connection: close_nl_Accept: */*_nl_Accept-Encoding: gzip_nl_User-Agent: BitComet/1.13.6.22_nl_Pragma: no-cache_nl_Cache-Control: no-cache_nl_</headers>
|
||||
<peer_id prefix="-BC0113-" type="random" length="12" urlencoding="true" upperCase="true" value="" />
|
||||
<key type="numeric" length="5" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="true"/>
|
||||
</client>
|
||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
<client name="BitTorrent 6.0.3 (8642)" author="Rebound" version="1.0" processname="bittorrent">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&key={key}{event}&numwant={numwant}&compact=1&no_peer_id=1</query>
|
||||
<headers>Host: {host}_nl_User-Agent: BitTorrent/6030_nl_Accept-Encoding: gzip_nl_</headers>
|
||||
<peer_id prefix="M6-0-3--" type="random" length="12" urlencoding="true" upperCase="false" value=""/>
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="false"/>
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="BitTyrant 1.1" author="res0r9lm" version="1.0" processname="Azureus">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&supportcrypto=1&port={port}&azudp={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}{event}&numwant={numwant}&no_peer_id=1&compact=1&key={key}</query>
|
||||
<headers>User-Agent: AzureusBitTyrant 2.5.0.0BitTyrant;Windows XP;Java 1.5.0_10_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_Proxy-Connection: keep-alive_nl_Content-type: application/x-www-form-urlencoded_nl_</headers>
|
||||
<peer_id prefix="AZ2500BT" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
|
||||
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="true"/>
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="Deluge 1.1.7" author="seba14.org" version="1.0">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}{event}&key={key}&compact=1&numwant={numwant}&supportcrypto=1&no_peer_id=1</query>
|
||||
<headers>Host: {host}_nl_User-Agent: Deluge 1.1.7_nl_Connection: close_nl_Accept-Encoding: gzip_nl_</headers>
|
||||
<peer_id prefix="-DE1170-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value="" />
|
||||
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.0"/>
|
||||
<hash upperCase="false"/>
|
||||
</client>
|
||||
@@ -0,0 +1,9 @@
|
||||
<client name="Deluge 1.1.9" author="seba14.org" version="1.0">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}{event}&key={key}&compact=1&numwant={numwant}&supportcrypto=1&no_peer_id=1</query>
|
||||
<headers>Host: {host}_nl_User-Agent: Deluge 1.1.9_nl_Connection: close_nl_Accept-Encoding: gzip_nl_</headers>
|
||||
<peer_id prefix="-DE1190-" type="printable" length="12" urlencoding="false" upperCase="false" value="" />
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="false" lowerCase="true" value=""/>
|
||||
<protocol value="HTTP/1.0"/>
|
||||
<hash upperCase="false"/>
|
||||
<urlencoding exceptions="." />
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="Halite 0.3.1.1" author="seba14.org" version="2.0"> <query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}{event}&key={key}&compact=1&numwant={numwant}&supportcrypto=1&no_peer_id=1</query>
|
||||
<headers>Accept-Encoding: gzip_nl_User-Agent: Halite v 0.3.1.1_nl_Host: {host}_nl_</headers>
|
||||
<peer_id prefix="-HL0311-" type="printable" length="12" urlencoding="false"/>
|
||||
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.0"/>
|
||||
<hash upperCase="false"/>
|
||||
<urlencoding exceptions="_-()~!*."/>
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="Transmission 1.06 (Build 5136)" author="seba14.org" version="1.0">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&corrupt=0&left={left}&compact=1&numwant={numwant}&key={key}&supportcrypto=1&requirecrypto=0{event}</query>
|
||||
<headers>Host: {host}_nl_Connection: close_nl_User-Agent: Transmission/1.06 (5136)_nl_</headers>
|
||||
<peer_id prefix="-TR1060-" type="alphanumeric" length="12" urlencoding="false" lowerCase="true" value=""/>
|
||||
<key type="alphanumeric" length="10" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="true"/>
|
||||
</client>
|
||||
8
home/applications/ratio-master/clients/Vuze_4202.client
Normal file
8
home/applications/ratio-master/clients/Vuze_4202.client
Normal file
@@ -0,0 +1,8 @@
|
||||
<client name="Vuze 4.2.0.2" author="seba14.org" version="1.0" processname="azureus"> <query>info_hash={infohash}&peer_id={peerid}&supportcrypto=1&port={port}&azudp={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0{event}&numwant={numwant}&no_peer_id=1&compact=1&key={key}&azver=3</query>
|
||||
<headers>User-Agent: Azureus 4.2.0.2;Windows XP;Java 1.6.0_13_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_</headers>
|
||||
<peer_id prefix="-AZ4202-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
|
||||
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="true"/>
|
||||
<urlencoding exceptions="*-._" />
|
||||
</client>
|
||||
9
home/applications/ratio-master/clients/Vuze_4204.client
Normal file
9
home/applications/ratio-master/clients/Vuze_4204.client
Normal file
@@ -0,0 +1,9 @@
|
||||
<client name="Vuze 4.2.0.4" author="Ratiomaster" version="1.0" processname="azureus">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&supportcrypto=1&port={port}&azudp={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0{event}&numwant={numwant}&no_peer_id=1&compact=1&key={key}&azver=3</query>
|
||||
<headers>User-Agent: Azureus 4.2.0.4;{osver};{javaver}_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_</headers>
|
||||
<peer_id prefix="-AZ4204-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
|
||||
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="true"/>
|
||||
<urlencoding exceptions="*-._" />
|
||||
</client>
|
||||
9
home/applications/ratio-master/clients/Vuze_4208.client
Normal file
9
home/applications/ratio-master/clients/Vuze_4208.client
Normal file
@@ -0,0 +1,9 @@
|
||||
<client name="Vuze 4.2.0.8" author="KTC" version="1.0" processname="azureus">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&supportcrypto=1&port={port}&azudp={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0{event}&numwant={numwant}&no_peer_id=1&compact=1&key={key}&azver=3</query>
|
||||
<headers>User-Agent: Azureus 4.2.0.8;{osver};{javaver}_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_</headers>
|
||||
<peer_id prefix="-AZ4208-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
|
||||
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="true"/>
|
||||
<urlencoding exceptions="*-._" />
|
||||
</client>
|
||||
8
home/applications/ratio-master/clients/Vuze_4306.client
Normal file
8
home/applications/ratio-master/clients/Vuze_4306.client
Normal file
@@ -0,0 +1,8 @@
|
||||
<client name="Vuze 4.3.0.6" author="seba14.org" version="1.0" processname="azureus"> <query>info_hash={infohash}&peer_id={peerid}&supportcrypto=1&port={port}&azudp={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0{event}&numwant={numwant}&no_peer_id=1&compact=1&key={key}&azver=3</query>
|
||||
<headers>User-Agent: Azureus 4.3.0.6;{osver};{javaver}_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_</headers>
|
||||
<peer_id prefix="-AZ4306-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
|
||||
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="true"/>
|
||||
<urlencoding exceptions="*-._" />
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="Vuze 4.4.0.4" author="seba14.org" version="2.0" processname="azureus"> <query>info_hash={infohash}&peer_id={peerid}&supportcrypto=1&port={port}&azudp={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0{event}&numwant={numwant}&no_peer_id=1&compact=1&key={key}&azver=3</query>
|
||||
<headers>User-Agent: Azureus 4.4.0.4;{osver};{javaver}_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_</headers>
|
||||
<peer_id prefix="-AZ4404-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
|
||||
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="true"/>
|
||||
<urlencoding exceptions="*-._" />
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="Vuze 4.5.0.0" author="seba14.org" version="2.0" processname="azureus"> <query>info_hash={infohash}&peer_id={peerid}&supportcrypto=1&port={port}&azudp={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0{event}&numwant={numwant}&no_peer_id=1&compact=1&key={key}&azver=3</query>
|
||||
<headers>User-Agent: Azureus 4.5.0.0;{osver};{javaver}_nl_Connection: close_nl_Accept-Encoding: gzip_nl_Host: {host}_nl_Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2_nl_</headers>
|
||||
<peer_id prefix="-AZ4500-" type="alphanumeric" length="12" urlencoding="false" upperCase="false" value=""/>
|
||||
<key type="alphanumeric" length="8" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="true"/>
|
||||
<urlencoding exceptions="*-._" />
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="BitLord 1.1" author="Ratiomaster" version="1.0" processname="bitlord">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&natmapped=1&uploaded={uploaded}&downloaded={downloaded}&left={left}&numwant={numwant}&compact=1&no_peer_id=1&key={key}{event}</query>
|
||||
<headers>User-Agent: BitTorrent/3.4.2_nl_Connection: close_nl_Accept-Encoding: gzip, deflate_nl_Host: {host}_nl_Cache-Control: no-cache_nl_</headers>
|
||||
<peer_id prefix="exbc%01%01LORDCz%03%92" type="random" length="6" urlencoding="true" upperCase="true" value="" />
|
||||
<key type="numeric" length="4" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.0"/>
|
||||
<hash upperCase="true"/>
|
||||
</client>
|
||||
8
home/applications/ratio-master/clients/burst_310b.client
Normal file
8
home/applications/ratio-master/clients/burst_310b.client
Normal file
@@ -0,0 +1,8 @@
|
||||
<client name="Burst 3.1.0b" author="RatioMaster" version="1.0" processname="btdownloadheadless">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&key={key}&uploaded={uploaded}&downloaded={downloaded}&left={left}&compact=1{event}</query>
|
||||
<headers>Host: {host}_nl_Accept-Encoding: gzip_nl_User-Agent: BitTorrent/brst1.1.3_nl_</headers>
|
||||
<peer_id prefix="Mbrst1-1-3" type="hex" length="10" urlencoding="false" upperCase="false" value=""/>
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="false" value=""/>
|
||||
<protocol value="HTTP/1.0"/>
|
||||
<hash upperCase="true"/>
|
||||
</client>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
<client name="uTorrent 1.7.7 build (8179)" author="uk10" version="1.0" processname="utorrent">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&key={key}{event}&numwant={numwant}&compact=1&no_peer_id=1</query>
|
||||
<headers>Host: {host}_nl_User-Agent: uTorrent/1770_nl_Accept-Encoding: gzip_nl_</headers>
|
||||
<peer_id prefix="-UT1770-%f3%9f" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="false"/>
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="uTorrent 1.8.1 (build 12616)" author="SpongeBob101" version="1.0" processname="utorrent">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0&key={key}{event}&numwant={numwant}&compact=1&no_peer_id=1</query>
|
||||
<headers>Host: {host}_nl_User-Agent: uTorrent/1810_nl_Accept-Encoding: gzip_nl_</headers>
|
||||
<peer_id prefix="-UT1810-H1" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="false"/>
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="uTorrent 1.8.1 (build 12639)" author="MurderTR" version="1.0" processname="utorrent">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0&key={key}{event}&numwant={numwant}&compact=1&no_peer_id=1</query>
|
||||
<headers>Host: {host}_nl_User-Agent: uTorrent/1810_nl_Accept-Encoding: gzip_nl_</headers>
|
||||
<peer_id prefix="-UT1810-_1" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="false"/>
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="uTorrent 1.8.2 (build 15227)" author="Gox" version="1.0" processname="utorrent">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0&key={key}{event}&numwant={numwant}&compact=1&no_peer_id=1</query>
|
||||
<headers>Host: {host}_nl_User-Agent: uTorrent/1820_nl_Accept-Encoding: gzip_nl_</headers>
|
||||
<peer_id prefix="-UT1820-%7b%3b" type="random" length="10" urlencoding="true" upperCase="false" value="" />
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="false"/>
|
||||
</client>
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
<client name="utorrent 1.8.2 (build 14153)" author="rogeruk" version="1.0" processname="utorrent">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0&key={key}{event}&numwant={numwant}&compact=1&no_peer_id=1</query>
|
||||
<headers>User-Agent: uTorrent/1820_nl_Accept-Encoding: gzip, deflate_nl_Host: {host}_nl_Cache-Control: no-cache_nl_</headers>
|
||||
<peer_id prefix="-UT1820-I7" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="false"/>
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="utorrent 1.8.2 (build 14458)" author="MurderTR" version="1.0" processname="utorrent">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0&key={key}{event}&numwant={numwant}&compact=1&no_peer_id=1</query>
|
||||
<headers>User-Agent: uTorrent/1820_nl_Accept-Encoding: gzip, deflate_nl_Host: {host}_nl_Cache-Control: no-cache_nl_</headers>
|
||||
<peer_id prefix="-UT1820-z8" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="false"/>
|
||||
</client>
|
||||
@@ -0,0 +1,8 @@
|
||||
<client name="uTorrent 1.8.2 Build (15167)" author="seba14.org" version="1.0" processname="utorrent">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0&key={key}{event}&numwant={numwant}&compact=1&no_peer_id=1</query>
|
||||
<headers>Host: {host}_nl_User-Agent: uTorrent/1820_nl_Accept-Encoding: gzip_nl_</headers>
|
||||
<peer_id prefix="-UT1820-%3f%3b" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="false"/>
|
||||
</client>
|
||||
@@ -0,0 +1,9 @@
|
||||
<client name="uTorrent 1.8.3 Build (15728)" author="seba14.org" version="1.0" processname="utorrent">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0&key={key}{event}&numwant={numwant}&compact=1&no_peer_id=1</query>
|
||||
<headers>Host: {host}_nl_User-Agent: uTorrent/1830(15728)_nl_Accept-Encoding: gzip_nl_</headers>
|
||||
<peer_id prefix="-UT1830-p%3d" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="false"/>
|
||||
<urlencoding exceptions="_()~._-" />
|
||||
</client>
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,9 @@
|
||||
<client name="uTorrent 1.8.4 Build (16150)" author="seba14.org" version="1.0" processname="utorrent">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0&key={key}{event}&numwant={numwant}&compact=1&no_peer_id=1</query>
|
||||
<headers>Host: {host}_nl_User-Agent: uTorrent/1840(16150)_nl_Accept-Encoding: gzip_nl_</headers>
|
||||
<peer_id prefix="-UT1840-%16%3f" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="false"/>
|
||||
<urlencoding exceptions="_-~!*."/>
|
||||
</client>
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
<client name="uTorrent 1.8 (build 11813)" author="SpongeBob101" version="1.0" processname="utorrent">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0&key={key}{event}&numwant={numwant}&compact=1&no_peer_id=1</query>
|
||||
<headers>Host: {host}_nl_User-Agent: uTorrent/1800_nl_Accept-Encoding: gzip_nl_</headers>
|
||||
<peer_id prefix="-UT1800-%25." type="random" length="10" urlencoding="true" upperCase="false" value=""/>
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="false"/>
|
||||
</client>
|
||||
Binary file not shown.
@@ -0,0 +1,10 @@
|
||||
<client name="uTorrent 2.0.4 Build (21431)" author="CoreCore and Anon" version="1.0" processname="utorrent">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0&key={key}{event}&numwant={numwant}&compact=1&no_peer_id=1</query>
|
||||
<headers>Host: {host}_nl_User-Agent: uTorrent/2040(21431)_nl_Accept-Encoding: gzip_nl_</headers>
|
||||
<peer_id prefix="-UT2040-%b7S" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="false"/>
|
||||
<urlencoding exceptions="-._~"/>
|
||||
<numwant value="200" randomize="false"/>
|
||||
</client>
|
||||
@@ -0,0 +1,10 @@
|
||||
<client name="uTorrent 2.0.4 Build (21515)" author="CoreCore and Anon" version="1.0" processname="utorrent">
|
||||
<query>info_hash={infohash}&peer_id={peerid}&port={port}&uploaded={uploaded}&downloaded={downloaded}&left={left}&corrupt=0&key={key}{event}&numwant={numwant}&compact=1&no_peer_id=1</query>
|
||||
<headers>Host: {host}_nl_User-Agent: uTorrent/2040(21515)_nl_Accept-Encoding: gzip_nl_</headers>
|
||||
<peer_id prefix="-UT2040-%0bT" type="random" length="10" urlencoding="true" upperCase="false" value=""/>
|
||||
<key type="hex" length="8" urlencoding="false" upperCase="true" value=""/>
|
||||
<protocol value="HTTP/1.1"/>
|
||||
<hash upperCase="false"/>
|
||||
<urlencoding exceptions="-._~"/>
|
||||
<numwant value="200" randomize="false"/>
|
||||
</client>
|
||||
BIN
home/applications/ratio-master/lng/1english.lng
Normal file
BIN
home/applications/ratio-master/lng/1english.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/Arabic.lng
Normal file
BIN
home/applications/ratio-master/lng/Arabic.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/Armenian.lng
Normal file
BIN
home/applications/ratio-master/lng/Armenian.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/Danish.lng
Normal file
BIN
home/applications/ratio-master/lng/Danish.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/Korean.lng
Normal file
BIN
home/applications/ratio-master/lng/Korean.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/bulgarian.lng
Normal file
BIN
home/applications/ratio-master/lng/bulgarian.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/chinese.lng
Normal file
BIN
home/applications/ratio-master/lng/chinese.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/french.lng
Normal file
BIN
home/applications/ratio-master/lng/french.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/german.lng
Normal file
BIN
home/applications/ratio-master/lng/german.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/hebrew.lng
Normal file
BIN
home/applications/ratio-master/lng/hebrew.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/hungarian.lng
Normal file
BIN
home/applications/ratio-master/lng/hungarian.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/italian.lng
Normal file
BIN
home/applications/ratio-master/lng/italian.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/lithuanian.lng
Normal file
BIN
home/applications/ratio-master/lng/lithuanian.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/polish.lng
Normal file
BIN
home/applications/ratio-master/lng/polish.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/portuguese.lng
Normal file
BIN
home/applications/ratio-master/lng/portuguese.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/romanian.lng
Normal file
BIN
home/applications/ratio-master/lng/romanian.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/russian.lng
Normal file
BIN
home/applications/ratio-master/lng/russian.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/slovenian.lng
Normal file
BIN
home/applications/ratio-master/lng/slovenian.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/spanish.lng
Normal file
BIN
home/applications/ratio-master/lng/spanish.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/swedish.lng
Normal file
BIN
home/applications/ratio-master/lng/swedish.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/thai.lng
Normal file
BIN
home/applications/ratio-master/lng/thai.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/turkish.lng
Normal file
BIN
home/applications/ratio-master/lng/turkish.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/ukrainian.lng
Normal file
BIN
home/applications/ratio-master/lng/ukrainian.lng
Normal file
Binary file not shown.
BIN
home/applications/ratio-master/lng/vietnamese.lng
Normal file
BIN
home/applications/ratio-master/lng/vietnamese.lng
Normal file
Binary file not shown.
10
home/applications/ratio-master/ratio-master.desktop
Executable file
10
home/applications/ratio-master/ratio-master.desktop
Executable file
@@ -0,0 +1,10 @@
|
||||
[Desktop Entry]
|
||||
Name=RatioMaster
|
||||
Comment=Ratio spoofing tool for torrents
|
||||
Exec=wine /home/valere/.local/bin/RatioMaster/RM.exe
|
||||
Path=/home/valere/.local/bin/RatioMaster
|
||||
Icon=/home/valere/.local/bin/RatioMaster/logo.svg
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Network;P2P;
|
||||
StartupNotify=true
|
||||
65
home/applications/ratio-master/ratio-master.svg
Normal file
65
home/applications/ratio-master/ratio-master.svg
Normal file
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
|
||||
<svg
|
||||
width="773.29401"
|
||||
height="773.29401"
|
||||
viewBox="0 -28.5 247.45409 247.45409"
|
||||
version="1.1"
|
||||
preserveAspectRatio="xMidYMid"
|
||||
id="svg3"
|
||||
sodipodi:docname="logo.svg"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs3" />
|
||||
<sodipodi:namedview
|
||||
id="namedview3"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="0.48911087"
|
||||
inkscape:cx="-24.534315"
|
||||
inkscape:cy="80.758786"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1132"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3" />
|
||||
<g
|
||||
id="g3"
|
||||
transform="translate(5.5656067,239.04617)">
|
||||
<rect
|
||||
style="fill:#eb001b;fill-opacity:1;stroke-width:11.3833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.3;paint-order:fill markers stroke"
|
||||
id="rect3"
|
||||
width="112.2394"
|
||||
height="112.45076"
|
||||
x="-105.21542"
|
||||
y="-209.79523"
|
||||
transform="rotate(45)" />
|
||||
<rect
|
||||
style="fill:#f79e1b;fill-opacity:1;stroke-width:11.3833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.3;paint-order:fill markers stroke"
|
||||
id="rect3-6"
|
||||
width="112.2394"
|
||||
height="112.45076"
|
||||
x="-42.293499"
|
||||
y="-272.13583"
|
||||
transform="rotate(45)" />
|
||||
<rect
|
||||
style="fill:#ff5f00;fill-opacity:1;stroke-width:5.03456;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2.3;paint-order:fill markers stroke"
|
||||
id="rect3-6-5"
|
||||
width="49.315277"
|
||||
height="50.120525"
|
||||
x="-42.293499"
|
||||
y="-209.80559"
|
||||
transform="rotate(45)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
42
home/applications/ratio-master/ratiomaster.config
Normal file
42
home/applications/ratio-master/ratiomaster.config
Normal file
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ApplicationSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<textStopMinLeecher>0</textStopMinLeecher>
|
||||
<updateAnnounceParamsOnStart>true</updateAnnounceParamsOnStart>
|
||||
<finishedPercent>100</finishedPercent>
|
||||
<uploadRate>55003.37</uploadRate>
|
||||
<downloadRate>0.21</downloadRate>
|
||||
<interval>1800</interval>
|
||||
<TorrentClientsIndex>11</TorrentClientsIndex>
|
||||
<checkLogEnabled>true</checkLogEnabled>
|
||||
<checkRequestScrap>true</checkRequestScrap>
|
||||
<checkShowTrayBaloon>true</checkShowTrayBaloon>
|
||||
<checkTCPListen>false</checkTCPListen>
|
||||
<customPort />
|
||||
<customKey>WMAAIhLqVx</customKey>
|
||||
<customPeersNum />
|
||||
<customPeerID>-TR1060-pauut3h9agwn</customPeerID>
|
||||
<textProxyHost />
|
||||
<textProxyPort />
|
||||
<textProxyPass />
|
||||
<textProxyUser />
|
||||
<comboProxyTypeIndex>0</comboProxyTypeIndex>
|
||||
<checkNewVersion>true</checkNewVersion>
|
||||
<checkRandomUpload>true</checkRandomUpload>
|
||||
<checkRandomDownload>true</checkRandomDownload>
|
||||
<RandomUploadFrom>50000</RandomUploadFrom>
|
||||
<RandomUploadTo>100000</RandomUploadTo>
|
||||
<RandomDownloadFrom>0</RandomDownloadFrom>
|
||||
<RandomDownloadTo>4</RandomDownloadTo>
|
||||
<ignoreFailureReason>false</ignoreFailureReason>
|
||||
<torrentFilePath>C:\users\valere\Desktop\Downloads\l.horloger.de.saint-paul.1974.VOF RESTAUREE.1080p.BDrip.x265.FLAC-AZAZE.mkv.torrent</torrentFilePath>
|
||||
<torrentHash>1164387932F4CB6B1267B3ABA7E0A4CD26593E14</torrentHash>
|
||||
<stopProcessActionBox>0</stopProcessActionBox>
|
||||
<stopProcessValue>1000</stopProcessValue>
|
||||
<stopProcessUnitsBox>-1</stopProcessUnitsBox>
|
||||
<selectedLanguage>Z:\home\valere\.local\bin\RatioMaster\lng\1english.lng</selectedLanguage>
|
||||
<bindToIp>default</bindToIp>
|
||||
<minimizeTotray>true</minimizeTotray>
|
||||
<ignoreTimeout>false</ignoreTimeout>
|
||||
<useUPnP>false</useUPnP>
|
||||
<savePeerList>false</savePeerList>
|
||||
</ApplicationSettings>
|
||||
0
home/applications/ratio-master/rm_updates.xml
Normal file
0
home/applications/ratio-master/rm_updates.xml
Normal file
BIN
home/applications/ratio-master/torrent.torrent
Normal file
BIN
home/applications/ratio-master/torrent.torrent
Normal file
Binary file not shown.
106
home/bashrc/.bashrc
Normal file
106
home/bashrc/.bashrc
Normal file
@@ -0,0 +1,106 @@
|
||||
# .linux-env
|
||||
VIDEO_DIR_LOCAL="/home/valere/Downloads"
|
||||
IMAGE_DIR_LOCAL="/home/valere/Downloads"
|
||||
MUSIC_DIR_LOCAL="/home/valere/evilspins/web/mnt/media/files/music"
|
||||
|
||||
VIDEO_PATH="/home/root/media/video/autre"
|
||||
IMAGE_PATH="/home/root/media/image/screenshit"
|
||||
MUSIC_DIR="/home/root/media/files/music"
|
||||
|
||||
dlvideo() {
|
||||
cd "$VIDEO_DIR" || return
|
||||
pip install -U yt-dlp
|
||||
yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4" --merge-output-format mp4 "$@"
|
||||
}
|
||||
|
||||
dlimage() {
|
||||
wget -P "$IMAGE_DIR" "$1"
|
||||
}
|
||||
|
||||
dlcover() {
|
||||
query_or_file="$1"
|
||||
manual_url="$2"
|
||||
|
||||
|
||||
if [ -f "$query_or_file" ]; then
|
||||
file="$query_or_file"
|
||||
elif echo "$query_or_file" | grep -q '%(ext)'; then
|
||||
file="$query_or_file"
|
||||
else
|
||||
file=$(find "$MUSIC_DIR" -type f \
|
||||
\( -iname "*${query_or_file}*.mp3" -o -iname "*${query_or_file}*.m4a" -o -iname "*${query_or_file}*.flac" -o -iname "*${query_or_file}*.wav" -o -iname "*${query_or_file}*.ogg" \) \
|
||||
| head -n 1)
|
||||
fi
|
||||
|
||||
if [ -z "$file" ]; then
|
||||
echo "❌ Aucun fichier trouvé pour: $query_or_file"
|
||||
return 1
|
||||
fi
|
||||
|
||||
base="${file%.*}"
|
||||
|
||||
if [ -n "$manual_url" ]; then
|
||||
curl -s "$manual_url" -o "${base}.jpg"
|
||||
echo "✅ ${base}.jpg saved from manual URL (fichier: $file)"
|
||||
return
|
||||
fi
|
||||
|
||||
artist_raw=$(echo "$base" | awk -F'__' '{print $2}')
|
||||
title_raw=$(echo "$base" | awk -F'__' '{for(i=3;i<=NF;i++){printf (i>3?" ":""); printf $i}}')
|
||||
artist=$(echo "$artist_raw" | tr '_' ' ')
|
||||
title=$(echo "$title_raw" | tr '_' ' ')
|
||||
query_enc=$(jq -rn --arg s "$artist $title" '$s|@uri')
|
||||
|
||||
it_url="https://itunes.apple.com/search?term=${query_enc}&entity=song&limit=1"
|
||||
art=$(curl -s "$it_url" | jq -r '.results[0].artworkUrl100')
|
||||
if [ -n "$art" ] && [ "$art" != "null" ]; then
|
||||
art_hi=$(echo "$art" | sed 's/100x100bb/1000x1000bb/')
|
||||
curl -s "$art_hi" -o "${base}.jpg"
|
||||
echo "✅ ${base}.jpg saved from iTunes (fichier: $file)"
|
||||
return
|
||||
fi
|
||||
|
||||
api_key="5ae5d1212599f96ffa799e21da1b2a7a38274c94bb5ae8ad26ce8d5b08528aaa"
|
||||
url=$(curl -s "https://serpapi.com/search.json?engine=google&q=${query_enc}&tbm=isch&api_key=${api_key}" \
|
||||
| jq -r '.images_results[0].original')
|
||||
|
||||
if [ -n "$url" ] && [ "$url" != "null" ]; then
|
||||
curl -s "$url" -o "${base}.jpg"
|
||||
echo "✅ ${base}.jpg saved from Google Images (fichier: $file)"
|
||||
else
|
||||
echo "❌ No cover found for $artist - $title (fichier: $file)"
|
||||
fi
|
||||
}
|
||||
|
||||
dlmusic() {
|
||||
mkdir -p "$MUSIC_PATH"
|
||||
|
||||
NOW=$(date +"%Y%m%d%H")
|
||||
URL="$1"
|
||||
|
||||
# Récupère le titre
|
||||
TITLE=$(yt-dlp --get-title "$URL")
|
||||
|
||||
# Transforme le titre pour le nom de fichier
|
||||
SAFE_TITLE="${TITLE// - /__}"
|
||||
SAFE_TITLE="${SAFE_TITLE// /_}"
|
||||
|
||||
TRACK_NAME="$MUSIC_PATH/${NOW}__${SAFE_TITLE}.%(ext)s"
|
||||
|
||||
# Téléchargement
|
||||
yt-dlp -x --audio-format mp3 -o $TRACK_NAME "$URL"
|
||||
dlcover $TRACK_NAME
|
||||
}
|
||||
|
||||
search() {
|
||||
find ./ -iname "*$1*"
|
||||
}
|
||||
|
||||
searchinside() {
|
||||
grep -rwl "$1" ./
|
||||
}
|
||||
|
||||
alias evilsync='rsync -avz --delete -e ssh $MUSIC_DIR_LOCAL root@erudi.fr:$MUSIC_DIR'
|
||||
alias evildiff='rsync -avzn --delete -e ssh $MUSIC_DIR_LOCAL root@erudi.fr:$MUSIC_DIR'
|
||||
|
||||
# end .linux-env
|
||||
4
home/bashrc/install.sh
Normal file
4
home/bashrc/install.sh
Normal file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
sed -i '/# .linux-env/,/# .linux-env/d' ~/.bashrc
|
||||
cat ~/.linux-env/bashrc/.bashrc >> ~/.bashrc
|
||||
94
home/gamecube-pad/gamecube-pad.py
Normal file
94
home/gamecube-pad/gamecube-pad.py
Normal file
@@ -0,0 +1,94 @@
|
||||
#!/usr/bin/env python3
|
||||
import evdev
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
DEVICE_NAMES = ["8BitDo NGC Modkit"]
|
||||
BUTTON_MAP = {
|
||||
"304": "Return", # A
|
||||
"305": None, # B (non utilisé)
|
||||
"311": "Alt_L", # R
|
||||
"307": "Right", # X
|
||||
"308": "Left", # Y
|
||||
# 318 (BTN_THUMBR) sera géré à part
|
||||
}
|
||||
|
||||
def find_device():
|
||||
for path in evdev.list_devices():
|
||||
try:
|
||||
dev = evdev.InputDevice(path)
|
||||
if any(dn in dev.name for dn in DEVICE_NAMES):
|
||||
return path
|
||||
except Exception:
|
||||
continue
|
||||
return None
|
||||
|
||||
def is_dolphin_running():
|
||||
try:
|
||||
output = subprocess.check_output(["flatpak", "ps"]).decode()
|
||||
return "org.DolphinEmu.dolphin-emu" in output
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def press_key(key, press):
|
||||
# press=True -> key down, press=False -> key up
|
||||
action = "keydown" if press else "keyup"
|
||||
subprocess.run(["xdotool", action, key])
|
||||
|
||||
def handle_device(dev_path):
|
||||
dev = evdev.InputDevice(dev_path)
|
||||
try:
|
||||
for event in dev.read_loop():
|
||||
if event.type != evdev.ecodes.EV_KEY:
|
||||
continue
|
||||
|
||||
key_code = str(event.code)
|
||||
|
||||
# cas spécial : joystick jaune (BTN_THUMBR, code 318)
|
||||
if key_code == "318" and event.value == 1: # pression
|
||||
press_key("Alt_L", True)
|
||||
time.sleep(0.02)
|
||||
press_key("Escape", True)
|
||||
time.sleep(0.05)
|
||||
press_key("Escape", False)
|
||||
press_key("Alt_L", False)
|
||||
continue
|
||||
|
||||
if key_code in BUTTON_MAP:
|
||||
mapped_key = BUTTON_MAP[key_code]
|
||||
if mapped_key is not None:
|
||||
press_key(mapped_key, event.value == 1)
|
||||
|
||||
except OSError:
|
||||
dev.close()
|
||||
raise
|
||||
|
||||
def main():
|
||||
connected = False
|
||||
time.sleep(5) # délai pour que le serveur graphique soit prêt
|
||||
while True:
|
||||
dev_path = find_device()
|
||||
if dev_path and not connected:
|
||||
print(f"[+] Manette connectée: {dev_path}")
|
||||
connected = True
|
||||
if not is_dolphin_running():
|
||||
try:
|
||||
subprocess.Popen(["flatpak", "run", "org.DolphinEmu.dolphin-emu"])
|
||||
except Exception as e:
|
||||
print(f"[!] Impossible de lancer Dolphin: {e}")
|
||||
try:
|
||||
handle_device(dev_path)
|
||||
except OSError:
|
||||
print("[-] Manette déconnectée")
|
||||
connected = False
|
||||
try:
|
||||
subprocess.Popen(["flatpak", "kill", "org.DolphinEmu.dolphin-emu"])
|
||||
except Exception as e:
|
||||
print(f"[!] Impossible de tuer Dolphin: {e}")
|
||||
elif not dev_path and connected:
|
||||
print("[-] Manette déconnectée")
|
||||
connected = False
|
||||
time.sleep(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
77
home/gamecube-pad/install.sh
Executable file
77
home/gamecube-pad/install.sh
Executable file
@@ -0,0 +1,77 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
PYTHON_SCRIPT="$HOME/.local/bin/gamecube-pad.py"
|
||||
AUTOSTART_DIR="$HOME/.config/autostart"
|
||||
AUTOSTART_FILE="$AUTOSTART_DIR/gamecube-pad.desktop"
|
||||
|
||||
SILENT=false
|
||||
if [[ "$1" == "silent" ]]; then
|
||||
SILENT=true
|
||||
fi
|
||||
|
||||
log() {
|
||||
if [ "$SILENT" = false ]; then
|
||||
echo "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
check_and_install_deps() {
|
||||
for pkg in evdev uinput; do
|
||||
if ! python3 -c "import $pkg" &>/dev/null; then
|
||||
log "[!] Dépendance manquante : $pkg. Installation avec pip..."
|
||||
python3 -m pip install --user "$pkg" &>/dev/null
|
||||
fi
|
||||
done
|
||||
|
||||
for cmd in xdotool wmctrl; do
|
||||
if ! command -v "$cmd" &>/dev/null; then
|
||||
log "[!] Commande manquante : $cmd. Merci de l’installer via votre gestionnaire de paquets."
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
install_script() {
|
||||
check_and_install_deps
|
||||
|
||||
log "[+] Copie du script Python..."
|
||||
mkdir -p "$(dirname "$PYTHON_SCRIPT")"
|
||||
cp "$HOME/.linux-env/gamecube-pad/gamecube-pad.py" "$PYTHON_SCRIPT"
|
||||
chmod +x "$PYTHON_SCRIPT"
|
||||
|
||||
log "[+] Création du fichier autostart..."
|
||||
mkdir -p "$AUTOSTART_DIR"
|
||||
cat > "$AUTOSTART_FILE" <<EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Exec=$PYTHON_SCRIPT
|
||||
Hidden=false
|
||||
NoDisplay=false
|
||||
X-GNOME-Autostart-enabled=true
|
||||
Name=GameCube Pad
|
||||
Comment=Lance le script GameCube Pad au démarrage
|
||||
EOF
|
||||
|
||||
log "[✓] Installation terminée. Le script se lancera automatiquement à l'ouverture de session."
|
||||
}
|
||||
|
||||
uninstall_script() {
|
||||
log "[+] Suppression du script Python et autostart..."
|
||||
rm -f "$PYTHON_SCRIPT"
|
||||
rm -f "$AUTOSTART_FILE"
|
||||
log "[✓] Désinstallation terminée."
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
uninstall)
|
||||
uninstall_script
|
||||
;;
|
||||
silent)
|
||||
SILENT=true
|
||||
uninstall_script &>/dev/null
|
||||
install_script &>/dev/null
|
||||
;;
|
||||
*)
|
||||
install_script
|
||||
;;
|
||||
esac
|
||||
16
home/install.sh
Executable file
16
home/install.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Chemin de base : le dossier où se trouve ce script
|
||||
BASE_DIR="$(dirname "$(realpath "$0")")"
|
||||
|
||||
echo "[+] Recherche et exécution des install.sh..."
|
||||
|
||||
# Boucle récursive sur tous les fichiers install.sh
|
||||
find "$BASE_DIR" -type f -name "install.sh" ! -path "$BASE_DIR/install.sh" | while read -r script; do
|
||||
echo "[+] Lancement : $script"
|
||||
chmod +x "$script"
|
||||
"$script"
|
||||
done
|
||||
|
||||
echo "[✓] Tous les install.sh ont été exécutés."
|
||||
7
pre-commit
Normal file
7
pre-commit
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
# install bashrc if bashrc git edited
|
||||
if git diff --quiet home/bashrc/.bashrc; then
|
||||
else
|
||||
./home/bashrc/install.sh
|
||||
fi
|
||||
72
public/cv/cv-comymedia.md
Normal file
72
public/cv/cv-comymedia.md
Normal file
@@ -0,0 +1,72 @@
|
||||
# Valère BRON
|
||||
|
||||
**Webdesigner / Développeur Front | Vue.js, Nuxt, WordPress, UI/UX**
|
||||
|
||||
Développeur front depuis plus de 12 ans, je combine expertise technique et sens du design pour créer des interfaces web performantes, accessibles et attractives. Passionné par l’expérience utilisateur, je transforme les concepts graphiques en sites web fonctionnels et optimisés.
|
||||
|
||||
📞 06 81 84 77 37
|
||||
📧 contact@valere.dev
|
||||
🔗 [LinkedIn](https://www.linkedin.com/in/valere-bron/)
|
||||
💻 [GitHub](https://github.com/valerebron)
|
||||
🎨 Portfolio : [valere.dev/portfolio](https://valere.dev/portfolio)
|
||||
|
||||
---
|
||||
|
||||
## 💡 Compétences
|
||||
|
||||
- **Front-end & CMS :** Vue.js, Nuxt, React.js, HTML, CSS, JavaScript, WordPress, PrestaShop, WooCommerce, Divi, Elementor
|
||||
- **Graphisme & UI :** Photoshop, Illustrator, InDesign, XD, Tailwind, SCSS
|
||||
- **SEO & marketing digital :** Optimisation SEO, Google Ads, newsletters, intégration de chartes graphiques
|
||||
- **Méthodes & outils :** Git, GitLab, Jira, Agile/Scrum, tests E2E, CI/CD
|
||||
- **Soft skills :** Autonomie, créativité, sens du détail, communication et travail en équipe
|
||||
|
||||
---
|
||||
|
||||
## 🏢 Expériences
|
||||
|
||||
### 2025 – Groupama | Développeur Vue.js
|
||||
|
||||
- Développement d’applications Vue 3, optimisation UX et accessibilité
|
||||
- Collaboration étroite avec les équipes métier et design
|
||||
- Participation à la conception et aux tests fonctionnels
|
||||
|
||||
### 2024 – Fitarena | Développeur Vue.js / UI
|
||||
|
||||
- Création d’un agenda interactif Vue 3 & Pinia
|
||||
- Développement de composants UI sur-mesure et intégration front
|
||||
|
||||
### 2021–2023 – Potager City | Développeur Front
|
||||
|
||||
- Développement et maintenance d’une application Vue 2 avec focus accessibilité
|
||||
- Mise en place de tests E2E et optimisation SEO
|
||||
- Développement d’éléments graphiques pour campagnes emailing
|
||||
|
||||
### 2020–2021 – MassiveMusic | Développeur Fullstack & Designer UI
|
||||
|
||||
- Création d’un réseau social de streaming musical
|
||||
- Intégration de composants Vue avec Atomic Design
|
||||
- Design et prototypage d’interfaces utilisateur
|
||||
|
||||
### 2019 – Euronews | Intégrateur Front
|
||||
|
||||
- Intégration SCSS normalisée (ITCSS) pour la V3 du site
|
||||
|
||||
### 2018 – Tyredating | Développeur Front
|
||||
|
||||
- Création de composants Vue et intégration responsive
|
||||
- Réalisation de maquettes et d’éléments graphiques
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Diplômes
|
||||
|
||||
- 2011 – Licence Ingénierie de l’Internet
|
||||
- 2010 – BTS Communication et Industries Graphiques
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Projets personnels
|
||||
|
||||
- Développement de paquets npm et extensions Web
|
||||
- Projets WordPress et PrestaShop pour clients et expérimentations personnelles
|
||||
- Création de kits UI/UX pour applications web internes et prototypes interactifs
|
||||
79
public/cv/cv-jalis.md
Normal file
79
public/cv/cv-jalis.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# Valère BRON — Développeur Front-End & UX/UI
|
||||
|
||||
Marseille / Freelance • Vue.js / React.js • Interfaces web accessibles et performantes
|
||||
|
||||
📞 06 81 84 77 37
|
||||
📧 contact@valere.dev
|
||||
🔗 [LinkedIn](https://www.linkedin.com/in/valere-bron/)
|
||||
💻 [GitHub](https://github.com/valerebron)
|
||||
|
||||
---
|
||||
|
||||
## Profil
|
||||
|
||||
Développeur front-end expérimenté avec 12 ans d’expérience, spécialisé dans la création d’interfaces web modernes, accessibles et performantes.
|
||||
Passionné par l’expérience utilisateur, j’ai conçu des applications interactives et responsives, en intégrant des principes UX/UI et en travaillant étroitement avec les équipes design et produit.
|
||||
Je souhaite évoluer vers le design d’interfaces et l’optimisation des parcours utilisateurs au sein d’une agence innovante.
|
||||
|
||||
---
|
||||
|
||||
## Compétences
|
||||
|
||||
**UX/UI & Design :** Wireframes, prototypes interactifs, parcours utilisateurs multi-devices, accessibilité (WCAG), tests A/B, design system
|
||||
|
||||
**Front-End :** Vue.js, React.js, TypeScript, JavaScript ES6+, HTML5, CSS3, Tailwind, SCSS, Storybook
|
||||
|
||||
**Outils & logiciels :** Figma, Adobe Suite (Photoshop, Illustrator, XD), Git, npm, Docker
|
||||
|
||||
**Méthodologie :** Agile (Scrum / Kanban), collaboration produit et design, veille technologique
|
||||
|
||||
---
|
||||
|
||||
## Expériences professionnelles
|
||||
|
||||
### Développeur Front-End — Freelance
|
||||
|
||||
**ESN & clients grands comptes — Lyon & Marseille • 2013–2025**
|
||||
|
||||
- Développement d’interfaces interactives et responsives en Vue.js et React.js
|
||||
- Intégration et maintenance de design systems pour simplifier le workflow design → dev
|
||||
- Création de composants réutilisables et tests d’accessibilité
|
||||
- Collaboration avec équipes UX/UI pour optimiser parcours utilisateurs et performances
|
||||
- Mise en place de prototypes et validation de concepts avant production
|
||||
|
||||
**Projets notables :**
|
||||
|
||||
- Web TV synchronisée et plateforme interactive pour événement culturel
|
||||
- Applications SaaS et e-commerce avec intégration marketing et analytics
|
||||
- Systèmes front back orchestrés via Docker et CI/CD pour livraison rapide
|
||||
|
||||
---
|
||||
|
||||
## Projets personnels / démonstrateurs techniques
|
||||
|
||||
- Kit front-end interactif avec Vue/React pour prototypage rapide
|
||||
- Microservices Docker pour apps web expérimentales
|
||||
- Web TV auto-hébergée et traitement d’images/vidéo en front et back
|
||||
|
||||
---
|
||||
|
||||
## Formation
|
||||
|
||||
- Licence Ingénierie de l’Internet (2011)
|
||||
- Formation continue autodidacte en UX/UI, Figma, Adobe Suite
|
||||
- Veille constante sur design web, accessibilité et bonnes pratiques front-end
|
||||
|
||||
---
|
||||
|
||||
## Langues
|
||||
|
||||
- Français : natif
|
||||
- Anglais : professionnel (documentation technique, échanges dev/design)
|
||||
|
||||
---
|
||||
|
||||
## Contact
|
||||
|
||||
**Valère BRON**
|
||||
Disponible freelance / CDD
|
||||
Malt • LinkedIn • valere.dev
|
||||
94
public/cv/cv-otoremote.md
Normal file
94
public/cv/cv-otoremote.md
Normal file
@@ -0,0 +1,94 @@
|
||||
---
|
||||
title: "Valère BRON — Développeur Front-End / TypeScript orienté Full-Stack"
|
||||
author: "Valère BRON"
|
||||
geometry: margin=2cm
|
||||
fontsize: 11pt
|
||||
---
|
||||
|
||||
# Valère BRON
|
||||
|
||||
**Développeur Front-End / TypeScript orienté Full-Stack**
|
||||
Marseille • Freelance • Vue.js / TypeScript / NestJS • Intérêt pour la santé numérique
|
||||
|
||||
📞 06 81 84 77 37
|
||||
📧 contact@valere.dev
|
||||
🔗 [LinkedIn](https://www.linkedin.com/in/valere-bron/)
|
||||
💻 [GitHub](https://github.com/valerebron)
|
||||
|
||||
---
|
||||
|
||||
## Profil
|
||||
|
||||
Développeur front-end depuis 12 ans, spécialisé dans la construction d’interfaces web modernes, accessibles et performantes.
|
||||
Je me positionne aujourd’hui comme **Front-End avancé** avec montée en compétences sur **NestJS, PostgreSQL et GraphQL**.
|
||||
Attiré par les applications à impact (santé, culture, sciences) et les environnements agiles où l’on collabore directement avec les équipes produit et techniques.
|
||||
|
||||
---
|
||||
|
||||
## Compétences
|
||||
|
||||
**Front-End :** Vue.js / Nuxt 3, TypeScript, HTML5, CSS3, Tailwind, Accessibilité (WCAG), State management (Pinia, VueUse), Tests (Vitest, Vue Test Utils)
|
||||
|
||||
**Full-Stack (en progression) :** NestJS, Node.js, PostgreSQL, Prisma, REST / GraphQL, Auth, services, architecture modulaire
|
||||
|
||||
**DevOps & outils :** Docker / docker-web, GitLab (Git Flow), CI/CD, Gitea, Linux
|
||||
|
||||
**Méthodologie & UX :** Collaboration produit / UX, culture data, documentation technique, environnement Agile
|
||||
|
||||
---
|
||||
|
||||
## Expériences professionnelles
|
||||
|
||||
### Développeur Front-End — Freelance
|
||||
|
||||
**ESN & clients grands comptes — Lyon & Marseille • 2013–2025**
|
||||
|
||||
- Intégration d’interfaces complexes et responsives
|
||||
- Composants UI sur-mesure en Vue.js / TypeScript
|
||||
- Optimisation performance front et audit accessibilité
|
||||
- Mise en place d’outils internes (design systems, librairies front)
|
||||
- Contribution ponctuelle à des API en Node/NestJS
|
||||
- Industrialisation via Docker, CI/CD, automatisations
|
||||
|
||||
---
|
||||
|
||||
## Projets personnels / démonstrateurs techniques
|
||||
|
||||
- **PushToRecord (Android – Kotlin)** : App en arrière-plan pour enregistrement audio → flux asynchrone, permissions, architecture modulaire
|
||||
- **Web TV auto-hébergée** : Player synchronisé, génération dynamique de flux HLS → intégration front + backend, orchestration Docker
|
||||
- **Outil de superposition vidéo** : Extraction de frames, fusion, rendu via interface web → API simples, traitement d’image, micro-services Docker
|
||||
- **docker-web** : CLI d’orchestration Docker pour apps web → gestion images, automatisation, scripts Bash
|
||||
|
||||
---
|
||||
|
||||
## Formation
|
||||
|
||||
- Autodidacte avancé • 12 ans d'expérience front, montée full-stack
|
||||
- Veille continue sur NestJS, PostgreSQL, GraphQL, perf front, UX
|
||||
- Ateliers OpenClassrooms / Udemy : NestJS & Prisma (2024-2025)
|
||||
|
||||
---
|
||||
|
||||
## Valeur ajoutée pour OTOREMOTE
|
||||
|
||||
- Forte expérience interface/utilisation
|
||||
- Culture UX/UI et accessibilité
|
||||
- Capacité front immédiate
|
||||
- Montée en compétence NestJS déjà entamée
|
||||
- Travail propre, documenté, orienté qualité
|
||||
- Appétence forte pour projets à impact humain
|
||||
|
||||
---
|
||||
|
||||
## Langues
|
||||
|
||||
- Français : natif
|
||||
- Anglais : technique courant (documentation, échanges dev)
|
||||
|
||||
---
|
||||
|
||||
## Contact
|
||||
|
||||
**Valère BRON**
|
||||
Marseille / Lyon — disponible en freelance et CDD
|
||||
Malt • LinkedIn • valere.dev
|
||||
237
public/cv/html/cv-comymedia.html
Normal file
237
public/cv/html/cv-comymedia.html
Normal file
@@ -0,0 +1,237 @@
|
||||
<html><head>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Barlow:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&display=swap" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet">
|
||||
<style>
|
||||
/* Default styles */
|
||||
pre {
|
||||
background: #2d2d2d;
|
||||
border-radius: 4px;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
code {
|
||||
font-family: 'Fira Code', Consolas, Monaco, monospace;
|
||||
}
|
||||
/* Custom CSS */
|
||||
/* ====== Markdown PDF Pro Theme ====== */
|
||||
|
||||
@page {
|
||||
margin: 25mm 20mm;
|
||||
margin-top: 0mm;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
||||
font-size: 11pt;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
background: white;
|
||||
max-width: 800px;
|
||||
margin: auto;
|
||||
padding: 60px;
|
||||
}
|
||||
|
||||
/* Headings */
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-family: "Segoe UI Semibold", "Helvetica Neue", Arial, sans-serif;
|
||||
font-weight: 600;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 0.6em;
|
||||
line-height: 1.3;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 24pt;
|
||||
border-bottom: 2px solid #000;
|
||||
/* accent color */
|
||||
padding-bottom: 0.3em;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 18pt;
|
||||
border-left: 4px solid #000;
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 14pt;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-size: 12pt;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* Paragraphs */
|
||||
p {
|
||||
margin: 0.5em 0;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
/* Links */
|
||||
a {
|
||||
color: #1e7fce;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* Lists */
|
||||
ul,
|
||||
ol {
|
||||
margin: 0.5em 0 0.5em 2em;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 0.3em;
|
||||
}
|
||||
|
||||
/* Blockquote */
|
||||
blockquote {
|
||||
border-left: 4px solid #0078D7;
|
||||
margin: 1em 0;
|
||||
padding: 0.5em 1em;
|
||||
color: #555;
|
||||
background: #f9f9f9;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Code */
|
||||
code {
|
||||
font-family: "Fira Code", "Consolas", monospace;
|
||||
background: #f4f4f4;
|
||||
padding: 0.2em 0.4em;
|
||||
border-radius: 4px;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: #1e1e1e;
|
||||
color: #dcdcdc;
|
||||
padding: 1em;
|
||||
border-radius: 6px;
|
||||
overflow-x: auto;
|
||||
font-size: 0.9em;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
margin: 1em 0;
|
||||
width: 100%;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
border: 1px solid #ccc;
|
||||
padding: 0.6em 0.8em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
background: #f0f0f0;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
tr:nth-child(even) td {
|
||||
background: #fafafa;
|
||||
}
|
||||
|
||||
/* Horizontal rule */
|
||||
hr {
|
||||
border: none;
|
||||
border-top: 2px solid #eee;
|
||||
margin: 2em 0;
|
||||
}
|
||||
</style>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-python.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-javascript.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-bash.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-sql.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-go.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Valère BRON</h1>
|
||||
<p><strong>Webdesigner / Développeur Front | Vue.js, Nuxt, WordPress, UI/UX</strong></p>
|
||||
<p>Développeur front depuis plus de 12 ans, je combine expertise technique et sens du design pour créer des interfaces web performantes, accessibles et attractives. Passionné par l’expérience utilisateur, je transforme les concepts graphiques en sites web fonctionnels et optimisés.</p>
|
||||
<p>📞 06 81 84 77 37<br>
|
||||
📧 contact@valere.dev<br>
|
||||
🔗 <a href="https://www.linkedin.com/in/valere-bron/">LinkedIn</a><br>
|
||||
💻 <a href="https://github.com/valerebron">GitHub</a><br>
|
||||
🎨 Portfolio : <a href="https://valere.dev/portfolio">valere.dev/portfolio</a></p>
|
||||
<hr>
|
||||
<h2>💡 Compétences</h2>
|
||||
<ul>
|
||||
<li><strong>Front-end & CMS :</strong> Vue.js, Nuxt, React.js, HTML, CSS, JavaScript, WordPress, PrestaShop, WooCommerce, Divi, Elementor</li>
|
||||
<li><strong>Graphisme & UI :</strong> Photoshop, Illustrator, InDesign, XD, Tailwind, SCSS</li>
|
||||
<li><strong>SEO & marketing digital :</strong> Optimisation SEO, Google Ads, newsletters, intégration de chartes graphiques</li>
|
||||
<li><strong>Méthodes & outils :</strong> Git, GitLab, Jira, Agile/Scrum, tests E2E, CI/CD</li>
|
||||
<li><strong>Soft skills :</strong> Autonomie, créativité, sens du détail, communication et travail en équipe</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>🏢 Expériences</h2>
|
||||
<h3>2025 – Groupama | Développeur Vue.js</h3>
|
||||
<ul>
|
||||
<li>Développement d’applications Vue 3, optimisation UX et accessibilité</li>
|
||||
<li>Collaboration étroite avec les équipes métier et design</li>
|
||||
<li>Participation à la conception et aux tests fonctionnels</li>
|
||||
</ul>
|
||||
<h3>2024 – Fitarena | Développeur Vue.js / UI</h3>
|
||||
<ul>
|
||||
<li>Création d’un agenda interactif Vue 3 & Pinia</li>
|
||||
<li>Développement de composants UI sur-mesure et intégration front</li>
|
||||
</ul>
|
||||
<h3>2021–2023 – Potager City | Développeur Front</h3>
|
||||
<ul>
|
||||
<li>Développement et maintenance d’une application Vue 2 avec focus accessibilité</li>
|
||||
<li>Mise en place de tests E2E et optimisation SEO</li>
|
||||
<li>Développement d’éléments graphiques pour campagnes emailing</li>
|
||||
</ul>
|
||||
<h3>2020–2021 – MassiveMusic | Développeur Fullstack & Designer UI</h3>
|
||||
<ul>
|
||||
<li>Création d’un réseau social de streaming musical</li>
|
||||
<li>Intégration de composants Vue avec Atomic Design</li>
|
||||
<li>Design et prototypage d’interfaces utilisateur</li>
|
||||
</ul>
|
||||
<h3>2019 – Euronews | Intégrateur Front</h3>
|
||||
<ul>
|
||||
<li>Intégration SCSS normalisée (ITCSS) pour la V3 du site</li>
|
||||
</ul>
|
||||
<h3>2018 – Tyredating | Développeur Front</h3>
|
||||
<ul>
|
||||
<li>Création de composants Vue et intégration responsive</li>
|
||||
<li>Réalisation de maquettes et d’éléments graphiques</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>🎓 Diplômes</h2>
|
||||
<ul>
|
||||
<li>2011 – Licence Ingénierie de l’Internet</li>
|
||||
<li>2010 – BTS Communication et Industries Graphiques</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>🚀 Projets personnels</h2>
|
||||
<ul>
|
||||
<li>Développement de paquets npm et extensions Web</li>
|
||||
<li>Projets WordPress et PrestaShop pour clients et expérimentations personnelles</li>
|
||||
<li>Création de kits UI/UX pour applications web internes et prototypes interactifs</li>
|
||||
</ul>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
232
public/cv/html/cv-jalis.html
Normal file
232
public/cv/html/cv-jalis.html
Normal file
@@ -0,0 +1,232 @@
|
||||
<html><head>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Barlow:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&display=swap" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet">
|
||||
<style>
|
||||
/* Default styles */
|
||||
pre {
|
||||
background: #2d2d2d;
|
||||
border-radius: 4px;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
code {
|
||||
font-family: 'Fira Code', Consolas, Monaco, monospace;
|
||||
}
|
||||
/* Custom CSS */
|
||||
/* ====== Markdown PDF Pro Theme ====== */
|
||||
|
||||
@page {
|
||||
margin: 25mm 20mm;
|
||||
margin-top: 0mm;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
||||
font-size: 11pt;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
background: white;
|
||||
max-width: 800px;
|
||||
margin: auto;
|
||||
padding: 60px;
|
||||
}
|
||||
|
||||
/* Headings */
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-family: "Segoe UI Semibold", "Helvetica Neue", Arial, sans-serif;
|
||||
font-weight: 600;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 0.6em;
|
||||
line-height: 1.3;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 24pt;
|
||||
border-bottom: 2px solid #000;
|
||||
/* accent color */
|
||||
padding-bottom: 0.3em;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 18pt;
|
||||
border-left: 4px solid #000;
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 14pt;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-size: 12pt;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* Paragraphs */
|
||||
p {
|
||||
margin: 0.5em 0;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
/* Links */
|
||||
a {
|
||||
color: #1e7fce;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* Lists */
|
||||
ul,
|
||||
ol {
|
||||
margin: 0.5em 0 0.5em 2em;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 0.3em;
|
||||
}
|
||||
|
||||
/* Blockquote */
|
||||
blockquote {
|
||||
border-left: 4px solid #0078D7;
|
||||
margin: 1em 0;
|
||||
padding: 0.5em 1em;
|
||||
color: #555;
|
||||
background: #f9f9f9;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Code */
|
||||
code {
|
||||
font-family: "Fira Code", "Consolas", monospace;
|
||||
background: #f4f4f4;
|
||||
padding: 0.2em 0.4em;
|
||||
border-radius: 4px;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: #1e1e1e;
|
||||
color: #dcdcdc;
|
||||
padding: 1em;
|
||||
border-radius: 6px;
|
||||
overflow-x: auto;
|
||||
font-size: 0.9em;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
margin: 1em 0;
|
||||
width: 100%;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
border: 1px solid #ccc;
|
||||
padding: 0.6em 0.8em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
background: #f0f0f0;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
tr:nth-child(even) td {
|
||||
background: #fafafa;
|
||||
}
|
||||
|
||||
/* Horizontal rule */
|
||||
hr {
|
||||
border: none;
|
||||
border-top: 2px solid #eee;
|
||||
margin: 2em 0;
|
||||
}
|
||||
</style>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-python.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-javascript.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-bash.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-sql.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-go.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Valère BRON — Développeur Front-End & UX/UI</h1>
|
||||
<p>Marseille / Freelance • Vue.js / React.js • Interfaces web accessibles et performantes</p>
|
||||
<p>📞 06 81 84 77 37<br>
|
||||
📧 contact@valere.dev<br>
|
||||
🔗 <a href="https://www.linkedin.com/in/valere-bron/">LinkedIn</a><br>
|
||||
💻 <a href="https://github.com/valerebron">GitHub</a></p>
|
||||
<hr>
|
||||
<h2>Profil</h2>
|
||||
<p>Développeur front-end expérimenté avec 12 ans d’expérience, spécialisé dans la création d’interfaces web modernes, accessibles et performantes.<br>
|
||||
Passionné par l’expérience utilisateur, j’ai conçu des applications interactives et responsives, en intégrant des principes UX/UI et en travaillant étroitement avec les équipes design et produit.<br>
|
||||
Je souhaite évoluer vers le design d’interfaces et l’optimisation des parcours utilisateurs au sein d’une agence innovante.</p>
|
||||
<hr>
|
||||
<h2>Compétences</h2>
|
||||
<p><strong>UX/UI & Design :</strong> Wireframes, prototypes interactifs, parcours utilisateurs multi-devices, accessibilité (WCAG), tests A/B, design system</p>
|
||||
<p><strong>Front-End :</strong> Vue.js, React.js, TypeScript, JavaScript ES6+, HTML5, CSS3, Tailwind, SCSS, Storybook</p>
|
||||
<p><strong>Outils & logiciels :</strong> Figma, Adobe Suite (Photoshop, Illustrator, XD), Git, npm, Docker</p>
|
||||
<p><strong>Méthodologie :</strong> Agile (Scrum / Kanban), collaboration produit et design, veille technologique</p>
|
||||
<hr>
|
||||
<h2>Expériences professionnelles</h2>
|
||||
<h3>Développeur Front-End — Freelance</h3>
|
||||
<p><strong>ESN & clients grands comptes — Lyon & Marseille • 2013–2025</strong></p>
|
||||
<ul>
|
||||
<li>Développement d’interfaces interactives et responsives en Vue.js et React.js</li>
|
||||
<li>Intégration et maintenance de design systems pour simplifier le workflow design → dev</li>
|
||||
<li>Création de composants réutilisables et tests d’accessibilité</li>
|
||||
<li>Collaboration avec équipes UX/UI pour optimiser parcours utilisateurs et performances</li>
|
||||
<li>Mise en place de prototypes et validation de concepts avant production</li>
|
||||
</ul>
|
||||
<p><strong>Projets notables :</strong></p>
|
||||
<ul>
|
||||
<li>Web TV synchronisée et plateforme interactive pour événement culturel</li>
|
||||
<li>Applications SaaS et e-commerce avec intégration marketing et analytics</li>
|
||||
<li>Systèmes front back orchestrés via Docker et CI/CD pour livraison rapide</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>Projets personnels / démonstrateurs techniques</h2>
|
||||
<ul>
|
||||
<li>Kit front-end interactif avec Vue/React pour prototypage rapide</li>
|
||||
<li>Microservices Docker pour apps web expérimentales</li>
|
||||
<li>Web TV auto-hébergée et traitement d’images/vidéo en front et back</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>Formation</h2>
|
||||
<ul>
|
||||
<li>Licence Ingénierie de l’Internet (2011)</li>
|
||||
<li>Formation continue autodidacte en UX/UI, Figma, Adobe Suite</li>
|
||||
<li>Veille constante sur design web, accessibilité et bonnes pratiques front-end</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>Langues</h2>
|
||||
<ul>
|
||||
<li>Français : natif</li>
|
||||
<li>Anglais : professionnel (documentation technique, échanges dev/design)</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>Contact</h2>
|
||||
<p><strong>Valère BRON</strong><br>
|
||||
Disponible freelance / CDD<br>
|
||||
Malt • LinkedIn • valere.dev</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
244
public/cv/html/cv-otoremote.html
Normal file
244
public/cv/html/cv-otoremote.html
Normal file
@@ -0,0 +1,244 @@
|
||||
<html><head>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Barlow:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&display=swap" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet">
|
||||
<style>
|
||||
/* Default styles */
|
||||
pre {
|
||||
background: #2d2d2d;
|
||||
border-radius: 4px;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
code {
|
||||
font-family: 'Fira Code', Consolas, Monaco, monospace;
|
||||
}
|
||||
/* Custom CSS */
|
||||
/* ====== Markdown PDF Pro Theme ====== */
|
||||
|
||||
@page {
|
||||
margin: 25mm 20mm;
|
||||
margin-top: 0mm;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
||||
font-size: 11pt;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
background: white;
|
||||
max-width: 800px;
|
||||
margin: auto;
|
||||
padding: 60px;
|
||||
}
|
||||
|
||||
/* Headings */
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-family: "Segoe UI Semibold", "Helvetica Neue", Arial, sans-serif;
|
||||
font-weight: 600;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 0.6em;
|
||||
line-height: 1.3;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 24pt;
|
||||
border-bottom: 2px solid #000;
|
||||
/* accent color */
|
||||
padding-bottom: 0.3em;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 18pt;
|
||||
border-left: 4px solid #000;
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 14pt;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-size: 12pt;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* Paragraphs */
|
||||
p {
|
||||
margin: 0.5em 0;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
/* Links */
|
||||
a {
|
||||
color: #1e7fce;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* Lists */
|
||||
ul,
|
||||
ol {
|
||||
margin: 0.5em 0 0.5em 2em;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 0.3em;
|
||||
}
|
||||
|
||||
/* Blockquote */
|
||||
blockquote {
|
||||
border-left: 4px solid #0078D7;
|
||||
margin: 1em 0;
|
||||
padding: 0.5em 1em;
|
||||
color: #555;
|
||||
background: #f9f9f9;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Code */
|
||||
code {
|
||||
font-family: "Fira Code", "Consolas", monospace;
|
||||
background: #f4f4f4;
|
||||
padding: 0.2em 0.4em;
|
||||
border-radius: 4px;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: #1e1e1e;
|
||||
color: #dcdcdc;
|
||||
padding: 1em;
|
||||
border-radius: 6px;
|
||||
overflow-x: auto;
|
||||
font-size: 0.9em;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
margin: 1em 0;
|
||||
width: 100%;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
border: 1px solid #ccc;
|
||||
padding: 0.6em 0.8em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
background: #f0f0f0;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
tr:nth-child(even) td {
|
||||
background: #fafafa;
|
||||
}
|
||||
|
||||
/* Horizontal rule */
|
||||
hr {
|
||||
border: none;
|
||||
border-top: 2px solid #eee;
|
||||
margin: 2em 0;
|
||||
}
|
||||
</style>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-python.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-javascript.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-bash.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-sql.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-go.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<hr>
|
||||
<h2>title: “Valère BRON — Développeur Front-End / TypeScript orienté Full-Stack”
|
||||
author: “Valère BRON”
|
||||
geometry: margin=2cm
|
||||
fontsize: 11pt</h2>
|
||||
<h1>Valère BRON</h1>
|
||||
<p><strong>Développeur Front-End / TypeScript orienté Full-Stack</strong><br>
|
||||
Marseille • Freelance • Vue.js / TypeScript / NestJS • Intérêt pour la santé numérique</p>
|
||||
<p>📞 06 81 84 77 37<br>
|
||||
📧 contact@valere.dev<br>
|
||||
🔗 <a href="https://www.linkedin.com/in/valere-bron/">LinkedIn</a><br>
|
||||
💻 <a href="https://github.com/valerebron">GitHub</a></p>
|
||||
<hr>
|
||||
<h2>Profil</h2>
|
||||
<p>Développeur front-end depuis 12 ans, spécialisé dans la construction d’interfaces web modernes, accessibles et performantes.<br>
|
||||
Je me positionne aujourd’hui comme <strong>Front-End avancé</strong> avec montée en compétences sur <strong>NestJS, PostgreSQL et GraphQL</strong>.<br>
|
||||
Attiré par les applications à impact (santé, culture, sciences) et les environnements agiles où l’on collabore directement avec les équipes produit et techniques.</p>
|
||||
<hr>
|
||||
<h2>Compétences</h2>
|
||||
<p><strong>Front-End :</strong> Vue.js / Nuxt 3, TypeScript, HTML5, CSS3, Tailwind, Accessibilité (WCAG), State management (Pinia, VueUse), Tests (Vitest, Vue Test Utils)</p>
|
||||
<p><strong>Full-Stack (en progression) :</strong> NestJS, Node.js, PostgreSQL, Prisma, REST / GraphQL, Auth, services, architecture modulaire</p>
|
||||
<p><strong>DevOps & outils :</strong> Docker / docker-web, GitLab (Git Flow), CI/CD, Gitea, Linux</p>
|
||||
<p><strong>Méthodologie & UX :</strong> Collaboration produit / UX, culture data, documentation technique, environnement Agile</p>
|
||||
<hr>
|
||||
<h2>Expériences professionnelles</h2>
|
||||
<h3>Développeur Front-End — Freelance</h3>
|
||||
<p><strong>ESN & clients grands comptes — Lyon & Marseille • 2013–2025</strong></p>
|
||||
<ul>
|
||||
<li>Intégration d’interfaces complexes et responsives</li>
|
||||
<li>Composants UI sur-mesure en Vue.js / TypeScript</li>
|
||||
<li>Optimisation performance front et audit accessibilité</li>
|
||||
<li>Mise en place d’outils internes (design systems, librairies front)</li>
|
||||
<li>Contribution ponctuelle à des API en Node/NestJS</li>
|
||||
<li>Industrialisation via Docker, CI/CD, automatisations</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>Projets personnels / démonstrateurs techniques</h2>
|
||||
<ul>
|
||||
<li><strong>PushToRecord (Android – Kotlin)</strong> : App en arrière-plan pour enregistrement audio → flux asynchrone, permissions, architecture modulaire</li>
|
||||
<li><strong>Web TV auto-hébergée</strong> : Player synchronisé, génération dynamique de flux HLS → intégration front + backend, orchestration Docker</li>
|
||||
<li><strong>Outil de superposition vidéo</strong> : Extraction de frames, fusion, rendu via interface web → API simples, traitement d’image, micro-services Docker</li>
|
||||
<li><strong>docker-web</strong> : CLI d’orchestration Docker pour apps web → gestion images, automatisation, scripts Bash</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>Formation</h2>
|
||||
<ul>
|
||||
<li>Autodidacte avancé • 12 ans d’expérience front, montée full-stack</li>
|
||||
<li>Veille continue sur NestJS, PostgreSQL, GraphQL, perf front, UX</li>
|
||||
<li>Ateliers OpenClassrooms / Udemy : NestJS & Prisma (2024-2025)</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>Valeur ajoutée pour OTOREMOTE</h2>
|
||||
<ul>
|
||||
<li>Forte expérience interface/utilisation</li>
|
||||
<li>Culture UX/UI et accessibilité</li>
|
||||
<li>Capacité front immédiate</li>
|
||||
<li>Montée en compétence NestJS déjà entamée</li>
|
||||
<li>Travail propre, documenté, orienté qualité</li>
|
||||
<li>Appétence forte pour projets à impact humain</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>Langues</h2>
|
||||
<ul>
|
||||
<li>Français : natif</li>
|
||||
<li>Anglais : technique courant (documentation, échanges dev)</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>Contact</h2>
|
||||
<p><strong>Valère BRON</strong><br>
|
||||
Marseille / Lyon — disponible en freelance et CDD<br>
|
||||
Malt • LinkedIn • valere.dev</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
189
public/cv/html/motivatiob-jalis.html
Normal file
189
public/cv/html/motivatiob-jalis.html
Normal file
@@ -0,0 +1,189 @@
|
||||
<html><head>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Barlow:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&display=swap" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet">
|
||||
<style>
|
||||
/* Default styles */
|
||||
pre {
|
||||
background: #2d2d2d;
|
||||
border-radius: 4px;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
code {
|
||||
font-family: 'Fira Code', Consolas, Monaco, monospace;
|
||||
}
|
||||
/* Custom CSS */
|
||||
/* ====== Markdown PDF Pro Theme ====== */
|
||||
|
||||
@page {
|
||||
margin: 25mm 20mm;
|
||||
margin-top: 0mm;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
||||
font-size: 11pt;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
background: white;
|
||||
max-width: 800px;
|
||||
margin: auto;
|
||||
padding: 60px;
|
||||
}
|
||||
|
||||
/* Headings */
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-family: "Segoe UI Semibold", "Helvetica Neue", Arial, sans-serif;
|
||||
font-weight: 600;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 0.6em;
|
||||
line-height: 1.3;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 24pt;
|
||||
border-bottom: 2px solid #000;
|
||||
/* accent color */
|
||||
padding-bottom: 0.3em;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 18pt;
|
||||
border-left: 4px solid #000;
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 14pt;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-size: 12pt;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* Paragraphs */
|
||||
p {
|
||||
margin: 0.5em 0;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
/* Links */
|
||||
a {
|
||||
color: #1e7fce;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* Lists */
|
||||
ul,
|
||||
ol {
|
||||
margin: 0.5em 0 0.5em 2em;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 0.3em;
|
||||
}
|
||||
|
||||
/* Blockquote */
|
||||
blockquote {
|
||||
border-left: 4px solid #0078D7;
|
||||
margin: 1em 0;
|
||||
padding: 0.5em 1em;
|
||||
color: #555;
|
||||
background: #f9f9f9;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Code */
|
||||
code {
|
||||
font-family: "Fira Code", "Consolas", monospace;
|
||||
background: #f4f4f4;
|
||||
padding: 0.2em 0.4em;
|
||||
border-radius: 4px;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: #1e1e1e;
|
||||
color: #dcdcdc;
|
||||
padding: 1em;
|
||||
border-radius: 6px;
|
||||
overflow-x: auto;
|
||||
font-size: 0.9em;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
margin: 1em 0;
|
||||
width: 100%;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
border: 1px solid #ccc;
|
||||
padding: 0.6em 0.8em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
background: #f0f0f0;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
tr:nth-child(even) td {
|
||||
background: #fafafa;
|
||||
}
|
||||
|
||||
/* Horizontal rule */
|
||||
hr {
|
||||
border: none;
|
||||
border-top: 2px solid #eee;
|
||||
margin: 2em 0;
|
||||
}
|
||||
</style>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-python.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-javascript.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-bash.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-sql.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-go.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p>Valère BRON
|
||||
Marseille
|
||||
📧 contact@valere.dev</p>
|
||||
<p>📞 06 81 84 77 37</p>
|
||||
<hr>
|
||||
<p>À l’attention du service recrutement JALIS
|
||||
Objet : Candidature au poste de Designer UX/UI Senior</p>
|
||||
<hr>
|
||||
<p>Madame, Monsieur,</p>
|
||||
<p>Développeur front-end depuis plus de 12 ans, j’ai acquis une solide expérience dans la conception et l’intégration d’interfaces web performantes, accessibles et centrées sur l’expérience utilisateur. Travaillant étroitement avec des équipes design et produit, j’ai toujours eu à cœur de transformer des concepts en parcours utilisateurs clairs et engageants, tout en veillant à la maintenabilité et la qualité du code.</p>
|
||||
<p>Passionné par l’UX/UI et le design interactif, j’ai développé des prototypes et des interfaces pour des applications web, des plateformes SaaS et des projets culturels, en intégrant les principes d’accessibilité et en optimisant l’expérience multi-devices. Ma maîtrise de Vue.js, React.js, HTML, CSS et Tailwind me permet de traduire les concepts graphiques en interfaces fonctionnelles et réactives, en collaboration avec les designers et les équipes produit.</p>
|
||||
<p>Rigoureux, curieux et force de proposition, je souhaite aujourd’hui évoluer vers un rôle de Designer UX/UI, afin de mettre pleinement mon expertise front et mon sens du design au service de projets innovants. Rejoindre JALIS serait pour moi l’opportunité de contribuer à la création d’interfaces modernes et performantes pour une agence reconnue pour son excellence et son innovation, tout en collaborant avec une équipe pluridisciplinaire passionnée.</p>
|
||||
<p>Je serais ravi de pouvoir échanger avec vous pour détailler mes compétences et la valeur que je peux apporter à vos projets.</p>
|
||||
<p>Je vous remercie pour votre attention et reste à votre disposition pour un entretien.</p>
|
||||
<p>Cordialement,
|
||||
Valère BRON</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
187
public/cv/html/motivation-comymedia.html
Normal file
187
public/cv/html/motivation-comymedia.html
Normal file
@@ -0,0 +1,187 @@
|
||||
<html><head>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Barlow:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&display=swap" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet">
|
||||
<style>
|
||||
/* Default styles */
|
||||
pre {
|
||||
background: #2d2d2d;
|
||||
border-radius: 4px;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
code {
|
||||
font-family: 'Fira Code', Consolas, Monaco, monospace;
|
||||
}
|
||||
/* Custom CSS */
|
||||
/* ====== Markdown PDF Pro Theme ====== */
|
||||
|
||||
@page {
|
||||
margin: 25mm 20mm;
|
||||
margin-top: 0mm;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
||||
font-size: 11pt;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
background: white;
|
||||
max-width: 800px;
|
||||
margin: auto;
|
||||
padding: 60px;
|
||||
}
|
||||
|
||||
/* Headings */
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-family: "Segoe UI Semibold", "Helvetica Neue", Arial, sans-serif;
|
||||
font-weight: 600;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 0.6em;
|
||||
line-height: 1.3;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 24pt;
|
||||
border-bottom: 2px solid #000;
|
||||
/* accent color */
|
||||
padding-bottom: 0.3em;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 18pt;
|
||||
border-left: 4px solid #000;
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 14pt;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-size: 12pt;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* Paragraphs */
|
||||
p {
|
||||
margin: 0.5em 0;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
/* Links */
|
||||
a {
|
||||
color: #1e7fce;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* Lists */
|
||||
ul,
|
||||
ol {
|
||||
margin: 0.5em 0 0.5em 2em;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 0.3em;
|
||||
}
|
||||
|
||||
/* Blockquote */
|
||||
blockquote {
|
||||
border-left: 4px solid #0078D7;
|
||||
margin: 1em 0;
|
||||
padding: 0.5em 1em;
|
||||
color: #555;
|
||||
background: #f9f9f9;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Code */
|
||||
code {
|
||||
font-family: "Fira Code", "Consolas", monospace;
|
||||
background: #f4f4f4;
|
||||
padding: 0.2em 0.4em;
|
||||
border-radius: 4px;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: #1e1e1e;
|
||||
color: #dcdcdc;
|
||||
padding: 1em;
|
||||
border-radius: 6px;
|
||||
overflow-x: auto;
|
||||
font-size: 0.9em;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
margin: 1em 0;
|
||||
width: 100%;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
border: 1px solid #ccc;
|
||||
padding: 0.6em 0.8em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
background: #f0f0f0;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
tr:nth-child(even) td {
|
||||
background: #fafafa;
|
||||
}
|
||||
|
||||
/* Horizontal rule */
|
||||
hr {
|
||||
border: none;
|
||||
border-top: 2px solid #eee;
|
||||
margin: 2em 0;
|
||||
}
|
||||
</style>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-python.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-javascript.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-bash.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-sql.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-go.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Lettre de motivation – Valère BRON</h1>
|
||||
<p><strong>Objet : Candidature au poste de Webdesigner / Développeur Front – Lyon</strong></p>
|
||||
<p>Madame, Monsieur,</p>
|
||||
<p>Fort de plus de 12 ans d’expérience en développement front-end et intégration d’interfaces web, je souhaite mettre mes compétences au service de votre agence afin de contribuer à la création et à la maintenance de sites internet performants et esthétiques pour vos clients.</p>
|
||||
<p>Passionné par l’expérience utilisateur, je combine expertise technique et sens du design pour transformer les concepts graphiques en interfaces fonctionnelles et accessibles. Mon parcours m’a permis de travailler sur des projets variés, du développement d’applications Vue.js et Nuxt à l’intégration de sites WordPress et PrestaShop, en passant par la réalisation de newsletters et l’optimisation SEO.</p>
|
||||
<p>Mon profil polyvalent me permet de gérer à la fois le design, l’intégration et la maintenance technique, tout en restant force de proposition sur l’ergonomie, l’accessibilité et la performance. Je maîtrise les outils de création graphique tels que Photoshop, Illustrator, InDesign et XD, et je sais les mettre en pratique dans le cadre de projets web complexes.</p>
|
||||
<p>Intégrer votre agence représente pour moi l’opportunité de contribuer à des projets ambitieux dans un environnement créatif et collaboratif, tout en continuant à enrichir mes compétences et à relever de nouveaux challenges techniques et graphiques.</p>
|
||||
<p>Je serais ravi de pouvoir vous présenter mon portfolio et discuter de la manière dont je pourrais apporter ma valeur ajoutée à votre équipe.</p>
|
||||
<p>Je vous remercie par avance pour l’attention portée à ma candidature et reste à votre disposition pour un entretien.</p>
|
||||
<p>Cordialement,<br>
|
||||
<strong>Valère BRON</strong><br>
|
||||
📞 06 81 84 77 37<br>
|
||||
📧 contact@valere.dev<br>
|
||||
🔗 <a href="https://valere.dev/portfolio">Portfolio</a></p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
27
public/cv/motivatiob-jalis.md
Normal file
27
public/cv/motivatiob-jalis.md
Normal file
@@ -0,0 +1,27 @@
|
||||
Valère BRON
|
||||
Marseille
|
||||
📧 contact@valere.dev
|
||||
|
||||
📞 06 81 84 77 37
|
||||
|
||||
---
|
||||
|
||||
À l’attention du service recrutement JALIS
|
||||
Objet : Candidature au poste de Designer UX/UI Senior
|
||||
|
||||
---
|
||||
|
||||
Madame, Monsieur,
|
||||
|
||||
Développeur front-end depuis plus de 12 ans, j’ai acquis une solide expérience dans la conception et l’intégration d’interfaces web performantes, accessibles et centrées sur l’expérience utilisateur. Travaillant étroitement avec des équipes design et produit, j’ai toujours eu à cœur de transformer des concepts en parcours utilisateurs clairs et engageants, tout en veillant à la maintenabilité et la qualité du code.
|
||||
|
||||
Passionné par l’UX/UI et le design interactif, j’ai développé des prototypes et des interfaces pour des applications web, des plateformes SaaS et des projets culturels, en intégrant les principes d’accessibilité et en optimisant l’expérience multi-devices. Ma maîtrise de Vue.js, React.js, HTML, CSS et Tailwind me permet de traduire les concepts graphiques en interfaces fonctionnelles et réactives, en collaboration avec les designers et les équipes produit.
|
||||
|
||||
Rigoureux, curieux et force de proposition, je souhaite aujourd’hui évoluer vers un rôle de Designer UX/UI, afin de mettre pleinement mon expertise front et mon sens du design au service de projets innovants. Rejoindre JALIS serait pour moi l’opportunité de contribuer à la création d’interfaces modernes et performantes pour une agence reconnue pour son excellence et son innovation, tout en collaborant avec une équipe pluridisciplinaire passionnée.
|
||||
|
||||
Je serais ravi de pouvoir échanger avec vous pour détailler mes compétences et la valeur que je peux apporter à vos projets.
|
||||
|
||||
Je vous remercie pour votre attention et reste à votre disposition pour un entretien.
|
||||
|
||||
Cordialement,
|
||||
Valère BRON
|
||||
23
public/cv/motivation-comymedia.md
Normal file
23
public/cv/motivation-comymedia.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# Lettre de motivation – Valère BRON
|
||||
|
||||
**Objet : Candidature au poste de Webdesigner / Développeur Front – Lyon**
|
||||
|
||||
Madame, Monsieur,
|
||||
|
||||
Fort de plus de 12 ans d’expérience en développement front-end et intégration d’interfaces web, je souhaite mettre mes compétences au service de votre agence afin de contribuer à la création et à la maintenance de sites internet performants et esthétiques pour vos clients.
|
||||
|
||||
Passionné par l’expérience utilisateur, je combine expertise technique et sens du design pour transformer les concepts graphiques en interfaces fonctionnelles et accessibles. Mon parcours m’a permis de travailler sur des projets variés, du développement d’applications Vue.js et Nuxt à l’intégration de sites WordPress et PrestaShop, en passant par la réalisation de newsletters et l’optimisation SEO.
|
||||
|
||||
Mon profil polyvalent me permet de gérer à la fois le design, l’intégration et la maintenance technique, tout en restant force de proposition sur l’ergonomie, l’accessibilité et la performance. Je maîtrise les outils de création graphique tels que Photoshop, Illustrator, InDesign et XD, et je sais les mettre en pratique dans le cadre de projets web complexes.
|
||||
|
||||
Intégrer votre agence représente pour moi l’opportunité de contribuer à des projets ambitieux dans un environnement créatif et collaboratif, tout en continuant à enrichir mes compétences et à relever de nouveaux challenges techniques et graphiques.
|
||||
|
||||
Je serais ravi de pouvoir vous présenter mon portfolio et discuter de la manière dont je pourrais apporter ma valeur ajoutée à votre équipe.
|
||||
|
||||
Je vous remercie par avance pour l’attention portée à ma candidature et reste à votre disposition pour un entretien.
|
||||
|
||||
Cordialement,
|
||||
**Valère BRON**
|
||||
📞 06 81 84 77 37
|
||||
📧 contact@valere.dev
|
||||
🔗 [Portfolio](https://valere.dev/portfolio)
|
||||
BIN
public/cv/pdf/cv-comymedia.pdf
Normal file
BIN
public/cv/pdf/cv-comymedia.pdf
Normal file
Binary file not shown.
BIN
public/cv/pdf/cv-jalis.pdf
Normal file
BIN
public/cv/pdf/cv-jalis.pdf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
public/cv/pdf/cv-otoremote.pdf
Normal file
BIN
public/cv/pdf/cv-otoremote.pdf
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user