Compare commits

..

43 Commits

Author SHA1 Message Date
2ad98610d2 Added LSP github chat for posterity 2025-05-02 16:18:21 -05:00
a3facfff8a Added buildbot script for managing it; fix in chroot manager 2025-02-15 16:24:12 -06:00
8de790d359 Write vm image added; tls-info python script added 2025-01-31 23:31:26 -06:00
ad5e17b2a6 Updating notes 2024-12-22 01:04:28 -06:00
efd7c9c8cd Updaed zed theme 2024-07-26 18:48:14 -05:00
f8e478ec01 Added zed editor theme 2024-07-12 02:34:03 -05:00
73e989d33c chroot-manager: fixing cpp install issues 2024-07-06 22:45:06 -05:00
f4bb73c858 chroot-manager: fixing machinectl not killing/stopping machines properly 2024-07-06 21:11:09 -05:00
ca0980c416 chroot-manager: X PORT selection added 2024-07-06 19:57:52 -05:00
47f3df35d7 chroot-manager: 7z Extractor of squshed fs 2024-07-06 19:24:52 -05:00
1167efacf8 Moved JS to HTML + JS 2024-07-04 08:42:27 -05:00
5cf8e6bd9d chroot-manager: refactoring and consolidation of methods; added lua dev option 2024-06-22 21:28:13 -05:00
6e256dcb59 chroot-manager: passing machine ids, added more base packages; added x11 port 2024-06-22 17:11:52 -05:00
2cefc6c953 chroot-manager: More cpp packages; arch-chroot loader; xephyer pid handling 2024-06-18 21:34:43 -05:00
a143a5ab56 chroot-manager: epandeed cpp app selection installs; added more gtk apps installs 2024-06-09 01:23:01 -05:00
2570631055 chroot-manager: addedc defaulting menu on script run; added premake to cpp; dev password setup as variable 2024-06-08 17:59:04 -05:00
563676f852 chroot-manager: wrapped calls in binds; cleanup; clarification 2024-06-08 02:11:53 -05:00
d928144567 refactored chroot-manager for readability 2024-06-08 01:25:19 -05:00
3a29063e66 externalized brew install to commands 2024-06-07 22:18:28 -05:00
d2fc7add52 added additional install commands 2024-06-07 02:00:55 -05:00
b5a5d43e3f added systemd chroot kill and poweroff commands; cleanup 2024-06-06 01:15:16 -05:00
ac5d8d598f added help command; added systemd-nspawn command; updated chroot folder creation logic, etc 2024-06-05 23:37:36 -05:00
604b2aa2d8 added chroot manager script; updated notes 2024-05-17 21:22:43 -05:00
a011f31b48 Added PDFs for python search engine, emails, blender paralax mapping 2024-03-15 18:24:20 -05:00
fe8bed112c Added project run info 2024-01-22 21:22:41 -06:00
2bb184b045 Renamed prior commits file 2024-01-22 21:07:20 -06:00
7b811b6ddf Added chroot development environment How-To 2024-01-22 21:03:58 -06:00
1f97599eb3 Added scripts and examples 2023-12-31 16:40:50 -06:00
e1305db4e7 Updaterd backup script; added python script 2023-12-17 22:34:16 -06:00
6828727acc added slideshare dl script; added anime styleing for games slides 2023-09-07 19:54:31 -05:00
4f25c15bb2 Added Gestures info 2023-01-25 00:08:49 -06:00
9148643d4b Updated Python scripts 2022-02-16 01:55:09 -06:00
07054947d7 shell cleanup/reordering 2022-02-15 17:22:58 -06:00
49657509d6 Updated backup script 2021-11-15 01:12:14 -06:00
4dc79d7d34 Change name 2021-10-21 22:12:42 -05:00
27690691da Updated notes 2021-10-21 22:10:23 -05:00
598c60045a Added 2 scripts; 1 notes 2021-10-02 19:31:13 -05:00
72947360ea Updated title 2021-07-23 21:58:00 -05:00
ab7da95848 added website downloader script 2021-05-27 18:54:02 -05:00
39ba84720c Replaced most script name from _ to - 2021-05-27 18:51:57 -05:00
34741c5b59 conf update 2021-05-18 18:40:52 -05:00
f7852b7fb5 Added conf example 2021-05-16 03:34:01 -05:00
222d5a0c67 updated readme file 2021-04-09 02:16:34 -05:00
292 changed files with 6322 additions and 1686 deletions

