Fejlesztés

PowerShell - UTF8 to CP852 (változó értékének konvertálása más kódlapra)

Fórumok

Sziasztok,

van egy LDAP lekérdezésem PowerShellben, ami egy UTF8 stringet ad eredményül. Az értéket be kellene állítanom környezeti változóként (SetEnvironmentVariable), viszont ott nem jó az UTF8 érték, preferáltan CP852 kellene, de a CP1250 sem rossz megoldás, ha cmd.exe-ből dolgozom fel az eredményt.

Teljesen süket vagyok a PowerShellhez a Google pedig nem a barátom: főként olyan találatok jönnek, hogyan lehet valamit UTF8-ra alakítani, illetve, a mindenféle fájlba író/olvasó funkciók "-Encoding" opcióját hozza, ami nekem most nem releváns.

PowerShell guruk, kérlek segítsetek! Köszönöm! :)

Git kérdések

Fórumok

Sziasztok!

Fejlesztőkörnyezet verzióváltása miatt kénytelen leszek átváltani a Git verziókövető rendszerre (eddig VSS-t használtunk), viszont ez még teljesen új terület számomra, így elég sok kérdésem volna ezzel kapcsolatban.

Tudom, hogy egy projekthez van lokális és van megosztott repo. A commit a lokális repoba teszi a változsokat, a push a lokális repóból a megosztottba.

1. Jól értelmezem, megosztott repóban levő állományok listáját csak úgy tudom lekérdezni, hogy azokat lehúzom a lokális repóba? A lokális repó listázható az ls-files paranccsal, de ugyanezt hiányolom a megosztottra.

2. Ha olyan állományt módosítok, ami közben megváltozott, mert más fejlesztő is hozzányúlt, milyen hatékonyságú az összefűzése? Ha ugyanolyan minőségben tudja összefűzni, mint az általam eddig látott összehasonlító programok mutatják az eltéréseket, akkor agyhalál lesz megtalálni, mit kutyult össze a kódban...

3. Egy módosítás egyszerűsített ciklusa a fejemben a következő:
   1. Lehúzom a megosztott repóból a legfrissebb verziót
   2. Elvégzem a szükséges módosításokat
   3. Commit-al berakom a lokál repóba
   4. Push-al felteszem a közösbe.
   Mivel időközben másik fejlesztő módosíthatott az állományokon, ezért kell egy lépés a 3. pont után, amiben ismételten lehúzom a közös repóból a változásokat, ez elvégzi a változások összefűzését.
   Az itt felmerült kérdésem: mi történik, ha a 4. lépés előtt történik a közös repóban egy változás?

4. Van-e arra mód, hogy a commit előtt lekérdezzem, hogy mely állományok változtak meg a lokál repóhoz képest?

5. Van-e arra mód, hogy megnézzem a módosult állomány és a repóban levő változat különbségét? Ugyanez a kérdés áll két commitolt változat közötti eltérésre is.

Gábor

Update:

nagyon hasznos funkciót találtam a git-ben, a .git/hooks mappában levő script-ekkel nagyon szépen megvalósíthatók a számomra szükséges feladatok.
Eddig a prepare-commit-msg és a pre-push scriptet írtam meg, amivel a pillanatnyilag szükséges kiegészítő funkciókat meg tudtam valósítani.

A prepare-commit-msg bash scriptben ha szükséges, kiegészítem a commit kommentjét az aktuális dátumnak megfelelő szöveggel.

Megtaláltam a módját annak is, hogy a remote repo és a lokál repó között változott állományokat lekérdezzem:

git diff --name-only master $1/master

ahol $1 a pre-push script első paramétere, ami a remote repo elnevezése

Unatkozó CSS specialista?

Fórumok

Csináltam egy egyszerűen hasztnálható IoT készletet. Rengeteg dashboardnak használható tablet szunnyad a fiókok mélyén új funkcióra várva, ezért a kód Android 4.2.2 kompatibilis. Laptopon is nagyjából jó, viszont új telefonokon nem az igazi. Nekem Samsung S5 LineageOS 11 a legmodernebb készülékem, 2k kijelzős cuccokon nem tudom tesztelni, meg a CSS (se) az erősségem. Ha valakinek van kedve, ideje, megfelelő eszközparkja, kijavítgathatná. Kommentek nélkül gzipelve ~2kb, ESP procikra töléletes lenne .js formában.

 

<!DOCTYPE HTML>
<html>
<!--_____________HEAD________________________________________________________________________________-->
<head>
  <title>New Page</title>
  <meta http-equiv="Content-Type" content="text; charset=utf-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/>
  <style>
  /* Style can go here */
  </style>
</head>
<!--_____________BODY_________________________________________________________________-->
<body>
<script>

(function () {
    var initialWidth = window.innerWidth;

    window.addEventListener('resize', function () {
        // Ha a képernyő mérete megváltozott és az elfordítás okozta
        if (window.innerWidth !== initialWidth) {
            location.reload(); // Frissíti az oldalt
        }
    });
})();



function Slabel1(labelId, x, y, minWidth, fontSize, padding, borderRadius, backgroundColor, textColor, fontFamily, text) {
    if (x === "MOD") {
        var label = document.getElementById(labelId);
        if (label) {
            label.textContent = y; // A y lesz az új szöveg
        }
        return;
    }

    var label = document.createElement('label');
    label.id = labelId;
    label.textContent = text;  // Beállítjuk a szöveget
    label.style.position = 'absolute';
    label.style.left = x;
    label.style.top = y;
    label.style.fontSize = fontSize;
    label.style.minWidth = minWidth;
    label.style.backgroundColor = backgroundColor;
    label.style.color = textColor;
    label.style.borderRadius = borderRadius;
    label.style.fontFamily = fontFamily;
    label.style.padding = padding;
    label.style.textAlign = 'center';
    document.body.appendChild(label);
}




function Sbutton1(xPercent, yPercent, diameter, borderThicknessPercent, baseColor, onClickFunction) {
    // Szín módosító függvény
    function shadeColor(color, percent) {
        var num = parseInt(color.slice(1), 16);
        var r = (num >> 16) + percent;
        var g = ((num >> 8) & 0x00FF) + percent;
        var b = (num & 0x0000FF) + percent;

        r = r < 0 ? 0 : r > 255 ? 255 : r;
        g = g < 0 ? 0 : g > 255 ? 255 : g;
        b = b < 0 ? 0 : b > 255 ? 255 : b;

        return "#" + ("000000" + ((r << 16) | (g << 8) | b).toString(16)).slice(-6);
    }

    var darkerColor = shadeColor(baseColor, -30);
    var lighterColor = shadeColor(baseColor, 30);
    var borderThickness = (diameter * borderThicknessPercent) / 100;

    var screenWidth = window.innerWidth;
    var screenHeight = window.innerHeight;
    var xPos = (screenWidth * xPercent) / 100;
    var yPos = (screenHeight * yPercent) / 100;

    var container = document.createElement('div');
    container.style.position = "absolute";
    container.style.left = xPos + "px";
    container.style.top = yPos + "px";
    container.style.marginTop = -(diameter / 2) + "em"; // Vertikálisan középre igazítja

    var button = document.createElement('div');
    button.style.width = diameter + "em";
    button.style.height = diameter + "em";
    button.style.backgroundColor = baseColor;
    button.style.borderRadius = "50%";
    button.style.border = borderThickness + "em solid " + darkerColor;
    button.style.boxShadow = "inset 0 0 0 0 " + lighterColor + ", 0 0.6em 0.8em rgba(0, 0, 0, 0.3)";
    button.style.cursor = "pointer";
    button.style.transition = "box-shadow 0.2s";
    button.style.boxSizing = "border-box";
    button.style.overflow = "hidden";
    button.style.userSelect = "none";
    button.style.outline = "none";
    button.style.WebkitTapHighlightColor = "transparent";

    var isPressed = false;

    function onTouchStart() {
        if (!isPressed) {
            button.style.boxShadow = "inset 0 0.6em 0.8em " + darkerColor + ", 0 0.3em 0.4em rgba(0, 0, 0, 0.3)";
            isPressed = true;
        }
    }

    function onTouchEnd() {
        button.style.boxShadow = "inset 0 0 0 0 " + lighterColor + ", 0 0.6em 0.8em rgba(0, 0, 0, 0.3)";
        if (isPressed) {
            onClickFunction();
            isPressed = false;
        }
    }

    button.onmousedown = onTouchStart;
    button.onmouseup = button.onmouseleave = onTouchEnd;
    button.ontouchstart = onTouchStart;
    button.ontouchend = onTouchEnd;

    container.appendChild(button);
    document.body.appendChild(container);
}



