Hirdetés

Keresés

Új hozzászólás Aktív témák

  • dqdb
    nagyúr

    Osszevonas utan egyik sem mukodik.
    Linkre pelda:

    https://dereferer.me/?https://www.imdb.com/title/tt1448754/

    [link]
    Az eredeti kódod is tökéletesen működik. A teljes kódot bedobtad ide, vagy csak a lényeget az eredetiből? Mert ha az utóbbi, akkor a példa kedvéért törölt részekben lesz a hiba.

  • dqdb
    nagyúr

    Sziasztok!
    Bongeszoben szeretnem futtatni az alabbi kodot, de valami oknal fogva csak a dereferer.link atiranyitas eltavolitas mukodik, a .me vegu nem. Szerintetek mi lehet a problema?
    ...
    (function () {
      'use strict';
      const REPLACEMENTS = {
        'dereferer.link': {
          pattern: /^https?:\/\/(?:www\.)?dereferer\.link\/\?(.+:\/\/.+)/,
          noreferrer: true,
        },
        'dereferer.me': {
          pattern: /^https?:\/\/(?:www\.)?dereferer\.me\/\?(.+:\/\/.+)/,
          noreferrer: true,
        },
      };
      for (const el of document.querySelectorAll('a')) {
        for (const [name, repl] of Object.entries(REPLACEMENTS)) {
          const match = repl.pattern.exec(el.href);
          if (match) {
            const origUrl = match[1];
            console.debug(`Dereferer Remover (${name}): replacing ${el.href} -> ${origUrl}`);
            el.href = origUrl;
            if (repl.noreferrer) {
              el.rel = 'noreferrer';
            }
          }
        }
      }
    }());

    Biztosan https://www.dereferer.me/?https://example.com/ formátumú az URL és nincsen escape-elve https://www.dereferer.me/?https%3A%2F%2Fexample.com%2F formában a .me végű címek esetében?

    A két regexet össze lehet vonni egybe:

    ^https?:\/\/(?:www\.)?dereferer\.(?:me|link)\/\?(.+:\/\/.+)

  • dqdb
    nagyúr

    Időbélyeget adtam a css fájlnévhez:
    <script>
     document.write('<link href="stilus.css?v=' + Date.now() + '" rel="stylesheet">');
    </script>
    Konzol ilyet ír ki:
    <link href="stilus.css?v=1701436418785" rel="stylesheet">
    jó ez így?

    [link]

    "The Date.now() static method returns the number of milliseconds elapsed since the epoch, which is defined as the midnight at the beginning of January 1, 1970, UTC."

    Szóval igen, jó.

  • dqdb
    nagyúr

    <script>

    function dio(){
        eval("var w")
    }; //: func_

    function alma(){
        alert(w)
    }; //: func_

    dio() ; alma() ; 

    </script>

    Hogyan tehetném meg, hogy a dio() w -je az alma() -ból aktiválható legyen ? - vagyis hogy lokál helyet globális legyen .
    :F

    function dio(){
    w = 42
    }; //: func_

    function alma(){
    alert(w)
    }; //: func_

    dio() ; alma() ;

    Ha nem kerül a deklarációnál a neve elé var vagy let, akkor globális lesz a változó. Egyúttal erre építeni egy nagyon rossz gyakorlat, mert a globális névteret úgy szemeteled tele, hogy ennek nem lesz nyoma a legfelső szinten. Szóval tessék csak rendesen globális változót gyártani, ha nem tudod megkerülni, hogy szükség legyen globális változóra.

  • dqdb
    nagyúr

    Oh, jaj ♥
    Van ez az alakom :
    var a1, a2,a3, b1, b2, b3 ;  
    a1, a2, a3 = [b1, b2, b3] ; 

    Ez nyilván nem működik, de lehet e valami ilyesmi alak, ami működne ?
    :F

    Azt szeretném, hogy legyen :
    a1= b1 ; a2= b2 ; a3= b3 ;

  • dqdb
    nagyúr

    Sziasztok!

    Tovább görgetem a botcsinálta programozói pályafutásomat.

    JS-ben kell számoltatnom.
    RKorrigalt és Delta értékeket megkapom, számolnám Lg Rm-et, majd abból Rm-et.

    A lenti kód viszont természetes logaritmust vesz, ellenben nekem 10-es alapu kellene. Van olyan beépített fv JS-ben, ami 10-es alapu lg-t számol és nem ln-t?

    LRm = (-2.159 + Delta + 1.805 * Math.log(Rkorrigalt) + 0.345 * Math.log(Rkorrigalt) * Math.log(Rkorrigalt));
    Rm = Math.pow(10;LRm);

    Köszi szépen

  • dqdb
    nagyúr

    Hogy hogy mi .
    Hát vannak a += = *= == ...stb. , tehát ezekhez hasonlíthatóan vannak-e azok ?
    :DDD

    Ezek az operátorok léteznek Javascriptben.

  • dqdb
    nagyúr

    Sziasztok!

    Nem, nem kérdezek semmit :)) csak egy kis érdekesség, ami nem tudom, hogy fejlesztői hiba-e, vagy régóta fennálló probléma, minden esetre érdekes, de megkerülhető.
    Történt ugyanis, hogy egy adott beviteli mezőnek használni akartam az értékét JS-ből.
    <input type="number" id="szam" value="13">
    Az ehhez tartozó lekérdezés a legsztenderdebb valaha:
    let szam = document.getElementById("szam").value;
    Namost sokat csináltam régebben is ilyet, de mint kiderült, egyetlen dolgot nem akartam vele: Összeadási műveletet végrehajtani.

    Ugyanis nem éppen együttműködő ;]
    Kivonni, szorozni, osztani, gyököt vonni, stb simán lehet probléma nélkül. De amint hozzáadnál valamit: szam = szam + 600; // result: 13600. Szóval string lesz belőle, noha egy számbeviteli változóról van szó... Miután ezt felfedeztem, elkezdtem kísérletezni vele. Számértékké konvertálásra azonnal hibát dobott a console. String-é alakítani és utána vissza num-ra lehet és utána minden működik, még az összeadás is... Csak lássuk be, nem a legszebb megoldás :(
    Így maradt a jó öreg mottó: Ha valamit nem tudsz megoldani, kerüld meg! Így lett végül a megoldás szam = (szam / 1) + 600 // result: 613. Szebb is, működik is, de egyébként felesleges lenne, ha néha nem kattanna meg a böngészők motorja ;]

    Chrome alatt tesztelve

    behavior by design

    Az input.value property string típusú attól függetlenül, hogy milyen típust állítasz be az elemnek. JavaScriptben string + szám = string, azért kapod azt, amit, míg a többi esetben a stringet számmá konvertálja.

  • dqdb
    nagyúr

    Köszi az infót. És be lehet állítani valahogy, hogy ne a kliens adataival dolgozzon?
    Ugyanis roppant fontos volna nekem, hogy ténylegesen másodpercre pontosan a helyes időt nézze a műveletekhez

    Egy XHR/fetch kérésben a szervernek felküldöd a kliens UTC időt, az válaszban visszaküldi a saját UTC idejét, te pedig a kliensen a két érték különbségét ofszetként figyelembe veszed minden dátummal kapcsolatos megjelenítésben (szerveroldali logikában persze kizárólag a szerver idejét használod).

  • dqdb
    nagyúr

    Sziasztok!

    Választ keresek egy anomáliára. Itt van ez az oldal. Kimondottan jópofa és hasznos megoldások vannak rajta. Amik működnek JSFiddle-ben, CodePen-en, stb. De abban a pillanatban, hogy felteszem a saját szerveremre egy HTML fájlba (példa), az összesnek a JS-e hibára fut. Megjelenik a hiba a Console.log alatt is, de nem látom a miértjét, ha egyszer mindenhol máshol (tesztoldalak) működnek.

    Mi lehet ennek az oka?

    A scriptben olyan divre hivatkozol, ami akkor még nem létezik. Tedd a forrás végére a scriptet.

  • dqdb
    nagyúr

    Szükségem lenne egy függvényre, ami egészen addig nem engedi tovább futni a szkript többi részét, amíg a szükséges változó értéket nem kap (mert utána azzal az értékkel dolgoznék tovább).
    (Nem lehet összedrótozni/egybeágyazni őket sehogy, hogy csak akkor fusson a szkript maradék része, ha az érték visszajött az adatbázisból. Sajnos ez nem megoldható.)

    Ilyesmit kezdtem el összerakni, de nem úgy működik, ahogy szeretném:
    function waitForResult(resultToWaitFor, acceptValue){
        console.log("In waitForResult. resultToWaitFor = " + resultToWaitFor);
        if (typeof resultToWaitFor !== 'undefined'){
            setTimeout(function(){
                waitForResult();
                console.log("Waiting for result.")
                if (resultToWaitFor >= acceptValue){
                    return 0;
                }
            }, 100);
        } else {
            console.log("Megvan az eredmény.");
            return 0;
        }
    }

    ***** Az elképzelés lényege az lenne, hogy 100ms-onként ellenőrzi, hogy kapott-e már értéket a vizsgált változó. Ha nem, ellenőrzi újra (rekurzívan). Ha kapott, kilép, és engedi futni az utána következő részeket. Nem ad vissza értéket. Semmit nem csinál, csak "feltartja" a szkriptet addig, amíg a változó értéket nem kap. (És mindig kap. Jellemzően pár tized mp-en belül, viszont van, hogyha "túlbuzgó" a user, eljuthat ahhoz a részhez a kódhoz, ahol használni kell ezt az értéket, mielőtt még materializálódna a változó. Ezt szeretném orvosolni.)

    Ha a jelen formájában használom, hiába érkezik meg az érték, folyamatosan pörög tovább (logban látszódik, hogy Waiting for result-ot dobálja eszement módon utána is).

    Pont ennek utánajárva találtam, hogy az első if-ágban is kell egy return - a belső ellenőrzést (és vele az acceptValue-t) ezért hoztam be. De nem segített.

    A return 0 azért lett, mert a sima return-nal nem (sem működött), próbáltam hát így is.

    ----------
    Vagy csináljak egy setTimeout-os, while-os ellenőrzést, a végén emelgetve egy számlálót, és megadok egy értéket neki, amit soha nem érhet el? Max ez a backup plan, de jó lenne a későbbiekben is egy ilyen "waitForResult" függvény, jó lenne azt rendbe rakni.

    Irányt tudnátok mutatni a témában, kérlek?

    Alapvetően hibás, amit csinálni szeretnél. Persze mindenki valami hasonlót szeretne elérni, amikor először kell aszinkron hívást beépíteni az addig szinkron homokozójába, de ettől még nem így kell :DDD

    1. az adatbázis-lekérdezés előtt letiltasz minden beviteli mezőt
    2. a lekérdezés befejezésekor lefutó callbackben engedélyezed a mezőket
    A módszer hátránya, hogy a letiltás látható változást hoz, ami gyors lefutás esetében zavaró villogást eredményezhet.

    1. az adatbázis-lekérdezés előtt az előtérbe hozol egy teljes oldalt lefedő 100%-os átlátszóságú DIV-et, ami az egéreseményeket blokkolja az oldalon található elemek elől, a billentyűzetről neked kell gondoskodnod a fókusz valahová áthelyezésével
    2. a lekérdezés befejezésekor lefutó callbackben a háttérbe küldöd a DIV-et
    A módszer hátránya, hogy lassú lefutás esetében a felhasználó azt érzékeli, hogy "lefagyott" az oldal, mert akárhová klikkel, nem reagál

    1. az adatbázis-lekérdezés előtt ugyanazt csinálod, mint az előző megoldásban és setTimeout segítségével ~300 ms késleltetéssel (a pontos értéket neked kell kikísérletezni, hogy a felhasználónak ne villogjon feleslegesen a képernyő, de ne érezze azt sem, hogy "lefagyott" az oldal)
    2. ha a setTimeout callback fut le először, akkor előtérbe hozol egy másik teljes képernyős DIV-et, ami részlegesen átlátszó és rajta szöveggel, hogy várjon a user
    2. a lekérdezés befejezésekor lefutó callbackben tolsz egy cancelTimeout-ot, és a háttérbe küldöd mindkét DIV-et

  • dqdb
    nagyúr

    Bénázok...

    Szeretnék egy tömböt, amibe feltöltöm (mondjuk) a userek vezetéknevét, keresztnevét, korát.

    Így gondoltam megcsinálni:

    var userData = new Array();
    for (var i = 0; i < numberOfUsers; i++){
    userData[i] = new Array();
      userData[i]["vezetknev"] = lekerdezesEredmenye[i].vezeteknev;
      userData[i]["keresztnev"] = lekerdezesEredmenye[i].keresztnev;
      userData[i]["kor"] = lekerdezesEredmenye[i].kor;
    //stb.
    }

    Lekérdezni meg úgy szeretném, hogy userData[0]["kor"], akkor visszaadja, hogy pl. 28.

    Működik, de azt kérdezném, hogy van-e ennek jobb módja.
    Mert valamiért olyan "furán néz ki"... (aztán persze ez legyen a legnagyobb gond.)

    Köszi.

    var userData = lekerdezesEredmenye;

    Így egyszerűbb a kód.
    [link]

  • dqdb
    nagyúr

    sajnos nem ennyire egyszerű a helyzet egyébként ez már régebb óta ki van kapcsolva

    pl ennél az oldalnál a google ezt hozza ki magyar oldalakra keresve
    [link]

    ez az eredeti
    [link]

    Egyes oldalak a kérésekben a böngésző által küldött Accept-Language alapján megpróbálnak okosak lenni. Annyit tudsz tenni, hogy a böngésző beállításainál az angolt állítod át preferált nyelvre, ha főleg angol tartalmakat keresel (persze ilyenkor meg a magyar nyelvű tartalmat próbálják meg az ilyen oldalak angolra fordítani ...).

    Ez a header arra lenne jó, hogy egy többnyelvű oldal igazodjon a látogató által preferált nyelvhez, de nem arra, hogy mindezt semmire sem jó gépi fordítással érjék el.

  • dqdb
    nagyúr

    Azure-nak van erre egy tök jó megoldása SignalR a neve.

    SignalR Service – Real-time web | Microsoft Azure

    SignalR-ből van on-premise változat is. szóval nem csak Azure alatt lehet használni.

  • dqdb
    nagyúr

    Belefutottam egy olyan hibába ezzel a kóddal, hogy amikor több szót is szeretnék kijelölni, és az egyik ezek közül a mark része (pl. ma, vagy simán csak az a betű), akkor a <mark></mark>-ban lévő karaktereket is átírja, ezzel elrontva az egészet.

    JSFiddle

    A gond itt nyilván az, hogy már ugyanarra a sztringre hívom rá újra a kijelölő függvényt, amiben már benne vannak a mark tag-ek.

    Ki lehet valahogy kerülni, hogy a kijelölő mark tag-eket is átírja? Mármint valami egyszerű módon.

    Köszi.

    [link]

    Azonban ahogyan a korábbi kódomnál jeleztem, nem túl szerencsés escape-elés nélkül betolni egy stringet reguláris kifejezésnek, mert speciális karakternél szépen jön az exception.

  • dqdb
    nagyúr

    Regex segítségével be tudod állítani hogy a kis-nagybetű ne legyen probléma:

    const regex = new RegExp(textToMark, "gi");
    textContainer.replace(regex, "<mark>" + textToMark + "</mark>");

    Ajánlott előtte a textToMark tartalmának escape-elése, ha véletlenül regex számára speciális karaktert tartalmazna.

    var textToMark = "a*b*c";
    var textContainer = "xxxx A*B*C yyyy a*b*c zzzz";

    var escapeRegex = new RegExp(/[.*+?^${}()|[\]\\]/g, "g");

    console.log(textToMark);
    var textToMark = "(" + textToMark.replaceAll(escapeRegex, "\\$&") + ")";
    console.log(textToMark);

    var replaceRegex = new RegExp(textToMark, "gi");
    console.log(textContainer);
    textContainer = textContainer.replaceAll(replaceRegex, "<mark>$1</mark>")
    console.log(textContainer);

  • dqdb
    nagyúr

    Sziasztok!

    Eszméletlen hülyének tűnhet a kérdésem, de akkor sem találom rá a választ az interneten.
    Hogyan lehet HTML JS-ben gyököt vonni? Nem négyzetgyököt Math.sqrt(25), hanem N-ediket

    Előre is köszönöm

    k. gyököt így:

    Math.pow(n, 1/k);

  • dqdb
    nagyúr

    Van esetleg köztetek olyan, aki kommunikált már HTML JavaScript-el USB-s eszközzel?

    [link] [link]
    Itt van egy WebUSB-t használó oldal, ez bizonyos billentyűzetek konfigurálását (kiosztás, világítás) teszi lehetővé a böngészőből. A támogatott billentyűzetek raw HID protokollon keresztül fogadják a kéréseket és beszélget az oldallal.

    Nem én írtam, csak azonnal beugrott.

  • dqdb
    nagyúr

    Üdv!
    Random számokat szeretnék kiíratni X darabot, de azt szeretném, hogy az X darabon belül ne legyen kétszer ugyan az a szám kiírva. Mondjuk ha az 5 egyszer már volt, akkor az ne legyen mégegyszer abban a körben. Ha mondjuk a random csak 0-9 ig terjedő számok közül választhat, de X 15-el egyenlő, azaz 15 darab kellene, akkor is csak 10 szám legyen random sorban (a nullával együtt ugye), azaz a fontosabb prioritás az legyen, hogy ne ismétlődjön egy körben a random szám, mintsem az X értéke.

    Ha az [A, B] intervallumot szeretnéd véletlen sorrendben felsorolni (mert amit leírtál, az nem véletlenszám-generálás, hanem véletlensorrend-generálás), akkor készíts egy tömböt [A, A+1, A+2, …, B-1, B] elemekkel, egy A-tól B-ig vagy A-tól (A+B+1)/2-ig menő ciklussal cserélj ki két elemet, ahol a két sorrendet véletlenszám-generátorral határozod meg. A generálás pedig mehet a tömbből shift() metódussal, amíg van benne valami.

    Másik lehetőség, hogy gyűjtöd egy listába az eddig kisorsolt számokat. Ha a lista hossza megegyezik a B-A+1 értékkel, akkor nem tudsz visszaadni semmit sem, mert elfogytak a lehetőségek. Ha rövidebb a lista, akkor addig generálsz véletlen számot, amíg az nem lesz benne a listában. A visszaadott számot hozzáfűzöd a listához. A módszer hátránya a másikkal szemben, hogy induláskor igaz, hogy O(1) időt igényel O(n) helyett, de a generálás már legjobb esetben is O(n×log n) lesz O(1) helyett.

  • dqdb
    nagyúr

    Bocsánat a dupla posrért, de most láttam egy oldalt, ahol a srác egy számot is beírt a query után.
    parseInt(document.querySelector("input[name='userAge']").value, 20);

    Az a szám mire jó?

  • dqdb
    nagyúr

    A selectorok tuti jók, ugyanis a konzolon beírva a document.querySelector parancsot, jó eredményt ad vissza.

    Kiírattam consolera az eredményeket. PL:
    const extra = parseInt(document.querySelector("input[name='extra']:checked".value));
    console.log(extra);

    Az eredmény NaN.

    const extra = parseInt(document.querySelector("input[name='extra']:checked").value);

  • dqdb
    nagyúr

    var height = 200;
    var height250 = 200+250;
    var x = `'${height250}px'`;
    var x = '450px';
    document.getElementById('demo').style.paddingTop = x;

    Ha az alsó var x-et használom, beállítja demo element paddingtop-ját 450px-re , ha kikommentelem az alsó var x = ''450px'-et, akkor nem. Pedig a felső var x értéke ugyan az kell, hogy legyen.

    JSFiddle

    Vagy `, vagy ', de nem egyszerre a kettő.

  • dqdb
    nagyúr

    Sziasztok,
    Egy kis segítségre lenne szükségem.
    Írtam egy funciont egy html oldalhoz:
    function calcAmount() {    
    const hamburgerPrice = 1200;    
    const extra = parseInt(document.querySelector("input[name='extra']:checked")); 
    const souce = parseInt(document.querySelector("select[name='souce']"));
    const quantity = parseInt(document.querySelector("input[name='quantity']"));
    document.querySelector("span[id='amount']").innerHtml = (hamburgerPrice + extra.value + souce.value) * quantity;}

    Eredményként mindig NaN-t kapok.
    Mi lehet a gond?

    function calcAmount() {
    const hamburgerPrice = 1200;
    const extra = parseInt(document.querySelector("input[name='extra']:checked").value);
    const souce = parseInt(document.querySelector("select[name='souce']").value);
    const quantity = parseInt(document.querySelector("input[name='quantity']").value);
    document.querySelector("span[id='amount']").innerHtml = (hamburgerPrice + extra + souce) * quantity;
    }

    Feltéve, ha jók a selectorok. Ilyenkor a legszerencsésebb megoldás legalább console.log hívásokkal naplózni minden értéket, ha debugolni nem akarsz.

  • dqdb
    nagyúr

    Üdv!
    Van egy modal.js-em. Nem akar stoppolódni!

    ...
    function startCallback() {
    var startCB = window.setInterval(myCallback, 500, -1);
    }

    function stopCallback() {
    console.log('TRY TO STOP');
    window.clearInterval(startCB);
    console.log('STOPPED');
    }

    function myCallback(a)
    {
    plusSlides(a);
    }
    ...

    Start onclickre el kezdi cserélni a képeket a slider, de stopra ezt a hibát kapom:
    modal.js:44 Uncaught ReferenceError: startCB is not defined
    at stopCallback (modal.js:44)
    at HTMLAnchorElement.onclick

    A startCB-t lokális változóként definiálod.

  • dqdb
    nagyúr

    vagyis fuzd ossze: az innerHTML utan += legyen, ne siman =
    mert most mindig az uj betu lesz az egyeduli erteke

    Inkább egy lokális változóba gyűjtse az értéket, aztán a végén frissítse az eredménnyel az innerHTML-t, mert nem szerencsés újrarendereltetni az oldalt minden részlépés után.

  • dqdb
    nagyúr

    Szia
    Az a bajom ezzel, hogy nem tudom .textContent -el őket szöveges formába hozni az Objektumokat. Egy ilyet kapok vissza.
    Amikor ezt be írom:
    Array.from(document.querySelectorAll(".adminbox_table_content_col_1")).textContent

    [td.adminbox_table_content_col_1, td.adminbox_table_content_col_1, td.adminbox_table_content_col_1, td.adminbox_table_content_col_1, td.adminbox_table_content_col_1, td.adminbox_table_content_col_1]

    Array.from(
    document.querySelectorAll(".adminbox_table_content_col_1"),
    x => x.textContent)

  • dqdb
    nagyúr

    A cert (kotorászás helyi szerveren), a session id (szintén kotorászás, temp file írás), az új process / thread (cpu költség az is +4 mega vagy több memória per processz) - ezek ott vannak mindegyik logikai framewrok aljában, és ha nem pár 10-el szorzod be, hanem pár 1000-el, élve felfalják a szervert.

    A http/2 mire lenne jó nekem jelen esetben?

    Egyenlőre úgy tűnik, xmlhttprequest és c# httplistener lesz belőle. Gyártok tesztet, amint beletörődtem a kudarcba, és majd meglátom az eredményeket. Ha kukás, eleresztem.

    A titkosítás teljesítményre gyakorolt hatását ketté kell bontani kapcsolatfelépítésre és a már felépített kapcsolaton keresztüli kommunikációra.

    Egy TLS kapcsolatnál a felépítés költsége az igazán jelentős, ez hálózati oldalon egy extra RTT körből jön össze a protokoll miatt (a TLS1.3 és a neked ajánlott HTTP/2 rendelkezik zero-RTT opcióval, szóval ez eliminálható), CPU oldalon egy privát kulcsos műveletből, ami a kriptográfiai műveletek között messze a legdrágább.

    Először lefuttattam egy Core i5-4590-en a kéznél levő őskövület, 2012-es OpenSSL 1.0.1c egy szálon futó sebességtesztjét:

    sign verify sign/s verify/s
    rsa 2048 bits 0.004417s 0.000136s 226.4 7361.3
    rsa 4096 bits 0.032730s 0.000511s 30.6 1955.3

    Aztán beugrott, hogy azóta bekerülhetett AES-NI támogatás az OpenSSL-be és a CNG-be is (saját céges teszt volt RSA aláírás témakörben, azon az OpenSSL-t használó C kód és a CNG-t használó C# kód ugyanazt a teljesítményszintet nyújtotta), ezért fordítottam OpenSSL 1.1.1c-t, és lemértem azzal is:

    sign verify sign/s verify/s
    rsa 2048 bits 0.000616s 0.000029s 1623.4 33982.7
    rsa 3072 bits 0.002859s 0.000060s 349.8 16806.2
    rsa 4096 bits 0.006546s 0.000104s 152.8 9661.8

    Az előrelépés látványos, és a fenti processzor egyetlen szálon 1623 aláírást tud végrehajtani másodpercenként a most elterjedt 2048 bites kulccsal. Mivel ennek a kulcsméretnek várhatóan már csak pár éve van, hogy átcsússzon nem ajánlottba (bár addig még rengeteg, hogy határozottan kerülendő legyen), bekerült a 3072 és 4096 bites kulcsméret is, azokat is érdemes nézegetni, hogy mire lehet majd 8-10 éven belül számítani. Az ECC opciókat kihagytam, azok CPU erőforrásban a 2048 és 3072 bites RSA között vannak valahol korábbi céges tesztjeink alapján.

    Ha már felépült a kapcsolat, akkor azon titkosítva mennek át az adatok, ez ma tipikusan AES128/AES256. Lássuk a teszteket (csak frissebb OpenSSL, itt 10% javulás volt csak a korábbihoz képest):

    type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
    aes-128 cbc 138254.38k 146752.33k 153316.83k 148921.83k 151887.48k 151125.24k
    aes-192 cbc 107198.00k 121410.13k 124547.81k 122201.29k 128566.72k 129934.99k
    aes-256 cbc 97304.25k 107784.19k 107225.75k 105430.48k 106100.13k 104593.96k

    Azaz a ma elterjedt AES128-cal egyetlen szál 138 MB/s sebességre képes a gépemen, ebbe az általad megadott 15 MB/s sebességigény röhögve belefér, egyetlen átlagosan erősnek nevezhető CPU egyetlen szála 11%-os terheléssel kiszolgálja a létrejött TLS csatornán a titkosítást, ezt én elhanyagolható erőforrástöbbletnek nevezném. Az AES128 várhatóan még sokáig velünk lesz ajánlott formában, itt erőforrás szempontjából a jövőre nézve a legrosszabb eset az AES256-ra áttérés jelenti.

    A fentiekből látható, hogy nem kell hatalmas szerverfarm ahhoz, hogy kiszolgálj 10000 kapcsolódást, elég egy szerver megfelelően sok maggal, de az is látható, hogy a HTTP Keep-Alive funkcióra egyszerűen kötelező építeni, mert ezzel a kapcsolatfelépítést tudod megspórolni, minden kéréshez külön TLS csatornát építeni drága hobbi és ahhoz tényleg kell az erőforrás (azonban mivel böngésző a túloldal, ezért ahhoz komolyan meg kell dolgozni, hogy kiiktasd azon az oldalon a keep alive-ot).

    10000 tps-hez a szervert megfelelően össze kell rakni. Felejtsd el az async idők előttről itt ragadt HttpListener-t, az ASP.NET Core-ra építs IIS vagy Kestrel alapokon (és azonnal kapsz HTTP/2 támogatást), ahogyan martonx ajánlotta, vagy ha pehelysúlyra vágysz HTTP/2 nélkül, akkor ott a uHttpSharp. A kérések kiszolgálását kizárólag async kód végezze kihasználva az aszinkron futás lehetőségét az összes IO műveletnél, mert ilyen terhelés töredékénél is luxusnak számít az 1 worker thread/kérés működés (az általad írt 1 process/kérés pedig teljes mértékben az).

    További olvasnivaló a témában itt.

  • dqdb
    nagyúr

    Sziasztok!

    Az alábbi kódban kérnék segítséget. Lefut, de minden zöld, dátumtól függetlenül:
    function colorCodeRows() {

    SPClientTemplates.TemplateManager.RegisterTemplateOverrides({
    OnPostRender: function (ctx) {

    // get today's date
    var today = new Date();
    // zero out the time portion so we will only compare days
    today.setHours(0,0,0,0);

    var rows = ctx.ListData.Row;
    for (var i = 0; i < rows.length; i++) {

    // get the date set in your date YourDateField
    var itemDate = new Date(rows[i]["Határidő"]);
    // zero out the time portion so we only compare days
    itemDate.setHours(0,0,0,0);

    var rowId = GenerateIIDForListItem(ctx, rows[i]);
    var row = document.getElementById(rowId);

    if (itemDate > today) {
    row.style.backgroundColor = '#00FF00';
    } else if (itemDate = today) {
    row.style.backgroundColor = '#FFFF00';
    } else if (itemDate < today) {
    row.style.backgroundColor = '#FF0000';
    }
    }
    }
    });
    }
    RegisterModuleInit(SPClientTemplates.Utility.ReplaceUrlTokens('~site/SiteAssets/JSLink/coloring.js'), colorCodeRows);
    colorCodeRows();

    Nem tudom mit nézek be, mert elvileg teljesül a többi feltétel, de a notepad nem tud lépésenkénti futtatást.

    itemDate = today

    ez biztosan rossz, mert így értékadás is

  • dqdb
    nagyúr

    Sziasztok, MongoDB-vel szeretnék olyat csinálni, hogy a usertől békérek egy usernevet illetve egy profilnevet, ha profilnevet nem ad meg, akkor a default '[username]'s profile' legyen.
    A gondom az, hogy a bevitt usernevet nem tudom sehogy sem elérni a default résznél. Mi lenne a helyes módja ennek? Köszönöm :R
    const mongoose = require('mongoose');
    const Schema = mongoose.Schema;

    const User = new Schema({
    _id: mongoose.Schema.Types.ObjectId,
    username: {
    type: String,
    required: true,
    unique: true,
    },
    profilename: {
    type: String,
    default: ??? ,
    },
    });

    module.exports = mongoose.model('User', User);

    Init hook segítségével tudod ezt megoldani:

    User.post('init', user => {
    if (!user.profilename) {
    user.profilename = user.username + "'s profile";
    }
    });

  • dqdb
    nagyúr

    Most már nem szeretnék API-val foglalkozni, csak egy script kódot szerettem volna amivel nem kell nagyítani a PDF-et. Lehetséges valahogy ez?

    Azzal a téves feltételezéssel élsz, hogy a kliensen létezik és engedélyezett a PDF plugin:

  • dqdb
    nagyúr

    Sehogy se működik nem azzal van gond. Valami más lesz. Amúgy azért gyakorlom iframen, mert tömegesen szeretnék eltüntetni dolgokat egy másik oldalról és azt beépíteni a saját oldalamba.

    Amúgy azért gyakorlom iframen, mert tömegesen szeretnék eltüntetni dolgokat egy másik oldalról és azt beépíteni a saját oldalamba.
    Ennek azért erőteljes jogi vonzata is van.

  • dqdb
    nagyúr

    Erre gondoltam. Ez nem jQuery?

    const btn = document.querySelector('.btn__change-bgColor');
    const target = document.querySelector('.target-wrapper');

    A kattintósnál meg azt értem, hogy van egy gomb és ha rákattintok elsőre, akkor legyen mondjuk piros, ha rákattintok másodjára legyen mondjuk nagyobb és így tovább.

  • dqdb
    nagyúr

    Még egy olyan kérdésem lenne, hogy ezt a 2 scriptet hogy tudom egymásba "fűzni"?
    Tehát, hogy ne 2 külön kódot kelljen lefuttatni, hanem csak egyet, ami mindkét utasítást tartalmazza.

    javascript:(function a(){document.getElementById("termsAccept").checked=true;})()
    javascript:(function b(){document.getElementById("summaryForm").submit();})()

    javascript:(function a(){document.getElementById("termsAccept").checked=true;document.getElementById("summaryForm").submit();})()

  • dqdb
    nagyúr

    Nagyon köszi! :R
    Meg tudnád részleteiben világítani hogy vadásztad ki? (amatőrködöm csak a témával autodidaktaként...)

    Igen, meglehetősen egyszerű volt megtalálni:
    1. megnyitottam az oldalt, majd utána a Developer Tools-t a Ctrl+Shift+I megnyomásával, ott Network fül
    2. gépeltem a mezőbe, és láthatóan nem volt hálózati forgalom, így egyértelművé vált, hogy a teljes lista lejön, nem a szervert használja a találatok szűkítéséhez
    3. mivel az ilyen típusú adatokat általában külön fájlban szokták letölteni, ezért első tippre bekapcsoltam az XHR-re szűrést, és újratöltöttem az oldalt
    4. megjelent a listában a productselector/ sor, így itt véget ért a keresgélés, nem kellett a sokkalta hosszabb JS listát végigbogarászni

  • dqdb
    nagyúr

    Ezen az oldalon lennék kíváncsi, hogy ha beírom a keresőbe, hogy: MG, az milyen listából olvassa be az aktuális terméktípusokat? (A lista tartalmát szeretném megkapni vagy vágólapra helyezni csak nem tudom hol lehetne rátalálni akár a böngi betöltött fájljai közt is...)

    [link]

    Csak négy oldalt töltött le XHR segítségével, ráadásul beszédes URL-t használva, így szerencsére kódot sem kellett ahhoz nézni, hogy meglegyen.

  • dqdb
    nagyúr

    Azt szeretném elérni, hogy ha bárhol kiadom a kódban a getPage('http://urlcím'); -et, akkor a DATA globális változóban ott legyen az adott oldal forráskódja.

    Pl xhr, ami régen használtam, viszont gondolom node js-nél a CORS miatt nem megy:

    var DATA = '';
    function getPage(url){
    http = new XMLHttpRequest();
    http.open("GET",url, false);
    http.send();
    DATA = http.responseText;
    }

    Széllel szemben nehéz lesz ;]

    Az egész Node.js éppen az aszinkron működésre épít, így minden esetben, amikor nem aktívan dolgozol, hanem valami erőforrásra vagy eseményre vársz, legyen az hálózatról adat lekérése, fájl írása* vagy adatbázis-művelet, mindig egy callbackben kapod meg a végeredményt. Ennek az az oka, hogy a szinkron várakozás blokkol egy feldolgozószálat, és csökken a szerver feldolgozási képessége, míg aszinkron esetben az adott szál lazsálás helyett értelmes munkára is befogható, vagyis egy másik kérés feldolgozására. Most mondhatod, hogy de te ezt nem kérted, azonban azzal, hogy a Node.js alapon álltál neki, pont egy aszinkron, threadpool alapú hatékonyan skálázódó platformra esett a választásod, így vagy megszoksz, vagy megszöksz ...

    Kókányolni szerencsére sajnos minden platformon lehet, így itt is, és valószínűleg ezt keresed (nem használtam soha, keresés dobta ki). De itt sem nem véletlenül kezdődik a leírás a Githubon elérhető legnagyobb betűméretű bekezdéssel, hogy miért ne használd ezt a libraryt.

    viszont gondolom node js-nél a CORS miatt nem megy
    A CORS böngésző szintjén értelmezhető csak. A Node.js azért nem támogatja az XHR-t, mert saját API-ja van, nem a böngésző DOM modelljét másolja.

    * ebből kivételesen létezik szinkron API is, de ennek ellenére a aszinkron felület felé terelnek a hivatalos dokumentációban:

    "In busy processes, the programmer is strongly encouraged to use the asynchronous versions of these calls."

  • dqdb
    nagyúr

    Olyan kérdésem lenne, hogy mi a problémája az if feltételemben lévő 0 indexel ebben a kódban? Pont az if előtt kiíratom a teljes feltételt és hiba nélkül lefut, aztán az if-en belül pedig elszáll...

    Nem a feltétel száll el, hanem az értékadás. Az pedig azért, mert a kétdimenziós tömbként kezelt freehours feltöltése nem történt meg megfelelően. Ezért a freehours[ i ][j]-ből a freehours[ i ] már undefined értékre fut, így az undefined[j] utasítás próbál meg lefutni, nyilván sikertelenül.

  • dqdb
    nagyúr

    1. a var kulcsszót egyszer kell használni a number nevű változó esetében, mondjuk mikor először adsz neki értéket.
    2. ha csak egy kép van, a while végtelen ciklust eredményez.
    3. Ha number nem lehet nulla, mert a setWallpaper nem nullával indexeli a háttérképeket, akkor egyszerűbb a randomszám generálást úgy megírni, hogy egytől kezdődően dobjon számokat.

    Math.floor(Math.random() * (max - min)) + min;

    azaz jelen esetben

    Math.floor(Math.random() * (Hatterek.length - 1)) + 1;

    4. Elég a while ciklusban randomszámot generálni, nem kell két Math.random sor.

    Szóval ebben a formában valami ilyesmi célszerűbb:

    var Hatterek = listFiles("Hatterek", false).split("\n");
    var number;

    if(Hatterek.length > 1) {
    while(number == global('OldScrBcg')) {
    number = Math.floor(Math.random() * (Hatterek.length - 1) + 1);
    }
    } else if(Hatterek.length == 1) {
    number = 1;
    }

    if(number) {
    setGlobal('OldScrBcg', number);
    setWallpaper(Hatterek[number]);
    }

    Még while sem kell:

    var Hatterek = listFiles("Hatterek", false).split("\n");
    var number;

    if(Hatterek.length > 1) {
    number = Math.floor(Math.random() * (Hatterek.length - 2) + 1);
    if (number >= global('OldScrBcg')) {
    number++;
    }
    } else if(Hatterek.length == 1) {
    number = 1;
    }

    if(number) {
    setGlobal('OldScrBcg', number);
    setWallpaper(Hatterek[number]);
    }

  • dqdb
    nagyúr

    HTML-ben és DOM-ban csak zavaró lehet (ugyanis engedi a szabvány), de CSS szintjén nem kezdődhet számmal egy class neve:

    In CSS1, a class name could start with a digit (".55ft"), unless it was a dimension (".55in"). In CSS2, such classes are parsed as unknown dimensions (to allow for future additions of new units). To make ".55ft" a valid class, CSS2 requires the first digit to be escaped (".\35 5ft")

    De például ékezetes karakterrel igen, így néz ki a nyelvtan és a lexer releváns része:

    class
    : '.' IDENT
    ;

    ident -?{nmstart}{nmchar}*
    nmstart [_a-z]|{nonascii}|{escape}
    nonascii [\240-\377]
    escape {unicode}|\\[^\r\n\f0-9a-f]
    unicode \\{h}{1,6}(\r\n|[ \t\r\n\f])?

    Ha itt a számot csak sorszámként használnád fel, és nem tartozna hozzá konkrét CSS szabály, akkor ennek a tárolására egy data-xxx attribútum szerencsésebb megoldás lenne (és erre még CSS szabályt/szelektort is lehetne írni).

  • dqdb
    nagyúr

    [link]

    Bekapcsolva, de csak
    Uncaught ReferenceError: jQuery is not defined

    [link]

    Ha bekapcsoltad és rányomtál a Run gombra, akkor ez a hibaüzenet eltűnik, már csak a szelektoros hibát kellett kijavítani.

  • dqdb
    nagyúr

    Valaki ratudna erre lesni?

    https://jsfiddle.net/j3qh58z3/1/

    Szeretnem ha a link eltuntetne nekem a lista elemeket, de nem igazan mozgok otthonosan js-ben. :R

    jQuery('.item.col-md-4.0').hide();

    Kísérletezéskor kapcsold be Ctrl+Shift+J-vel a JS konzolt a böngészőben, hogy lásd a hibaüzeneteket. Így azonnal kibukott volna, hogy nem állítottad be JSFiddle-ben, hogy jQuery-t használnál. Ezt a JavaScript panel jobb felső sarkában a fogaskerékre kattintva tudod megtenni.

  • dqdb
    nagyúr

    Pure JS-el mennyire nevezhető ez a megoldás kulturáltnak, ha az összes li elem színét akarom változtatni?

    var listElements = document.querySelectorAll("li");
    for(var i = 0; i < listElements.length; i++){
    listElements[i].style.color = "rgb(" + currRed +
    ", " + currGreen + ", " +currBlue + ")";
    }

    Van ennél ortodoxabb, szebb megoldás?

    Ha ugyanazt a számolt adatot többször is felhasználod, akkor számold ki előre, tedd el egy változóba és onnan vedd ki az értékét. Én a JS-specifikus részekre nem térnék ki, azt majd megteszik mások.

  • dqdb
    nagyúr

    Átfogalmazom:

    Egy jól megírt kódban nincs olyan, hogy egyszer működik, egyszer nem.

    console.log("yolo");

    Minden egyes esetben ki fogja írni, hogy yolo. Nincs olyan, hogy 10x kiírja, egyszer nem. :D

    Nyilván fejlesztés közben vannak bugok, meg furcsaságok.

    Az átfogalmazásodból is hiányzik az azonos kiindulási és működési körülmények szöveg.

  • dqdb
    nagyúr

    Uraim, kérnék egy kis segítséget.
    Van egy cookie amibe tárolok szöveget.
    Az első sortörésig működik is rendesen, de ha egy enter sortörés kerül a szövegbe, akkor onnantól semmi nem tárolódik már. (ameddig nincs sortörés addig persze meg van a szöveg)
    Meg lehet ezt oldani, hogy a sortöréseket illetve az azutáni szöveget is eltárolja az adott cookie?

    Ezzel a függvénnyel kódolva mentsd el, és ezzel dekódolva olvasd ki.

    abc\r\ndefőűabc%0D%0Adef%C5%91%C5%B1

  • dqdb
    nagyúr

    üdv!
    Adott egy feladat, amelyben generálni kell 12 véletlen számot majd megkeresni közülük a 3-mal oszthatókat, végül kiíratni. Működik is, csak a képen látható dolog zavar, a vesszők ott maradnak... ki lehetne azokat szedni onnan valahogy?

    A kód (ne kössetek bele, első ilyen js feladatom, és örülök, hogy működik :) :)

    <script>
    function genrand()
    {
    var tomb=new Array(12);
    var eredmeny=new Array(12);
    var i, j;
    for(i=0;i<12;i++)
    {
    tomb[i]=Math.ceil(Math.random()*11)
    }
    for(i=0;i<12;i++)
    {
    document.getElementById("tomb").innerHTML = tomb;
    }
    j=0;
    for(i=0;i<12;i++)
    if(tomb[i]%3==0)
    {
    eredmeny[j]=tomb[i];
    j++;
    }
    document.getElementById("three").innerHTML = eredmeny;
    }
    </script>

    var eredmeny=[];

    Előre azt mondtad, hogy az eredmény 12 elemű tömb lesz, de nem írtál bele annyi elemet, így a maradék undefined értéket vett fel. A new Array() helyett inkább a sokkal tömörebb [] szintaktikát használd.

    for(i=0;i<12;i++)
    {
    document.getElementById("tomb").innerHTML = tomb;
    }

    Itt a for ciklusnak semmi értelme sincsen.

    Szűrésre és egyéb tömbbel kapcsolatos műveletekre érdemes használni a JS filter/reduce/map feature-jeit, ha lehetőséged van rá, mert sokkal tömörebb és átláthatóbb kódot eredményez:

    var eredmeny = tomb.filter(function(e) {
    return e % 3 === 0;
    });

    Csak akkor használd a == és != operátorokat, ha szükséges a konverzió, minden egyéb esetben a === és !== operátorokat használd.

    Legyél konzekvens a központozásban, tedd ki mindig a space-eket az operátorok elé és mögé, valamint a sorok elejére a megfelelő behúzást.

    for(n=0;n<12;n++)
    if(tomb[n]%3==0)
    {
    eredmeny[j]=tomb[n];
    j++;
    }
    document.getElementById("three").innerHTML = eredmeny;
    }

    És kerüld az ilyen eseteket, mert első ránézésre azt hinné az ember, hogy az innerHTML módosítása is a for cikluson belül történik, ezért tedd ki a kapcsos zárójeleket:

    for (n=0; n < 12; n++)
    {
    if (tomb[n] % 3 === 0)
    {
    eredmeny[j] = tomb[n];
    j++;
    }
    }

    document.getElementById("three").innerHTML = eredmeny;

    Vagy a JavaScript szokások szerint írva:

    for (n=0; n < 12; n++) {
    if (tomb[n] % 3 === 0) {
    eredmeny[j] = tomb[n];
    j++;
    }
    }

    document.getElementById("three").innerHTML = eredmeny;

  • dqdb
    nagyúr

    Szép találat, türelmes voltál. :D Végül is ez esetben meg lehetne tenni, hogy a fájtl letölti, átírja ennek megfelelően, és az adott kérésre ezt az új tartalmat szolgálja ki saját extensionnel, DE ennek igen komoly hátránya, hogy "bedrótozza" a korábbi kódot, és a fájl frissülése nála nem lesz érvényes.
    Azt nézem, hogy van egy ilyen rész a kódban:

    setTimeout(function() {
    $('iframe').each(function() {
    var src = $(this).attr('src');
    if(src.match(/youtube\.com/i) || src.match(/video\.mno\.hu/i)) {
    reloadBlocker = true;
    }
    });

    if(!reloadBlocker) {
    document.location.assign(document.location.href);
    }
    }, reloadTime);

    (fúj)
    Ezek szerint ha saját extensionből csak beágyaz egy elrejtett YouTube-os iframe-et (lényeg, hogy az src attribútum a youtube-ra mutasson, nyilván az egész oldalt nem érdemes beágyazni :D), akkor a reloadBlocker változó értéke true lesz, és a document.location.assign(document.location.href); sor nem fog lefutni. :D Borzasztó ronda megoldás mindenképp, de legalább nem fog 20 perc múlva (most ez van a reloadTime-ban) újrafrissülni az oldal...

    Akkor íme egy Chrome/Opera extension kettőtök kutatása alapján egy kicsit kulturáltabb injektálási módszerrel.

    manifest.json
    {
    "content_scripts":
    [
    {
    "matches": [ "http://mno.hu/*", "https://mno.hu/*" ],
    "js": [ "content.js" ],
    "run_at": "document_start"
    }
    ],
    "web_accessible_resources":
    [
    "patch.js"
    ],

    "manifest_version": 2,
    "name": "setTimeout patch",
    "version": "1.0.0"
    }

    patch.js
    Window.prototype._setTimeout = Window.prototype.setTimeout;

    Window.prototype.setTimeout = function(func, delay) {
    if (func.toString().indexOf("reloadBlocker") !== -1)
    console.log('blocked setInterval', delay);
    else
    Window.prototype._setTimeout.apply(this, arguments);
    };

    content.js
    try {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.responseText) {
    var patch = document.createElement("script");
    patch.type = "text/javascript";
    patch.innerText = xhr.responseText;
    (document.head || document.documentElement).appendChild(patch);
    }
    };

    xhr.open("GET", chrome.extension.getURL("patch.js"), true);
    xhr.send(null);
    }
    catch (ex) {
    console.log(ex);
    }

    Vagy Firefox alá Greasemonkey scriptként:

    // ==UserScript==
    // @name setTimeout patch
    // @namespace mno.hu
    // @include http://mno.hu/*
    // @include https://mno.hu/*
    // @version 1
    // @run-at document-start
    // @grant none
    // ==/UserScript==

    window._setTimeout = window.setTimeout;

    window.setTimeout = function(func, delay) {
    if (func.toString().indexOf("reloadBlocker") !== -1)
    console.log('blocked setInterval', delay);
    else
    window._setTimeout.apply(window, arguments);
    };

    Érdekes módon itt csak a window példányt tudtam manipulálni, és abban lecserélni a metódust, magát a Window osztályt nem, hogy a prototípusban cserélgessek.

    Természetesen nem vártam ki a 20 percet, a naplóba írt üzenettel teszteltem a kódot.

  • dqdb
    nagyúr

    Ez jó lenne, csak éppen ez minden oldalnál figyelmeztet, amit viszont nem akarok. Viszont ha tudom melyik jsben van a refresh marhaság, akkor azt adblockkal esetleg le tudom tiltani.

    A kódot tartalmazó .js fájl blokkolása valószínűleg nem lesz jó, mert más funkciót is kinyírhatsz vele. Neked egy olyan user JS vagy extension kell (böngészőtől függ, melyik), ami document_start vagy DOMContentLoaded eseménykor (böngészőtől függ, melyik) lefut, és lecseréli a window.setTimeout vagy window.setInterval függvényeket (a weboldaltól függ, melyiket használja). De ezt is ésszel kell tenni, hogy tényleg csak azt a kérést blokkold, amelyik az újratöltésért felelős.

    Most lusta vagyok összedobni egy pontosan ilyet, de íme egy Chrome/Opera extension, aminek hatására a böngésző letagadja, hogy tud WebM videót lejátszani, kiindulási pontnak tökéletes:

    manifest.json
    {
    "content_scripts":
    [
    {
    "matches": [ "http://*/*", "https://*/*" ],
    "js": [ "content.js" ],
    "run_at": "document_start"
    }
    ],

    "manifest_version": 2,
    "name": "Test Script",
    "version": "1.0.1"
    }

    content.js
    var patch = document.createElement("script");
    patch.type = "text/javascript";
    patch.innerText =
    "HTMLVideoElement.prototype.canPlayType = function(type) { console.log('HTML5 video', type); return type.substr(0, 10) === 'video/webm' ? '' : this._canPlayType(type); };";

    (document.head || document.documentElement).appendChild(patch);

  • dqdb
    nagyúr

    Szeretném JS oldalon is letesztelni a formom inputját:

    var illegalChars = /[\(\)\<\>\,\;\:\\\"\[\]]/ ;
    if(illegalChars.test('obj.value')){
    valid = true;
    }

    Ez viszont mindenre false értéket ad akármilyen adatot is viszek be. Hogyan tudom azt megcsinálni, hogyha az illegalChars-ban lévő meghatározásból egy sem szerepel az inputban akkor true-t adjon.

    Az obj.value szándékosan van aposztrófok között? Mert ha nem, akkor az sok mindent megmagyarázna, és ekkor már csak egy negálás hiányzik:

    valid = !/[\(\)\<\>\,\;\:\\\"\[\]]/.test(obj.value);

  • dqdb
    nagyúr

    Közben felszórtam a laptopomra vmware-t player-t. Úgy gondoltam, hogy a rövidebb utat választom, és felteszek rá egy androidot, ahhoz vannak programok, és úgy nem kell GATT-al bohóckodni. Feltettem egy android-x86-4.4-rc2-t elsőnek, hát befagyott az induló képernyőnél, azt mondják ez ismert hiba 4.2 óta. Feltettem így egy 4.0-t, azon viszont nincs net, és a bluetooth-nál sem látom a bt smart eszközömet, csak a régi bt-os mobilomat. Biztos, hogy lehetséges vmware-el bluetooth smart-ot megosztani az emulált rendszerrel?

    Virtualizált Androiddal nem foglalkoztam még. Az évek során Windows hostokról (XP, Vista, 7, 8.1) adtam már át Linux (Ubuntu, Xubuntu, CentOS, Manjaro) és Windows (XP, 7, 8.1, 10, 2012 Server) guesteknek USB-s perifériákat (webkamera, fényképezőgép, tuner, kriptotoken).

    A periféria sikeres átadásának természetesen feltétele, hogy a guest rendszerben legyen hozzá driver, az Android guest itt nagyon hamar el tud bukni, mert simán elképzelhető, hogy a kernelbe nincsen belefordítva a szükséges driver (ezen csak saját kernel fordításával tudsz továbblépni). Az ellenben nem feltétel, hogy a hoston legyen hozzá a VMware úgy is át tudja adni (például egy őskövület fényképezőgépről, amelyhez nincsen 32 bites XP-nél frissebb driver, virtualizált Linuxon keresztül tudom letölteni a képeket).

    De eddig WinJS-ről volt szó, annak mi köze az Androidhoz?

  • dqdb
    nagyúr

    Bármi ötlet, hogy win7-ről hogyan tudom megoldani a winjs befordítást és tesztelést? :D Gondolom az integrációs tesztekhez kell majd virtualbox meg emulált 8.1, jól sejtem? Egyáltalán bluetooth kapcsolatot hogyan tudnék tesztelni egy olyan gépen, amin nincs is? :D

    Lehet, hogy egyszerűbb lenne, ha a win8 adaptereket a tabletemen tesztelném(azon 8.1 van), a kódot meg git push-al frissíteném rajta. A maradék integrációs teszteknél meg kimockolnám a win8 specifikus adaptereket. Életszerű ez az elgondolás?

    Rendelsz Kínából USB-s BT4.0 adaptert (bár itthon sem sokkal drágább), azután VMware Playerben telepítesz Windows 8-at, és ott át tudod adni* neki az USB-s eszközt. Ha van elegendő mennyiségű memóriád és megfelelő processzorod, akkor a legkényelmesebb VM alól végignyomni a teljes fejlesztést.

    * elvileg ilyet a VirtualBox is tud, csak kölcsönösen nem kedveljük egymást, így olyan messzire kerülöm, amilyen messze lehet ;]

  • dqdb
    nagyúr

    Várjatok, én 4Gb-s gépen használom a VS2013 Community-t, és tűrhetően mozog (pontosabban 3 gépen, egy 16Gb-s I7-esen, egy 8Gb-s A10-esen, és egy 4Gb-s fing processzorú notebook-on). Ami viszont rengeteget számít alatta az az SSD tapasztalataim szerint.

    A nincsen TFS-t furcsálom, mert minden maszek projektemet TFS-en tartok.

    Az SSD valószínűleg elfedi a memóriahiány miatti vergődést (én 4 GB memória mellett kizárólag HDD-n próbáltam). 4 GB-tal sokkal lassabban indul a VS2013, mint egy VS2010, sokkal lassabban tölt be 30-40 projektes solutionöket, és vannak olyan editorok, amelyek használatához a vergődés miatt ekkor fokozott türelem kell (a XAML például ilyen), szóval a lassúság érzete lehet projekttípustól függő is. Én ezért aztán reflexből 8 GB memóriát adtam legutoljára a VM-nek, amikor ki kellett deríteni egy OS specifikus nyűgöt, és szükség volt adott platformon ehhez fejlesztői környezetre :)

    A TFS-es rész innen vettem, VS2015-ben szigorítottak rajta (bár ez engem az otthoni gépen nem fog érinteni, nem kedvelem a beépülő verziókezelőket, ha SVN és Git repóid vannak, akkor funkcionalitásban és megbízhatóságban a SmartSVN és SmartGit közelében sincsen egyik sem).

  • dqdb
    nagyúr

    Igazából lehet, hogy nekem van kevés memóriám (4GB) de amikor én használtam a VS Community-t akkor úgy felzabálta az összeset, hogy egy idő után használhatatlanná vált. Néztem pár beállítást erre nézve az interneten, de a problémán az se javított, csak kitolta az elfogadható kódolást egy kicsit tovább. Maga a program szerintem is jó, csak sajnos emiatt nem tudom használni.

    A VS2010 volt az utolsó Visual Studio, amelyik még beérte 4 GB memóriával. Ezután alaposan hozzányúltak az IDE alapjaihoz, ami azt eredményezte, hogy 8 GB alatt kínszenvedés használni, de ha van ennyi memóriád, akkor a VS2012 és utódai érezhetően sokkal-sokkal gyorsabbak ugyanazon a gépen, mint a VS2010.

    A Community Edition pedig lényegében egy Professionalnek felel meg némi tudásbeli (nincsen TFS, CodeLens) és némi licencbeli (egyéni fejlesztők és legfeljebb 5 fős cégek használhatják) korlátozással.

  • dqdb
    nagyúr

    Ja értem, hát ilyen nemsokára leadandó házikat azért az ember kicsit másképp közelít meg, mint egy éles projektet. :D Előbbinél inkább az a lényeg, hogy a legtöbb pontot összekapard (max. nem kapod meg a teljes pontot amiatt, hogy nem ott jön be a figura, ahol kéne, ha nem marad időd kijavítani, de legalább a többi feladatból is megoldottál valamennyit), utóbbinál meg az, hogy tényleg a speckónak megfelelően működjön, különben az ügyfél mérges lesz. Ha valós, nem mindig előkerülő, de adott esetben elég problémás bugról van szó egy éles projektnél, akkor azt nem jó ellökdösni, hogy majd megcsinálom, mert akkor elfelejtődhet...

    adott esetben elég problémás bugról van szó egy éles projektnél, akkor azt nem jó ellökdösni, hogy majd megcsinálom, mert akkor elfelejtődhet
    Nem, ilyen nem fordul elő sosem, mert ugyebár mindenre van egy XKCD testcase ;]

    És erről jutott eszembe: valaki belemélyedt már jobban a kliensoldali automatizált tesztelésbe? Vajon mekkora beletanulási ideje lehet egy Jasmine+PhantomJS párosnak? A többi rész után szeretném a webes UI tesztelését is automatizálni, a kollégákkal ellentétben a Jenkins mindig ráér foglalkozni vele, és alaposan dolgozik :P

  • dqdb
    nagyúr

    PR = Pull Request.

    Az io.js-t ugy kepzeld el mint egy node-ot steroidokon :) Ujabb V8 verzio van alatta ezaltal az uj fejlesztesek amiket a Google tesz a V8-ba es libuv-be (ez mar nem google) az hamarabb jut el hozzank, fejlesztokhoz. Pl ES6 meg par uj global API. iojs-hez is hasznalhatsz Mindent amit node-hoz.

    Azt azért hozzá kell tenni, hogy natív kódot tartalmazó csomag esetén előfordulhat, hogy Node.js-sel megy, míg io.js alatt fordítási hibát kapsz a telepítésekor (a frissebb V8-ben változott valamelyik API felülete, és még nem frissítették a csomagot).

    Ne kérdezd, hogy melyik csomaggal volt problémám, mert arra már sajnos nem emlékszem. Pár hete futottam bele, amikor (nem webfejlesztőként) egy konkrét feladatra eléggé határozott elképzelésekkel kerestem a projekt alapjának összerakásához generátort vagy boilerplate kódot.

  • dqdb
    nagyúr

    "Aki nem tudja, mi a különbség a Java és a JavaScript között, annak az ECMAScript garantáltan nem mond semmit."
    Annál jobb, legalább a Java és JavaScript közé egyenlőségjelet tévők elbizonytalanodnának, hogy jó helyen járnak-e. :D

    Igen, pontosan ez volt a javaslatom mögötti ötlet.

  • dqdb
    nagyúr

    Így is újból és újból érkeznek kérdések Javával kapcsolatban ide, most még a Javás gőzölgő csésze meg is erősíti a tévhitet, hogy ugyanaz a kettő, pedig az első mondat az összefoglalóban az, hogy nem összekeverendő. :D

    Szerintem a topik címét kellene módosítani JavaScript/ECMAScript topikra, az ES megnevezés jelenléte eléggé jó szűrő lenne.

  • dqdb
    nagyúr

    a kérdésed jó azóta javitottam azt is :)

    na most nekem ez totál kinai :D tudnál segiteni mit kéne átirnom a sendhez ?

    Ha ennyire nem vagy járatos a témában, hogy a jquery-mockjax leírásában is elvesztél, akkor inkább telepítsél egy webszervert, létezik portable megoldás is rá. Vagy használj olyan böngészőt, amelyik file:// protokollnál XHR esetében még nem szigorított a source origin policy-n. A Chromium alapú böngészők kizárólag extensionökben engedélyezik a file:// címekre az XHR hívásokat, de ez se nem hiba, se nem hiányosság, hanem biztonsági-tervezési döntés: itt a 4.6.1.3 pontban kezdődik, és itt a 4.4 pontban folytatódik a kifejtése.

    Jim-Y: ráadásul a DevTools tudása bővíthető extensionök segítségével.

  • dqdb
    nagyúr

    hello

    van egy kis problémám :)

    használok egy oldalon scriptet ami betöltene egy topmenu.html-t, de persze chromeba nem jo, csak firefoxba engedi local filet meghivni. kérdésem hogy valahogy nem lehet megkerülni ezt a xmlhttprequest dolgot??
    jasmine jquery nem jó erre ?

    csatolok pár képet a hibárol

    http://kepfeltoltes.hu/141214/1230236937b_www.kepfeltoltes.hu_.png
    http://kepfeltoltes.hu/view/141214/a_www.kepfeltoltes.hu_.png

    A megoldás egyszerű: felülírod az oldalon a beépített XMLHttpRequest objektumot, legalábbis annak a send() metódusát. Itt van rá egy példa, de léteznek XHR mockup könyvtárak is, ahogyan az általad is említett jasmine-ajax is alkalmas lehet erre.

    De ha ennyire offline kell működnie az oldalnak, akkor miért a jquery.com-ról töltöd be a jQuery-t, és nem helyi fájlból?

  • dqdb
    nagyúr

    Az alábbi kód valamiért nem fut le Firebugban, a következő a hibaüzenet:

    SyntaxError: 09 is not a legal ECMA-262 octal constant
    var myDate = new Date(1989,09,24);

    Előre is köszönöm a válaszokat!

    Ha nullával kezdesz egy kizárólag számjegyekből álló numeric literalt, akkor az JS-ben (és egyéb C-szerű szintaktikából eredeztetett nyelvekben) azt jelenti, hogy nyolcas számrendszerben adtad meg az értéket. Mivel nyolcas számrendszer, így abban csak a 0-7 számjegyek érvényesek, a 9 nem.

    27= 0x1b = 033

    Szóval szépérzéktől vezéreltetve ne írd ki a kezdő nullákat sosem, mert csúnya meglepetések érhetnek miatta.

    month: Integer value representing the month, beginning with 0 for January to 11 for December. [link]
    Kíváncsi lennék, ki volt az az idióta, aki ezt ilyenre kitalálta, és miért tette. De igazából az egész Date objektum egy állatorvosi ló a mit ne típusú JavaScript programozói hibák szemléletes bemutatására.

  • dqdb
    nagyúr

    Projekttől függ, hogy mennyien dolgozunk rajta. De se nekem, se munkatársamnak nincs ie-je (mac, linux). Általában ami chrome alatt fut az fut FF alatt is. A hét tanulsága, hogy k*rvára nem. Ez a szabványrendszer lehetne egy kicsit jobb, keresztplatform ide vagy oda...
    Mindegy, ezek után FF alatt is megnézem a kódomat. :))

    Ha dátumról van szó szövegesen, akkor mindig az ISO 8601 formátummal próbálkozzál, a legkevesebb nyűg valószínűleg azzal lesz. ECMAScript 3-ban nem volt szabványosítva a mező formátuma, ECMAScript 5-ben egyértelműen szerepel az ISO 8601 támogatás szükségessége. A legtöbb böngésző történelmi okok miatt az MDN-en szereplő RFC2822 formátumot is támogatja, de ezenkívül bármi más esetében már érhet meglepetés.

  • dqdb
    nagyúr

    Sziasztok!

    Ez meg tudná mondani valaki, hogy pontosan mit végez és mit eredményez?

    function CreatePassword(P) {
    var code=0
    for (var i=0; i<P.length;i++) {
    code = code + (i+1) * (P.charCodeAt(i)-95)
    }
    return code
    }

    Előre is köszönöm!

    Ez egy rém gyenge próbálkozás egy olyan checksum megvalósításra, amelyet alapvetően kisbetűs szavakra talált ki valaki.

  • dqdb
    nagyúr

    Jelezd a problémát a javascript library készítőinek. Nincs mit.

    Már más megtette ezt 9 hónappal ezelőtt, és a reakció hiányából úgy tűnik, egyetért veled a fejlesztője :DDD

    Mivel van rajta autoplay, ráadásul eszerint alapértelmezett beállítás, ezért bárcsak ne működne a többi platformon sem ...

  • dqdb
    nagyúr

    For ciklusban az általad használt módon nem illik az innerHTML-hez hozzáadni tartalmat, ugyanis ilyenkor minden alkalommal a böngésző változást észlelve újrarendereli az oldalt. Egy változóba gyűjtsd össze a teljes változást, és egyszer nyúlj hozzá az innerHTML-hez. Szintén nem illik for ciklusban a DOM-ból lekérdezni állandóan egy objektumot, amikor azt a ciklus előtt cache-elhetted volna egy változóba.

    function f()
    {
    var min = parseInt(document.getElementById("min").value);
    var max = parseInt(document.getElementById("max").value);
    var s = "";
    var paddingLength = -max.length;
    var paddingString = new Array(-paddingLength).join("0");
    for (; min <= max; min++)
    s += (paddingString + min).slice(paddingLength) + " | ";
    document.getElementById("box").innerHTML = s;
    }

    Most nézem, hogy a max.length az valójában max.toString().length akart lenni ...

  • dqdb
    nagyúr

    Portolom a kérdést a html-es topicból...

    Azt hogy lehetne megoldani, hogy az előbbi kódomban [link], ha a max értéke mondjuk százas vagy ezres nagyságrendű, akkor az egyes helyiértékeket 0-val töltse fel vmi ciklus? Nem bírok rájönni sehogy sem.

    Pl: 001... 010... 100 vagy 0001... 0010... 0100... Arra gondoltam kérjem le az input value hosszát a document.getElementById('max').value.length kóddal. (?)

    For ciklusban az általad használt módon nem illik az innerHTML-hez hozzáadni tartalmat, ugyanis ilyenkor minden alkalommal a böngésző változást észlelve újrarendereli az oldalt. Egy változóba gyűjtsd össze a teljes változást, és egyszer nyúlj hozzá az innerHTML-hez. Szintén nem illik for ciklusban a DOM-ból lekérdezni állandóan egy objektumot, amikor azt a ciklus előtt cache-elhetted volna egy változóba.

    function f()
    {
    var min = parseInt(document.getElementById("min").value);
    var max = parseInt(document.getElementById("max").value);
    var s = "";
    var paddingLength = -max.length;
    var paddingString = new Array(-paddingLength).join("0");
    for (; min <= max; min++)
    s += (paddingString + min).slice(paddingLength) + " | ";
    document.getElementById("box").innerHTML = s;
    }

  • dqdb
    nagyúr

    Hali.

    Html-ben megirtam a bejelentkezo feluletet.

    1.kerdes:
    Javascript-el meg lehet irni hozza a tobbit? (tehat hogy ne csak ott legyenn az oldalamon, hanem mukdjon is.)
    Vagy ezt csak php val lehet?
    Illetve ha javascriptel is meg lehet irni akkor a ketto kozul melyikkel erdemes nekivagni?

    2.kerdes:
    Nem tudom hogy a"kijelentkezest hogy lehet megirni. Vagy ez csak akkor fog latszani ha javascriptel vagy phpval megirom hozza a tobbit?

    Javascript-el meg lehet irni hozza a tobbit? (tehat hogy ne csak ott legyenn az oldalamon, hanem mukdjon is.)
    Vagy ezt csak php val lehet?

    Meg lehet JS-ben is írni, ha a szerveren NodeJS fut, és te abban valósítod meg a rendszeredet, de te valószínűleg nem erre gondoltál. A megoldás lehet PHP, Ruby, Python, ASP.NET vagy bármilyen szerveroldali megoldás, az a lényeg, hogy ehhez nem elég a kliensre letöltődő HTML + JS, hanem kell egy kiszolgáló és rajta futó logika.

    Nem tudom hogy a"kijelentkezest hogy lehet megirni. Vagy ez csak akkor fog latszani ha javascriptel vagy phpval megirom hozza a tobbit?
    Session alapú megoldás kell neked, esetleg REST implementációnál ticketek használata. De úgy érzem, mindkettőtől még nagyon messze állsz, előbb a kliensoldali JS-tel kellene képbe kerülnöd, és látni, mi a kliens feladata, mi a szerver feladata, mi fut a kliensen, mi fut a szerveren, a kettő hogyan kommunikál.

    Sk8erPeter: csak 15 perc, mert egy másik feladványra elkészült előtte egy hasonló stílusú Ascii85 megoldásom, és azt donornak felhasználtam. Jó móka volt az egész, és úgy éreztem, a végeredmény kellően sokkoló lett első pillantásra ahhoz, hogy egy uglifieren ne küldjem még keresztül a kódot ;)

  • dqdb
    nagyúr

    Ezmiezezez? Még nem használtam, regelni kéne hozzá, és nem tudom, hogy megéri-e. Annyi lejött, hogy fejlesztőtréningelő valami.

    Nagyon jó móka, és kiválóan alkalmas a kevés szabadidőd elszúrására :) Röviden arról van szó, hogy valaki kitalál egy feladványt, megírja hozzá a unit testeket, és neked olyan kódot kell írni, ami átmegy a teszteken (természetesen a teszteket, valamint mások megoldásait csak azután ismered meg, miután megoldottad a feladatot).

    Érdemes megnézni mások megoldásait, lehet belőlük tanulni. És persze hirtelen ötlettől vezérelve, pusztán szórakozásból lehet alkotni tömör, de lassú és erőforrás-pocsékoló, tökéletesen karbantarthatatlan kódot, mint a for ciklustól mentes Base64 megoldásom :D

  • dqdb
    nagyúr

    Hali.

    $scope.customize = function(category, subCategory, id, result) {
    var item = {};
    console.log(category);
    console.log($scope.sportEvents.category);
    //....

    Számomra furca, hogy ha a console-ban a category: "labdarúgás" van kiírva, azt fogom, és $scope.sportEvents.category ide a category helyére beleégettem, hogy labdarúgás, akkor babán működik, megkapom a kívánt adatot.
    Viszont, ha a fenti kódot próbálom alkalmazni, akkor szevasz, kapom az Undefined-ot a pofámba.

    Hogyan lenne szemantikailag helyes, hogy a category-t megemésze? :D (A category változó tartalma dinamikusan változik.)

    console.log($scope.sportEvents[category]);

    Nem mindegy, hogy a category nevű propertyt vagy a category nevű változóban megadott nevű propertyt szeretnéd elérni.

    Kétféle módon tudod egy objektum egy propertyjét elérni: vagy obj.name, vagy obj["name"].

  • dqdb
    nagyúr

    Sziasztok!

    Nem tudtok olyan API-ról ami ajax kérések mockolását teszi lehetővé és jQuery független? Tehát a mockjax nem játszik. Lehet kliens vagy szerver API is. Üdv

    Szerintem dobj össze egy minimalista node.js + Express alkalmazást erre a célra. Ha a szerveren nulla logika kell, csak statikus JSON válasz, akkor ajánlom ezt.

  • dqdb
    nagyúr

    Hali.

    Javascript-ben kell egy tömbön végig mennem, amiben json objektumok vannak. És mivel csoportosítani kellene a nyers adatokat, akkor probálok automatikusan létrehozni egy asszociatív tömböt, ami bukó sajnos, mert van space, vagy speckó ékezetes magyar karakterek...

    Legyen ez a nyers adat (az elegendő)
    [{category: "játékok", sub_category: "angol legó"}]

    és akkor egy forEach-ben:

    var list = {};

    angular.forEach(data, function(element) {
    var key = element.category;
    var sub = element.sub_category;

    // És itt jönn a hiba, hogy az angol legó property nem jó. list.játékok.angol legó -ra nem tudok hivatkozni.
    list[key][sub] = element;
    });

    Nézegetem google-ban a cuccost, de egyelőre nem találom a megoldást. Ilyenkor mit lehetne csinálni?
    PHP-ban így tudom rendezni, de inkább teszek egy próbát angularjs-sel, hátha kliens oldalon összelehetne ezt barkácsolni (elméletben a javascript sok mindenre jó). :)

    Vagy másmilyen "asszociatív tömb" kell, vagy kódolni kellene a tömb kulcsokat...

    [link]

    Nem asszociatív tömböt hozol létre, hanem egy objektumot propertykkel, és nem a space-szel és ékezetes karakterekkel van a probléma, ugyanis JS-ben egy property neve megkötések nélkül lehet bármilyen szám vagy szöveg, hanem azzal, hogy elfelejted a kategória szintjét inicializálni.

    Ha 10-20 elemnél többet küldesz le a szerverről, akkor azt érdemes kategória-alkategória szerint rendezve megtenni, ekkor a legutoljára használt kategória és alkategória cache-elésével sokkal gyorsabban fel tudod építeni a kétszintű fát.

  • dqdb
    nagyúr

    http://jsperf.com/comparison-of-getelementby-and-queryselector

    Nem tudjátok véletlenül, hogy a querySelectorAll miért teljesít ilyen rosszul?

    Opera 12-ben pont az a leggyorsabb :)
    getElementById 2,753,807
    querySelector 249,225
    getElementsByClassName 1,654,260
    querySelectorAll 3,278,591
    jQuery - id 849,313
    jQuery - class 160,468

    Opera 25 (más Blink motoros böngészőben hasonlóak lehetnek az értékek):
    getElementById 16,966,523
    querySelector 6,662,027
    getElementsByClassName 15,028,808
    querySelectorAll 284,449
    jQuery - id 1,267,419
    jQuery - class 333,583

    Szóval bár Cathfaern magyarázata szerintem teljesen logikusnak tűnik, a számok alapján egyszerű optimalizálatlanság lehet a háttérben. Az igazán érdekes számomra az, hogy a többi megoldásnál látható hatalmas különbségek jQuery használatával mennyire eltűnnek.

Új hozzászólás Aktív témák

Hirdetés