View File

@@ -1,6 +1,15 @@
# Atom-Plugins-and-Snippets # Atom-Plugins-and-Snippets
My current packages 'n themes plus my personal Atom snippets for, HTML, CSS, JS, PHP, Shell Scripts, etc. My current packages 'n themes plus my personal Atom snippets for, HTML, CSS, JS, PHP, Shell Scripts, etc.
### Auto completion setup
For your python environment run:
<br/>
<code>
python -m pip install jedi 'python-language-server[all]'
</code>
For Atom, install this package: https://atom.io/packages/autocomplete-python
### To Find Or Install The Snippets ### To Find Or Install The Snippets
Look in "${HOME}"/.atom/snippets.cson Look in "${HOME}"/.atom/snippets.cson

View File

@@ -0,0 +1,38 @@
#fix gamepad/joystick
#ifyoo - /dev/input/by-id/usb-SHANWAN_Controller-event-joystick
#install needed python libs
# sudo apt install python3-usb
# OR
# python -m pip install pyusb==1.2.1
#get fix script
#https://gist.github.com/dnmodder/de2df973323b7c6acf45f40dc66e8db3
wget "https://gist.githubusercontent.com/dnmodder/de2df973323b7c6acf45f40dc66e8db3/raw/693b848098dfc5f0fd03bdcdd9162fde3f2fb482/fixcontroller.py"
chmod +x fixcontroller.py
#you will need to run this every time you plug the controller in
sudo ./fixcontroller.py
#test the controller
sudo cat /dev/input/js0
###############################3
#!/usr/bin/env python3
import usb.core
dev = usb.core.find(idVendor=0x045e, idProduct=0x028e)
if dev is None:
raise ValueError('Device not found')
else:
dev.ctrl_transfer(0xc1, 0x01, 0x0100, 0x00, 0x14)
##############################3

View File

@@ -0,0 +1,11 @@
#!/usr/bin/env python3
import usb.core
dev = usb.core.find(idVendor=0x045e, idProduct=0x028e)
if dev is None:
raise ValueError('Device not found')
else:
dev.ctrl_transfer(0xc1, 0x01, 0x0100, 0x00, 0x14)

View File

@@ -0,0 +1,30 @@
// Run in console of www.slideshare.net then bash download.sh
download = (data, filename, type) => {
file = new Blob([data], {type: type});
if (window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(file, filename);
} else {
a = document.createElement("a"),
url = URL.createObjectURL(file);
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
setTimeout(function() {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 0);
}
}
data = "";
imgs = document.getElementsByClassName("SlideImage_picture__Xlef_");
for (let i = 0; i < imgs.length; i++) {
data += "\nwget" + "'" + imgs[i].firstChild.srcset.split(",")[2].replace(" 2048w", "") + "'";
}
console.log(data);
download(data, "download.sh", "text");

View File

@@ -0,0 +1,507 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<!-- <link rel="shortcut icon" href="fave_icon.png"> -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<style media="screen">
body {
overflow: hidden;
background-color: rgba(44, 44, 44, 1.0);
}
h3 {
color: #FFFFFF64;
}
ul, li {
list-style: none;
}
#draw-area,
#draw-area-preview {
border-spacing: 0px;
aspect-ratio: 4/3;
}
#draw-area {
width: 100%;
}
#draw-area > tbody > tr > td {
border: 1px solid rgba(64, 64, 64, 1.0);
border-collapse: collapse;
}
#draw-area-preview {
border: 1px solid rgba(88, 88, 88, 1.0);
}
#palette-list {
height: 40vh;
overflow: auto;
}
.selected-color {
border: 2px solid rgb(0, 232, 255);
}
</style>
</head>
<body>
<div class="container-fluid m-3">
<div class="row">
<div class="col">
<div class="row vh-50 mt-3">
<div id="previewScrollDetector" class="col">
<table id="draw-area-preview" class="mx-auto" style="height: 25vh;" ondragstart="return false;" ondrop="return false;">
<tbody id="draw-area-preview-body"></tbody>
</table>
</div>
</div>
</div>
<div class="col">
<div class="row">
<div class="col text-center">
<button id="h-mirror" type="button" class="btn btn-secondary">H-Mirror</button>
<button id="v-mirror" type="button" class="btn btn-secondary">V-Mirror</button>
<button id="bucket-fill" type="button" class="btn btn-secondary">Bucket</button>
<button id="eraser" type="button" class="btn btn-secondary">Erase</button>
<button id="save" type="button" class="btn btn-secondary">Save</button>
</div>
</div>
<div class="row mt-3">
<div class="col vh-100">
<table id="draw-area" class="vh-50" ondragstart="return false;" ondrop="return false;">
<tbody id="draw-area-body"></tbody>
</table>
</div>
</div>
<div class="row">
<div class="col">
<!-- Add animation tracks here -->
</div>
</div>
</div>
<div class="col">
<div class="row">
<div class="col">
<h3>Color Palette</h3>
<input type="file" id="colorPaletteFile" class="btn btn-dark" name="colorPaletteFile"/>
<div id="palette-list" class="row mt-3 mb-3">
</div>
</div>
<div class="col">
<input id="color" type="color">
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<script type="text/javascript">
const drawArea = document.getElementById("draw-area");
const drawPreview = document.getElementById("draw-area-preview");
const colrPalFile = document.getElementById("colorPaletteFile");
const prevScroll = document.getElementById("previewScrollDetector");
const palette = document.getElementById("palette-list");
const tbody = document.querySelector('#draw-area tbody');
const pTbody = document.querySelector('#draw-area-preview tbody');
const hmirror = document.getElementById("h-mirror");
const vmirror = document.getElementById("v-mirror");
const bucketFill = document.getElementById("bucket-fill");
const eraser = document.getElementById("eraser");
const save = document.getElementById("save");
const isLogging = false;
let isHMirror = false;
let isVMirror = false;
let isBucketFill = false;
let isErasing = false;
const update_pixel = (cell = null, isEraseCall = false) => {
const color = document.getElementById("color");
const colorStyle = (!isErasing && !isEraseCall) ? "background-color: " + color.value : "";
const row = cell.parentElement;
const pCell = drawPreview.rows[row.rowIndex].cells[cell.cellIndex];
const hRowIndex = drawArea.rows.length - row.rowIndex - 1;
const vRowIndex = drawArea.rows[row.rowIndex].cells.length - cell.cellIndex - 1;
const vhRowIndex = drawArea.rows[hRowIndex].cells.length - cell.cellIndex - 1;
const hCell = drawArea.rows[hRowIndex].cells[cell.cellIndex];
const pHCell = drawPreview.rows[hRowIndex].cells[cell.cellIndex];
const vCell = drawArea.rows[row.rowIndex].cells[vRowIndex];
const pVCell = drawPreview.rows[row.rowIndex].cells[vRowIndex];
const vhCell = drawArea.rows[hRowIndex].cells[vRowIndex];
const pVHCell = drawPreview.rows[hRowIndex].cells[vhRowIndex];
let cellCollection = [];
cellCollection.push(cell);
cellCollection.push(pCell);
if (isHMirror) {
cellCollection.push(hCell);
cellCollection.push(pHCell);
}
if (isVMirror) {
cellCollection.push(vCell);
cellCollection.push(pVCell);
}
if (isHMirror && isVMirror) {
cellCollection.push(vhCell);
cellCollection.push(pVHCell);
}
set_pixel_color(cellCollection, colorStyle);
if (isLogging) {
console.log(cell.innerHTML, row.rowIndex, cell.cellIndex);
}
}
const set_pixel_color = (cellCollection = [], colorStyle = "") => {
for (var i = 0; i < cellCollection.length; i++) {
cellCollection[i].style = colorStyle;
}
}
const fill_action = (cell = null) => {
if (!cell) { return; }
const color = document.getElementById("color");
const colorVal = (isBucketFill && !isErasing) ? "background-color: " + color.value : "";
for (let i = 0; i < drawPreview.rows.length; i++) {
let row = drawArea.rows[i];
let row2 = drawPreview.rows[i];
for (let j = 0; j < drawPreview.rows[0].cells.length; j++) {
row.cells[j].style = colorVal;
row2.cells[j].style = colorVal;
}
}
}
const load_pixel_grid = (rowi = 32, coli = 32) => {
for (let i = 0; i < rowi; i++) {
let row = drawArea.insertRow(-1);
let row2 = drawPreview.insertRow(-1);
for (let j = 0; j < coli; j++) {
row.insertCell(-1);
row2.insertCell(-1);
}
}
}
const toggle_button = (elm = null, isTrue = false) => {
if (!elm) { return; }
if (isTrue) {
elm.classList.remove("btn-secondary");
elm.classList.add("btn-primary");
} else {
elm.classList.remove("btn-primary");
elm.classList.add("btn-secondary");
}
}
const save_image = () => {
const rowi = drawPreview.rows.length;
const coli = drawPreview.rows[0].cells.length;
let imageData = new ImageData(coli, rowi);
let colors = [];
for (let i = 0; i < drawPreview.rows.length; i++) {
let row = drawPreview.rows[i];
for (let j = 0; j < row.cells.length; j++) {
let style = row.cells[j].style;
let colorVal = style["background-color"].replace("rgb", "")
.replace("(", "")
.replace(")", "")
.split(",");
let l = row.cells.length * i + j
let rgba = []
for (let k = 0; k < colorVal.length; k++) {
try {
rgba.push( parseInt(colorVal[k], 10) );
} catch (e) {
rgba.push(null);
}
}
const isTransparent = (rgba.length == 3 && rgba == [null, null, null])
rgba.push( isTransparent ? null : 255 );
colors.push(rgba);
}
}
let k = 0;
for (let i = 0; i < imageData.data.length; i+=4) {
imageData.data[i + 0] = (colors[k][0] == null) ? 0 : colors[k][0]; // R value
imageData.data[i + 1] = (colors[k][1] == null) ? 0 : colors[k][1]; // G value
imageData.data[i + 2] = (colors[k][2] == null) ? 0 : colors[k][2]; // B value
imageData.data[i + 3] = (colors[k][3] == null) ? 0 : colors[k][3]; // A value
k += 1;
}
return imageData;
}
const imagedata_to_uri = (imageData = null) => {
if (!imageData) { return; }
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = imageData.width;
canvas.height = imageData.height;
ctx.putImageData(imageData, 0, 0);
return canvas.toDataURL();
}
const download_uri = (uri = null, name = "pixilate_image.png") => {
if (!uri) { return; }
const link = document.createElement("a");
link.download = name;
link.href = uri;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
delete link;
}
const load_from_data_url = (dataUrl = null) => {
if (!dataUrl) { return; }
let image = new Image();
image.onload = (data) => {
let canvas = document.createElement('canvas');
let context = canvas.getContext('2d');
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0 );
const imageData = context.getImageData(0, 0, image.width, image.height).data;
delete canvas;
clearChildNodes(palette);
let colors = {};
for (let i = 0; i < imageData.length; i+=4) {
let red = imageData[i + 0];
let green = imageData[i + 1];
let blue = imageData[i + 2];
let alpha = imageData[i + 3];
let key = `rgba(${red}, ${green}, ${blue}, ${alpha})`;
if (colors[key]) { continue; }
colors[key] = [red, green, blue, alpha];
}
let keys = Object.keys(colors);
for (let i = 0; i < keys.length; i++) {
let liElm = document.createElement("LI");
let color = keys[i];
liElm.style = `background-color: ${color}; width: 32px; height: 32px`;
liElm.class = "col";
palette.appendChild(liElm);
}
};
image.src = dataUrl;
}
const decode_array_buffer = async (buffer = null) => {
if (!buffer) { return; }
let mime;
let a = new Uint8Array(buffer);
let nb = a.length;
if (nb < 4) { return null; }
let b0 = a[0];
let b1 = a[1];
let b2 = a[2];
let b3 = a[3];
if (b0 == 0x89 && b1 == 0x50 && b2 == 0x4E && b3 == 0x47) {
mime = 'image/png';
} else if (b0 == 0xff && b1 == 0xd8) {
mime = 'image/jpeg';
} else if (b0 == 0x47 && b1 == 0x49 && b2 == 0x46) {
mime = 'image/gif';
} else {
return null;
}
let binary = "";
for (var i = 0; i < nb; i++){
binary += String.fromCharCode(a[i]);
}
let base64 = window.btoa(binary);
return 'data:' + mime + ';base64,' + base64;
}
const clearChildNodes = (parent = null) => {
if (!parent) { return; }
while (parent.firstChild) {
parent.removeChild(parent.firstChild);
}
}
const rgb2hex = (r = 0, g = 0, b = 0) => {
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}
const start = () => {
load_pixel_grid();
}
prevScroll.addEventListener("wheel", function (e) {
let size = parseInt( drawPreview.style.height.replace("vh", "") );
size += (e.deltaY < 0) ? 5 : -5;
if (size >= 10 && size <= 75) {
drawPreview.style.height = size + "vh";
}
});
tbody.addEventListener("mousemove", function (e) {
const cell = e.target.closest('td');
if (!cell) { return; }
if (e.buttons == 1) { update_pixel(cell); }
if (e.buttons == 4) { update_pixel(cell, true); }
});
tbody.addEventListener("mousedown", function (e) {
const cell = e.target.closest('td');
if (!cell) { return; }
if ((e.buttons == 1 || e.buttons == 4) && isBucketFill) {
fill_action(cell);
}
if (e.buttons == 1) { update_pixel(cell); }
if (e.buttons == 4) { update_pixel(cell, true); }
});
bucketFill.addEventListener("mouseup", function (e) {
if (e.buttons == 0) {
isBucketFill = !isBucketFill;
toggle_button(bucketFill, isBucketFill);
}
});
save.addEventListener("mouseup", function (e) {
if (e.buttons == 0) {
download_uri( imagedata_to_uri( save_image() ) );
}
});
palette.addEventListener("mouseup", function (e) {
const cell = e.target.closest('li');
if (!cell) { return; }
try {
const elm = document.getElementsByClassName('selected-color')[0];
elm.classList.remove("selected-color");
} catch (e) { }
let color = cell.style["background-color"].replace("rgb", "")
.replace("(", "")
.replace(")", "")
.split(",");
let hex = rgb2hex( parseInt(color[0]), parseInt(color[1]), parseInt(color[2]))
const colorElm = document.getElementById("color");
cell.classList.add("selected-color");
colorElm.value = hex;
});
colrPalFile.addEventListener("change", function (e) {
const file = e.target.files[0];
const reader = new FileReader();
reader.readAsArrayBuffer(file,'UTF-8');
reader.onload = readerEvent => {
const content = readerEvent.target.result;
decode_array_buffer(content).then((dataUrl) => {
if (!dataUrl) { return ; }
load_from_data_url(dataUrl);
});
}
});
eraser.addEventListener("mouseup", function (e) {
if (e.buttons == 0) {
isErasing = !isErasing;
toggle_button(eraser, isErasing);
}
});
hmirror.addEventListener("mouseup", function (e) {
if (e.buttons == 0) {
isHMirror = !isHMirror;
toggle_button(hmirror, isHMirror);
}
});
vmirror.addEventListener("mouseup", function (e) {
if (e.buttons == 0) {
isVMirror = !isVMirror;
toggle_button(vmirror, isVMirror);
}
});
start();
</script>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More