function Stoggle1(id, x, y, width, height, vertical, borderWidth, borderRadius, borderColor, ballSize, ballColor, onBgColor, offBgColor, onToggleOn, onToggleOff) {
    if (x === "MOD") {
        var toggleContainer = document.getElementById(id);
        if (!toggleContainer) return;

        var isActive = y;
        var vertical = toggleContainer.style.width > toggleContainer.style.height;
        var ball = toggleContainer.querySelector('.toggle-ball');

        var width = parseFloat(toggleContainer.style.width) || 0;
        var ballSize = parseFloat(ball.style.width) || 0;
        var onBgColor = toggleContainer.getAttribute('data-on-bg-color');
        var offBgColor = toggleContainer.getAttribute('data-off-bg-color');

        toggleContainer.setAttribute('data-is-active', isActive.toString());

        if (isActive) {
            toggleContainer.style.backgroundColor = onBgColor;
            if (vertical) {
                ball.style.top = '5%';
            } else {
                ball.style.left = (width - ballSize - 0.5) + 'em';
            }
        } else {
            toggleContainer.style.backgroundColor = offBgColor;
            if (vertical) {
                ball.style.top = (width - ballSize - 0.5) + 'em';
            } else {
                ball.style.left = '5%';
            }
        }
        return;
    }

    var toggleContainer = document.createElement('div');
    toggleContainer.className = 'toggle-container';
    toggleContainer.id = id;
    toggleContainer.setAttribute('data-on-bg-color', onBgColor);
    toggleContainer.setAttribute('data-off-bg-color', offBgColor);
    toggleContainer.setAttribute('data-is-active', 'false');

    var screenWidth = window.innerWidth;
    var xPosition = (screenWidth * (x / 100)) + 'px';
    toggleContainer.style.position = 'absolute';
    toggleContainer.style.left = xPosition;
    toggleContainer.style.top = y + '%';
    toggleContainer.style.width = vertical ? height + 'em' : width + 'em';
    toggleContainer.style.height = vertical ? width + 'em' : height + 'em';
    toggleContainer.style.borderRadius = borderRadius + 'em';
    toggleContainer.style.backgroundColor = offBgColor;
    toggleContainer.style.border = borderWidth + 'px solid ' + borderColor;
    toggleContainer.style.cursor = 'pointer';
    toggleContainer.style.overflow = 'hidden';
    toggleContainer.style.userSelect = 'none';
    toggleContainer.style.outline = 'none';
    toggleContainer.style.WebkitTapHighlightColor = 'transparent';

    var toggleBall = document.createElement('div');
    toggleBall.className = 'toggle-ball';
    toggleBall.style.position = 'absolute';
    toggleBall.style.width = ballSize + 'em';
    toggleBall.style.height = ballSize + 'em';
    toggleBall.style.backgroundColor = ballColor;
    toggleBall.style.borderRadius = '50%';

    if (vertical) {
        toggleBall.style.left = (height / 2 - ballSize / 2) + 'em';
        toggleBall.style.top = (width - ballSize - 0.5) + 'em';
    } else {
        toggleBall.style.top = (height / 2 - ballSize / 2) + 'em';
        toggleBall.style.left = '5%';
    }
    toggleContainer.appendChild(toggleBall);

    var startPos = 0;
    var isSwiping = false;

    function handleTouchStart(event) {
        startPos = vertical ? event.touches[0].pageY : event.touches[0].pageX;
        isSwiping = true;
    }

    function handleTouchMove(event) {
        if (!isSwiping) return;

        var movePos = vertical ? event.touches[0].pageY : event.touches[0].pageX;
        var delta = movePos - startPos;

        if (Math.abs(delta) > 50) { // Növelve a toleranciát 50 pixelesre
            isSwiping = false;
            toggleContainer.setAttribute('data-is-active', vertical ? (delta < 0 ? 'true' : 'false') : (delta > 0 ? 'true' : 'false'));
            updateToggleState();
        }
    }

    function handleTouchEnd() {
        isSwiping = false;
    }

    function handleMouseDown(event) {
        startPos = vertical ? event.clientY : event.clientX;
        isSwiping = true;
    }

    function handleMouseMove(event) {
        if (!isSwiping) return;

        var movePos = vertical ? event.clientY : event.clientX;
        var delta = movePos - startPos;

        if (Math.abs(delta) > 50) { // Növelve a toleranciát 50 pixelesre
            isSwiping = false;
            toggleContainer.setAttribute('data-is-active', vertical ? (delta < 0 ? 'true' : 'false') : (delta > 0 ? 'true' : 'false'));
            updateToggleState();
        }
    }

    function handleMouseUp() {
        isSwiping = false;
    }

    function updateToggleState() {
        var isActive = toggleContainer.getAttribute('data-is-active') === 'true';
        if (isActive) {
            toggleContainer.style.backgroundColor = onBgColor;
            if (vertical) {
                toggleBall.style.top = '5%';
            } else {
                toggleBall.style.left = (width - ballSize - 0.5) + 'em';
            }
            if (onToggleOn) onToggleOn();
        } else {
            toggleContainer.style.backgroundColor = offBgColor;
            if (vertical) {
                toggleBall.style.top = (width - ballSize - 0.5) + 'em';
            } else {
                toggleBall.style.left = '5%';
            }
            if (onToggleOff) onToggleOff();
        }
    }

    toggleContainer.addEventListener('selectstart', function (event) {
        event.preventDefault();
    });

    toggleContainer.onmousedown = handleMouseDown;
    toggleContainer.onmousemove = handleMouseMove;
    toggleContainer.onmouseup = handleMouseUp;
    toggleContainer.ontouchstart = handleTouchStart;
    toggleContainer.ontouchmove = handleTouchMove;
    toggleContainer.ontouchend = handleTouchEnd;

    toggleContainer.onclick = function (event) {
        event.preventDefault();
        toggleContainer.blur();
        var isActive = toggleContainer.getAttribute('data-is-active') === 'true';
        toggleContainer.setAttribute('data-is-active', (!isActive).toString());
        updateToggleState();
    };

    document.body.appendChild(toggleContainer);
}








function Srange1(id, x, y, height, width, isVertical, borderWidth, borderRadius, borderColor, knob, knobrad, knobColor, trackColor, min, max, onChange) {
    if (!isVertical) { width ^= height; height ^= width; width ^= height; }
    if (x === "MOD") {
        var sliderContainer = document.getElementById(id);
        if (!sliderContainer) return; // Ha nem található az elem, kilép

        var sliderKnob = sliderContainer.querySelector('div');
        var value = parseFloat(y);
        if (isNaN(value)) return; // Érvénytelen érték esetén kilép

        var min = parseFloat(sliderContainer.getAttribute('data-min')) || 0;
        var max = parseFloat(sliderContainer.getAttribute('data-max')) || 100;
        var percentage = ((value - min) / (max - min)) * 100;
        percentage = Math.max(0, Math.min(100, percentage));

        if (sliderContainer.style.flexDirection === 'column') {
            sliderKnob.style.top = (100 - percentage) + '%'; // Függőleges esetén
        } else {
            sliderKnob.style.left = percentage + '%'; // Vízszintes esetén
        }
        return;
    }

    // Eredeti létrehozó logika
    var sliderContainer = document.createElement('div');
    sliderContainer.id = id;
    sliderContainer.setAttribute('data-min', min);
    sliderContainer.setAttribute('data-max', max);
    sliderContainer.style.position = 'absolute';
    sliderContainer.style.left = x + '%';
    sliderContainer.style.top = y + '%';
    sliderContainer.style.height = isVertical ? height + 'em' : 'auto';  // Ha függőleges, a magasságot használjuk
    sliderContainer.style.width = isVertical ? 'auto' : width + 'em';  // Ha vízszintes, a szélességet használjuk
    sliderContainer.style.backgroundColor = trackColor;
    sliderContainer.style.border = borderWidth + 'px solid ' + borderColor;
    sliderContainer.style.borderRadius = borderRadius + 'px';
    sliderContainer.style.overflow = 'hidden';
    sliderContainer.style.display = 'flex';
    sliderContainer.style.flexDirection = isVertical ? 'column' : 'row';
    sliderContainer.style.justifyContent = 'flex-start';
    sliderContainer.style.padding = '0.2%';

    // Knob stílus beállítása
    var sliderKnob = document.createElement('div');
    sliderKnob.style.position = 'relative';
    sliderKnob.style.margin = isVertical ? '0 auto' : 'auto 0';
    sliderKnob.style.height = isVertical ? knob + 'em' : (height * 0.9) + 'em';
    sliderKnob.style.width = isVertical ? (width * 0.9) + 'em' : knob + 'em';
    sliderKnob.style.backgroundColor = knobColor;
    sliderKnob.style.borderRadius = knobrad + 'px';
    sliderKnob.style.cursor = 'pointer';
    sliderKnob.style[isVertical ? 'top' : 'left'] = isVertical 
        ? (100 - (knob / height) * 100) + '%'  // Függőleges esetén
        : '0%';  // Vízszintesen balra kezd
    sliderContainer.appendChild(sliderKnob);

    var isDragging = false;
    var startCoord, startPos;

    function onDragStart(e) {
        isDragging = true;
        startCoord = isVertical ? (e.touches ? e.touches[0].clientY : e.clientY) : (e.touches ? e.touches[0].clientX : e.clientX);
        startPos = parseFloat(sliderKnob.style[isVertical ? 'top' : 'left'] || '0');
        e.preventDefault();
    }

    function onDragMove(e) {
        if (!isDragging) return;
        e.preventDefault();
        var delta = (isVertical ? (e.touches ? e.touches[0].clientY : e.clientY) : (e.touches ? e.touches[0].clientX : e.clientX)) - startCoord;
        var containerSize = isVertical ? sliderContainer.offsetHeight : sliderContainer.offsetWidth;
        var knobSize = isVertical ? sliderKnob.offsetHeight : sliderKnob.offsetWidth;
        var newPos = Math.min(
            Math.max(startPos + (delta / containerSize) * 100, 0),
            100 - (knobSize / containerSize) * 100
        );
        sliderKnob.style[isVertical ? 'top' : 'left'] = newPos + '%';
    }

    function onDragEnd() {
        if (!isDragging) return;
        isDragging = false;
        var containerSize = isVertical ? sliderContainer.offsetHeight : sliderContainer.offsetWidth;
        var knobSize = isVertical ? sliderKnob.offsetHeight : sliderKnob.offsetWidth;
        var positionPercentage = parseFloat(sliderKnob.style[isVertical ? 'top' : 'left'] || '0') / (100 - (knobSize / containerSize) * 100);
        var value = isVertical
            ? Math.round(min + (max - min) * (1 - positionPercentage))
            : Math.round(min + (max - min) * positionPercentage);
        if (onChange && typeof onChange === 'function') {
            onChange(value);
        }
    }

    sliderKnob.addEventListener('mousedown', onDragStart);
    document.addEventListener('mousemove', onDragMove);
    document.addEventListener('mouseup', onDragEnd);

    sliderKnob.addEventListener('touchstart', onDragStart);
    document.addEventListener('touchmove', onDragMove);
    document.addEventListener('touchend', onDragEnd);

    document.body.appendChild(sliderContainer);
}


function Slamp1(id, x, y, diameter, color) {
    // Függvény a szín sötétítésére
    function darkenColor(color, percent) {
        if (!color || color[0] !== '#' || color.length !== 7) {
            console.error("Hibás színkód: ", color);
            return "#000000"; // Alapértelmezett sötét szín
        }

        var num = parseInt(color.slice(1), 16);
        var amt = Math.round(2.55 * percent);
        var r = (num >> 16) - amt;
        var g = (num >> 8 & 0x00FF) - amt;
        var b = (num & 0x0000FF) - amt;
        r = r > 0 ? r : 0;
        g = g > 0 ? g : 0;
        b = b > 0 ? b : 0;
        return "#" + (0x1000000 + r * 0x10000 + g * 0x100 + b).toString(16).slice(1);
    }

    // Ha az `x` "MOD", meglévő lámpát kezelünk
    if (x === "MOD") {
        var existingLight = document.getElementById(id);
        if (existingLight) {
            if (y === true) {
                existingLight.classList.add('light-on'); // Lámpa bekapcsolása
            } else {
                existingLight.classList.remove('light-on'); // Lámpa kikapcsolása
            }
        } else {
            console.error("A megadott ID-jű lámpa nem található: " + id);
        }
        return; // Nincs további teendő
    }

    // Ellenőrizni kell, hogy a kötelező paraméterek érvényesek-e
    if (!id || typeof x !== "number" || typeof y !== "number" || !diameter || !color) {
        console.error("Hiányzó vagy hibás paraméterek a lámpa létrehozásához.");
        return;
    }

    var darkColor = darkenColor(color, 80); // Nagyon sötét szín kikapcsolt állapothoz

    // Stílusok létrehozása
    var style = document.createElement('style');
    style.innerHTML = 
        ".light-container-" + id + " {" +
            "position: absolute;" +
            "top: " + y + "%;" +
            "left: " + x + "%;" +
            "transform: translate(-50%, -50%);" +
            "pointer-events: none;" + // Az elemet ne lehessen kattintással elérni
        "}" +
        ".light-" + id + " {" +
            "width: " + diameter + "em;" +
            "height: " + diameter + "em;" +
            "border-radius: 50%;" +
            "border: 1px solid " + color + ";" +
            "background-color: " + darkColor + ";" +
            "-webkit-transition: box-shadow 0.5s, background-color 0.5s;" +
            "-moz-transition: box-shadow 0.5s, background-color 0.5s;" +
            "-ms-transition: box-shadow 0.5s, background-color 0.5s;" +
            "transition: box-shadow 0.5s, background-color 0.5s;" +
        "}" +
        ".light-" + id + ".light-on {" +
            "box-shadow: 0 0 20px " + color + ", " +
                        "0 0 30px " + color + ", " +
                        "0 0 40px " + color + ", " +
                        "0 0 50px " + color + ", " +
                        "0 0 60px " + color + ", " +
                        "0 0 70px " + color + ", " +
                        "0 0 80px " + color + ";" +
            "background-color: " + color + ";" +
        "}";
    document.head.appendChild(style);

    // Létrehozzuk a container elemet
    var container = document.createElement('div');
    container.className = 'light-container-' + id;

    // Létrehozzuk a lámpa elemet
    var light = document.createElement('div');
    light.className = 'light-' + id;
    light.id = id;

    // Hozzáadjuk a lámpát a containerhez
    container.appendChild(light);

    // Hozzáadjuk a container-t a body-hoz
    document.body.appendChild(container);
}



//----------------------Slabel------------------------------------------------------------------------------------------------------

Slabel1 (
  "label1",					// ID
  "10%", "10%",					// x pos, y pos
  "0%", "1em",					// minimal width, height,
  "0.3em", "0em",				// padding, radius
  "lightgreen", "black",			// background color, text color
  "Arial",					// font family
  "Example Label 1"				// text
  );

Slabel1 (
  "label2",					// ID
  "50%", "10%",					// x pos, y pos
  "0%", "1em",					// minimal width, height,
  "0.3em", "0em",				// padding, radius
  "lightgreen", "black",			// background color, text color
  "Arial",					// font family
  "Example Label 2"				// text
  );

Slabel1 ("label1", "MOD", "New Label 1");	// change text
Slabel1 ("label2", "MOD", "New Label 2");	// change text


//----------------------Sbutton ------------------------------------------------------------------------------------------------------

Sbutton1 (
 10, 25,						// x pos (%), y pos (%)
 4, 10,							// átmérő (%), gyűrű (átmérőhöz képest %)
 "lightblue",						// color
 function() { console.log("Button1 clicked!"); });	// push command

Sbutton1 (
 50, 25,						// x pos (%), y pos (%)
 4, 10,							// átmérő (%), gyűrű (átmérőhöz képest %)
 "lightblue",						// color
 function() { console.log("Button2 clicked!"); });	// push command


//----------------------Stoggle------------------------------------------------------------------------------------------------------

Stoggle1 (
  "toggle1",					// ID
  10, 35,					// x pos (%), y pos (%)
  10, 3, false,					// width (em), height (em), fekvő/álló
  10, 10, "black",				// border size (px), radius (px), color 
  3, "blue",					// ballSize (em), ballColor
  "green", "red",				// on / off color
  function() { console.log("Toggle1 ON"); },	// on command
  function() { console.log("Toggle1 OFF"); }	// off command
  );

Stoggle1 (
  "toggle2",					// ID
  50, 35,					// x pos (%), y pos (%)
  10, 3, true,					// width (em), height (em), fekvő/álló 
  10, 10, "black",				// border size (px), radius (px), color
  3, "blue",					// ballSize (em), ballColor
  "green", "red",				// on / off color
  function() { console.log("Toggle2 ON"); },	// on command
  function() { console.log("Toggle2 OFF"); }	// off command
  );

Stoggle1 ("toggle1", "MOD", true);		// switch on
Stoggle1 ("toggle2", "MOD", true);		// switch on


//----------------------Srange------------------------------------------------------------------------------------------------------

Srange1 (
  "slider1",						// ID
   10, 65,						// x pos (%), y pos (%)
   10, 3, false, 					// width (em), height (em), fekvő/álló 
   4, 20, "gray",					// border size (px), border radius (px), border color
   2, 10, "blue", "yellow",				// knob width (em), knob radius (px), knob color, trackColor 
   0, 100,						// minimal value, maximal value (number)
  function(value) { console.log("Slider1: " + value); }	// változáskor végrehahtja
  );

Srange1 (
  "slider2",						// ID
   50, 65,						// x pos (%), y pos (%)
   10, 3, true, 					// width (em), height (em), fekvő/álló 
   4, 0, "gray",					// border size (px), border radius (px), border color
   2, 10, "red", "green",				// knob width (em), knob radius (px), knob color, trackColor 
   0, 100,						// minimal value, maximal value (number)
  function(value) { console.log("Slider2: " + value); }	// változáskor végrehahtja
  );

Srange1 ("slider1", "MOD", 25);				// set value
Srange1 ("slider2", "MOD", 75);				// set value


//----------------------Sled--------------------------------------------------------------------------------------------------------

Slamp1 (
  "lamp1",		// ID
   80, 30,		// x pos (%), y pos (%)
   2, "#00ff00"		// átmérő (em), color
   );

Slamp1 (
  "lamp2",		// ID
   80, 60,		// x pos (%), y pos (%)
   2, "#ff0000"		// átmérő (em), color
   );

Slamp1 ("lamp1", "MOD", true);
Slamp1 ("lamp2", "MOD", true);

//----------------------------------------------------------------------------------------------------------------------------------

</script>
</body>
</html>

PHP-ban írt régi program életrekeltése MariaDB-vel (PHC-Win)

Fórumok

Sziasztok!

Van egy Delphi-ben megírt progrtamunk, sajnos a forráskódja nincs meg, viszont sok adat van benne, amire szükség van. Egy Woody-n futó MySQL 5.5.33 szolgáltatja az adatbázisát.

Felhúztam egy CentOS 9-et 10.5.22-es MariaDB-vel (a szerveren a PHP verzió 8.0.30, de szerintem a programműködéséhez nincs köze), de a program nem tud kapcsolatot teremteni az új adatbázisszerverrel hitelesítési probléma miatt.

A program az alábbi ddl-eket használja:

php_bcompiler.dll (5.0.4.4 PHP része)

php_gd2.dll (5.0.4.4 PHP része)

php_mysql.dll (5.0.4.4 PHP része)

php_win32std.dll (5.0.5.5 PHP része)

php_winbinder.dll (üresek az infó mezői)

php5ts.dll (5.0.5.5 PHP része)

libmysql.dll (üresek az infó mezői)

freeimage.dll (üresek az infó mezői)

 

Szerintetek hogy lehetne életre kelteni? Köszönöm előre a segítséget!

[Cím módosÍtás] Jobban belemélyedtem és mikiderült, hogy ez egy PHC-Win-nel EXE-vé fordított PHP-ban írt program (PHP-Winbinder-rel), azért vannak ott ezek a DLL-ek.

RGB led gamma korrekció

Fórumok

Tud valaki WS2812 ledhez színenként gammakorrekciós tömböt?

static const uint8_t PROGMEM _NeoPixelGammaTable[256] = {
    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
    0,   0,   0,   0,   0,   0,   0,   0,   0,   1,   1,   1,   1,   1,   1,
    1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   3,
    3,   3,   3,   3,   3,   4,   4,   4,   4,   5,   5,   5,   5,   5,   6,
    6,   6,   6,   7,   7,   7,   8,   8,   8,   9,   9,   9,   10,  10,  10,
    11,  11,  11,  12,  12,  13,  13,  13,  14,  14,  15,  15,  16,  16,  17,
    17,  18,  18,  19,  19,  20,  20,  21,  21,  22,  22,  23,  24,  24,  25,
    25,  26,  27,  27,  28,  29,  29,  30,  31,  31,  32,  33,  34,  34,  35,
    36,  37,  38,  38,  39,  40,  41,  42,  42,  43,  44,  45,  46,  47,  48,
    49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
    64,  65,  66,  68,  69,  70,  71,  72,  73,  75,  76,  77,  78,  80,  81,
    82,  84,  85,  86,  88,  89,  90,  92,  93,  94,  96,  97,  99,  100, 102,
    103, 105, 106, 108, 109, 111, 112, 114, 115, 117, 119, 120, 122, 124, 125,
    127, 129, 130, 132, 134, 136, 137, 139, 141, 143, 145, 146, 148, 150, 152,
    154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182,
    184, 186, 188, 191, 193, 195, 197, 199, 202, 204, 206, 209, 211, 213, 215,
    218, 220, 223, 225, 227, 230, 232, 235, 237, 240, 242, 245, 247, 250, 252,
    255};

Ez az RGB ledet egybe korrigálja.

Egy világos narancssárgát pl nem tud, ehhez színenkénti (R, G, B) tábla kéne.

JS debug

Fórumok

Egy Android 5 tableten összefossa magát egy weblap valami háború előtti krómban. Ezt hogy tudom debugolni win11 alatt?

ESP8266 a szerver, én írtam a weblapot.

DHT11 szenzor teszt

Fórumok

Próbáltam a fenti szenzort (vagy a másolatát) beüzemelni, de semmilyen reakciót nem kapok tőle:

  • próbáltam 3,3V-os és 5V-os táppal is
  • kontroller kb 20 ms (+-1ms) lehúzza a data lábat (OC), de utána semmi reakció
  • próbáltam kézzel lehúzni a lábat (100...200ms) de semmi reakció
  • oszcilloszkóppal mértem az adat vonalat
  • az igazsághoz hozzá tartozik, hogy az első néhány tesztnél push-pull-ban maradt a meghajtás, tehát akár sérülhetett is a szenzor

Van valaki Budapesten (netántán Újpest-Újbuda vonalon), akinek van olyan környezet, ahol a szenzoromat letesztelhetjük?

Előre is kösz:

Gábor

Monorepo szelektív buildek GitLab CI-al

Fórumok

Sziasztok!

Ötletelek egy meglévő monorepo kapcsán, de gondoltam hátha kapok jó tanácsokat, így leírnám dióhéjban a problémámat.
Adott egy monorepo (ezt vegyük kérlek fixnek, nem tudunk elmozdulni belőle még), amiben van több komponens, amiknek a verziója többnyire együtt mozog, de mindenképpen van köztük összefüggés. Például van egy common komponens, ami mindenkinek szükséges és a többi modullal olyan összefüggésben van h. a többi modul verziója csak nagyobb (v egyenlő) lehet mint a commoné egy build során.

Jelenleg kézi builddel készülnek el a komponensek, gyakorlatilag teljesen manuálisan komponensenként, a tárolóban nincs sem tag, sem branch, sem semmi, néhány fejlesztő commitolgat a master branchbe. Ebbe se menjünk bele, hogy miért nincs, ez van sajnos, nem az én repositorym, nem az én workflowm.

A célom az lenne, hogy minimális workflow módosítással a buildet központosítsam és kialakítsak valamiféle release folyamatot, aminek az eredménye valami olyasmi lenne, amit az üzemeltetésben deploy alapnak lehet használni végre és nem ilyen-olyan módon venné át az üzemeltetés a lebuildelt dolgokat, hanem a meglévő GitLab-ben jönne létre pl. Release-ként v. akármilyen Assetként, amit ki kell deployolni.

Ez ugye odáig tiszta h. ha 1 projekt egy komponens, akkor tag-elésre hívnám a CI-t, aki megcsinálja a buildet, release-cli-vel felrakja szépen és utána jenkins/ansible/whatever a release apin keresztül le tudja kérdezni h. adott projektnek mi a latest release-e, honnan lehet beszerezni, stb és meg is vagyunk. Csak ez monorepo és ahány cikket olvastam kb. annyiféle megközelítést láttam.

Az működhetne pl. úgy tagelünk h. a tagben szerepel az adott komponens és annak a verziója, ebből meg a CI kisakkozza h. akkor mit is kell buildelni milyen verzióval, eddig talán ez tűnik a legjobb megoldásnak, de mindenképpen kíváncsi voltam h. ezt ki hogyan csinálná.

Előre is köszönöm a tippeket!
ps: meglehet h. felületes a leírás, de bármilyen kérdésre szívesen válaszolok ha ennyi infó kevés éppkézláb ötlet megfogalmazásához.

PHP Symfony delete

Fórumok

üdv,

Adatbázisban törlést hajtok végre. Működik minden, de olyan mintha a kód kétszer futna le. A törlés megtörténik, de utána a felső ágra fut a category/noindex.html.twig

#[Route('/category/del/{id}', name: 'del_category')]
    public function delCategory( ManagerRegistry $doctrine, Request $request, int $id ): Response
    {
        $entityManager = $doctrine->getManager();
        $category = $entityManager->getRepository( Category::class )->find($id);

        if ( !$category ) {

            return $this->render('category/noindex.html.twig', [
                'category' => 'category',
            ]);

        } else {

            $text = $category->getCategory();
            // remove
            $entityManager->remove($category);
            // save / delete
            $entityManager->flush();

            return new Response( 'Category deleted: ' . $text . '<br><a href="/category">Index</a>' );
        }
    }

Mit rontok el?

Környezet:

Fedora 40

Symfony CLI version 5.9.1

PHP 8.3.8 (cli) (built: Jun  4 2024 14:53:17) (NTS gcc x86_64)
Zend Engine v4.3.8, Copyright (c) Zend Technologies