- iPhone topik
- Hivatalos a OnePlus 13 startdátuma
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Android szakmai topik
- Milyen okostelefont vegyek?
- Apple Watch
- A hagyományos (nem okos-) telefonok jelene és jövője
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Fotók, videók mobillal
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
Új hozzászólás Aktív témák
-
-
dqdb
nagyúr
Most nézem, hogy az első metódus a hozzászólásomban az
Add
helyettToConsole
lett volna, ha nem írom el ... szóval helyesen:public static class StringExtensions
{
public static void ToConsole(this string text)
{
Console.WriteLine(text);
}
}
public static class Test
{
public static string Add(string input)
{
return input;
}
}Az a lényeg, hogy te egy string példányon szeretnél saját metódust hívni, így a String osztályt kell saját metódussal bővítened. Az egész megoldás a syntactic sugar kategóriába tartozik mert ez:
Test.Add("blabla").ToConsole();
a háttérben valójában erre fordul le:
StringExtensions.ToConsole(Test.Add("blabla"))
-
martonx
veterán
-
martonx
veterán
a gRPC nyelv független szabvány. A google kezdte el, szóval nagyon nincs köze .Net-hez
Az Odata is nyelv független, bár az MS kezdeményezés, nem tudom mennyire terjedt el más nyelveken.
A REST API, meg aztán végképp független bármilyen nyelvtől.A SOAP az úgy lett szabvány, hogy igaziból sose volt interoperábilis a nyelvek között, mert túl bonyolult volt, és ki így valósította meg, ki úgy. Mint a böngészők HTML5-ös szabvány követése 5 évvel ezelőtt. Ha próbáltál már PHP-s SOAP-ot .Net-el kezelni, és fordítva (de említhetném a java-t, vagy bármely nyelvet), akkor tudod miről beszélek
-
dqdb
nagyúr
Szép dolog a szabvány, ha azt nem bonyolítják túl. A SOAP és a köré épülő infrastruktúra azonban túlbonyolított erőteljesen, ha pedig hozzácsapod a WS-Security-t, akkor főleg az lesz nem egyértelműen definiált elemekkel a szabványban. Szép dolog, amikor a Java és a C# világ nem tud beszélgetni egymással egy szabványos felületen keresztül úgy, hogy mindketten támogatják azt, mert adott feature X opcionális lehetősége közül sikerült diszjunkt halmazt implementálni (például bináris adatok hatékonyabb átvitelére a csak MTOM-ot támogató WCF találkozik egy csak SwA-t támogató Oracle alkalmazásszerverrel).
JSON, grpc (protobuf alatt ezt is értettem) eléggé támogatott minden platformon, az utóbbi esetben a túloldal megkapja a .proto fájlokat az interfészleírás részeként, és tud vele szépen dolgozni.
-
martonx
veterán
Egyértelműen ez: https://docs.microsoft.com/en-us/aspnet/core/grpc/?view=aspnetcore-3.1
De ott van még a sima REST API vagy Odata.
Felejtsük már el végre az őskövület szarokat, amikor valami újat fejlesztünk.
GLS-en röhögtem nagyon jót, mikor idén év elején nagy lelkesen bejelentették, hogy végre vadonatúj API-juk van, ami immár WCF alapú
Váááá
Hülye elmaradott parasztok. Mondjuk az előző classic ASP-s API-jukhoz képest ugrottak vagy 15 évet előre, már csak másik 15 évet kellene ugraniuk -
dqdb
nagyúr
Használj VS2017-et vagy VS2019-et és package reference-eket.
Így nem lesz
packages.config
, nem leszpackages
mappa, hanem a csproj fájlba kerülnek be a hivatkozások, a VS automatikusan proxy targets fájlokat generál a csomag hozzáadásakor/visszaállításakor, amelyek a%USERPROFILE%\.nuget\packages
mappa alatti fájlokat használja.Persze a lefordított projektekbe így is, úgy is bekerülnek a DLL-ek, szóval olyan sok helyet nem spórolsz meg, de időt a csomagfrissítéseknél rengeteget.
-
coco2
őstag
-
dqdb
nagyúr
Hogy tudom megvalósítani, hogy a hívott URL szerinti metódus fussék le és a kimenetét (return string) adja vissza a HttpListener outputjaként?
Arequest.Uri.Path
tartalmazza a relatív címet, a routingot ez alapján tudod megvalósítani.Ha eléggé nagy a beeső kérés vagy válasz, akkor stringek helyett szerencsésebb streamek használata. Ha van adatbázis vagy más távoli elérés a háttérben, akkor pedig az aszinkron kód írása. Ha az IIS/Kestrel elkerülése a cél beépített HTTP szerverrel, akkor nézd meg ezt a csomagot, könnyű használni, van benne SSL, alapszintű routing támogatás és teljesen aszinkron a teljes felülete.
Annyi, hogy a server.exe egy lokális Win szerveren futna, nyilván ezt task scheduler egyszer elindítaná és ott szépen futna.
Ez nagyon nem nyilván, ilyen típusú működésre a Windows szolgáltatások valók, nem egy random felhasználó nevében elindított exe.Ennek a helyi szervernek nincs nyitott portja a net felé, alapvető biztonság tehát megtéve. És nem is a 80-as portot használná a program.
A 80-as helyett másik port használata nem igazán számít biztonságnövelő tényezőnek. -
vlevi
nagyúr
Android pl. kifejezetten tiltja a fő GUI szálon történő http műveleteket. El sem hajlandó indulni.
Ott pl. a programból való kilépéskor a mentést, felhőbe feltöltést is külön service-ben érdemes (kell) megírni, ami vár a Wifire, és csak akkor kezdi el a feltöltést, függetlenül attól, hogy a felhasználó már rég kilépett az alkalmazásból. -
fatal`
titán
-
Igen, pont most akartam írni, hogy sikerült kigugliznom a megoldát.
Köszi a segítséget!
-
Szerintem jól. Be is illesztettem a dialógusablak kódjába:
var dlg = new OpenFileDialog();
if (!string.IsNullOrWhiteSpace(documentPath))
{
dlg.FileName = Path.GetFileName(documentPath);
dlg.InitialDirectory = Path.GetDirectoryName(documentPath);
if (!Directory.Exists (dlg.InitialDirectory ))
{
dlg.InitialDirectory = Environment.SpecialFolder.MyDocuments;
}
dlg.Multiselect = false;
dlg.Title = "Dokumentum betöltése a súgóba...";
}Viszont így nem fordul le: "Cannot impicitly convert type 'System.Enviroment.SpecialFolder' to 'string' 'Bookmark.PropertyChanged' hides inheritedmember. Gondolom valami típus eltérés van de nagyon nem értek hozzá.
-
dqdb
nagyúr
Már csak érdekességből kérdezem: mi az a két bájt, amit kitömörítéskor le kell szedni, betömörítéskor meg hozzá kell biggyeszteni?
2.2 fejezetben a CMF + FLG rész.Alapvetően a webszerver esetén is megvan, de egyrészt a JSON forrása eltérő is lehet, és ott nem biztos, hogy a HTTP-ben történik a tömörítés, másrészt a kliens által visszaküldött anyagot is tömöríteni kell.
A kliens ugyanúgy támogathatja a tömörített adatküldést. Jelenleg fogsz egy JSON struktúrát, összetömöríted, hogy kisebb legyen a forgalmazott adatmennyiség, majd azzal, hogy base64 kódoláson tolod át, generálsz feleslegesen +33% forgalmat. -
dqdb
nagyúr
Azért, mert a GZDecompress által átugrott első két byte hiányzik a GZCompress által létrehozott adatból.
Streamek és más IDisposable objektumok esetében mindig használd a using kulcsszót.
public static string GZDecompress(string compressedString)
{
try
{
using (var memStream = new MemoryStream(Convert.FromBase64String(compressedString)))
{
memStream.ReadByte();
memStream.ReadByte();
using (var deflate = new DeflateStream(memStream, CompressionMode.Decompress))
using (var reader = new StreamReader(deflate, System.Text.Encoding.UTF8))
{
var decompressedString = reader.ReadToEnd();
return decompressedString;
}
}
}
catch (Exception)
{
return String.Empty;
}
}
public static string GZCompress(string decompressedString)
{
try
{
using (var memStream = new MemoryStream())
{
memStream.WriteByte(0x78);
memStream.WriteByte(0x9c);
var input = Encoding.UTF8.GetBytes(decompressedString);
using (var deflate = new DeflateStream(memStream, CompressionMode.Compress))
{
deflate.Write(input, 0, input.Length);
}
return Convert.ToBase64String(memStream.ToArray());
}
}
catch
{
return String.Empty;
}
}Azt nem egészen értem, hogy miért nem HTTP szinten van megvalósítva a tömörítés, miért kell a kliens logikáját ezzel terhelni.
-
kingabo
őstag
Egyébként ki is használod, hogy az adatok ilyen formában vannak? Mert ha nem, lehet célszerű lenne olyanra mappelni amilyenre szüksége van és könnyű is kezelni.
tboy93 : ha tanulás a cél és azure, akkor akár a document store-jával is lehet játszani, ami még asszem olcsóbb is mint az sql.
-
Alexios
veterán
Ha jól értem, a belső Dictionary kulcsait szeretnéd visszakapni a belső dictionary értékei alapján?
Ott hirtelen valami ilyesmi jut eszembe, bár lehet van ennél hatékonyabb megoldás is:properties.SelectMany(m => m.Value.Where(s=>s.Value.Equals("megnevezes"))).Select(k=> k.Key)
Az más kérdés, hogy itt valójában az értékeid a kulcsok, lehet célszerűbb lenne a kettőt felcserélni, és máris egyszerűbb lenne a keresés. De szerintem amit kereshettél a SelectMany, az az amivel tudsz a külső dictionary összes elemében selectelni
(#8452) tboy93 : Várakozik, de érdemes megnézni a linkelt oldalt. Ott írja, is, hogy ha már nagyobb a terhelés nem célszerű Sqliteot használni, mert nem megbízhatóak a filerendszerek lockolásai, és előfordulhat, hogy sérül az adatbázis, de szerintem esetedben nem lesz ez gond, nyilván enterprise környezetbe nem ez a megoldás
-
Alexios
veterán
Én nem vagyok meggyőzve róla, hogy ez a dictionary a dictionary-ben a leghatékonyabb módja annak amit tárolni akarsz.
Igazából nem is teljesen értem mit szeretnél, tulajdonképpen min iterálnál végig? Az első dictionaryn?
Az pl.:
properties.Where(p=> p.Key.Contains("partners"))
Vagy eleve tudod hogy az első dictionary "partners" kulcsainál tárolt adatain akarsz végigmenni? Akkor ha stringet akarsz keresni, miért objectként tárolod? Ha stringként tárolod valami ilyesmi lenne:
properties["partners"].Where(p=> p.Value.Contains("megnevezes")).Select(s=>s.Key)
Ez ugye egy listát fog visszaadni, nem 1 db id-t, mert itt semmi nem garantálja, hogy egy value-hoz csak egy key van, ha te tudod akkor esetleg lehet pl. FirstOrDefault-ra cserélni a Where-t, csak akkor meg kell nézni, hogy nem null-e mielőtt megpróbálod az id-t elérni.De amúgy a linq sem varázslat, alapvetően ugyanúgy végigiterál egy foreachel a clr, csak ezt te nem látod
(#8449) tboy93 : Hát, igen meg nem. Ki tud szolgálni az sqlite több klienst is egyszerre, viszont amíg írja az adatbázist addig lockolja - tehát addig a másik írás meg kell várja az első befejezését. [link] Itt amúgy le is vannak ezek írva, mikor érdemes használni. Valószínűleg, ha jól értem, a te esetedben azért nem kéne olyan masszív terhelésre számítani, hogy ez gondot okozzon.
-
Zalanius
tag
https://hash.online-convert.com/crc32-generator
Ez ugyanazt az eredményt dobja, mint amit bemásoltál, e9032c43
Ugyanott van viszont egy módosított változat is:
https://hash.online-convert.com/crc32b-generatorEnnél már a C#-féle eredmény adódik. Ugyanez kapható ezzel a megoldással is:
https://github.com/force-net/Crc32.NET -
martonx
veterán
Persze, hogy lehet, a kolléga például az aspHOSTpage-en tervezi hosztolni, az őskorban még én is hosztoltam náluk több oldalt is, elég korrektek, csak épp az Azure óta (jelzem AWS-ben is lehet, sőt ott is van ingyenes opció, bár ott egy fokkal macerásabb, mint Azure-ban), semmi értelme nincs az ilyen hoszting cégeknél hosztolni. Na jó, a dedikált hoszting cégek valamivel olcsóbbak tudnak lenni, mint az Azure.
Kismillió hosting cég van, ahol pont ugyanúgy tudsz asp.net-et is hosztolni, mint php-t (mint pl. godaddy, hogy csak egy ismertebbet mondjak). -
Alexios
veterán
Hogyne tanítanák progmaton, a tárgyból már nem emlékszem(Programozás vagy C++ volt talán?) de szó volt azért ilyen alap memória kezelés dolgokról nyilván. Ha meg csak a Stack mint algoritmusról van szó pláne
De azért ezek tényleg az alapok c#-nál is, referencia/érték típusok, boxing, stb, szó volt róla, hogy junior c# pozi van megcélozva korábban, ezeknek illene utánanézni előtte.
-
amargo
addikt
Maga az alkalmazás indul el vagy egy form?
Amúgy a splash screen lehet erre megfelelő, ha már így indul az alkalmazás, hogy kell a db.Ha pedig egy másik form-on kell, akkor alkalmazás indulása után egy másik szálon már mehet is initialization a db-re. Így látatlanban ezt a két tippet adnám.Ha wpf-akkor onActivated is ott van pl.
-
Froclee
őstag
Hogyan mérted? Debugger attacholva van? Function előtt és után DateTime? (Stopwatch-al kell.) Egyébként a JIT-től is lehet szóval érdemes loopban futtatni kb 20szor.
-
Keem1
veterán
Lehet, én voltam a hülye
A második táblára rátettem egy PK-t, így 30 ms ugyanaz a lekérdezés.
Hiába, nem sikerült tökéletesen importálni MySQL-ből néhány táblát. Ezen még dolgoznom kell.Ettől függetlenül azért érdekes, hogy a DB Browsernek simán ötöde volt így is. Most 40-50 ms, az én appomban pedig 30-40 ms a lekérdezés.
A MySQL megmaradt 100 körül, de ott alapból megvolt a PK, az csak a MySQL->SQLite importkor mászott le. -
Goose-T
veterán
Miért nem deszerializálod streamből parseolás helyett? Ezerszer egyszerűbb és gyorsabb lenne, ráadásul memórialimit sem lenne. Csinálsz egy osztályt, feldekorálod XML attribútumokkal, oszt jóvan. Kiindulópontnak ez jó lehet.
-
Froclee
őstag
-
-
bandi0000
nagyúr
semmi gond, örülök ha segítenek
lényeg az, hogy úgy néz ki a program hogy:
do
itt csinálja a dolgokat
és van egyfor( itt van a kiíratás meg a színezés )
while(amíg nem erscape-et nyomok)
ez az egész do while fügvény, egy switch case szerkezetbe van, tehát ha a do-while ból kilép, akkor megint kiírja a fő menüt és stb
arra rá jöttem ,hogy ha a színezve kiíratom, aztán a kiíratás után vissza állítom a fekete háttért, és a fehér színt akkor jó, de elég hülyén néz ki hogy 2 sor színezés kiíratás és megint 2 sor színezés van, és minden egyes színezett kiíratásnál ennek így kéne kinézetni
bár lehet később megpróbálom beszúrni a kódot, de az egész kód 200 sor kb
-
Karma
félisten
A baj nagyon egyszerű, sajnos a fordító hibaüzenete nem sokat segít elsőre - bár igaza van, olyan karakter nincs, hogy \s.
'og:image"\s*content="([^"]+)"' <-- ez nem valid string literál C#-ban. JavaScriptben meg gondolom PHP-ban elmegy, de itt kötelező idézőjelekkel körbevenni. Aposztrófokkal char literált kapsz. Ha nem lenne ott a \s, akkor már egyértelműbb lenne a hibaüzenet.
Helyesen így nézne ki, amit le akartál írni:
@"og:image""\s*content=""([^""]+)"""Mint láthatod, a belső idézőjeleket meg kellett duplázni. A @ prefix pedig azért kell, hogy a backslasheket ne escape karakterként kezelje, hanem közvetlenül tegye bele a stringbe. (@ nélkül azokat is meg kéne duplázni.)
-
Karma
félisten
"Hibával elszáll a program" - ilyet már kérdezni is teljesen felesleges. Konkrétan melyik sor, és ami még fontosabb, milyen exceptiont dob?
Egyébként egy dolgot kapásból látok. A következő sor 10-nél kisebb számoknál feldolgozhatatlan eredményt ad:
String.Format("{0}:{1}", udHours.Value, udMinutes.Value)Helyette formázd két számjegyre az értékeket:
String.Format("{0:00}:{1:00}", udHours.Value, udMinutes.Value)Így már csinál valamit korábbi időpontra, de az elég messze van a helyestől. Lásd itt.
Szerintem úgy kellene megoldani, hogy a TimeSpan számítás előtt megnézed < operátorral, hogy melyik dátum a nagyobb, és ennek megfelelően elvégzed a korrekciót.
-
martonx
veterán
Hát most erre mit mondjunk? Valószínűleg nem lesz gond, de bármi előfordulhat. Na, ki lettél segítve?
Egyébként rémlik, hogy a VS2013 már tud olyat, hogy nem akarja automatikusan új verzióra migrálni az adott solution-t, pont az esetleges kompatibilitási problémák megelőzés érdekében.
Azaz ELMÉLETILEG semmi problémát nem kellene tapasztalnod.
Ú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!
- BESZÁMÍTÁS! Sony PlayStation4 PRO 1TB fekete konzol extra játékokkal garanciával hibátlan működéssel
- ÚJ Apple Macbook Air 15,3 M4 10C CPU/10C GPU/16GB/256GB - Ezüst -(2025) - 3 év gari - MAGYAR
- Samsung Galaxy A04 128GB, Kártyafüggetlen, 1 Év Garanciával
- Azonnali készpénzes Apple Macbook Air felvásárlás személyesen / csomagküldéssel korrekt áron
- ÁRGARANCIA!Épített KomPhone i5 12400F 16/32/64GB RAM RTX 4060 Ti 8GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest