Imam već hrpu tutoriala + ovo gore od foggy-a tak da će se naći nešto da se nabrzinu prođe prije edukacije.
Web Development rasprave/preporuke/problemi
yakuza_stinger Među ostalim, C++ je objektno-orijentirani programski jezik, samo što je u isto vrijeme i proceduralni. Primjenjiv je na više načina. Kombinirano s time da je relativno low-level u usporedbi s C#-o, Javom ili Pythonom, C++ se smatra vrlo snažnim programskim jezikom.
S druge strane, da C# i Java bi bili potpuno objektno-orijentirani programski jezici. Iako gledanje na to je li nešto čisti OO jezik je po nekima cjepidlačenje. Neki traže i najsitnije razlike da se pokuša definirati što bi bio čisti OO jezik, drugi tvrde da je dovoljno zadovoljavati osnovne principe OOP-a da bi se smatrao OO jezikom. Uglavnom, komplikacije.
Fico Među ostalim, C++ je objektno-orijentirani programski jezik, samo što je u isto vrijeme i proceduralni. Primjenjiv je na više načina. Kombinirano s time da je relativno low-level u usporedbi s C#-o, Javom ili Pythonom, C++ se smatra vrlo snažnim programskim jezikom.
Ili ukratko; Ako znaš kodirati u C-u ili C++-u, znaš u svim ostalim jezicima Sve što automatikom rješavaš u C# i Javi, C i C++ to ne radi tako i moraš sve živo sam odraditi
C# mi je osobno najdraži programski jezik, ali pisao sam kod u dosta njih, i kad znaš jedan, znaš ih sve.
Nije bas post za ovaj topic, ali da ne otvaram drugi
@Fico, @foggy, bilo tko drugi...
Imam dva polja koja treba usporediti po jednoj zajednickoj kolumni odnosno stupcu. Radi se o email adresi gdje se gleda koji clanovi prvog polja nisu prisutni u drugom polju i obrnuto.
Za ovo sam napisao binary search algoritam i to sve radi. Medutim, kako bi binary search radio, inicijalno polje mora biti sortirano po email adresi.
Radi se o obicnom stringu i koristio sam Sort-object cmdlet u PWSu, ali sam primjetio da ne radi dobro svoj posao za pojedine entrye.
Onda sam napisao algoritam za quick sort (mozete na wiki pogledat o cemu se radi) i to radi ok... ALI samo na polju sa jednim stupcem.
Kako ja imam polje sa vise stupaca gdje primjerice ROW1 ima medusobno povezane podatke za stupac 1, 2, 3 i 4, ovaj quick sort bi trebao nakon sortiranja stupca 1, pretumbat adekvatno i ostale stupce polja.
Imate li kakav savjet, ideju kako primjeniti quicksort na polje sa vise stupaca?
chono U kojem formatu imas te kolone? Imas neki excel file ili nesto?
Quick solucija Javascript:
Array emal adresa jednom stupca, foreach petlja, contains metoda kroz drugi array u kojem gledas jel ga ima, ako ima, trpas u novi array ili sto zelis.
Ali zanima me izvor adresa. Excel ti ima VSLookup koji ti to odradi u 3 klika
@foggy i @sanzo problem je sto su ta dva polja zapravo dobivena exportom iz dva totalno odvojena sustava i enrichao sam dodatno podacima iz ADa. Nije baza, vec ta dva polja postoje samo unutar skripte.
Koristio sam powershell je u njemu znam delat.
Dakle contains i slicne metode rade, ali se skripta vrti po 5min. Sa binary search algoritmom to se radi u par sekundi. Imam vise ovakvih skripti, zbog stvari o kojima ne smijem pisati,, pa mi je 5min po skripti previse vremena za daily runove
chono Mozes skriptu rekreirat da sadrzi strukturu iz primjera i zakacit negdje da probamo nesto? Barem da napravis te kolone i objasnis jos tocnije sta iz koje i gdje vucem? Tesko mi je napamet pricat, moram uzet u ruke i probat, radio sam svasta kroz powershell i cudno mi je da ti traje dugo. Ali i dalje mi fali malo konteksta. Koristim TeamCity, poweshell i bash, pa znam neke stvari napisati, ali stvarno je tesko bez primjera.
foggy moze, modificirat cu polja sa filtivnim podacima i dati svoj kod da vidis.
Mislim, ja sam napisao quicksort algoritam (https://en.m.wikipedia.org/wiki/Quicksort) koji zaista sortira cijelo polje, ali nazalost samo po "Mail" kolumni, sve ostale izgubim nakon sorta. To bi trebao editirat i implementirat da se sortiraju i ostale kolumne polja.
Tipa da funkciji quicksort das parametre array i property, te da funkcija operira nad cijelim poljem po tom propertyu, ali da na tom istom indexu polja uzme u obzir i ostale propertye i sortira ih zajedno sa inicijalnim.
Do tada, evo malo dokumentacije
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-unique?view=powershell-7.2
Micanje duplikata iz arraya u powershellu:
https://stackoverflow.com/questions/1391853/removing-duplicate-values-from-a-powershell-array
Možda nešto bude potrebno. Ima i sort arrayeva, sve se da, sam trebamo primjer i zahtjeve.
Uglavnom, više ćemo nakon primjera, treba dovest podatke prvo u red da se lako s njima rade akcije. Isto tako, ako koristš Jenkins onda možeš rezultate spremat u Jenkins build varijable pa njih lako preneseš u sljedeći korak build pipelinea i radiš s njima šta treba. Ima 100 načina, naći ćemo najbolji.
- Uređivano
@foggy i @Fico
Hej ekipa, evo detaljnije objasnjena:
POLJE 1
Email
Date
POLJE 1 ENRICHED IZ AD-a
Date
SamAccountName
RealName
Office
Email
POLJE 2
ControllerId
EventTime
Username
UserToken
EventId
Znaci tek kada "obogatim" POLJE 1 sa podacima iz ADa, mogu raditi usporedbu po SamAccountNameu (username):
foreach ($Entry in $POLJE1) {
if ($POLJE2.username -notcontains $Entry.SamAccountName) {
$Difference += $Entry.Email
}
}
Problem je upravo to "obogacivanje" POLJA1, gdje koristenje "where-object", "contains" ili bilo cega drugog traje predugo, jer je AD uz sve filtere prevelik i to vrti jako dugo.
Ja sam sam tu potrebu koristio Binary Search algoritam:
function BinarySearch {
Param ($SortedArray, $Attribute, $SearchedObject)
$startIndex = 0
$endIndex = $SortedArray.length - 1
$Output = @()
if ( ( $SortedArray[$startIndex].$Attribute -gt $SearchedObject ) -or ($SortedArray[$endIndex].$Attribute -lt $SearchedObject ) ) {
return "Out of scope!"
}
while ($startIndex -le $endIndex) {
$middleIndex = $startIndex + [Math]::floor(($endIndex - $startIndex) / 2)
if ($SortedArray[$middleIndex].$Attribute -eq $SearchedObject) {
$Output += $SortedArray[$middleIndex]
for ($n=$middleIndex - 1;$SortedArray[$n].$Attribute -eq $SearchedObject;$n--) {
$Output += $SortedArray[$n]
}
for ($n=$middleIndex + 1;$SortedArray[$n].$Attribute -eq $SearchedObject;$n++) {
$Output += $SortedArray[$n]
}
}
if ($SortedArray[$middleIndex].$Attribute -lt $SearchedObject) {
$startIndex = $middleIndex + 1
}
else {
$endIndex = $middleIndex - 1
}
}
return $Output
}
Medutim, da bi binary radio, on mora operirati sa sortiranim poljem, a upravo to sortiranje u Powershellu ne radi kako spada:
UPOTREBA BINARY SEARCH da bi se obogatilo POLJE1 sa podacima iz ADa:
foreach ($Entry in $POLJE1) {
$UserEntry = BinarySearch -SortedArray $ADExport -Attribute Mail -SearchedObject $Entry.Email
AD Export i sortiranje PWS cmdletom "Sort-Object":
$ADExport = Get-ADUser -Filter 'Mail -like "XXX" -and Enabled -eq "True"' -SearchBase $Path -Properties Mail, extensionAttribute8 | Select-Object SamAccountName, Mail, Name | Sort-Object -Property Mail
Ono sto meni treba je Quicksort funkcija koja operira nad ADExportom i poslozi po propertyu (kolumni) Mail, ali isto to napravi nad propertyima SamAccountName, Name. Ovo je kako trenutno izgleda moja quicksort funkcija:
function quicksort($array) {
$less, $equal, $greater = @(), @(), @()
if( $array.Count -gt 1 ) {
$pivot = $array[0]
foreach( $x in $array) {
if($x -lt $pivot) { $less += @($x) }
elseif ($x -eq $pivot) { $equal += @($x)}
else { $greater += @($x) }
}
$array = (@(quicksort $less) + @($equal) + @(quicksort $greater))
}
$array
}
Pogledam nakon posla danas.
- Uređivano
chono Ok, moram se skoncentrirat, pa ću na codepen ili negdje dići ovo što si napravio, tj barem okvirno.
chono Problem je upravo to "obogacivanje" POLJA1, gdje koristenje "where-object", "contains" ili bilo cega drugog traje predugo, jer je AD uz sve filtere prevelik i to vrti jako dugo.
Znači prvi korak je uzeti POLJE1 i proširiti ga podacima koje imaš iz AD-a, po emailu?
POLJE1 je podatak koji imaš iz jednog sustava, i ono je referenca za podatke ili? Pokušavam povezat taj dio i AD dio. Što iz originalnog POLJE1 mičeš, ili ništa ne mičeš, nego samo tražiš te mailove u AD podacima i kad nađeš, proširiš?
Jesi razmišljao raditi obrnuto, da AD podatke obradiš? Ako moraš maknuti višak u tom dijelu, da ga makneš? Pretpostavljam da radiš previše loopova na velikom podatku, u ovom slučaju AD podatku, možda je dobro probati obrnuto.
EDIT:
https://code.labstack.com/XkU_q8IY
Projekt (ne znam uopće tko nudi Powershell online emulaciju, pa sam ovo prvo našao). 2 puta na run da izbaci rez dolje
Možete početi slagati primjer unutra
- Uređivano
chono Ok, onda brzinsko pitanje, to što sam te pitao: Zašto AD podatak ne obradiš tako da njemu makneš višak na neki način? Koji bi onda uvjet bio?
Podaci:
- AD podaci, imaš duplića? Tipa duplih elemenata koji imaju isti email?
- POLJE1 neobrađeno, ima li tamo duplih email elemenata?
EDIT:
https://code.labstack.com/XkU_q8IY
Ovako nekako ti izgledaju podaci? Nakucao sam samo stringove i ubacio u array objekata. Jesu ti tak podaci pohranjeni?
Ako želite nešto mijenjati, napravite svoj projekt na ovoj domeni da se ne koljemo međusobno.
EDIT 2:
Vidi jel ti ovo pomaže:
`Write-Host 'Hello Chono, lets take you for a ride!'
$polje1 = @([pscustomobject]@{email="email1@email.com";date="04/19/2022"},
[pscustomobject]@{email="email2@email.com";date="04/18/2022"})
$poljeAD = @([pscustomobject]@{date="04/19/2022";SamAccountName='userName1';RealName="Real Name hehehehehehe";Office='Office 1';email='email1@email.com'},
[pscustomobject]@{date="04/18/2022";SamAccountName='userName2';RealName="Real Name 2";Office='Office 2';email='email2@email.com'},
[pscustomobject]@{date="04/17/2022";SamAccountName='userName3';RealName="Real Name 3";Office='Office 3';email='email3@email.com'})
foreach( $elem1 in $polje1 ) {
$realNameExp = $poljeAD | Where-Object { $_.email -eq $elem1.email }
Write-Host "Expanded data for polje1 $($elem1.email): $($realNameExp)"
}`