Hirdetés
Új hozzászólás Aktív témák
-
sztanozs
veterán
-
kobe24
tag
válasz bandi0000 #7716 üzenetére
Már a programozós topicban is figyelgettem a hozzászólásokat, és szerintem sokan félreértik azt amit csinálnod kell. Nekem úgy tűnik, mintha sokan azt hinnék, hogy ezt egy olyan cégnek csinálod, akik használni is akarják ezt a programot (persze lehet most hülyeséget írok, de nekem ez jött le), viszont ők is egy szoftverfejlesztő cég, és ez inkább egy erőmérő (ahogy már te is írtad), szoktak hozzájuk menni gyakornokok is a suliból, nyilván ha látják benned a fantáziát, akkor megkereshetnek. A leírásban pedig azért vannak c++-os kódok, mert ők már akkor is adnak ki céges feladatot, mikor a diákok még abban a félévben járnak amikor c++-t tanulnak, és persze át lehetne írni a dolgokat, de szerintem így is érthető. Ott is konzolosan kell megcsinálni, és itt is, a WinForms és a WPF az majd a következő féléved anyaga lesz, nem is várja el ott senki, hogy ebben legyen megcsinálva. Szerintem a feladat leírásából azért látszik, hogy megcsinálható, anno én is meg tudtam csinálni (bár nem pontosan ez volt a feladat, de hasonló). Ez most félig neked címeztem, félig a többieknek, úgyhogy kicsit furán jön ki, de szerintem jobb ha mindenki tisztán látja, hogy miért kérik konzolos alkalmazásban.
-
Keem1
veterán
válasz bandi0000 #7785 üzenetére
Ezt nem értem igazán
"if, hogy ha escepe akkor csinálja, különben csináljon mást, csak ez a más a semmi kéne hogy legyen"
Mondjuk elhagyod az else ágat?Pl (nem ellenőrizve):
if (Console.ReadKey(true).Key == ConsoleKey.Escape)
Ha félreértettem a célt, akkor elnézést, nem kotnyeleskedni akartam, csak így elsőre nem áll össze a kérdésed.
[ Szerkesztve ]
-
lord.lakli
őstag
válasz bandi0000 #7789 üzenetére
OpTime-ba miért van do-while-ban minden? Látom nagyon szereted a do-while-t
Ha nem ESC-et nyom, akkor return, ha ESC, akkor meg a do-while lép ki.
Ha ESC-re fejezze be, akkor felesleges az egész do-while, helyette a kiírás után fapadosan ennyi kell:
while (Console.ReadKey(true).Key != ConsoleKey.Escape) { } -
martonx
veterán
válasz bandi0000 #7797 üzenetére
Az általában nem baj, ha egy kód nagy. Az a baj, ha nincs jól szervezve, nem olvasható, nem átlátható. Szóval neked most nem azon kellene törnöd a fejed, hogy szar megoldásokkal hogy nyerjek pár sort, hanem hogy szervezd normális olvasható, átlátható formába. Pl. Bevezetni repository patternt, funkciókat más classokba kiszervezni stb...
Én kérek elnézést!
-
Peter Kiss
őstag
válasz bandi0000 #7852 üzenetére
https://github.com/Robert-McGinley/TableParser
Egynek jó lehet.
-
amargo
addikt
válasz bandi0000 #8109 üzenetére
Mondjuk a hibaüzenet elég egyértelmű. jól állítottad be az sql elérését? Azt megtudnád mutatni? Ha egyáltalán raktál fel.
Ez csak mellék szál, de ha egyszerűen akarod kezelni, miért model first lett? Code first inkább illik nekem a képbe vagy direkt ezt kérték a suliba?
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
-
martonx
veterán
válasz bandi0000 #8523 üzenetére
Ez a linq még egészen olvasmányos. Szerintem itt nagyobb baj, hogy jó eséllyel fogalmad sincs, hogy SQL-ben hogy fognád meg ezt a problémát, mit jelent a groupby, hogyan dolgozzunk halmazokkal.
Nem szeretem ezt a fajta LINQ szintaktikát, na mindegy, közé kommenteztem, hátha így érthetőbb lesz, hogy mi - mit csinál.var data = //itt semmi értelme kiírni, hogy IQueryable<CreditReport> egy var bőven rövidebb
from enrollment in _context.Enrollments.Include(x => x.Student.LastName).Include(y => y.Course.Credits)
// a két include egy-egy sql joinnak felel meg, de rögtön szűr is, hogy csak 1-1 mezőt ad vissza
// gyanús, hogy ez felesleges bonyolítás, mert az enrollment-nek eleve van egy Student propertyje
// és talán Course property-je is? Ha jól van mappelve
group enrollment.Student by enrollment.Student.Id into dateGroup //itt csak szimplán rossz a dateGroup név :D mert ez StudentId-ra groupol :D
select new CreditReport()
{
FullName = dateGroup.FirstOrDefault().FirstMidName + " " + dateGroup.FirstOrDefault().LastName,
Credits = dateGroup.FirstOrDefault().Enrollments.Sum(x => x.Course.Credits)
};Selecten belül már nem kommenteztem, gondolom az triviális, hogy a group by-olt datasetből milyen adatokat veszel ki.
Szóval én a helyedben elsőre erősen utána néznék, hogy ugyanezt szimpla SQL-ben hogyan írnád meg, és miért, mire való a join, group by. Ha az SQL hátteret már érted, akkor a LINQ-t is jobban érteni fogod, hiszen az semmi mást nem csinál, mint egy SQL parancsot ad ki, csak épp nem SQL szintaktikával, hanem C# szintaktikával megfogalmazva.
[ Szerkesztve ]
Én kérek elnézést!
-
Zalanius
tag
válasz bandi0000 #8526 üzenetére
Annyit tennék még hozzá, hogy ha az SQL változat jobban előtted van, akkor próbáld meg FK nélkül, minél olvasmányosabban felírni a LINQ-t. Vegyük az alábbit:
SELECT stud.FirstMidName + ' ' + stud.LastName AS FullName, grp.Credits
FROM dbo.Student AS stud
JOIN
(
SELECT enroll.StudentId , SUM(crs.Credit) AS Credits
FROM dbo.Enrollment AS enroll
JOIN dbo.Course AS crs ON enroll.CourseId = crs.Id
GROUP BY enroll.StudentId
) AS grp
ON grp.StudentId = stud.Id;Ennek egy megoldása:
var creditsByStudent = from sub in (from e in ent.Enrollments
join c in ent.Courses on e.CourseId equals c.Id
select new { e.StudentId, c.Credit })
group sub by sub.StudentId into g
join s in ent.Students on g.Key equals s.Id
select new
{
FullName = s.FirstMidName + " " + s.LastName,
Credits = g.Sum(x => x.Credit)
};--= Zalán =--
-
sztanozs
veterán
válasz bandi0000 #8536 üzenetére
FYKI: System.Numerics.Complex
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
bandi0000
nagyúr
válasz bandi0000 #8536 üzenetére
közbe megtaláltam, hogy van egy Complex osztály, aminek első tagja valós, második pedig valós*I alakú, csak az a gond, hogy ha ezt pl egy komplex számmal szorzom, akkor az I*I nél nem I^2 hanem -1 es szorzó lesz, és ezt is el kellene végeznem
sztanozs: Köszi, ez jó leírás
[ Szerkesztve ]
Xbox One: bandymnc
-
dqdb
nagyúr
válasz bandi0000 #8538 üzenetére
(a + bi)(c + di) = ac + adi + bci + bdi² = ac + (ad + bc)i + bdi²
Mivel i = √-1, ezért i² = -1, azaz
ac + (ad + bc)i + bdi² = ac + (ad + bc)i + bd × (-1) = (ac - bd) + (ad + bc)i
Vagyis:
(a + bi)*(c + di) = (ac - bd) + (ad + bc)i
Ha megnézed ennek a .NET Core-ban található implementációját, akkor ott pontosan ez szerepel:
public static Complex Multiply(Complex left, Complex right)
{
return left * right;
}
public static Complex operator *(Complex left, Complex right)
{
// Multiplication: (a + bi)(c + di) = (ac -bd) + (bc + ad)i
double result_realpart = (left.m_real * right.m_real) - (left.m_imaginary * right.m_imaginary);
double result_imaginarypart = (left.m_imaginary * right.m_real) + (left.m_real * right.m_imaginary);
return new Complex(result_realpart, result_imaginarypart);
}Vagyis akárhogyan nézem, jól szoroz össze két komplex számot az ajánlott osztály (csúnya is lenne, ha nem).
tAm6DAHNIbRMzSEARWxtZW50ZW0gdmFka5RydIJ6bmkuDQoNClOBc4Ek
-
martonx
veterán
válasz bandi0000 #8970 üzenetére
A doksi nem segít? https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio
Nekem 3.1-el még csak egy projektem fut, abban így van beállítva a routing:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});De ez egy API app, nincsenek View-jai, csak Controllerek.
Én kérek elnézést!
-
petyus_
senior tag
-
bandi0000
nagyúr
válasz bandi0000 #9043 üzenetére
Franc a hülye fejemet
Annyi volt a hiba, hogy fel volt cserélve a
app.UseAuthentication(); és app.UseAuthorization();Bár ez utóbbit nem biztos, hogy értem, hogy miért is lényeges, vagyis azt tudom hogy a kérés minden egyes middleware-en keresztül megy sorban, szóval lényeges a sorrend.
Az Authentication-nel ugye a usert-t azonosítjuk jelszóval együtt
Az Atuthozrization-nel meg azt, hogy mit tehat a user a rendszerhez, mihez van jogaXbox One: bandymnc
-
G.A.
aktív tag
válasz bandi0000 #9110 üzenetére
Majdnem eltaláltad, csak fordítva.
Ha CheckedListBox_SelectedValueChanged() hívom meg, akkor utána NumUpDown_ValueChanged() is meg lesz hívva. Ez lehet a hiba forrása?
Talán egy if()-el megoldom, hogy akkor ne fusson le, ha a CheckedListBox_SelectedValueChanged() hívta a fv-t. Tesztelem is... -
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 ]
-
dqdb
nagyúr
válasz bandi0000 #9130 üzenetére
De most ez a megoldás nem rosszabb, mintha csak csinálnék pl egy osztályt, amibe van egy error és esetleg egy status code tulajdonság amit mindig visszaadok?
Ha kizárólag webes felületet nyújtasz, akkor szerintem ez az exception + middleware páros a legjobb.Ha vegyes felvágott a helyzet, mint nálunk, ahol webes és MQ felület is előfordul, akkor más a helyzet. Ezeknél az adott API implementációból az általad kérdezetthez hasonló üzenet jön ki, az API által dobható exceptionök kezelése belül megtörténik:
public class SomeResponse : IResponse
{
public string RequestID { get; set; }
public class OK : SomeResponse
{
public string SomeData { get; set; }
}
public class FailedBecauseOfThis : SomeResponse, IFault
{
public int Code { get; set; }
public string Message { get; set; }
}
public class FailedBecauseOfThat : SomeResponse, IFault
{
public int Code { get; set; }
public string Message { get; set; }
}
}Proto:
message SomeResponse {
string RequestID = 127;
oneof subtype {
SomeResponseOK OK = 1;
SomeResponseFailedBecauseOfThis FailedBecauseOfThis = 2;
SomeResponseFailedBecauseOfThat FailedBecauseOfThat = 3;
}
}
message SomeResponseOK {
string SomeData = 1;
}
message SomeResponseFailedBecauseOfThis {
int Code = 1;
string Message = 2;
}
message SomeResponseFailedBecauseOfThat {
int Code = 1;
string Message = 2;
}Sikeres válasz:
{
"some_data" : "data"
}Hibás válasz:
{
"code": 123,
"message": "blabla"
}Aztán ha MQ-n keresztül érkező kérésről van szó, akkor a teljes
SomeResponse
leszármazott megy vissza protobuf kódolással, ha webes kérésről van szó, akkor általában* egy réteg a hibákat a példány típusa és/vagy kód alapján megfelelő 4xx/5xx státuszkódokra mappeli és a hibaüzenetet tartalmazó JSON-t ad vissza, ha sikeres volt, akkor simán JSON megy vissza (webes kéréseknél aRequestID
sem kerül bele a válaszba, csak a konvertálást, szerializálást, naplózást befolyásoló attribútumokat az egyszerűség kedvéért lehagytam).* általában, mert volt, hogy a 200 azt jelentette csak, hogy a szerver válaszolt, és ugyanúgy protobuf ment vissza a kliens felé
[ Szerkesztve ]
tAm6DAHNIbRMzSEARWxtZW50ZW0gdmFka5RydIJ6bmkuDQoNClOBc4Ek
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- MIUI / HyperOS topik
- Nvidia GPU-k jövője - amit tudni vélünk
- Jogász topic
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Csernobilba kalauzol az új GeForce driver
- EA Sports WRC '23
- Nyíregyháza és környéke adok-veszek-beszélgetek
- "A homoszexualitás természetellenes" 😠
- Amlogic S905, S912 processzoros készülékek
- Milyen egeret válasszak?
- További aktív témák...
- Latitude 5540 15.6" FHD IPS i5-1345U 16GB 256GB NVMe SSD IR kam gar
- Apple watch series 9 45mm stainless steel 1 év Apple jótállás
- Latitude 5530 15.6" FHD IPS i5-1235U 16GB 256GB NVMe SSD ujjlolv IR kam gar
- iPad Pro M2 11" 2026.03.30 Apple jótállás névre szóló számlával
- PC RTX 4070 Super , Ryzen 5 7600x AM5 , 3 hónapos használat
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest