Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Death Walker

Stran: 1 ... 10 11 [12] 13 14 ... 31
166
a jaktože když root na server vytvoří soubor (má práva) -rw-r--r-- 1 root root 3 Jan 22 00:12 /datadisk/upl/chf/rr.txt, tak ho klidně lokální cucák klient na  terminálu přihlášený  jako vzdálený cucák uph  přihlášený jako uph může smazat)
(up je chroot drwxr-xr-x 3 root root), chf je zapisovatelný adresář (drwxr-xr-x 3 uph uph 65 Jan 22 00:18 chf)

uph je jméno uživatele na serveru.
mount je  sshfs "uph@rIP:" -p 22  lokalni.mount.point
kdežto uživatel uph na serveru obsah /datadisk ani nevidí jelikož nemá O:X

Pretoze ma k tomu nastavene prava.

Ak to ma fungovat tak ze subor moze zmazat len vlastnik suboru, tak nadradeny adresar musi mat nastaveny sticky bit

167
Vývoj / Re:Hledání a nahrazování pomocí JavaScriptu
« kdy: 21. 01. 2022, 05:16:42 »
A teraz by to chcelo zrovnat branky, bud by ste mal pouzit kod ktory ste sem postoval, alebo ja ten svoj optimalizujem.
Vy jste tvrdil, že je pomalé volat pro každé nahrazení funkci. To je kód, který je v tom testu. Já jsem v mém původním návrhu měl feturu navíc, že bylo možné každý token nahrazovat jinou náhradou, takže se tam volala další funkce. Nic takového váš kód nedělá, takže jsem srovnal podmínky tak, aby oba kódy dělaly to samé.
Njn, ako som si myslel.
Njn, jenže to už testujete něco jiného, protože jste kus vaší funkce vytrhl mimo test, takže neměříte dobu trvání celé vaší funkce. Pak je to opravdu optimalizace na velký počet nahrazování se stejnou sadou tokenů (což je zase váš nevyslovený předpoklad, že něco takového bude potřeba), tedy je to jiné zadání. Jinak v tomhle speciálním případu (o kterém ale původně nebyla řeč) je vaše funkce opravdu cca o 1/3 rychlejší. Láme se to teprve u dost vysokého počtu tokenů – u deseti tisíc tokenů už je výrazně efektivnější hledání tokenů v hashmapě než jejich procházení po jednom v regulárním výrazu.
Takze vy si svoj kodoptimalizujete ale pritom trvate aby ten moj ostal v povodnej podobe. Ste tak ferovy :D Nehrajte marias ani ine podobne hry, mohlo by to byt bolestive. :D

Naviac ked ten kod prebehne 1000000 krat tak jit s optimalizatorom bezpecne zafunguje. Preco by ale niekto ten isty text nahradzoval 1000000x dookola?
To jsou zase jen vaše dohady. Které se neukázaly jako moc dobré. Ak byste někdy dělal výkonnostní testy aplikace, věděl byste, že se kód často volá opakovaně, aby se výkon vůbec dal nějak změřit. Proč by někdo ten stejný text nahrazoval 1 000 000 × dokola byste měl odpovědět vy, protože vy jste přišel s tím, že je potřeba to optimalizovat na čas. Pokud se ten text bude nahrazovat jenom jednou a trvá to po jednu milisekundu, proč to optimalizovat?

Ale že jste to vy, dal jsem tam přesnější čítač času, takže teď už to můžete pustit i jenom jednou. Akorát že zjistíte, že to už se pohybujeme v oblasti chyby měření a jediné, co se dá říct, je to, že výkon těch funkcí je zhruba stejný. Což je opět v rozporu s vaší tvrzením, že můj kód je neefektivní.
Pozrite si ako JIT v javascripte funguje. Pri neopakovani kodu takmer vzdy pobezi interpret. JIT zafunguje az po niekolkych opakovaniach.

Ale to je len tym ze sa ten kod zopakuje milion krat a tym ste si zarucil ze sa to zkompiluje.
To vaše vytváření regulárního výrazu se zaručeně nezkompiluje ani při milionu provedení?
Mno, to RE engine je uz skompilovane, vsak. Rovnako sa skompiluje aj ten regular, ci uz pomocou re.compile alebo volanimtoho isteho s konstruktoru. Je skompilovane vzdy a nie len v urcitych pripadoch.

168
Vývoj / Re:Hledání a nahrazování pomocí JavaScriptu
« kdy: 12. 01. 2022, 14:34:52 »
https://codepen.io/filipjirsak/pen/RwLqNJg

No neke, tak si to skuste opravit funcA a funcC aby ich vystup nevratil to iste ako je input. FuncB nieco skutocne nahradzuje a je daleko pomalsia koli tomu ze robi to co sa pozadovalo - nahradzuje najdene retazce. Mozno to na 2 pokus date ;)
Dobře, speciálně pro vás jsem na konec přidal ještě porovnání výstupů. Ak byste tomu kódu nerozuměl, tak jsem tam přidal i výpis vstupu a výstupu, můžete si to porovnat očima.

Tak co, už můžeme zveřejnit výsledky, že ten váš kód je cca 3× pomalejší?

Každopádně vám děkuji za názorný příklad toho, proč je předčasná optimalizace špatně. Pustil jste se do optimalizace něčeho, o čem jste vůbec nevěděl, zda je to pomalé. A při optimalizaci jste ve skutečnosti vyrobil třikrát pomalejší kód. Asi jste se (mylně) domníval, že regulární výrazy jsou jakási magie, jejíž složitost můžete zanedbat. Ak byste tušil, jak regulární výrazy fungují, napadlo by vás, že jste tím vaším kódem pravděpodobně vyrobil tu vnitřní smyčku, kterou jste vytýkal mému kódu (a která v mém kódu není).

Zkuste si z toho zapamatovat alespoň to, že svislítko | v regulárních výrazech je vždy nebezpečné, pokud vám jde o výkon. A na vašem místě bych také přehodnotil přístup, že nemusíte měřit rychlost kódu, protože máte představu, co je asi jak rychlé. Evidentně jsou vaši představy o fungování kódu mylné.

Njn, ako som si myslel.
Pre:
Kód: [Vybrat]
const reHandles = new RegExp('@(' + handles.join('|') + ')\\b', 'gmi');
const reTopics = new RegExp('#(' + topics.join('|') + ')\\b', 'gmi');
.
.
.
.
const funcB = (input, handles, topics) => {
  return input.replace(reHandles, `<a href="/user/$1">@$1</a>`)
    .replace(reTopics, `<a href="/topic/$1">#$1</a>`);
}

Je funcA vyrazne pomalsia. A funcB a funcC su porovnatelne. Ale to je len tym ze sa ten kod zopakuje milion krat a tym ste si zarucil ze sa to zkompiluje.


169
Vývoj / Re:Hledání a nahrazování pomocí JavaScriptu
« kdy: 12. 01. 2022, 13:55:49 »
https://codepen.io/filipjirsak/pen/RwLqNJg

No neke, tak si to skuste opravit funcA a funcC aby ich vystup nevratil to iste ako je input. FuncB nieco skutocne nahradzuje a je daleko pomalsia koli tomu ze robi to co sa pozadovalo - nahradzuje najdene retazce. Mozno to na 2 pokus date ;)
Dobře, speciálně pro vás jsem na konec přidal ještě porovnání výstupů. Ak byste tomu kódu nerozuměl, tak jsem tam přidal i výpis vstupu a výstupu, můžete si to porovnat očima.

Tak co, už můžeme zveřejnit výsledky, že ten váš kód je cca 3× pomalejší?

Každopádně vám děkuji za názorný příklad toho, proč je předčasná optimalizace špatně. Pustil jste se do optimalizace něčeho, o čem jste vůbec nevěděl, zda je to pomalé. A při optimalizaci jste ve skutečnosti vyrobil třikrát pomalejší kód. Asi jste se (mylně) domníval, že regulární výrazy jsou jakási magie, jejíž složitost můžete zanedbat. Ak byste tušil, jak regulární výrazy fungují, napadlo by vás, že jste tím vaším kódem pravděpodobně vyrobil tu vnitřní smyčku, kterou jste vytýkal mému kódu (a která v mém kódu není).

Zkuste si z toho zapamatovat alespoň to, že svislítko | v regulárních výrazech je vždy nebezpečné, pokud vám jde o výkon. A na vašem místě bych také přehodnotil přístup, že nemusíte měřit rychlost kódu, protože máte představu, co je asi jak rychlé. Evidentně jsou vaši představy o fungování kódu mylné.

A teraz by to chcelo zrovnat branky, bud by ste mal pouzit kod ktory ste sem postoval, alebo ja ten svoj optimalizujem. 3x pomalsie je to koli tomu joinu, ktory si logicky musi alokovat pamat. Naviac ked ten kod prebehne 1000000 krat tak jit s optimalizatorom bezpecne zafunguje. Preco by ale niekto ten isty text nahradzoval 1000000x dookola?

170
A jinak bych poradil funkci preg_replace_callback a její ekvivalenty. Možná by ani nebyla potřeba nahrazovací část řešena být callbackově.

On to chce v javascripte, nie v php.

V php je to este jednoduchsie (predpoklada sa validne pole $tokens):
Kód: [Vybrat]
<?php

$input 
'@john and @johnathan went to see @sarah in their #hometown to look at her new #home.';

$tokens =[
  [ 
'selector' => '@',
    
'hrefPrefix' => '/user',
    
'items' => [
      
'john',
      
'johnathan',
      
'sarah'
    
],
  ],
  [ 
'selector' => '#',
    
'hrefPrefix' => '/topics',
    
'items' => [
      
'home',
      
'hometown',
    ],
  ],
];

$patterns $tokens;
$replacements = [];

array_walk($patterns, function(&$item,$key) use (&$replacements){
    
$replacements[$key] = "<a href=\"{$item['hrefPrefix']}/$2\">$1</a>";
    
$temp array_map(function($item){
        return 
preg_quote($item);
    },
$item['items']);
    
$temp join('|',$temp);
    
$item "~({$item['selector']}({$temp}))\\b~mi";
});

$output preg_replace($patterns,$replacements,$input);

echo 
"$output\n"

Z toho dostaneme:
Kód: [Vybrat]
<a href="/user/john">@john</a> and <a href="/user/johnathan">@johnathan</a> went to see <a href="/user/sarah">@sarah</a> in their <a href="/topics/hometown">#hometown</a> to look at her new <a href="/topics/home">#home</a>.

171
Vývoj / Re:Hledání a nahrazování pomocí JavaScriptu
« kdy: 12. 01. 2022, 01:13:56 »
Tak jsem napsal primitivní test porovnávající mou funkci (funcA), vaši funkci (funcB) a ještě upravenou mou funkci s tím, že se místo hledání v neseřazeném poli používá hashovací tabulka (funcC). Testoval jsem to v deno, ale pak jsem výsledek uložil jako Codepen, abyste si to mohl spustit i v prohlížeči. Výsledky z prohlížeče i deno jsou plus mínus autobus stejné, ale přesnější výsledky nejsou myslím potřeba. Výsledná čísla tu snad raději ani zveřejňovat nebudu, abyste to nebral jako urážku.

https://codepen.io/filipjirsak/pen/RwLqNJg

Prosím vás, na ty vaše kalhoty se přeci jen podívejte. Podívejte se na ně i zezadu. Nebude to hezký pohled.

Ked tak https://jsfiddle.net/DeathWalker/ps5my816/

172
Vývoj / Re:Hledání a nahrazování pomocí JavaScriptu
« kdy: 12. 01. 2022, 00:57:18 »
Tak jsem napsal primitivní test porovnávající mou funkci (funcA), vaši funkci (funcB) a ještě upravenou mou funkci s tím, že se místo hledání v neseřazeném poli používá hashovací tabulka (funcC). Testoval jsem to v deno, ale pak jsem výsledek uložil jako Codepen, abyste si to mohl spustit i v prohlížeči. Výsledky z prohlížeče i deno jsou plus mínus autobus stejné, ale přesnější výsledky nejsou myslím potřeba. Výsledná čísla tu snad raději ani zveřejňovat nebudu, abyste to nebral jako urážku.

https://codepen.io/filipjirsak/pen/RwLqNJg

Prosím vás, na ty vaše kalhoty se přeci jen podívejte. Podívejte se na ně i zezadu. Nebude to hezký pohled.

No neke, tak si to skuste opravit funcA a funcC aby ich vystup nevratil to iste ako je input. FuncB nieco skutocne nahradzuje a je daleko pomalsia koli tomu ze robi to co sa pozadovalo - nahradzuje najdene retazce. Mozno to na 2 pokus date ;)

173
Vývoj / Re:Hledání a nahrazování pomocí JavaScriptu
« kdy: 11. 01. 2022, 21:11:38 »
Někdo snad tvridl opak?

Myslim ze kazdy si dokaze dohladat co ste tvrdil.

To jste ovšem teď napsal vy. Já jsem nic takového nenapsal.

Aj to si kazdy vie dohladat.

Za prvé, prohlédněte si znovu a lépe kód, který jsem napsal. Porovnáváte volání funkce F s jendím parametrem s voláním funkce F s jiným parametrem.

Za druhé, nikde není řečeno, že interpretovaný kód musí volat funkci F. Výhoda JIT je, že optimalizuje kód na míru aktuálnímu běhu programu. Takže ten kód může být mnohem efektivnější, než obecná optimalizace vznikající v okamžiku jednorázového překladu aplikaci. Efektivnější může být například i tím, že nebude volat obecnou funkci F, ale zavolá mnohem rychlejší specializovanější funkci F'. Tohle byste ovšem měl vědět, když se tu prezentujete jako odborník na JIT kompilaci.

Njn, vy tam tu funkciu F volate opakovane. Naviac ju mate v podmienke ktora na vysledku tej funkcie zavisi. Takze vam ju ziadny optimalizator nevyhodi. Mal by ste si niekedy skusit pracu architekta. Naucil by ste sa zhodnotit narocnost algoritmu este pred tym nez by ho niekto implementoval...

Aha, no dobře, bude všechny své domněnky pro vás uvozovat „ak“.

Staci ak to budete formulovat ako domienku.

O věcech, o kterých si myslím, že masy vědí stejně nebo lépe než já, nepíšu. O takových věcech si čtu, případně se ptám. Ak vy píšete o věcech, o kterých toho masy vědí víc, než vy, leccos by to vysvětlovalo. Akorát bych řekl, že v takovém případě by bylo lepší, kdybyste nic nepsal.

No a ze toho denne minimalne na roote popisete akurat dost a z toho ste spravidla vecsinu s niekym v konflikte. Mat tolko casu ako vy (nemam, praca, rodina a konicky) tak tie mudra masam predlozim v clankoch na damu temu. Bolo by to efektivnejsie ako niekomu musiet neustale dookola dokazovat ze mate vacsieho...

No jo, jenže vy nejste v suchu. Vy jenom tvrdíte, že se rozhodně nebudete dívat na své kalhoty, protože fouká severní vítr.
Na to ze mam suche nohavice, zistim pomocou receptorov v pokozke noh, nepotrebujem zatazovat zrakovy nerv. K tomu ma nedonuti ani trolenie, ktore moze fungovat iba tak na masy na ksichtoknihe...

174
Vývoj / Re:Hledání a nahrazování pomocí JavaScriptu
« kdy: 11. 01. 2022, 19:26:10 »
Objektové programování je jeden ze způsobů, jak udržovat pohromadě kód, který k sobě patří (předci třídy).

Ale rozhodie nie tak ze to vsetko strcite do jednej funkcie/metody.

Ano. Ale nebylo by nijak pracné váš kód zbavit špaget – což jste viděl sám a umístil jste komentáře tam, kde by mohla být funkce.

Kometarmi zbavit kod spagiet... To by chcelo zapis na wikicitaty :D

Mýlíte se. To, jestli se spustí či nespustí JIT kompilátor nedokáže autor JavaScriptového kódu přímočaře ovlivnit. Pokud nevíte, co znamená termín „předčasná optimalizace“ – znamená to, že autor kódu napíše kód jinak, než by ho psal normálně, v domnění, že takový kód bude efektivnější.
Tak co myslite, co bude efektivnejsie. Funkcia F napisana v C(alebo v ruste v pripade spidermonkey) ktoru zavolam s predpipravenym parametrom, alebo kod ktory sa mozno interpretuje, mozno prelozi a potom zavola a napokon bude volat funkciu F? Fakt si to potrebujete zmerat?

Aha, takže ta první citace není poučování.

Já normálně diskutuju, nevydupávám si, že jako jediný mám pravdu. Ale nevím, proč bych nemohl upozornit na to, když někdo napíše něco špatně. Pokud se vás takové upozornění dotýká, je to váš problém, ne můj.

Je rozdiel medzi poucovanim, a domienkou. Preto som zacal s "ak". Naproti tomu vy ani nepoucujete, vy rovno kadrujete "Navíc jenom hádáte, jak by asi tak mohl interpret JavaScriptu fungovat."

Ad normalna diskusia: Nemam ten dojem ze by to tu bolo preplnene ludmi s ktorymi najdete spolocnu rec. Skor na opak. Ste si naozaj isty ze problem nie je vo vas ale v masach?

Zkoušet to samozřejmě nemusíte. Problém je, když vítr fouká opačným směrem, než si myslíte.
Uvazujte trochu. Ak curam po vetre, tak som v suchu. To ze som v suchu je dostatocne overenie, bez toho aby som musel skusat vas sposob.

175
Vývoj / Re:Hledání a nahrazování pomocí JavaScriptu
« kdy: 11. 01. 2022, 18:47:27 »
Já jsem ale nepsal, že to nejde. Já jsem kritizoval to, že jste to odbyl „to se vyřeší někde jinde“. Má to být v kódu hned u kódu, který to používá. Třeba aspoň tak, jak jste to napsal v příkladu vy.

Tak ako som to napisal ja, to nemusi byt nutne spolu, moze to byt v predkovi z inej kniznice. Tak nejak predpokladam ze programujete v jave. Tak by ste to vediet mal.

To, že to neumíte napsat dobře, neznamená, že to dobře napsat nejde. A nakonec jste sám napsal příklad, který je špagetový jenom trochu, přitom je to tam ošetřené. Dalo by se to samozřejmě napsat tak, aby tam špaget bylo ještě méně. Dalo by se to napsat i objektově (a bez špaget).

Magicke funkcie ktore zahrnaju viacero funkcnosti v jednom, je skolsky priklad spagetaku.

V čem?

V tom ze sa automaticky spusti jit kompilator.

Nosíte dříví do lesa. Mám pro vás takovou pomůcku, až se zase budete pokoušet někoho poučovat. Když napíšete, jak něco funguje, zkuste to následně porovnat s textem toho, koho poučujete. Když zjistíte, že to, co napsal, není v žádném rozporu s vaším poučováním, nemáte žádný důvod myslet si, že dotyčný neví to, o čem ho poučujete. Takže to poučování zase můžete smazat.

Případně, pokud je tenhle postup na vás moc složitý, mám pro vás i jednodušší variantu: Pokud napíšete text, ve kterém někoho poučujete, zase ten text smažte.

Vas text:
Citace
To je klasická předčasná optimalizace. Navíc jenom hádáte, jak by asi tak mohl interpret JavaScriptu fungovat. Přitom dnes budete těžko hledat nějaký interpret, který by optimalizoval víc, než interprety JavaScriptu v prohlížeči (zejména V8). Možná by se to dalo srovnávat tak s JVM, pokud ji budeme považovat za interpret.

Moj text:
Citace
Predcasnej optimalizacie sa dopustate vy. Ak by ste mal aspom tusenie ako funguje V8 (ale aj spidermonkey) tak by ste vedel ze v prvom rade sa medzikod interpretuje, a az ked je k dispozicii dostatok informacii o kode tak pride na rad jit. Ale aj tamsu 2 moznosti, bud rychlejsi bez optimalizacii alebo pomalsi optimalizovany. To je ale logicke, ak je cena za jit + beh vacsia ako cena za interpret tak nema zmysel kompilovat. Kdezto vykonny kod toho regexp je VZDY skompilovany a interpret/jit ho len zavola s pattern ako parametrom.

Ja nepoucujem ale pisem svoj nazor, na zaklade svojich skusenosti. Ak nemate dispozicie viest dialog, ale vydupavat si to ze ako jediny mate pravdu, tak pravidelna navsteva diskuzneho fora musi byt pre vas velkym utrpenim. Sucitim s vami.

No a co? Vy používáte regexp, já používám regexp, takže ten váš výkonný zkompilovaný kód (o kterém se mimochodem jenom domníváte, že je zkompilovaný) používáme oba dva. Pokud si myslíte, že váš kód je lepší, zkuste hledat místa, ve kterých se ten kód liší, ne ta, která jsou stejná.

Mimochodem, změřit dobu běhu kódu není zas tak těžké. Čísla z měření by mne přesvěčila, vaše dojmy mne nepřesvědčí.

Ak ja curam po vetre a vy proti vetru, tak to neznamena ze to robite lepsie nez ja. I ked ja curam, vy curate. K poznaniu ze curanie proti vetru nie je dobry napad, nemusim nutne skusit vas sposob.

176
Vývoj / Re:Hledání a nahrazování pomocí JavaScriptu
« kdy: 11. 01. 2022, 15:56:09 »
Gratuluju, to je vůbec ten nejlepší způsob, jak vyrobit *injection chybu v aplikaci. Prostě si na všechn místech, kde by se to dalo ošetřit, říct „hm, to už je určitě ošetřené někde jinde“.

To ze to neviete, neznamena ze to nejde.

Kód: [Vybrat]
var Rplacer = function(opts) {
  var priv = {}, pub = {};
 
// vykona sa raz, sem patri pripadna kontrola vstupu
  priv.opts = opts.map(function(obj){
    obj.re = new RegExp(obj.prefix+'('+obj.tokens.join('|')+')\\b','gmi')
    return obj;
  });

// samotne nahradzovanie, volat sa moze do aleluja
  pub.replace = function(input){
    priv.opts.forEach(function(x){
      input = input.replace(x.re,x.replace);
    });
    return input;
  }
   
  return pub;
};

var r = Rplacer([
  {
    prefix: '@',
    tokens:['john','johnathan','sarah'],
    replace:`<a href="/user/$1">@$1</a>`
  },{
    prefix: '#',
    tokens:["home", "hometown"],
    replace:`<a href="/topics/$1">#$1</a>`   
  }
]);

console.log(r.replace('@john and @johnathan went to see @Sarah in their #hometown to look at her new #home.'));

To s tím nijak nesouvisí.

Suvisi.

To je klasická předčasná optimalizace. Navíc jenom hádáte, jak by asi tak mohl interpret JavaScriptu fungovat. Přitom dnes budete těžko hledat nějaký interpret, který by optimalizoval víc, než interprety JavaScriptu v prohlížeči (zejména V8). Možná by se to dalo srovnávat tak s JVM, pokud ji budeme považovat za interpret.

Predcasnej optimalizacie sa dopustate vy. Ak by ste mal aspom tusenie ako funguje V8 (ale aj spidermonkey) tak by ste vedel ze v prvom rade sa medzikod interpretuje, a az ked je k dispozicii dostatok informacii o kode tak pride na rad jit. Ale aj tamsu 2 moznosti, bud rychlejsi bez optimalizacii alebo pomalsi optimalizovany. To je ale logicke, ak je cena za jit + beh vacsia ako cena za interpret tak nema zmysel kompilovat. Kdezto vykonny kod toho regexp je VZDY skompilovany a interpret/jit ho len zavola s pattern ako parametrom.

177
Vývoj / Re:Hledání a nahrazování pomocí JavaScriptu
« kdy: 07. 01. 2022, 12:02:03 »
Tak samorejme, kazdu funkcionalitu je mozne napisat mnoho roznymi sposobmi. Ja ale nerad miesam roznu funkcionalitu do konkretnej casti programu. Ta funkcia zodpoveda za specificke nahradenie textu. Funkcionalita na validaciu tych tokenov je samozrejme za urcitych okolnosti ziaduca, ale nesuvysi priamo z fukcionalitou nahradzovania. Rovnako ako escapovanie riadiacich znakov v tom tokene. Nebudeme predsa pisat spagetak.

Co sa tyka efektivnosti, tak ten regexp byva prakticky v kazdom interpretri zkompilovany z ineho jazyka (zvedsa C). Ak si musi z toho kompilovaneho kodu zbytocne odskakovat do interpretru, tak efektivita klesa.

178
Vývoj / Re:Hledání a nahrazování pomocí JavaScriptu
« kdy: 07. 01. 2022, 01:50:47 »
Tak ide to aj bez zbytocnych cyklov alebo callbacku pre kazdy vyskyt. To je v podstate skryte GOTO label. Regexpy vedia aj OR.

Kód: [Vybrat]
const
handles = ["john", "johnathan", "sarah"],
topics = ["home", "hometown"],
tmpString = "@john and @Johnathan went to see @sarah in their #hometown to look at her new #home.";

function rplacer(text){
  return tmpString.replace(
    new RegExp('@('+handles.join('|')+')\\b','gmi'),`<a href="/user/$1"@>$1</a>`
  ).replace(
  new RegExp('#('+topics.join('|')+')\\b','gmi'),`<a href="/topics/$1">#$1</a>`
  );
}

console.log(rplacer(tmpString))

Takhle můžeš jen doufat, že nikoho nenapadne zadat handles = ["john.doe"], ono to jde ještě dál, hodnoty v handles a topics se dají přímo využít pro XSS. Takovýhle způsob psaní kódu je dost nebezpečný.

To by musel mat moznost zmenit ten script. Ak bude mat moznost zmenit ten script tak nebude vymyslat blbiny ako zneuzit handles a topic, ze ano....

179
Vývoj / Re:Hledání a nahrazování pomocí JavaScriptu
« kdy: 06. 01. 2022, 22:03:22 »
pripadne mozeme aj objektovo...

Kód: [Vybrat]
var Rplacer = function(opts) {
  var priv = {}, pub = {};
 
  priv.opts = opts.map(function(obj){
    obj.re = new RegExp(obj.prefix+'('+obj.tokens.join('|')+')\\b','gmi')
    return obj;
  });

  pub.replace = function(input){
    priv.opts.forEach(function(x){
      input = input.replace(x.re,x.replace);
    });
    return input;
  }
   
  return pub;
};

var r = Rplacer([
  {
    prefix: '@',
    tokens:['john','johnathan','sarah'],
    replace:`<a href="/user/$1">@$1</a>`
  },{
    prefix: '#',
    tokens:["home", "hometown"],
    replace:`<a href="/topics/$1">#$1</a>`   
  }
]);

console.log(r.replace('@john and @johnathan went to see @Sarah in their #hometown to look at her new #home.'));

180
Vývoj / Re:Hledání a nahrazování pomocí JavaScriptu
« kdy: 06. 01. 2022, 20:56:05 »
Tak ide to aj bez zbytocnych cyklov alebo callbacku pre kazdy vyskyt. To je v podstate skryte GOTO label. Regexpy vedia aj OR.

Kód: [Vybrat]
const
handles = ["john", "johnathan", "sarah"],
topics = ["home", "hometown"],
tmpString = "@john and @Johnathan went to see @sarah in their #hometown to look at her new #home.";

function rplacer(text){
  return tmpString.replace(
    new RegExp('@('+handles.join('|')+')\\b','gmi'),`<a href="/user/$1"@>$1</a>`
  ).replace(
  new RegExp('#('+topics.join('|')+')\\b','gmi'),`<a href="/topics/$1">#$1</a>`
  );
}

console.log(rplacer(tmpString))




Stran: 1 ... 10 11 [12] 13 14 ... 31