Új hozzászólás Aktív témák
-
petyus_
senior tag
Sziasztok!
Egy haveromnak nyáron lesz az esküvője, megkért, hogy csináljak neki egy weboldalt, ahol a vendégek vissza tudnak jelezni, illetve van egy oldal, ahol tudnak zenéket kérni. Nem egy túl bonyolult feladat, de csak pár hónapja foglalkozom ezzel, úgyhogy nem tudom mennyire jó amit csináltam.
ASP.net MVC-ben csináltam meg, kicsit lehet overkill, de mivel munkahelyemen is ezt használom, ezért erre esett a választásom. asphostpage.com-on fogom hostolni, az lenne a kérésem, ha van egy kis időtök, nézzetek rá a repora, hátha van valami, ami nagyon nem úgy működik ahogy kéne.
Van egy admin felület is, itt most admin/admin a user/pass, az éles oldalon nyilván nem ez lesz, illetve most google smtp-n keresztül megy az email küldés, ezt majd változik az asphostpage-re, most csináltam gyorsan egy ideiglenes fiókot, a jelszó megvan adva web.configban, de ez nem lesz használva később.
Szöveget/képeket mindenhol placeholderre illetve lorem ipsumra cseréltem, amúgy viszont minden ugyanaz, mint amit az éles oldalon tervezek.
[ Szerkesztve ]
-
petyus_
senior tag
válasz martonx #8118 üzenetére
Szia!
Köszi, hogy szántál rá időt, és leírtad a véleményedet .
Amikor pár hónapja elkezdtem csinálni, még egyáltalán nem ismertem az MVC-t, a leendő (most már mostani) munkahelyemen viszont az kellett, úgyhogy ezért abban írtam. Újrakezdeni nem akartam, azóta csak néha-néha hozzányúlok, 1-2 dolgot változtatok. Tehát a project nagy része még inkább a munkához szükséges dolgok gyakorlása volt, mint munkán felüli önfejlesztés.
Egyébként sok dologban egyetértek veled (felesleges Autofac, Automapper, SQL), ezeket azért használtam, hogy megtanuljam a nulláról megcsinálni, nyilván ezek nélkül is simán működne.
Az SQL-t pedig valszeg le fogom cserélni, még gondolkozom, hogy simán egy file-ba szerializáljam, vagy használjak valamilyen NoSql databázist, ez tényleg adna valami újat, ami a jövőben hasznos lehet, nyilván ehhez a projecthez nem kell túlságosan elmélyedni benne, de legalább lenne róla fogalmam.
Abban is igazad van, hogy a javascript nem túl szép, illetve elég overkill ez a pár dolog miatt behúzni a jquery-t, illetve bootstrapet, de itt főleg a backend része érdekelt a dolognak, ennek ellenére lehet átírom ezeket is, nem árt, ha jobban átlátom ezeket.
Azure-on gondolkozom majd, de egyelőre elég nehezen látom át, mire is lenne szükségem.
-
petyus_
senior tag
Ezen az oldalon, amit linkeltél, rámész a schedule exam-re, megadod az adataidat, kiválasztod a helyet, ahol vizsgálni szeretnél, választasz időpontot, és kb ennyi. Elmész, viszel valami okmányt (rémlik valami olyasmi, hogy 2 féle okmányt kell vinned), amivel azonosítanak, kipakolsz mindent a zsebeidből, semmit nem vihetsz be (talán még papírzsebkendőt is adnak, hogy ne a sajátodat vidd), beülsz, megírod, kijössz .
Én a Training360-nál voltam, de úgy rémlik, hogy több hely közül lehetett választani
[ Szerkesztve ]
-
petyus_
senior tag
Tavaly voltam a Grape-nél interjún, előtte lett meg ez a vizsgám (70-483), ott örültek neki, meg mondták, hogy évente 1-2-re ők is elküldenének. Nekik azért kellett, mert Microsoft Certified Partnerek (vagy valami ilyesmi a neve), és ehhez kell hogy legyen a cégnél x fejlesztő, akinek vannak ilyen certjei. Illetve a mostani munkahelyemen is mondták egyszer, hogy mindenki írja be milyen certjei vannak, mert az egyik ügyfélo csak akkor jön, ha van x darab.
-
petyus_
senior tag
-
petyus_
senior tag
válasz DrojDtroll #8543 üzenetére
Debug módban futtatod, ezért hiába kezeled le, a vs akkor is megáll, hogy megmutassa az exceptiont. Indítsd ctrl+F5-tel, akkor nem fog megállni. Illetve be lehet állítani, hogy a kezelt exceptionöknél ne álljon meg, de most nincs előttem, úgyhogy nem tudom megmondani hol .
-
petyus_
senior tag
válasz joysefke #8577 üzenetére
AttributeUsage attribute van az attribute-odon? Ott tudod megadni, hogy mire teheted rá. Most hirtelen nem tudom, mi a default, ha nem rakod rá.
Pl:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public class RangeAttribute : ValidationAttribute
{
}[ Szerkesztve ]
-
petyus_
senior tag
A hiba ott van. hogy tempvalue + temp T-t ad vissza, tempValue nem lehet egyenlő a kettő összegével. Írd át tempValue.Value = -ra.
Amúgy osztásnál megint lesz egy kis problémád, megszámolod hány elemből áll a lista, de az egy int lesz, azzal nem fogod tudni osztani a tempValue-t a végén (tempValue.Value-t sem), úgyhogy kell majd egy Node<T> / int overload (nem biztos, hogy pont így ahogy írom, sajnos nincs most időm jobban ránézni).
[ Szerkesztve ]
-
petyus_
senior tag
válasz joysefke #8682 üzenetére
1. most hirtelen nem tudom a választ, valószínűleg a DI-al lesz a gond, nem azt a passwordValidatort kapod, amit a userManager használ.
2. az a reset password, ott nincs belépve a user, hanem pl elfejtette a jelszavát, kiküldöd neki a passwordResetToken-t, rányom a linkre, és úgy kapod meg.
De a ChangePassword, amit írtam korábban, az belépett felhasználóra vonatkozik, oda csak egy oldPassword, newPassword kell.
-
petyus_
senior tag
-
petyus_
senior tag
válasz bandi0000 #9127 üzenetére
Ha nem jó a user/pass, akkor 401. 400 akkor, ha valami gond van a requesttel (pl nem küldött pass-t, csak usert).
Loginnál jellemzően elég egy string, hogy invalid username or pass. (azért nem invalid username, meg külön invalid pass, hogy így ne lehessen kinyerni a username-eket).
Registernél jó kérdés, hogy mi a jó statuscode már létező userre, [link] itt pl megy a vita, hogy jó-e a 409 (conflict), de fel is sorolja valaki, hogy a FB/Google/stb mit küld. Én 400-at küldenék, mert ugyan nem client hiba, de neki kell változtatnia a requesten ahhoz, hogy jó legyen.
A hibakezelésnek meg nézz utána, core-ban (nem tudom milyen verziót használsz, azt hiszem 2.2-től, de lehet, hogy csak 3.0-tól) van egy ProblemDetails classt, ezt generálja ha validationError van. Ha túljut a validationön (ha csak az a gond, hogy már létezik ilyen felhasználó, akkor túljut), akkor megnézed, hogy van-e ilyen user, ha van, akkor a ModelState-hez adj hozzá hibát, és az mehet vissza, majd a framework csinál belőle problemdetailst (ez egyébként szabány [link] ).
AVagy ha feleslegesen bonyolult neked a problemdetails, akkor csinálj egy saját error-handlert (action filter, vagy middleware), ahol olyan response-t csinálsz, amilyet akarsz, amit egyszerűen tudsz kezelni frontend oldalon.
[ Szerkesztve ]
-
petyus_
senior tag
Sziasztok!
Tavaly kezdtem fejleszteni saját felhasználásra egy home budget appot (net core + angular), egy ideje már használom is, viszont van egy elég fontos kérdés, amit csak tolok magam előtt. A számlák egyenlegének kiszámítása. (tudom, létezik ezer ilyen, valószínűleg jobbak is, mint amit magamnak csinálok, de rengeteget tudok tanulni belőle, illetve volt már 1-2 feature, ami felmerült, hogy hasznos lenne, és máshol nem láttam.)
Jelenleg ez nincs eltárolva a db-ben, hanem a számla lekérésekor kiszámolom. Ez egyértelműen nem túl hatékony, egyelőre viszont működik, 10K+ rekordnál is megvan pár ms alatt. Ennek ellenére szeretném normálisan megoldani, illetve most felmerült egy új feature ötlete. Szeretném megjeleníteni a számlák egyenlegének alakulását egy grafikonon. Írtam egy brute force megoldást, de ez már most nagyon sokáig tart (kiszedek minden számlát a db-ből hozzájuk tartozó transactionökkel, megkeresem a legelső dátumot, onnan szépen végig kell menni, és hiába szűrnék mondjuk az tuolsó 30 napra, akkor is végig kell menni az összesen).
Alapból egyszerű lenne egy minden nap lefutó jobbal rögzíteni a rendszerbe az aznapi egyenleget, így az aktuális egyenleghez elég lenne lekérni az előző napi zárás, plusz az aznapi tranzakciókat (3 évnyi adatom van, összesen ~6K transaction, tehát napi 5-6). Viszont itt a dátum az nem feltétlen egyezik a hozzáadás dátumával, előfordul, hogy pl valamit elfelejtettem felírni, és 3 hét múlva utólag hozzáadom, illetve módosítani is lehet régebbi recordokat. Emiatt a napi egyszeri mentés az kevés sajnos.
Most épp az merült fel bennem, hogy lenne egy job, ami létrehoz minden számlához minden nap egy recordot, ahova lényegében átmásolja az előző napi értéket, és minden tranzakció insert/update/delete esetén végigmegyek a balance-okon, és újraszámolom őket. Viszont itt is felmerül, hogy ha pl 2 hónappal ezelőttre bekerül egy új érték, akkor egy sima add is sokáig tartana, mivel végig kell menni az elmúlt két hónap balance-ain.
Miközben írom, még az jutott eszembe, hogy esetleg lenne egy havi záró érték, és akkor gyorsabb lenne az add/update/delete, mivel ha aktuális hónapban vagyok, nem is kell semmit hozzáadni. Viszont a napi értékek megjelenítésével ezzel ugyanott vagyok.
Lenne esetleg valami ötletetek?
[ Szerkesztve ]
-
-
petyus_
senior tag
Sziasztok!
Blazorrel foglalkozik itt valaki? Egy angular app-ot kezdtem el átírni, és előjött egy hiba, amit sehogy sem tudok megoldani.
Van egy formom, a model-validationt attribute-okkal oldom meg. Írtam egy saját attribute-ot, RequiredIf, megadhatod benne, hogy akkor legyen required a field, ha egy másik property-nek az értéke egyezik azzal, ami megadsz.
pl:
[RequiredIf(nameof(Foo), new[] { "Bar"}, ErrorMessage = "Category must be set.")]
public int? CategoryId { get; set; }Itt a másik property a Foo, ha Bar az értéke, akkor a CategoryId nem lehet null vagy 0.
Ezt a modellt használom a Blazor formban, és a validation kicsit furán működik. Foo-t beállítottam Bar-nak. Raktam a formba egy ValidationSummary-t is, és az adott field-hez tartozó ValidationMessage-t is.
Ha nyomok egy submit-ot, akkor a ValidationSummary-ben megjelenik az error, de az input mellett nem.
Ha megváltoztatom az ehhez a fieldhez tartozó inputot, akkor megjelenik a ValidationSummary-ben, így ott kétszer szerepel az error, közben megjelenik a ValidationMessage is, és az input is piros lesz.
Ha most megint nyomok egy submitot, akkor a summary-ből az egyik error eltűnik, a field mellet message is, és az input zöldre vált.Csatolok képet, van ott egy Amount field is, az sima int (nem nullable), és egy Range[(1, int.Max)] van rajta, az teljesen jól működik.
Valakinek esetleg van ötlete?
[ Szerkesztve ]
-
petyus_
senior tag
Közben sikerült rájönnöm, az attribute-ban amikor visszaadtam a ValidationResult-ot, nem adtam át a memberName-t.
Ezért amikor az adott field-et módosítottam, odarakta az errort, mert tudta, hogy azzal van a gond, viszont amikor submit-ra nyomtam, akkor nem tudta, hogy melyik fieldhez tartozik az error. -
petyus_
senior tag
válasz kiskornel #9324 üzenetére
Ahogy a többiek is írták, a logger-be nem kéne ilyen logikát rakni, annak már csak azt az adatot kellene átadnod, ami a logba kerül.
"A függvény belülről nem gond, a típusazonosítás után már fel lehet dolgozni, de nem akarok tömböt definiálni, mikor hívom a függvényt, csak a paramétereket zárójelben bepakolni, átadni."
Ha mégis így akarod, akkor a params-t használd, ahogy korábban írtam:
Method(int x, params object[] obj){}
Itt nem kell létrehoznod semmilyen tömböt, vesszővel elválasztva pakolhatod be a paramétereket, utána a függvényen belül viszont a tömb elemein kell végigmenned.[ Szerkesztve ]
-
petyus_
senior tag
válasz bandi0000 #9944 üzenetére
A táblák összekapcsolását navigation property-kkel oldod meg Entity Framework alatt. Van egy User tábla, egy Car tábla, a User class-on csinálj egy Car property-t. Így ha le akarod kérni a Usernek a Car-ját, azt pl úgy tudod, hogy
context.Users.Where(u => u.Id == id).Include(u => u.Car)
(ha nem hívod meg az include-ot, akkor alapból azokat az adatokat nem tölti be)
Ez ugyanígy működik a másik irányban is, ha Usert (Clientet) akarsz menteni Car-ral együtt, akkor legyen egy User objektumod, amin van egy Car property,
context.Users.Add(user)
context.SaveChanges()
és elmenti a Car-t is.
De ha sokszor akarod használni a Car-t, akár Usertől függetlenül, akkor érdemes csinálni egy CarRepository-t, és azon keresztül dolgozni(mondjuk arról is folyton megy a vita, hogy EntityFramework-ot használva kell-e még külön repository, mivel a DbContext már maga egy repository, meg unit of work)
-
petyus_
senior tag
válasz bandi0000 #9947 üzenetére
Attól függ, hogy definiáltad a kapcsolatokat. Ha használtad a virtual keyword-öt, akkor Lazy loading-ot használ, ez azt jelenti, hogy ha valahol használod az adott property-t, akkor ott fogja betölteni, egyébként nem. Ha nem használod a virtual-t, akkor csak akkor tölti be, ha használod az Include-ot.
Egyébként szerintem érdemes kikapcsolni a lazy loadingot (vagy mindehol elhagyod a virtual-t, vagy a context constructorában Configuration.LazyLoadingEnabled = false;). Ha mondjuk egy ciklusban végigmész a parent entity listán, és azon belül eléred a child entity-t, akkor annyiszor hívja meg a db-t, ahány elemed van a listában. Ez eléggé be tudja lassítani a dolgokat, szerintem jobb ha expliciten megadod az Include-ot ahol kell, máshol meg ne töltse be.
[ Szerkesztve ]
-
petyus_
senior tag
válasz bandi0000 #9950 üzenetére
Ahol lehet, érdemes async metódusokat használni (mondjuk egy saját használatra szánt webappnál nem valószínű, hogy észreveszed a különbséget, de egy desktop appnál ha nem async-ot használsz, akkor a mentés idejére megfagy a UI)
A validálással kapcsolatban, én főleg webes alkalmazásokon dolgozom, desktop appot soha nem csináltam még, így nem tudom ott hogy szokták megoldani. Weben általában amit lehet, már a UI-on validálunk egyből, ettől függetlenül a szerveren ugyanúgy még egyszer validálunk.
Biztos van valami event winformsban, amire fel tudsz iratkozni (mondjuk amikor a kurzor elhagyja az input boxot), itt meg tudsz csinálni minden validálást, és submitkor már valid lesz minden adat. Esetleg akkor validálnék újra a service-ben, ha valamelyik field mondjuk már meglévő adatoktól függ, és ez változhat közben.
-
petyus_
senior tag
válasz bandi0000 #9957 üzenetére
dbContext.Database.EnsureCreated()) létrehozza neked a DB-t, ha nem létezik. Meghívhatod akár constructorban is, de érdemesebb kiszervezni, és mondjuk IsDevelopment esetén meghívni.
Program.cs-ben mondjuk így tudod megoldani:
if (app.Environment.IsDevelopment())
{
using var scope = app.Services.CreateScope();
var services = scope.ServiceProvider;
var db = services.GetRequiredService<DbContext>();
db.Database.EnsureCreated();
}
Ha nem akarsz migrationökkel foglalkozni, akkor az EnsureCreated előtt meghívhatod az EnsureDeleted()-et is, így mindig törli/létrehozza a DB-t. (nyilván ezt prodban ne csináld ) -
petyus_
senior tag
válasz bandi0000 #9959 üzenetére
Milyen dotnet verziót használsz? Az EnsureCreated az EntitifyFrameworkCore-ban van, amit te használsz az meg sima EF.
EnsureCreated
CreateIfNotExists -
petyus_
senior tag
Sziasztok!
Elkezdtem egy kis projectet, ami egy kártyakészítő template engine, megadod a kártya nevét, költséget, képet hozzá, szöveg, stb, és szépen megrajzolja.
(egy társasjáték fordítása a cél). Grafikához egyáltalán nem értek, igazából az egész csak meglévő képek, szövegek egymásra illesztése.Használok pár ikont a szövegben, ezeket sikerült beleszerkesztenem a fontba, ligature-ként hozzáadtam, szépen megcsinálja ezt is. Viszont szeretnék színes ikonokat is használni, és itt elakadtam, nem tudom egyáltalán megoldható-e. Tehát azt szeretném, hogy van egy színes svg-m, ezt belerakom egy fontba, csinálok hozzá ligature-t, és szépen legenerálja nekem. Megoldható ez?
A workaroundom sajnos elég melós, ott szavanként rajzolná az egész szöveget, és ha a szó egy ilyen"keyword", akkor beszúrok egy képet. De így sokkal több munka az egész megírása, plusz csomó automatikusan számított dolgot elveszítek (pl szöveg milyen széles, hány sorba fér el, ezeket mind manuálisan kellene számolnom).
Egyébként a SkiaSharpot használom, Harfbuzz extensionnel (ez tud ligature-t, az alap nem).
Van valakinek tapasztalata, tippje?
-
petyus_
senior tag
válasz martonx #9980 üzenetére
Köszi, végül megoldódott a dolog. Kipróbáltam a fontot chrome-ban, és nem működött. Kiderült, hogy a chromium nem támogatja az SVG fontot (van egy 10 éves bug ), Firefox amúgy tudja. Viszont támogatja a COLR táblás fontokat, megcsináltam így a fontot, és így már megjelenítette. De közben a bugból megtudtam, hogy a chromium Skia-t használ a rendeleréshez, úgyhogy kipróbáltam a rajzolós appomat, és az is müködik vele. Úgyhogy egyelőre maradok ennél a változatnál.
Köszi az inputot, előtte napokig nem tudtam rájönni mi lehet a megoldás
[ Szerkesztve ]
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen