Pieniä kysymyksiä ohjelmoinnista

Miten pystyn exporttaaman komponentista funktioita niiden testaamista varten?
Koodi:
export default MyComponent;
export add;

Lykkää virheen
Koodi:
Support for the experimental syntax 'exportDefaultFrom' isn't currently enabled
Taitaa syntaksissakin olla sanomista.

Linkki codesandbox rävellykseen --> intelligent-lake-knsuz - CodeSandbox
 
Miten pystyn exporttaaman komponentista funktioita niiden testaamista varten?
Koodi:
export default MyComponent;
export add;

Lykkää virheen
Koodi:
Support for the experimental syntax 'exportDefaultFrom' isn't currently enabled
Taitaa syntaksissakin olla sanomista.

Linkki codesandbox rävellykseen --> intelligent-lake-knsuz - CodeSandbox
Määrittele funktio komponentin ulkopuolella ja laita export määritelmän eteen.
Koodi:
export const add = (a, b) = > a + b
 
Onko täällä ketjua jossa voisi esittää yleisiä työhön liittyviä kysymyksiä ohjelmointialalla työskenteleville? Siis vähän kuin YK:n bussikuskithreadi: Kysy tuoreelta HSL-bussinkuljettajalta, jos jokin asia askarruttaa ammattiini liittyen

Esimerkkikysymyksenä haluaisin kysyä vaikkapa että onko pariohjelmointi ( Pair programming - Wikipedia ) oikeasti käytössä, vai onko kyseessä vain joku vuosituhannen alun oppikirjoihin laitettu "näinkin voisi periaatteessa koodata" -juttu. En siis ole ikinä työskennellyt missään varsinaisessa softatalossa joten en tiedä tavallisen ohjelmoijan arjesta juuri mitään.
 
Onko täällä ketjua jossa voisi esittää yleisiä työhön liittyviä kysymyksiä ohjelmointialalla työskenteleville? Siis vähän kuin YK:n bussikuskithreadi: Kysy tuoreelta HSL-bussinkuljettajalta, jos jokin asia askarruttaa ammattiini liittyen

Esimerkkikysymyksenä haluaisin kysyä vaikkapa että onko pariohjelmointi ( Pair programming - Wikipedia ) oikeasti käytössä, vai onko kyseessä vain joku vuosituhannen alun oppikirjoihin laitettu "näinkin voisi periaatteessa koodata" -juttu. En siis ole ikinä työskennellyt missään varsinaisessa softatalossa joten en tiedä tavallisen ohjelmoijan arjesta juuri mitään.


Kyllä se parikoodaus taitaa olla oppikirjojen satu. Itselläni ainakin vituttaa jos joku olan takaa osoittaa jokista linterin jo ilmoittamaa typoa. Ehkä jossai firman propellihattu/ideointi päivillä voidaa jotan protoja askarrella kollektiivisesti samalta ruudulta.

Tämä on siis oma henk.koht kokemus.
 
Onko täällä ketjua jossa voisi esittää yleisiä työhön liittyviä kysymyksiä ohjelmointialalla työskenteleville? Siis vähän kuin YK:n bussikuskithreadi: Kysy tuoreelta HSL-bussinkuljettajalta, jos jokin asia askarruttaa ammattiini liittyen

Esimerkkikysymyksenä haluaisin kysyä vaikkapa että onko pariohjelmointi ( Pair programming - Wikipedia ) oikeasti käytössä, vai onko kyseessä vain joku vuosituhannen alun oppikirjoihin laitettu "näinkin voisi periaatteessa koodata" -juttu. En siis ole ikinä työskennellyt missään varsinaisessa softatalossa joten en tiedä tavallisen ohjelmoijan arjesta juuri mitään.
En ainakaan itse ole missään törmännyt siihen, että jotakin tiettyä hommaa alettaisiin ihan suunnitelmallisesti parisysteemillä tekemään, mutta kyllähän sitä useasti ongelmatapauksissa on tullut istuttua kaverin selän takana ja on luettu koodia läpi ja tehty debuggausta yhdessä. Yleensä tuntien pituinen pään näppikseen hakkaaminen on saatu ratkottua minuuteissa, kun on tuotu tuoreet silmät peliin.
 
Meillä ei ole tällä hetkellä käytössä mutta jonkin verran on ollut kiinnostusta tuoda sitä jollain tavalla mukaan hommaan. Käytännössä konkreettinen suunnitelma on ilmeisesti tuoda jatkossa uudet työntekijät hommaan mukaan juurikin parikoodauksella, mutta katsotaan, miten käy.
 
Parikoodaus rutiinityönä kuulostaa painajaiselta. Ymmärrän jos joku on jumissa ja itse pyytää jotakuta katsomaan vierestä. Mutta jos pomo päättää että nyt aletaan parikoodaamaan niin abandon ship
 
Pitkälle toista kymmentä vuotta tullut tunkattua koodia leivän edestä. Ei tuota oppikirjan parikoodausta todellakaan missään rutiininomaisesti käytetä. Juuri yllä mainittua aivojumia ratkaisemaan kysäistään tiimikaverilta silmäparia lainaan, siihen se jää.
 
Sqlite 3 ja node.js Windows 10:llä (koko systeemi localhostissa) tiedon syöttäminen text-muotoiseen kenttään ja sen hakeminen muodostaa seuraavan ongelman

"hyvää päivää" muuttuu muotoon: "hyv%C3%A4%C3%A4+p%C3%A4iv%C3%A4%C3%A4"

Miten ongelma kannattaisi hoitaa? Enkoodauksista varmastikin kyse, mutta en ole näitä hetkeen räplännyt.
Plussaa jos ratkaisu on porttautuva myös linux-servulle.
 
Sqlite 3 ja node.js Windows 10:llä (koko systeemi localhostissa) tiedon syöttäminen text-muotoiseen kenttään ja sen hakeminen muodostaa seuraavan ongelman

"hyvää päivää" muuttuu muotoon: "hyv%C3%A4%C3%A4+p%C3%A4iv%C3%A4%C3%A4"

Miten ongelma kannattaisi hoitaa? Enkoodauksista varmastikin kyse, mutta en ole näitä hetkeen räplännyt.
Plussaa jos ratkaisu on porttautuva myös linux-servulle.
Hakeminen millä? POST vai GET? Vähän näyttää siltä, että lähtee GETillä palvelimelle.
Tuskin liittyy ajoympäristöön mitenkään.
 
Hakeminen millä? POST vai GET? Vähän näyttää siltä, että lähtee GETillä palvelimelle.
Tuskin liittyy ajoympäristöön mitenkään.

Node pyörii serverinä, jossa lokaalina sqlite database. Tiedot toki syötetään POST:lla serverille ja haetaan GET:llä webbisivulta. Node tekee tietokantaan laitot INSERT INTO-komennolla ja haut SELECT FROM komennolla.
 
Node pyörii serverinä, jossa lokaalina sqlite database. Tiedot toki syötetään POST:lla serverille ja haetaan GET:llä webbisivulta. Node tekee tietokantaan laitot INSERT INTO-komennolla ja haut SELECT FROM komennolla.
Ajoympäristöllä ei toisaan ole tämän kanssa mitään tekemistä, tuo sinun teksti nyt on siis URL encoodattuna. Missä muodossa se on siellä kannassa?
 
Ajoympäristöllä ei toisaan ole tämän kanssa mitään tekemistä, tuo sinun teksti nyt on siis URL encoodattuna. Missä muodossa se on siellä kannassa?

En osaa sanoa kun vasta opettelen asiaa. Build skriptini taululle on yksinkertaistettuna tämä
"CREATE TABLE msg(msg TEXT)"

Tarkoitatko, että sitä POST-messagen dataosiossa tulevaa merkkijonoa pitää jotenkin muuttaa tai suodattaa ennen kuin se laitetaan kantaan? (toki se on leikattu sieltä viestistä)

EDIT: Jep, tarkistin asian, eli viesti on jo POST-kutsusta saapuessaa vääränlaista. Nyt tutkin sitten miten saisin tähän kohtaan korjauksen.
EDIT2: require("queryparser") auttoi.
 
Viimeksi muokattu:
ASP.NET Core MVC sovelluksessa CurrentCulture ei säily kun siirrytään Controllerista Viewiin. Eli Controllerissa OnActionExecuting-metodissa asetan CurrentThreadiin CurrentCulturen ja CurrentUICulturen. Sitten kun saavutaan controlleriin niin kieli on oikein (haen muuttujaan resx-tiedostosta stringin => tulee äsken asetetun kielen mukainen teksti), mutta kun tehdään return View(...) niin siellä Viewissä sitten kieli on taas resetoitunut ja tulee väärän kielen teksti.
 
Ois tarkoituksena alkaa tekemään ittelleni jonkun muotoista radio clienttiä kuuntelua varten, mutta ongelmaksi osoittautui nyt se että miten ihmeessä noita radiokanavia saa striimattua? En oikeen nopealla Googlella löytänyt vastausta tähän.
 
Vasta muutamia tunteja Python-ohjelmointia harjoitelleena (en ole vielä oikein päässyt täysin sisälle tähän maailmaan) huomasin, että PyCharmissa tulee eri tulos riippuen ajaako komennon run-ikkunassa vaiko konsolissa. Miksi tuossa 'runissa' ei tule 'True'ta?

RUN
run.PNG
CONSOLE
console.PNG

Tähän mennessä olen tosiaan kaiken koodin ajanut tuon run-kautta ja on ihan oikein on ollut. En ole mitään print, if, else, while vaikeampaa vielä kokeillut, mutta nyt kun hain kirjastosta yhden Python-kirjan, jossa käytään IDLE:ä niin se hieman hämmensi asioita. IDLE:n takia huomasin tuon consolen PyCharmissa ja ne ovat samanlaisia? Kummassakin on nuolia alussa eikä tarvitse käyttää print-komentoja? :confused:
 
Vasta muutamia tunteja Python-ohjelmointia harjoitelleena (en ole vielä oikein päässyt täysin sisälle tähän maailmaan) huomasin, että PyCharmissa tulee eri tulos riippuen ajaako komennon run-ikkunassa vaiko konsolissa. Miksi tuossa 'runissa' ei tule 'True'ta?

Siksi että printtaat pelkän pineapples == 3 vertailun arvon, mikä on False. Konsolissa et printtaa mitään vaat ajat sen koko vertailun, missä on se 'or' ehto mukana, ja se sitten kertoo sen koko lausekkeen arvoksi ihan oikein True. Et siis aja samaa koodia, ja siksi tuo ero.

Jos haluat sen ensimmäisen printtaamaan sulle oikein sen koko vertailun, niin se olisi print((pineapples == 3) or (zebras == 2))
 
No niinpä tietysti. Tämä selvensi eikä ollut edes uusi asia :facepalm: En vain osannut ajatella, että koodista olisi puuttunut jotain kun toisessa paikassa tulos oli kuitenkin oikea.
 
Tuo on itse asiassa ihan loistava esimerkki havainnollistamaan Python 2:n ja Python 3:n eroja. Nimittän Python 2:ssa tuon print-lausekkeen tulos on True, eikä False kuten Python 3:ssa. Syynä on se, että Python 2:ssa printin argumenttia ei tarvitse laittaa sulkujen sisään, eli "print(pineapples == 3) or (zebras == 2)" on sama asia kuin print((pineapples == 3) or (zebras == 2))".

Kysyjällä näyttää olevan käytössä Python 3.8.0. Jos ohjelmointikokemusta on vasta "muutamia tunteja", niin ei ehkä kannata liikaa miettiä Python-versioiden eroja, mutta on hyvä tietää, että Python 2 on joillakin aloilla vielä varsin yleisesti käytössä. Joissain suht tuoreissa Linux-distroissakin python-komento käynnisti oletuksena kakkosversion.
 
Juu, python 2:ssa ja 3:ssa on aika paljon eroja.

Omassa kotiautomaatio/kodinhallintajärjestelmässä on nykyisellään vähän kaikkea, muunmuassa html, css, javascript, php, python2, python3, shelliskriptejä ja taitaa joku palikka olla c:tä tai c++:aakin. Suurin osa on sellaista pikaista purkkakoodia jonka joukossa on kaikenlaisia quickfixejä ja workaroundeja eli ihan totaalinen helvetti. Tuo taas johtuu siitä että tuota on tullut rakenneltua vuosien varrella pitkällä aikajänteellä ja on vaan aina nopeasti tehnyt jonkun lisäyksen miten sen on nopeiten saanut kasaan. Nyt tuota on sitten tullut siistittyä ja yksinkertaistettua moneen otteeseen mutta yksi suuri homma olisi muunmuassa konvertoida kaikki python2-koodi kolmospyyttonille niin saisi koodista vähän yhtenäisempää ja uudelleenkäytettävämpää.

Tietty tuo mun koodi ei suoraan käänny automaattityökaluilla kuten 2to3 python3-koodiksi joten käsityötä riittää. Tai no kääntyyhän se ja syntaksi on oikein mutta joku toiminnallisuus sieltä sun täältä hajoaa. Tuo varmaan osittain johtuu siitä että aikanaan on tullut kirjoitettua todella kauheaa purkkaa.

Tuossa projektissa on tosiaan oppinut ajattelemaan tulevaisuuteen, esimerkiksi ei ollut ollenkaan fiksua tehdä eri kanaville kovakoodatut shelliskriptit, varsinkin kun sama toiminnallisuus pitää saada sekä telkkarille että elisaviihde-boksille ja toinen juttelee infrapunaa ja toinen sarjaporttia. Ennen siis oli noin 30 kanavaa x 2 laitetta eli noin 60 erillistä skriptiä, nykyään tuon hoitaa yksi python3-koodinpätkä.

Ja kun vastaavia aivopieruja on nettiradiolle/monimediaplayerille, parille DSP:lle, videovaihtajille jne. Ja kun valaistustakin ohjataan joko Trådfri-gatewayn kautta, suoraan kärkitiedolla sekä DMX:llä niin soppa on valmis. Eikä hommaa ainakaan helpota se, että tuota koodia ajetaan useammalla RaspberryPi:llä ympäri kämppää.

Jostain kun vielä löytäisi jonkun simppelin AJAX-kurssin tms niin saisi vähän tuota käyttöliittymää järkevämmäksi, nykyisellään se on aika kasa frameja sun muuta wanhaa teknologiaa.
 
Haluaisin tehdä 3x3 html-ruudukon, jossa jokaisessa ruudussa on kuva. Tein tämän tablella ja sain järkevän taulukon keskelle sivua. Kuitenkin taulukkoon jäi riviväliä, jota en tuntikausien css-runkkaamisellakaan saanut pois. Netissä kertoivat, että kukaan täysjärkinen ei enää käytä taulukkoa sivun asetteluun vaan gridiä ja flexiä. Grid kuitenkin jättää todella paljon tilaa sivuille (ks kuva gridproblem). Css näyttää silloin tältä:

.imagematrix {
display:grid;
grid-template-columns:repeat(3, 1fr);
justify-items: center;
}

tällä toisella tavalla saan ne kasaan, mutta jäävät vasempaan laitaan (kuva gridproblem2)

.imagematrix {
display:grid;
grid-template-columns:repeat(3, 0.1fr);
justify-items: center;
}

Flexboxia voisin myös käyttää, mutta en osaa määrätä sille tiettyä lukittua sarakemäärää (3x3, 4x4, 5x5 taulukot esimerkiksi).

gridproblem.png gridproblem2.png
 
Haluaisin tehdä 3x3 html-ruudukon, jossa jokaisessa ruudussa on kuva. Tein tämän tablella ja sain järkevän taulukon keskelle sivua. Kuitenkin taulukkoon jäi riviväliä, jota en tuntikausien css-runkkaamisellakaan saanut pois. Netissä kertoivat, että kukaan täysjärkinen ei enää käytä taulukkoa sivun asetteluun vaan gridiä ja flexiä. Grid kuitenkin jättää todella paljon tilaa sivuille (ks kuva gridproblem). Css näyttää silloin tältä:

.imagematrix {
display:grid;
grid-template-columns:repeat(3, 1fr);
justify-items: center;
}

tällä toisella tavalla saan ne kasaan, mutta jäävät vasempaan laitaan (kuva gridproblem2)

.imagematrix {
display:grid;
grid-template-columns:repeat(3, 0.1fr);
justify-items: center;
}

Flexboxia voisin myös käyttää, mutta en osaa määrätä sille tiettyä lukittua sarakemäärää (3x3, 4x4, 5x5 taulukot esimerkiksi).

gridproblem.png gridproblem2.png

Ensimmäisellä tavalla joudut määrittelemään jonkun max-width määritelmän, joko pikseleinä tai prosentteina.
Toisellat tehtäessä laita tuo taulukko vaikka divin sisään ja anna diville oma tyyliluokka.
Ulkomuistista jotenkin näin:

.center {
margin: auto;
width: 50%;
text-align: center;
}

Fireboxia en ole itse koskaan käyttänyt, mutta ei nuo kaksi ylempää mitenkään huonoja tapoja imo ole.

Edit. Diveilläkin voit tehdä myös vastaavan taulukon. Tapoja on siis monia ja hieman käyttökohteesta riippuen kannattaa valita tapansa.
 
Haluaisin tehdä 3x3 html-ruudukon, jossa jokaisessa ruudussa on kuva. Tein tämän tablella ja sain järkevän taulukon keskelle sivua. Kuitenkin taulukkoon jäi riviväliä, jota en tuntikausien css-runkkaamisellakaan saanut pois. Netissä kertoivat, että kukaan täysjärkinen ei enää käytä taulukkoa sivun asetteluun vaan gridiä ja flexiä. Grid kuitenkin jättää todella paljon tilaa sivuille (ks kuva gridproblem). Css näyttää silloin tältä:

.imagematrix {
display:grid;
grid-template-columns:repeat(3, 1fr);
justify-items: center;
}

tällä toisella tavalla saan ne kasaan, mutta jäävät vasempaan laitaan (kuva gridproblem2)

.imagematrix {
display:grid;
grid-template-columns:repeat(3, 0.1fr);
justify-items: center;
}

Flexboxia voisin myös käyttää, mutta en osaa määrätä sille tiettyä lukittua sarakemäärää (3x3, 4x4, 5x5 taulukot esimerkiksi).

Olisi luultavasti kuulunut tuonne CSS-kysymyksiä ketjuun, mutta saat ratkaistua tuon ongelman käärimällä griding flexboxin sisälle. Suosittelen kokeilemaan tekemään alusta asti itse oppimisen kannalta, mutta alla on myös koodi jos tarvitset :)

Koodi:
.flex {
    display: flex;
}

.flex-horizontal-center {
    justify-content: center;
}

.imageGrid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
}

.item {
    background: lightblue;
    width: 10em;
    height: 10em;
}

HTML:
<div class="flex flex-horizontal-center">
    <div class="imageGrid">
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>

        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>

        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
    </div>
</div>
 
Minulla on vallox_websocket_api:a käyttävä Python-skripti, johon olen nyt yrittänyt poimia ilmanvaihtokoneelta kennon jälkeistä lämpötilaa. Tällä koodinpätkällä saa katsottua ko. arvon, mutta miten saan sen heitettyä vaikka kenno-nimiseen muuttujaan tuolta asyncio:n sisältä, jotta saan hyödynnettyä sitä säätöjen tekemisessä? Aivot nyrjähtää kun en ole kovin kokenut Python-koodaaja.

Koodi:
async def run():
    metrics = await client.fetch_metrics()   
    print (metrics['A_CYC_TEMP_SUPPLY_CELL_AIR'])
asyncio.get_event_loop().run_until_complete(run())
 
@Boulder, tuossahan sä laitat sen datan metrics-nimiseen muuttujaan. Eli mitä sä tarkalleen haluat tehdä sillä datalla? Mitä tarkoittaa "säätöjen tekeminen"? Etkö sä voi alkaa tehdä säätöjä heti tuossa kun se data on metrics-muuttujaan saatu?
 
Metrics-muuttujaan poimiintuu kaikki, mitä kone suoltaa ulos, mutta muuttujaan ei enää pääse käsiksi tuon osuuden jälkeen. Skriptissä on useampi eri osa, ja tarkoitus on kerätä alkuun kaikki data, joiden perusteella sitten tehdään säädöt mm. ilp:n pyyntilämpötilaan ja ilmanvaihtokoneen tavoitelämpötilaan.

Näin vähäisen kokemuksen säätäjänä aina ihmettelee, miksei tuohon ole voitu sisäänrakentaa yksinkertaista mahdollisuutta palauttaa lopputulos normaalisti kuten jossain tavallisessa funktiossa.
 
Metrics-muuttujaan poimiintuu kaikki, mitä kone suoltaa ulos, mutta muuttujaan ei enää pääse käsiksi tuon osuuden jälkeen. Skriptissä on useampi eri osa, ja tarkoitus on kerätä alkuun kaikki data, joiden perusteella sitten tehdään säädöt mm. ilp:n pyyntilämpötilaan ja ilmanvaihtokoneen tavoitelämpötilaan.

Näin vähäisen kokemuksen säätäjänä aina ihmettelee, miksei tuohon ole voitu sisäänrakentaa yksinkertaista mahdollisuutta palauttaa lopputulos normaalisti kuten jossain tavallisessa funktiossa.

Asynkronisuus tarkoittaa sitä, että se await-osuus tapahtuu joskus tulevaisuudessa, emme tiedä tarkasti. Await palauttaa kontrollin eventtiloopille ja hommaa jatketaan vasta kun ne arvot on saatu. Sun TÄYTYY käsitellä se data siis tuolla asyn-funktiossa kun se on saatu (kyllä, on muitakin tapoja, mutta tämä on luultavasti helpoin). Eli: tee funktio, joka ottaa metriikat ja tekee niillä jotain. Tyyliin:

Koodi:
def do_stuff_with_metrics(metrics):
    print('Starting to do stuff with the metrics')
    # Do stuff here

async def run():
    metrics = await client.fetch_metrics()
    print("We received the metrics, let's use them!")
    do_stuff_with_metrics(metrics)

asyncio.get_event_loop().run_until_complete(run())
 
Okei, tuo on varmaan sitten tehtävä niin, että käärin sen säätöosuuden tuonne asyncin sisään ja annan skriptissä nyt olevan toisen async-osuuden pyöriä omanaan. Muut säätöihin tarvittavat arvot saan poimittua normaalein keinoin niin ne on käytettävissä helposti.

Kiitoksia!
 
annan skriptissä olevan toisen async-osuuden pyöriä omanaan

Näissä kandee varmistaa, että onko suoritusjärjestyksellä väliä. Kun sulla on kaksi omaa async-pätkää, ne voi luultavasti suoriutua missä tahansa järjestyksessä. Joskus tällä on väliä, joskus ei.
 
Näissä kandee varmistaa, että onko suoritusjärjestyksellä väliä. Kun sulla on kaksi omaa async-pätkää, ne voi luultavasti suoriutua missä tahansa järjestyksessä. Joskus tällä on väliä, joskus ei.
Joo, tässä tapauksessa ei pitäisi olla väliä. Toinen async hakee arvot ilmalämmityskoneelta (ja jatkossa käskyttää lämpötilan tavoitearvot eri koneille) ja toinen async käskyttää koneen puhallinnopeuden.
 
Miksi netin esimerkeissä näkee usein, että ainakin C:ssä hakutaulut määritellään heksadesimaalimuodossa? Mitä etua sillä saavutetaan selväkielisen muodon sijaan?
Kyse on sulautettuihin järjestelmiin koodaamisesta, jos sillä on merkitystä.
 
Miksi netin esimerkeissä näkee usein, että ainakin C:ssä hakutaulut määritellään heksadesimaalimuodossa? Mitä etua sillä saavutetaan selväkielisen muodon sijaan?
Kyse on sulautettuihin järjestelmiin koodaamisesta, jos sillä on merkitystä.

Mitä mahdat tarkoittaa selväkielisellä? Heksadesimaali on C-veteraanille selväkielistä.

Noin yleisellä tasolla, heksadesimaaliluvun ja tietotyyppien pituudella on suora vastaavuus, ja bittikenttiä/maskeja nyplätessä yhden heksan muuttaa päässä nopeasti binaariksi.

Lisäksi sulautetuissa järjestelmissä ja muussa rautaläheisessä ohjelmoinnissa on usein tarpeen käpälöidä suoraan muistiosoitteita, jotka ovat selkeämpiä heksadesimaalina, ja rekistereitä joiden koko on määrätty ja voi myös sisältää bittikentän.
 
Alla esimerkki esimerkistä. Minusta tuo olisi paljon selvempi kymmenjärjestelmällä tehtynä.
Koodi:
static const __flash uint8_t lookup[256] =
{
0x00U, 0x07U, 0x0EU, 0x09U, 0x1CU, 0x1BU, 0x12U, 0x15U,
0x38U, 0x3FU, 0x36U, 0x31U, 0x24U, 0x23U, 0x2AU, 0x2DU,
0x70U, 0x77U, 0x7EU, 0x79U, 0x6CU, 0x6BU, 0x62U, 0x65U,
0x48U, 0x4FU, 0x46U, 0x41U, 0x54U, 0x53U, 0x5AU, 0x5DU,
0xE0U, 0xE7U, 0xEEU, 0xE9U, 0xFCU, 0xFBU, 0xF2U, 0xF5U,
0xD8U, 0xDFU, 0xD6U, 0xD1U, 0xC4U, 0xC3U, 0xCAU, 0xCDU,
0x90U, 0x97U, 0x9EU, 0x99U, 0x8CU, 0x8BU, 0x82U, 0x85U,
0xA8U, 0xAFU, 0xA6U, 0xA1U, 0xB4U, 0xB3U, 0xBAU, 0xBDU,
0xC7U, 0xC0U, 0xC9U, 0xCEU, 0xDBU, 0xDCU, 0xD5U, 0xD2U,
0xFFU, 0xF8U, 0xF1U, 0xF6U, 0xE3U, 0xE4U, 0xEDU, 0xEAU,
0xB7U, 0xB0U, 0xB9U, 0xBEU, 0xABU, 0xACU, 0xA5U, 0xA2U,
0x8FU, 0x88U, 0x81U, 0x86U, 0x93U, 0x94U, 0x9DU, 0x9AU,
0x27U, 0x20U, 0x29U, 0x2EU, 0x3BU, 0x3CU, 0x35U, 0x32U,
0x1FU, 0x18U, 0x11U, 0x16U, 0x03U, 0x04U, 0x0DU, 0x0AU,
0x57U, 0x50U, 0x59U, 0x5EU, 0x4BU, 0x4CU, 0x45U, 0x42U,
0x6FU, 0x68U, 0x61U, 0x66U, 0x73U, 0x74U, 0x7DU, 0x7AU,
0x89U, 0x8EU, 0x87U, 0x80U, 0x95U, 0x92U, 0x9BU, 0x9CU,
0xB1U, 0xB6U, 0xBFU, 0xB8U, 0xADU, 0xAAU, 0xA3U, 0xA4U,
0xF9U, 0xFEU, 0xF7U, 0xF0U, 0xE5U, 0xE2U, 0xEBU, 0xECU,
0xC1U, 0xC6U, 0xCFU, 0xC8U, 0xDDU, 0xDAU, 0xD3U, 0xD4U,
0x69U, 0x6EU, 0x67U, 0x60U, 0x75U, 0x72U, 0x7BU, 0x7CU,
0x51U, 0x56U, 0x5FU, 0x58U, 0x4DU, 0x4AU, 0x43U, 0x44U,
0x19U, 0x1EU, 0x17U, 0x10U, 0x05U, 0x02U, 0x0BU, 0x0CU,
0x21U, 0x26U, 0x2FU, 0x28U, 0x3DU, 0x3AU, 0x33U, 0x34U,
0x4EU, 0x49U, 0x40U, 0x47U, 0x52U, 0x55U, 0x5CU, 0x5BU,
0x76U, 0x71U, 0x78U, 0x7FU, 0x6AU, 0x6DU, 0x64U, 0x63U,
0x3EU, 0x39U, 0x30U, 0x37U, 0x22U, 0x25U, 0x2CU, 0x2BU,
0x06U, 0x01U, 0x08U, 0x0FU, 0x1AU, 0x1DU, 0x14U, 0x13U,
0xAEU, 0xA9U, 0xA0U, 0xA7U, 0xB2U, 0xB5U, 0xBCU, 0xBBU,
0x96U, 0x91U, 0x98U, 0x9FU, 0x8AU, 0x8DU, 0x84U, 0x83U,
0xDEU, 0xD9U, 0xD0U, 0xD7U, 0xC2U, 0xC5U, 0xCCU, 0xCBU,
0xE6U, 0xE1U, 0xE8U, 0xEFU, 0xFAU, 0xFDU, 0xF4U, 0xF3U
};
 
Alla esimerkki esimerkistä. Minusta tuo olisi paljon selvempi kymmenjärjestelmällä tehtynä.
Koodi:
static const __flash uint8_t lookup[256] =
{
0x00U, 0x07U, 0x0EU, 0x09U, 0x1CU, 0x1BU, 0x12U, 0x15U,
0x38U, 0x3FU, 0x36U, 0x31U, 0x24U, 0x23U, 0x2AU, 0x2DU,
0x70U, 0x77U, 0x7EU, 0x79U, 0x6CU, 0x6BU, 0x62U, 0x65U,
0x48U, 0x4FU, 0x46U, 0x41U, 0x54U, 0x53U, 0x5AU, 0x5DU,
0xE0U, 0xE7U, 0xEEU, 0xE9U, 0xFCU, 0xFBU, 0xF2U, 0xF5U,
0xD8U, 0xDFU, 0xD6U, 0xD1U, 0xC4U, 0xC3U, 0xCAU, 0xCDU,
0x90U, 0x97U, 0x9EU, 0x99U, 0x8CU, 0x8BU, 0x82U, 0x85U,
0xA8U, 0xAFU, 0xA6U, 0xA1U, 0xB4U, 0xB3U, 0xBAU, 0xBDU,
0xC7U, 0xC0U, 0xC9U, 0xCEU, 0xDBU, 0xDCU, 0xD5U, 0xD2U,
0xFFU, 0xF8U, 0xF1U, 0xF6U, 0xE3U, 0xE4U, 0xEDU, 0xEAU,
0xB7U, 0xB0U, 0xB9U, 0xBEU, 0xABU, 0xACU, 0xA5U, 0xA2U,
0x8FU, 0x88U, 0x81U, 0x86U, 0x93U, 0x94U, 0x9DU, 0x9AU,
0x27U, 0x20U, 0x29U, 0x2EU, 0x3BU, 0x3CU, 0x35U, 0x32U,
0x1FU, 0x18U, 0x11U, 0x16U, 0x03U, 0x04U, 0x0DU, 0x0AU,
0x57U, 0x50U, 0x59U, 0x5EU, 0x4BU, 0x4CU, 0x45U, 0x42U,
0x6FU, 0x68U, 0x61U, 0x66U, 0x73U, 0x74U, 0x7DU, 0x7AU,
0x89U, 0x8EU, 0x87U, 0x80U, 0x95U, 0x92U, 0x9BU, 0x9CU,
0xB1U, 0xB6U, 0xBFU, 0xB8U, 0xADU, 0xAAU, 0xA3U, 0xA4U,
0xF9U, 0xFEU, 0xF7U, 0xF0U, 0xE5U, 0xE2U, 0xEBU, 0xECU,
0xC1U, 0xC6U, 0xCFU, 0xC8U, 0xDDU, 0xDAU, 0xD3U, 0xD4U,
0x69U, 0x6EU, 0x67U, 0x60U, 0x75U, 0x72U, 0x7BU, 0x7CU,
0x51U, 0x56U, 0x5FU, 0x58U, 0x4DU, 0x4AU, 0x43U, 0x44U,
0x19U, 0x1EU, 0x17U, 0x10U, 0x05U, 0x02U, 0x0BU, 0x0CU,
0x21U, 0x26U, 0x2FU, 0x28U, 0x3DU, 0x3AU, 0x33U, 0x34U,
0x4EU, 0x49U, 0x40U, 0x47U, 0x52U, 0x55U, 0x5CU, 0x5BU,
0x76U, 0x71U, 0x78U, 0x7FU, 0x6AU, 0x6DU, 0x64U, 0x63U,
0x3EU, 0x39U, 0x30U, 0x37U, 0x22U, 0x25U, 0x2CU, 0x2BU,
0x06U, 0x01U, 0x08U, 0x0FU, 0x1AU, 0x1DU, 0x14U, 0x13U,
0xAEU, 0xA9U, 0xA0U, 0xA7U, 0xB2U, 0xB5U, 0xBCU, 0xBBU,
0x96U, 0x91U, 0x98U, 0x9FU, 0x8AU, 0x8DU, 0x84U, 0x83U,
0xDEU, 0xD9U, 0xD0U, 0xD7U, 0xC2U, 0xC5U, 0xCCU, 0xCBU,
0xE6U, 0xE1U, 0xE8U, 0xEFU, 0xFAU, 0xFDU, 0xF4U, 0xF3U
};

Näyttäisi jonkinlaiselta CRC8 taulukolta, eli hakee 8-bittiselle tavulle sitä vastaavan CRC8 tarkisteen. En nyt hoksaa millä tavalla tuo olisi yhtään sen selvempi desimaaleina.
 
Näyttäisi jonkinlaiselta CRC8 taulukolta, eli hakee 8-bittiselle tavulle sitä vastaavan CRC8 tarkisteen. En nyt hoksaa millä tavalla tuo olisi yhtään sen selvempi desimaaleina.
Se olikin vain esimerkki. Vastaavaa näkee myös esim. trigonometristen funktioiden arvojen kanssa.
 
Mitä mahdat tarkoittaa selväkielisellä? Heksadesimaali on C-veteraanille selväkielistä.

Noin yleisellä tasolla, heksadesimaaliluvun ja tietotyyppien pituudella on suora vastaavuus, ja bittikenttiä/maskeja nyplätessä yhden heksan muuttaa päässä nopeasti binaariksi.

Lisäksi sulautetuissa järjestelmissä ja muussa rautaläheisessä ohjelmoinnissa on usein tarpeen käpälöidä suoraan muistiosoitteita, jotka ovat selkeämpiä heksadesimaalina, ja rekistereitä joiden koko on määrätty ja voi myös sisältää bittikentän.
Tämä. Kaksi heksaa vastaa 8 bittiä, joten heksana on paljon helpompi pyöritellä lukuja, joille tehdään bittioperaatioita. Arvoista myös näkee, mahtuvatko ne tietynpituiseen muuttujaan.

Esimerkiksi mahtuuko tämä luku 32-bittiseen muuttujaan: 4294967173?
Entä tämä: 0xFFFFFF85?

edit: Tuli juuri töissä vastaan ihan aitokin esimerkki: nand-flashin lohkokoko on 128 kilotavua. Halusin tyhjentää osion, jonka koko oli 91 lohkoa. Kumpi esitysmuoto on helpompi: 11927552 vai b60000?
 
Viimeksi muokattu:
Tämä. Kaksi heksaa vastaa 8 bittiä, joten heksana on paljon helpompi pyöritellä lukuja, joille tehdään bittioperaatioita. Arvoista myös näkee, mahtuvatko ne tietynpituiseen muuttujaan.

Esimerkiksi mahtuuko tämä luku 32-bittiseen muuttujaan: 4294967173?
Entä tämä: 0xFFFFFF85?

edit: Tuli juuri töissä vastaan ihan aitokin esimerkki: nand-flashin lohkokoko on 128 kilotavua. Halusin tyhjentää osion, jonka koko oli 91 lohkoa. Kumpi esitysmuoto on helpompi: 11927552 vai b60000?
Näin itsekin näen asian. Toki alkuun ja tottumattomalle hexa saattaa olla vaikeaselkoista. Joillekin on lisäksi helpompi hahmottaa numeroita suoraan, kuin hexadesimaaleja tmv. Omalla kokemuksella kannattaa opetella elämään noiden hexadesimaalien kanssa. Kuten jo sanottu mm. bittioperaatiot on lopulta helpompi hahmottaa noin.
 
Se olikin vain esimerkki. Vastaavaa näkee myös esim. trigonometristen funktioiden arvojen kanssa.

Aika usein myös tuollaiset hakutaulut ovat generoitua koodia eikä ketään kiinnosta tarkalleen mitä lukuarvoja taulukossa on, joten jo edellä mainitut syyt ja se että heksataulukoista saadaan siistimmät (vrt. tuo ylempi taulu, 8-bittisiä arvoja heksanumeroina, 8 per rivi, 32 riviä = uint8_t[256] ) painaa enemmän vaakakupissa kuin se että yksittäisen arvon näkee suoraan desimaalina.
 
Aika usein myös tuollaiset hakutaulut ovat generoitua koodia eikä ketään kiinnosta tarkalleen mitä lukuarvoja taulukossa on, joten jo edellä mainitut syyt ja se että heksataulukoista saadaan siistimmät (vrt. tuo ylempi taulu, 8-bittisiä arvoja heksanumeroina, 8 per rivi, 32 riviä = uint8_t[256] ) painaa enemmän vaakakupissa kuin se että yksittäisen arvon näkee suoraan desimaalina.
Totta tämäkin. Desimaalilukuina taulukkoa ei saisi tasattua siististi. Heksoina arvoista saadaan samanpituisia laittamalla nollia eteen, mutta esimerkiksi 014 ei olekaan desimaaliluku, vaan oktaali.
 
Itselläni ainakin aivot jo automaattisesti prosessoivat heksoista tarvittaessa binääriä jos esim tarvitsee jotain bittimaskeja, desimaaliluvuista se on varsin hankalaa. Muutenkin jos on tottunut pyörittelemään heksaa ja binääriä niin tuo konversio tapahtuu aikalailla automaagisesti päässä ja heksadesimaaliesitys vaan on lyhyempi tapa ilmaista binääridataa.

Kun noita riittävästi pyörittelee niin alkaa vaan näkemään asioita heksana ja desimaaliluvut alkavat vaan olemaan ihan oikeasti jopa riesa kun ne eivät ole niin käytännöllisiä.

Itseasiassa joskus on jo kaupassakin mietinyt että miksi hinnat ovat niin epäkäytänöllisiä kun heksana tai binäärinä olisi helpompi miettiä useamman kappaleen kokonaishintaa... ;)
 
Bash:ssa näyttäisi tämä toimivan ok:

Koodi:
declare {var1,var2}+="test string"$'\n'

Eli tarkoitus tallentaa useampaan muuttujaan sama sisältö (edellisten jatkoksi) kerralla. Ilman tuota "declare":a ei toimi. Yrittänyt googlettaa että onko tämä tapa ihan validi eikä ole mitään sudenkuoppia mutta ei tahdo löytyä mitään vastaavaa esimerkkiä tuosta "declare {a,b,...}=" toiminnosta. Kaikki muut "useaan muuttujaan sama sisältö" esimerkit joita löydän ovat enemmän tai vähemmän monimutkaisempia.

Samalla jos joku voi varmistaa, että tuon " $'\n' " käyttö on ihan ok kun haluaa lisätä uuden rivin muuttujaan?
 
Bash:ssa näyttäisi tämä toimivan ok:

Koodi:
declare {var1,var2}+="test string"$'\n'

Eli tarkoitus tallentaa useampaan muuttujaan sama sisältö (edellisten jatkoksi) kerralla. Ilman tuota "declare":a ei toimi. Yrittänyt googlettaa että onko tämä tapa ihan validi eikä ole mitään sudenkuoppia mutta ei tahdo löytyä mitään vastaavaa esimerkkiä tuosta "declare {a,b,...}=" toiminnosta. Kaikki muut "useaan muuttujaan sama sisältö" esimerkit joita löydän ovat enemmän tai vähemmän monimutkaisempia.

Samalla jos joku voi varmistaa, että tuon " $'\n' " käyttö on ihan ok kun haluaa lisätä uuden rivin muuttujaan?

Miksipä ei jos välttämättä haluaa sen noin tehdä, ei ainakaan tule mieleen mitään ilmiselvää koukkua. Tosin shellscriptien kanssa tuuskatessa ne ilmiselvät koukut eivät ole yleensä ongelma vaan juuri ne toiset..

Toki tuo ei varmaankaan toimi muissa shelleissä kuin Bashissa mutta varmaan tiesitkin jo etkä koe ongelmaksi.

Jos muuten bash/shellscriptejä vääntää enemmän niin shellcheck on varsin mainio apuväline.
 
Miksipä ei jos välttämättä haluaa sen noin tehdä
Ei ole mitään pakkoa juuri noin tehdä. :) Tämä tapa tähän mennessä löytyneistä on selvin ja helpoin. Jos pystyy tekemään vielä yksinkertaisemmin niin sellaisen mielellään oppisin. Sen takia oikeastaan kirjoittelin tänne kun en millään googlaamalla tahdo saada selville miksi tämä tapa toimii, ja miksi suurin osa ei tunnu tätä tapaa käyttävän. En halua vain toimivaa koodia, vaan myös ymmärryksen siitä mitä ja miksi se tekee mitä tekee.

Helpoinhan se olisi tuo kirjoittaa vain näin:
Koodi:
var1+="test string"$'\n'
var2+="test string"$'\n'

Mutta mitäs hauskaa tuossa on... eikä siitä opi mitään uusia jippoja. :)

Kaippa tuo "{a,b,...}" on joku sekvenssi/ryhmittely ja jotenkin niihin kaikkiin menee tuo yksi ja sama tieto talteen.

Jos muuten bash/shellscriptejä vääntää enemmän niin shellcheck on varsin mainio apuväline.
Ihan näppärältä näyttää. Itse debuggaan aika tarkasti oman koodin (tai ainakin yritän parhaani) joten ei oikein ole tarvetta..
 
Kaippa tuo "{a,b,...}" on joku sekvenssi/ryhmittely ja jotenkin niihin kaikkiin menee tuo yksi ja sama tieto talteen.

Brace Expansion (Bash Reference Manual)
Lähinnä vähän yllättää että tuo toimii odotetulla tavalla declaren yhteydessä.

Ihan näppärältä näyttää. Itse debuggaan aika tarkasti oman koodin (tai ainakin yritän parhaani) joten ei oikein ole tarvetta..

Enemmänkin tuo on linttiä vastaava staattista analyysiä tekevä työkalu potentiaalisesti ongelmallisten rakenteiden tunnistamiseen. Mutta jos on aikaa ja intoa rikkinäisen scriptin perkaamiseen sitten kun se alkaa sekoilemaan niin eihän sitä sitten tarvitse :p

Itselläni editori ajelee sitä automaagisesti taustalla.
 
BASH scriptit on inhottavia siinä, että jotkut featuret toimivat vain tietyillä shelleillä, tietyt ympäristöt käyttävät sh:ta ja toiset taas bashia / zhs:ää ja niin edelleen, scriptit kyllä toimii jos niitä ajaa identtisissä ympäristöissä mutta jos on hiemankin eroavaisuuksia noissa ajoympäristöissä niin suosittelen testaamaan kattavasti. Itse olen myös törmännyt joihinkin outouksiin kun on kirjoittanut scriptin OSX:ssa ja sitten ajanut sitä linuxilla, niin eipä toimi koska joitan pieniä eroavaisuuksia löytyy tiettyjen komentojen väliltä.
 

Uusimmat viestit

Statistiikka

Viestiketjuista
261 692
Viestejä
4 537 045
Jäsenet
74 864
Uusin jäsen
Eetu M

Hinta.fi

Back
Ylös Bottom