Jump to content

Kā konkrēti izpaužas C++ valodas tuvums "dzelžiem".


Raimonds1
 Share

Recommended Posts

Tad varbūt no turienes visam kājas aug?

Raimonds grib taisīt botu, kurš spēlē zoli (iespējams pokeru), nolasa no ekrāna tekstu, apstrādā un effektīvi ātri atbild, iespējams 10 000 boti uz kautkāda Pokerstars.

Tur arī tā prasība par nolasīšanu 2 sekunžu laikā.

Labots - AndrisBB
  • Haha 2
Link to comment
Share on other sites

Raimonds1

Nē, tā nav.

Kas attiecas uz visādām iekārtām, kas ir starp datoru un interneta kabeli, datoru un monitoru, lasa datus no VGA vai HDMI, visādi VGA frame grabber, programmnodrošinājumi, piemēram https://stackoverflow.com/questions/42362475/how-to-process-frames-from-a-vga2usb-device-using-opencv-c

tad tur ir daudz visa kā.

Es te gribēju kaut ko daudz vienkāršāku - kā dabūt teksta rindiņu un pēc tam visu lapas tekstu no VGA.

Tāpat gan jau to tekstu var dabūt no tā pagaidu faila, kad kopē tekstu (atfiltrējot pārējo).

 

1. Pavisam vienkāršs lietojums - kompaktāks teksts.

vēl kādi 5 lietojumu varianti.

-------------------------------

Blakustēmas. 1 2 3 4 5 6 7 

 

Tas viss ir par sarežģītu, mani šeit pagaidām interesē teksta saglabāšana un labāka attēlošana.

Ideālā variantā maza ierīce starp datoru un monitoru vai pat iebūvēta monitorā un podziņas vai atsevišķa vadība.

Link to comment
Share on other sites

  • 1 year later...
  • 2 weeks later...

Arī C++ daudziem nepatīk un ir kas kunkst pie katrām izmaiņām, tāpat kā jebkurā citā valodā.

Kāda jēga balstīt viedokli uz dažu indivīdu domām internetā? Izmēģini, tad redzēsi.

Tik tas ka lai tā pavisam nopietni saprastu Rust, nākas mazliet piepūlēt pelēko vielu.

  • Patīk 3
Link to comment
Share on other sites

Es te aiz gara laika sāku lasīt Raimja spriedelējumus no pirmās lapas un kādā brīdī tur pat kaut kas gudrs ir pazibējis...

2015.09.2. , 15:33, Raimonds1 teica:

piemeēram, vienu un to pašu lietu var uzrakstīt MAN  saprotami un MAN nesaprotami un tāpēc es meklēju, kur tas saprotamais ir ir paslēpies.

Dažreiz tiešām vajag saprotamo pameklēt nesaprotamajā.

Link to comment
Share on other sites

  • 7 months later...
AndrisBB

Atjautības uzdevums piektdienai. Kā var uzrakstīt C++ funkciju ar regexu, kas stringā aizvietos visus `\\` ar `_5c`?

 

Nu piemēram kā te `-` aizvietojas ar `_2d`

std::string String_to_path(std::string path) {
    return std::regex_replace(path, std::regex("-"),    "_2d");
}

 

71e46d9e-0833-11ed-861d-0242ac120002 -> 71e46d9e_2d0833_2d11ed_2d861d_2d0242ac120002

Labots - AndrisBB
Link to comment
Share on other sites

AndrisBB

Jā, nonācu līdz tādam secinājumam :D

 

Nestrādā gan ja es mēģinu piemēram uztaisīt testa stringu, jo tad `escape` tiek `escape'ots`.

std::string test = "test//string//with//two//escapes"; // tas paliek par "test/string/with/two/escapes" un nekas netiek aizvietots
String_to_path(test);

 

Labots - AndrisBB
Link to comment
Share on other sites

Testa stringā liec "\\\\"

T.i., sourcē raksti "\\\\", lai stringā (atmiņā) dabūtu "\\".

Labots - binary
Link to comment
Share on other sites

std::string String_to_path(std::string path) {
    return std::regex_replace(path, std::regex(R"(\\)"), "_5c");
}

 

Link to comment
Share on other sites

AndrisBB

Tad vajadzētu 4 escapus

std::string String_to_path(std::string path) {
    return std::regex_replace(path, std::regex(R"(\\\\)"), "_5c");
}

 

Link to comment
Share on other sites

Nu man ar diviem:

std::cout << String_to_path("1e46d9e\\0833\\11ed\\861d\\0242ac120002") << std::endl;

image.png.d0dfa09367cec5ef97d229e84116393c.png

Link to comment
Share on other sites

O, vecā piepe, stagnāts ciparos runā, kas tad nu? Vai tas piektdienas iespaidā? :tender:

  • Haha 1
Link to comment
Share on other sites

AndrisBB
Pirms 9 minūtēm , Jurkins teica:

Nu man ar diviem:

std::cout << String_to_path("1e46d9e\\0833\\11ed\\861d\\0242ac120002") << std::endl;

Tas tapēc ka tur stringu padod, atpēc tev arī darbojas ar diviem \\

"1e46d9e\0833\11ed\861d\0242ac120002"

Izprintē to stringu pirms regex 

Link to comment
Share on other sites

Pirms 9 minūtēm , jema teica:

vecā piepe, stagnāts ciparos runā, kas tad nu?

Kapitālisms, vienalga, ir sūds un finansisti ir ielenes.

Pirms 3 minūtēm , AndrisBB teica:

Tas tapēc ka tur stringu padod

Krāslavnieks ir bišku ieņemts, mož tāpēc nevaru iebraukt... bet tak vajag stringā aizvietot.

Labots - Jurkins
  • Haha 2
Link to comment
Share on other sites

Kāpēc Tu slēp ka esi inteliģents cilvēks? Noteikti ka pat Trīs sivēntiņus un vilks būsi lasījis?:tender:

Link to comment
Share on other sites

Es kādreiz mēģināju mācīties visas šīs valodas, nav mans, varbūt tā ir pat labāk :)

  • Patīk 1
  • Haha 2
Link to comment
Share on other sites

AndrisBB
Pirms 9 minūtēm , Jurkins teica:

Krāslavnieks ir bišku ieņemts, mož tāpēc nevaru iebraukt... bet tak vajag stringā aizvietot.

Nu ja, vajag stringā kurā arī ir divi \\ aizvietot ar _5c. 

Bet ja tu definē stringu kā tavā piemērā, tad tur ir tikai viens \.

Tavs piemērš šdi būtu precizāks

std::cout << String_to_path(R"(1e46d9e\\0833\\11ed\\861d\\0242ac120002)") << std::endl;
Link to comment
Share on other sites

Es saprotu, ka tupiju... (krāslavnieks ir labs, tikai, suka, beidzās)

std::string x = "1e46d9e\\0833\\11ed\\861d\\0242ac120002";
    std::cout << String_to_path(x) << std::endl;

stringā ir divi, rezultāts tieši tāds pats.

 

Nu jā, ja o stringu printē ārā, tad ir viens, bet, vienalga, nesaprotu, kāpēc vajag izprintēt ar diviem. Tak vajag aizvietot tos divus definētajā stringā. Nē?

Labots - Jurkins
Link to comment
Share on other sites

AndrisBB

Ja tu tā nodefinē stringu, tad tur ir tikai viens \    :D, tapēc ka pirmais `escape` eskeipo otro :D

 

Screenshot from 2022-07-22 21-47-13.png

Labots - AndrisBB
Link to comment
Share on other sites

Ok, sapratu tagad. 👍  Ar visām promilēm 🤣.

Tas "hello\\kitty" aicina uz izvirtībām. 🤣

  • Haha 1
Link to comment
Share on other sites

Vispār kompilatori baigi iepaliek. Jau c++20 "standartā" ir "constexpr std::string" , bet vismaz mingv12.1 ar "karogu" -std= c+23 neatbalsta.

Link to comment
Share on other sites

22.07.2022. , 23:52, Jurkins teica:

Tas "hello\\kitty" aicina uz izvirtībām

Starp citu, viens no maniem pirmajiem andrīšiem, kā telefons jau no dzimšanas bij mēsls, izmantoju tikai smārtam, pēc tam pat to nevilka.. :)

Protams, paralēli tika lietota uzticama podziņu Nokia.

Labots - aoma
Link to comment
Share on other sites

  • 1 month later...

Sveiciens lieliskajā sestdiena vakarā!

Netaisīšu jaunu tēmu, jo tieši c++ "tuvums" dzelžiem laikam atbilst tam, ko vēlos jautāt. Lai gan, principā pilnīgi poh... vai cpp vai c vai c# vai pat paitons. Tātad... nu droši vien tupiju, bet ... nu tupiju 😁. Redz, pārsvarā mana programmēšanas pieredze ir iekš mikrokontrolieriem. To beisiku, fortrānu, "ratforu" un delfu paskālu var atlaist un nepieminēt. Vajag nolasīt com portu katru minūti (vai katras 5 minūtes vai 10..), bet gribētos, lai tas notiek 15:01, 15:02... u.t.t. Mcu uztaisītu taimeri un uz pārtraukumiem visu noorganizētu. Bet kā pareizi to darīt uz datora? Kaut vai paitons (visvienkāršāk, pēc tam var par cpp parunāt):

while True:
	if not datetime.now().second:
		"darām
		...
		to"

(skaidrs, ka tur vēl vajag kādu bool mainīgo, lai "darām to" tikai vienu reizi, kamēr sekundes ir "00", bet tas jau ir sekundāri.

Nu štrunts par paitonu, bet vai nav kaut kādu sistēmas pulksteņa "notikuma" katru sekundi, ko tādā c, cpp vai c# noķert un tad likt strādāt kodam? Kāds ir standarta variants šādos gadījumos? Gan jau, ka ir.

 

p.s. bišķi nesakarīgi varbūt (alus ir attaisnojošs iemesls) 😁

  • Patīk 1
Link to comment
Share on other sites

Meklē event loop. Domājams ka +- 1ms tev nav kritiska. Idejiski neko neatšķirsies no MCU taimeriem.

 

int on_timer()
	// Dari ko tuev tur jādara
	return 0

int main()

	evento_loop events = Event_loop_create()
	
	events.add_timer(1 * 1000 * 1000, on_timer)

	events.start()

	return 0

	

 

 

Nav ne jausmas kas tur Windowistiem pieejams, uz Linukša pa pilno variantu visās iespējamās valodās

 

https://www.freedesktop.org/software/systemd/man/sd_event_add_time.html

https://0pointer.net/blog/introducing-sd-event.html

 

https://docs.gtk.org/glib/main-loop.html

https://developer.gimp.org/api/2.0/glib/glib-The-Main-Event-Loop.html

 

utt 

 

 

 

 

 

Kautvai libev, laikam pats vienkāršākais variants

https://www.systutorials.com/docs/linux/man/3-ev/

  • Patīk 1
Link to comment
Share on other sites

Un vispār vaitad Windowsā COM ports aka tty nav select-ojams (izsauc eventu, kad tur ir kautkas lasāms, skat tam libuv tty piemēru) vai arī read funkcija bloķējas kamēr kautkas lasāms parādās?

Kapēc jāizmanto tādas brutālas metodes kā timers?   

 

 

https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-waitcommevent

 

https://docs.microsoft.com/en-us/windows/win32/devio/monitoring-communications-events?source=recommendations

Labots - AndrisBB
Link to comment
Share on other sites

Pirms 16 minūtēm , AndrisBB teica:

Kapēc jāizmanto tādas brutālas metodes kā timers?

Es nezinu. Taustos "pa tumsu". 😁 Nekad neko neesmu tādu programmējis. Uz tā COMa pats par sevi nekas nenāk.

Ok, stāsts ir tāds. Slēdzos klāt pie iekārtas ar modbus protokolu. Pašlaik ir prasts paitona skripts, kurš reizi 5 min. nolasa datus un ieraksta datubāzē.  Jautājums - vai tas ir "pareizi" prasti čekot ciklā sistēmas laiku un, ja ir, teiksim, 8:25, tad darīt to pasākumu? Vai to dara savādāk?

Gribas aplikāciju, kas grafiku uzzīmē. Var jau tajā pašā paitonā. Bet tīri pašizglītībai skatos uz c# pusi.

Labots - Jurkins
Link to comment
Share on other sites

Pirms 3 minūtēm , Jurkins teica:

Uz tā COMa pats par sevi nekas nenāk.

Pa lielam jau uz COM porta kā reiz pats par sevi arī nāk :D bet tev visdrīzāk kautkāds protokols, kur tu aizsūti komandu un tad atnāk atbilde, tāka vienkārši gaidīt kad kautkas pārādās nolasāms nesanāks.

 

Nu ja jau taisies grafikus zīmēt, tad jau būs GUI applikācija un kā reiz arī vienkārši izmanto taimeri.

https://docs.microsoft.com/en-us/dotnet/api/system.timers.timer?view=net-6.0

 

Tad arī savā OnTimedEvent lasi ko tev tur vajag nolasīt.

 

 

 

 

Link to comment
Share on other sites

Pirms 14 minūtēm , AndrisBB teica:

Pa lielam jau uz COM porta kā reiz pats par sevi arī nāk

Nu jā, tā ir. Bet šajā gadījumā ir modbus protokols pa virsu, kur man jādod komanda nolasīt attiecīgo reģistru un tad saņemu atbildi.

Link to comment
Share on other sites

1 stundu atpakaļ, Jurkins teica:

Jautājums - vai tas ir "pareizi" prasti čekot ciklā sistēmas laiku un, ja ir, teiksim, 8:25, tad darīt to pasākumu? Vai to dara savādāk?

Es ieteiktu izmantot scheduleri, kurš izsauc koda izpildi. Linuxam crontab. WIndowsam Task Scheduler. Tas ir stabilāk. Savādāk, ja kods nobrūk, tad viņš nepildīsies, kāmēr atkal nepalaidīs.

  • Patīk 1
Link to comment
Share on other sites

Kapēc lai kods nobruktu, ja daudzmaz jēdzīgi uzrakstīts? Un kas ja crontabs nojūk?

Pat ja nobrūk, tad tādu applikāciju, kas tik lasa no porta un liek datubāzē tāpat taisītu kā servisu, kurš ja arī nobrūk, tad restartējas. Tāpat arī kā dependency ieliek datubāzes servisu - ja porta lasītāja serviss palaižas, tad automātiski arī datubāze palaižas un kas vēl tur vajadzīgs. 

Labots - AndrisBB
  • Patīk 1
Link to comment
Share on other sites

Ja doma kodēt spēlītes tad ņem vērā ka dzivojam 2022 un nedrīkst lietot sliktu valodu

 

Epic has just updated their C++ Coding Standard for Unreal Engine, which is causing some concerns in the coding scene. It basically means that you are not allowed to use certain words in your C++ code, which can potentially offend.

>You are not allowed to use "Blacklist" or "Whitelist" in your code, because of racial discrimination.
>You are not allowed to use "Slave" or "Master" in your code, because of historical trauma.
>You are not allowed to gender define your code entities, such as: server, function, module or plugin.
>If your code functions don't have a defined gender, you must refer to them by the pronouns: they, them and their.

  • Kādas šausmas! 1
Link to comment
Share on other sites

Ko tu te kautkādu huinju atkal postē, Unreal var izmantot vai neizmantot, ko vin viņiem gribas, brīva pasaule.

  • Patīk 1
Link to comment
Share on other sites

pirms 5 stundām , Jurkins teica:

p.s. bišķi nesakarīgi varbūt (alus ir attaisnojošs iemesls) 😁

Man patīk! Arī šovakar esmu pillā! Bet ja par topika virsrakstu "Kā konkrēti izpaužas C++ valodas tuvums "dzelžiem". - manuprāt absolūts idiotisms. Bet ne jau visi tā domā. Es gribētu pārfrazēt apmēram tādā stilā: kā "Kā izpaužas aunu bara tuvums tam aplokam, kurā tas aunu bars iespundēts". Ja varētu runāt par tuvumu "dzelžiem" tad tikai un vienīgi assemblera gadījumā. Bet ja par COM portu (vai arī CAN busu un citiem protokoliem, netrūkst idiotu, kas spējīgi izdomāt protokolus, citu par citu stulbākus un bezjēdzīgākus). Aizmirstam frāzi "kā būtu pareizi"! Tāda varianta nav! Kāpēc tā apgalvoju. Tāpēc ka esmu izķidājis dažādus protokolus PA BITIEM! Modbus RTU, CAN vēl virkni citu protokolu, kuru nosaukumus vairs neatceros (nav tā vērti), virkne no tiem izperēti iekš SIEMENS un manuprāt pasaule būtu daudz labāka un skaistāka, ja šie SIEMENS izperētie protokoli vispār nebūtu ieraudzījuši dienas gaismu. Jā, SIEMENS ir centīgi un akurāti, bet kā teica viens gudrs un TALANTĪGS pasniedzējs - centība neattaisno talanta trūkumu. Atvainojos par lirisko atkāpi. Bet ja par tematu. Neredzu problēmu. Esmu uzrakstījis virkni programmu gan mikrokontroliera, gan PC pusē, kas savstarpēji sazinās, pamatā gan izmantojot Modbus RTU, gan arī idiotiskos SIEMENS protokolus un viss notiek. Tikai aizmirstam vārdu "pareizi". Efektīvie menedžeri izstāstīs kā ir "pareizi". Lai viņi iet d....st ar savu "pareizi". Pareizi ir tā, kā darbojas, nevis tā kā ir "pareizi". Viena lieta ko esmu ielāgojis - ne WINDOWS ne LINUX (daži LINUX it kā esot) nav reālā laika sistēmas. Kaut kāda aptuvena korelācija ar reālo laiku, protams, ir, bet ja vajag kaut kādu lietu nodarīt noteiktā laika momentā, teiksim, ar precizitāti pat 1 milisekunde (kas, starp mums runājot, ir nožēlojami zema precizitāte) - par datoru ar visiem viņa gigaherciem un gigabaitiem aizmirstam - pats vecākais un tizlākais 8 bitu mikrokontrolieris to izdarīs labāk kā dators ar saviem gigaherciem un gigabaitiem (no skopa vēl varētu prasīt, bet ko Tu no nabaga ņemsi).  Tātad - ja kaut ko nosūtam no PC mikrokontrolierim - kaut kad jau viņš to saņems. Kad - nezinām. Varbūt, ja paveiksies, pēc 10 ms, ja vien PC šajā brīdī nebūs svarīgāku lietu ar ko nodarboties, piemēram, upgreidot jaunāko picas piegādātāju programmatūru. Tāpat ar mikrokontroliera sūtīto datoram. Jāatzīst - ja kaut ko vajadzēs saglabāt, piemēram, failā, tas tiks godīgi izdarīts. Kad? Nu kaut kad, kad būs tāda sīka vaļa. Īsi sakot - svarīgas lietas, kas jānodara precīzi un noteiktā laikā  PC uzticēt nevar, tās jādara mikrokontrolieriem, PC var uzticēt otršķirīgus uzdevumus, ko var veikt kaut kā un kaut kad. He, he - ienāca prātā partija un valdība un nav pat lielas atšķirības PSRS laikos vai tagad - un arī purni daudzviet tie paši. 

Labots - M_J
  • Haha 1
Link to comment
Share on other sites

Ko nu stāsti. Skaidrs ka reāla-laika darbības neviens jūzrespeisā neveiks, tam ir domāti draiveri kerneļa līmenī.

Un darbosies ne ar sliktāku precizitāti kā uz mikrokontroliera. Widowsā skaidrs ka iespējas ir mazliet ierobežotas salīdzinot ar Linuksi utt. Un jā ar visiem Gigaherciem tas būs ātrāk kā uz mikrokontroliera.

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...