Pieniä kysymyksiä ohjelmoinnista

Onko C++ helppo tai "helppo" oppia kun osaa C#? Jossain työpaikoissa saattaa olla molemmat käytössä, niin sitä silmällä pitäen.
Mitä meinaat osaamisella? C++ on käsittääkseni älyttömän laaja kieli, jonka laajamittainen hallitseminen vaatinee käytännössä aikaa. Perusteiden oppiminen tuskin on kovin vaikeaa, mutta todennäköisesti jos pelkkien perusteiden perusteella heität jonkin yksinkertaisen ohjelman vaikka Code Review -sivustolle katselmoitavaksi, saat liudan ehdotuksia käyttää uudempia ominaisuuksia. Toimivaa C++ -koodia siis oppinee tuolta pohjalta melko helposti kirjoittamaan, mutta parannettavaa tulee varmasti olemaan jo yksinkertaisissakin ohjelmissa ihan hyvän tovin. (Itsehän siis osaan C++:sta perusteet mutten enempää, mutta aina puhutaan siitä, miten laaja kieli C++ on.)
 
Mulla on työn alla nettisivu (SPA), jonne kokoan urheilutilastoja. Olen tässä miettinyt MongoDB-tietokannan rakennetta ja haluaisin kuulla vinkkejä viisaammilta.

Kerron heti aluksi, että mistä teknologioista on kyse:

backend: Nodejs Apollo Server + MongoDB
frontend: React + Apollo Client

Tällä hetkellä mulla on pelaajille oma collection. Jokaiselle pelaajalle on oma dokumenttinsa, jossa on pelaajan bio, eli nimi, pituus, syntymäpäivä yms. Jokaisessa pelaajadokumentissa on myös lista alidokumentteja, joissa on kyseisen pelaajan pelikohtaiset tilastot. Jokaista peliä kohden siis yksi dokumentti.

Tarkoitus olisi laskea noista pelikohtaisista tilastoista laajempia tilastoja. Esimerkiksi 3 viimeisen pelin, 5 viimeisen pelin ja 10 viimeisen pelin tilastot. Tällä hetkellä hoidan tuon laskemisen backendissä. Backend hoitaa myös kaikkien pelaajien sorttaamisen, eli tarkoitus on palauttaa esim. 10 pelaajaa per pelimäärä. Aina kun sivu ladataan, niin frontendistä lähtee backendiin kutsu, jossa GraphQL-resolverin kautta palautan objektin, jossa on kolme kenttää: threeGames, fiveGames ja tenGames ja kentät pitää sisällään listan pelaajista ja niille pelimääräkohtaiset tilastot.

Käyttäjillä on mahdollista lisätä omalle henkilökohtaiselle suosikkilistalle seurattavia pelaajia. Suosikkilista on user-dokumentissa oleva lista pelaajien document id -numeroita. Aina kun käyttäjä kirjautuu sisään, niin suosikkilistan id-numeroiden perusteella GraphQL-resolveri palauttaa tuolla yllä olevalla logiikalla ({ threeGames: [], fiveGames...}) listat suosikkipelaajista.

Tämä ei varmaan ole paras tapa järjestellä noita dokumentteja ja kyselyitä. Apollon välimuisti ei ainakaan tunnu tykkäävän noista pelaajalistaobjekteista. Kun lisään pelaajia seurattavien listalle, niin joskus fiveGamesin tilalla saattaa näkyä tenGamesin tilastot. Pirun vaikea selittää tätä ongelmaa. Olisi niin paljon helpompi vaan näyttää, että missä homma bugaa.

Onko tuo dokumenttien järjestely ihan järkevä vai voisiko sitä parantaa jotenkin? Kannattaisiko noille pelimääräkohtaisille tilastoille tehdä oma collection tietokantaan? Tuossa tapauksessa tilastojen laskenta tarvitsisi tehdä vain kerran päivässä ja olisi helpompaa palauttaa valmiiksi pureskeltu data ilman laskentaviivettä fronttiin.

Tämä ei nyt enää ole kovin pieni kysymys, mutta toivottavasti joku jaksaa lukea.
 
Tämä ei varmaan ole paras tapa järjestellä noita dokumentteja ja kyselyitä. Apollon välimuisti ei ainakaan tunnu tykkäävän noista pelaajalistaobjekteista. Kun lisään pelaajia seurattavien listalle, niin joskus fiveGamesin tilalla saattaa näkyä tenGamesin tilastot. Pirun vaikea selittää tätä ongelmaa. Olisi niin paljon helpompi vaan näyttää, että missä homma bugaa.
Sainkin tämän ongelman ratkaistua. Eli oletuksena välimuistiin tallentuu jokainen pelaajadokumentti yhden kerran dokumentti-id:tä käyttäen. Tarvitsen kuitenkin samalta pelaajalta kolme eri dokumenttia, joissa on huomioitu eri määrä pelejä. Välimuistiin tallentui oletuksena viimeisen dokumentit statsit, eli tässä tapaukessa 10 pelin statsit. Muokkasin välimuistia siten, että dokumentti-id:n lisäksi otetaan huomioon myös pelimääräkenttä ja täten välimuistissa pystyy samojen pelaajien eri pelimäärien dokumentit.

Nyt inhottava bugi on korjattu, mutta otan mielelläni vastaan vinkkejä tuohon tietokannan mallinnukseen.
 
Tuli kauhean pitkä pysähdys kun en tajunnut mikä mättäsi. Sain koodin toimimaan, mutta kysynpä, että mitä erilaista tuo formista postaaminen on verrattuna jqueryn vastaavaan. Koodini jqueryssa on näin.

Koodi:
$.post('/path', {
            id: ID
            }).done (function (data) {
                window.location.replace("/");
            })

Olen aina tehnyt niin, että kun formista postataan niin olen node.js:ssä tehnyt response.render('/osoite'). Tässä tapauksessa revin hiuksia kun kyseinen komento ei tehnyt mitään. Lopulta huomasin, että minun pitää siirtyä uuteen osoitteeseen tuolla paikallisella javascriptin puolella. Miksi tuon $.post() kautta tehty POST pyyntö ei toimi samoin kuin formista postattu? Onko tuosta minun ratkaisusta mitään kauheuksia tiedossa?
 
Tuli kauhean pitkä pysähdys kun en tajunnut mikä mättäsi. Sain koodin toimimaan, mutta kysynpä, että mitä erilaista tuo formista postaaminen on verrattuna jqueryn vastaavaan. Koodini jqueryssa on näin.

Koodi:
$.post('/path', {
            id: ID
            }).done (function (data) {
                window.location.replace("/");
            })

Olen aina tehnyt niin, että kun formista postataan niin olen node.js:ssä tehnyt response.render('/osoite'). Tässä tapauksessa revin hiuksia kun kyseinen komento ei tehnyt mitään. Lopulta huomasin, että minun pitää siirtyä uuteen osoitteeseen tuolla paikallisella javascriptin puolella. Miksi tuon $.post() kautta tehty POST pyyntö ei toimi samoin kuin formista postattu? Onko tuosta minun ratkaisusta mitään kauheuksia tiedossa?


Koska form action oletuksena uudelleen ohjaa, xhr ei tee muutakun kyselyn ja palauttaa vastauksen. Vastauksesta voidaa sitten päätellä, että menikö kaikki niin kun haluttiin vai oliko kenties erroria matkalla. Esim. Voidaan näyttää käyttäjälle vaikka viesti "tämä käyttäjätunnus on jo rekisteröity" ilman sivunlatausta ja formin uudellen täyttöä.

Toinen usecase vois olla vaikka hakukenttä jonka on change eventtiin bindaa ajax kyselyn, ja tämä palauttaa livenä hakutulokset ko merkkijonolle. Tässä kohtaa tuskin halutaan uutta sivunlatausta :D

Uuteen osoitteeseen pääset mm
window.location.href = "/osoite"
 
Tarttis saada hyvä käsitys, että miten yksi WordPress lisäosa toimii.
Tätä varten pitäisi saada xdebug trace ja profiler vain tuon lisäosan osalta, jotta näkisi milloin mitäkin kutsutaan.
Tällä hetkellä xdebug tallentaa koko WordPressin bootstrappaukseen, mistä syntyy sen verran dataa, ettei ainakaan käytössä olevilla ratkaisulla pysty luomaan niistä call graphia saatika että dataa olisi mitenkään mielekästä selata.

Toki, kaikki muutkin vastaavat ratkaisut otetaan huomioon, jos sellaisia löytyy?
 
Miten JavaScriptillä pystyisi disabloimaan eventListenerin hetkellisestin?
Ideana se, ettei käyttäjän klikkaus vaikuta elementtiin animaation aikana.

Tällä hetkellä animaatio alkaa sekoilemaan, jos sitä klikkaa kesken kaiken.

https://codepen.io/null_/pen/eqNzqZ
 
Minä kiitän. Tosin tuossa on joku pieni bugi, sillä välillä tuo disabled luokka jää tuolle elementille, mutta minä tutkailen.

Tämä korjaantui sillä, että poisti tuon animationend tapahtumakuuntelijan ja muokkasi tuota animationstart kuuntelijaa seuraavastin. Syytä tähän en tiedä.
Koodi:
el.addEventListener('animationstart', () => {
    el.classList.add('disabled');
    setTimeout(() => { el.classList.remove('disabled') }, 600);
});
 
Viimeksi muokattu:
Tämä korjaantui sillä, että poisti tuon animationend tapahtumakuuntelijan ja muokkasi tuota animationstart kuuntelijaa seuraavastin. Syytä tähän en tiedä.
Koodi:
el.addEventListener('animationstart', () => {
    el.classList.add('disabled');
    setTimeout(() => { el.classList.remove('disabled') }, 600);
});


Koodi:
const shaker = function shakerHandler(e){
  console.log('click')
  e.target.classList.add("shake-horizontal");
  e.target.removeEventListener("click", shakerHandler); // <- shaker is not visible outside
  setTimeout(function() {
    e.target.classList.remove("shake-horizontal");
    e.target.addEventListener("click", shakerHandler);
  }, 650);
}

anyElementA.addEventListener("click", shaker)
anyElementB.addEventListener("click", shaker)
anyElementC.addEventListener("click", shaker)
anyElementD.addEventListener("click", shaker)
anyElementE.addEventListener("click", shaker)

Tässä vähän "uudelleen käytettävämpi" versio! ;)

tämä siis poistaa timeoutin ajaksi ko. eventin triggaavalta elementiltä!

https://codepen.io/anon/pen/pMJOyJ?editors=1012
 
Viimeksi muokattu:
Käyn vasta Pythonin perusteita, enkä nyt oikein keksi miten päästä seuraavasta eteenpäin :shy:

Lyhyesti kuvailtuna pitäisi rakentaa ohjelma, joka lukee matriiseja sekä tallentaa ne listoiksi ja joita voi edelleen printata tai lisätä. Lähinnä päätä vaivaa se, kuinka tallennan käyttäjän uuden matriiin omaksi muuttujakseen niin, että ensiksi syötetty matriisi ei katoa.

Esimerkiksi syötettyä muutama matriisi, komennolla "list" tulostuisi esimerkiksi:
> list
a = [[2, 3, 5, 1], [-1, 4, 7, 2], [0, 1, 2, -4]]
b = [[-1, 4], [2, 0], [-3, 5], [3, 1]]

Alla oleva koodinpätkä ei tuota haluttua lopputulosta.

Koodi:
def main():
    toiminto = input("> ")

    while toiminto != "quit":

        if toiminto == "add":
            tiedostonimi = input("Enter the name of the matrix file: ")
            matriisinnimi = str(input("Enter a name for the matrix: "))
            f = open(tiedostonimi, 'r')
            matriisi = [line.split() for line in f]
            kaikki_matriisit = []
            kaikki_matriisit.append(matriisi)


        elif toiminto == "print":
            halutaan = str(input("Name: "))
            if halutaan == matriisinnimi and len(matriisinnimi) != 0:
                print(matriisi)
            else:
                print("Name",halutaan,"was not found")

        elif toiminto == "list":
            for alkio in kaikki_matriisit:
                print(alkio)

        else:
            print("Unknown command!")
        toiminto = input("> ")

    print("Bye bye!")

Tehtävä ei liene todellakaan vaikea, suurkiitokset jo etukäteen jeesistä!
 
@Kahvinjuoja Nopeasti katsottuna ongelma näyttäisi olevan se, että jokaisen add-toiminnon yhteydessä luot kaikki_matriisit-muuttujan uudestaan. Tällöin luonnollisestikin vanhat matriisit häviävät. Sinun pitää luoda kyseinen muuttuja vain kerran funktion alussa - while-silmukassa luonti alustaa muuttujan uudestaan toistuvasti eikä homma tällöin toimi.
 
Json tiedostosta pitäisi javascriptillä nimen perusteella noutaa koordinaatit, olisiko jotain esimerkkiä miten tuollainen väsätään?

Kyseessä on OpenWeatherMapin säätiedot ja tarkoituksena hakea sää paikan mukaan ja varsin vaihtelevastin tuntee suomen kaupunkeja, joten ajattelin kokeilla hakea tuosta heidän tarjoamasta json datasta suoraan koordinaatit.

Esimerkki tuosta jsonista:
Koodi:
  {
    "id": 847436,
    "name": "Pihlajisto",
    "country": "FI",
    "coord": {
      "lon": 24.9925,
      "lat": 60.237499
    }
  },
  {
    "id": 640758,
    "name": "Pukinmäki",
    "country": "FI",
    "coord": {
      "lon": 24.989,
      "lat": 60.244801
    }
  },
 
Json tiedostosta pitäisi javascriptillä nimen perusteella noutaa koordinaatit, olisiko jotain esimerkkiä miten tuollainen väsätään?

Kyseessä on OpenWeatherMapin säätiedot ja tarkoituksena hakea sää paikan mukaan ja varsin vaihtelevastin tuntee suomen kaupunkeja, joten ajattelin kokeilla hakea tuosta heidän tarjoamasta json datasta suoraan koordinaatit.

Esimerkki tuosta jsonista:
Koodi:
  {
    "id": 847436,
    "name": "Pihlajisto",
    "country": "FI",
    "coord": {
      "lon": 24.9925,
      "lat": 60.237499
    }
  },
  {
    "id": 640758,
    "name": "Pukinmäki",
    "country": "FI",
    "coord": {
      "lon": 24.989,
      "lat": 60.244801
    }
  },

Nuo ovat varmaankin taulukossa (array)? Siispä löydät Googlella find-metodin:

Array.prototype.find()

Se ottaa parametrikseen callback-funktion, joka saa argumentikseen yhden taulukon elementin ja palauttaa booleanin: true, kun löytyy haluttu asia, muutoin false. Siis:

Koodi:
const data = [{name: 'Pihlajisto', coords: '22Lon44Lat'}, {name: 'Pukinmäki', coords: '23Lon46Lat'}];
const cityToFind = 'Pukinmäki';

const found = data.find(item => item.name === cityToFind);
console.log(found.coords);

Ja miten JSON saadaan luettua? Tämä varmaan tapahtuu Node.js:ssä? Googleta, miten fs-kirjaston readFileSync() toimii. Sillä luet ensin tiedoston levyltä. Se pitää vielä parsia objektiksi, jotta voit käpistellä sitä kuin mitä tahansa muuttujaa. Siihen auttaa JSON.parse(). Sen jälkeen find kehiin.
 
Nuo ovat varmaankin taulukossa (array)? Siispä löydät Googlella find-metodin:

Array.prototype.find()

Se ottaa parametrikseen callback-funktion, joka saa argumentikseen yhden taulukon elementin ja palauttaa booleanin: true, kun löytyy haluttu asia, muutoin false. Siis:

Koodi:
const data = [{name: 'Pihlajisto', coords: '22Lon44Lat'}, {name: 'Pukinmäki', coords: '23Lon46Lat'}];
const cityToFind = 'Pukinmäki';

const found = data.find(item => item.name === cityToFind);
console.log(found.coords);

Ja miten JSON saadaan luettua? Tämä varmaan tapahtuu Node.js:ssä? Googleta, miten fs-kirjaston readFileSync() toimii. Sillä luet ensin tiedoston levyltä. Se pitää vielä parsia objektiksi, jotta voit käpistellä sitä kuin mitä tahansa muuttujaa. Siihen auttaa JSON.parse(). Sen jälkeen find kehiin.

Taulukossa juu ja varmaankin clientti puolella näpistelen tuota tiedostoa, mutta näillä pääsee jo pitkälle. Kiitos.
 
Taulukossa juu ja varmaankin clientti puolella näpistelen tuota tiedostoa, mutta näillä pääsee jo pitkälle. Kiitos.
Pidä mielessä, että et clientin puolella noin vain voi lukea tiedostoa levyltä. Sun pitää käyttää file apia, eli käyttäjän täytyy itse valita se tiedosto levyltä.
 
Pidä mielessä, että et clientin puolella noin vain voi lukea tiedostoa levyltä. Sun pitää käyttää file apia, eli käyttäjän täytyy itse valita se tiedosto levyltä.

Huomasin tämän, kun selailin tietoa tuosta tiedoston lukemisesta.
 
Visual studion shortcuteista, varmaan muissakin editoreissa: mikäs näppäin yhdistelmä hypäyttää sulkevan } seuraavan rivin yli?
Esim
Alkutilanne
public string name = "jotain";

Jos tuon haluaa sulkea vaikka if lauseeseen jälkikäteen
if (true) { }
public string name = "jotain";

millä pikanäppäimellä tuon saa suoraan hyppäämään tuon muuttujan yli ilman että muuttujaa tarvitsee itse cut - pasteta sinne sisälle?
if (true)
{
public string name = "jotain";
}
 
Täytys pyörittää windows koneessa linuxia, VMware vai Virtual box, onko niin väliä vai onko muita vaihtoehtoja?
 
Kiitos! Tuossa kun WSL Googlailin nii löytyykin ihan Windows storesta tarvittava distro.:tup:
 
Täytys pyörittää windows koneessa linuxia, VMware vai Virtual box, onko niin väliä vai onko muita vaihtoehtoja?
Jos WSL riittää niin ehdottomasti se. Jos ei niin Windows-puolella VMware on paras vaihtoehto. VirtualBox vaatii tunkkaamista ja on hidas kuin helvetti, mutta on toisaalta ilmainen.
 
Viimeksi muokattu:
Jos WSL riittää niin ehdottomasti se. Jos ei niin Windows-puolella VMware on paras vaihtoehto. VirtualBox vaatii tunkkaamista ja on hidas kuin helvetti, mutta on toisaalta ilmainen.
Tänään pääsen kokeilemaan ja luulen että se riittää, pientä pentesti kurssia ja Kalia pitäis pyöritellä, Kali tosin löytyy jo yhdestä läppäristä mutta pöytäkoneessa useampi näyttö joka helpottaa hommaa.
 
Omassa käytössäni VirtualBox on riittänyt pääasiassa hyvin ja ilman tunkkaamista, joten jos WSL ei riitä, sitä kannattaa ainakin kokeilla. Eihän se turhan nopea ole mutta omaan käyttööni on riittänyt ihan hyvin.
 
Ainakin Linuxin puolella Windowsia pyörittäessä VirtualBox toimii ihan ok?
Käytin virtuaalikoneita työssäni lähes päivittäin 2011-2015 ja silloin VBoxin kanssa tuli monia vitutuksia vastaan.
- Jos ei käytä mitään graafista käyttäliittymää vaan roikkuu vain shellissä niin VBox hoitaa homman pääsääntöisesti kohtuu hyvin, mutta muuten homma on tahmaista, hiiri pätkii yms. VBox:n sai jonkin "Virtual Box guest additions" paketin jonka piti lieventää näitä ongelmia, mutta silti homma oli parhaimmillaan siedettävää.

Tosin täytyy sanoa että ei pelkästään VBox, mutta myös VMWare ja Parallels ovat yleensä aina toimineet paljon paremmin ja sulavemmin UNIX-pohjaisilla käyttiksillä kuten Linux tai macOS. Suurimmat ongelmat ovat olleet kun Windows on Host-käyttiksenä.

Toki asiat ovat voineet myös muuttua vuosien saatossa. VirtualBoxia kannattaa joka tapauksessa ainakin testata kun ei se maksa mitään.
 
Kyllä VirtualBoxin pitäisi toimia missä tahansa normaalikäytössä. Kaikissa on omat omituisuutensa, meillä on käytännössä luovuttu VMWaresta ja siirrytty VirtualBoxiin kun tarvitsee kusisilla Windows-läppäreillä tehdä töitä Linuxissa eikä ole oikeita Linux-koneita projektilla.

Käytin virtuaalikoneita työssäni lähes päivittäin 2011-2015 ja silloin VBoxin kanssa tuli monia vitutuksia vastaan.

Olisit voinut alustaa tällä tiedonjyväsellä. Tuskin kukaan olisi käyttänyt antiikkista softaa Jeesuksen armon vuodelta 2015.
 
Olisit voinut alustaa tällä tiedonjyväsellä. Tuskin kukaan olisi käyttänyt antiikkista softaa Jeesuksen armon vuodelta 2015.
En tiedä oliko tämä sarkasmia, mutta jos ei ollut niin tuskimpa radikaaleja muutoksia on tullut. Työkaverini käyttää Kalia Windows:n päällä penetraatiotestaamiseen ja tahmeaa on ja pikaisesti vilkaistuna Stackoverflowsta, Superuserista yms. löytyy edelleen miljoona threadia aiheesta tältä ja viime vuodelta.
 
Itse käytän Hyper-V:tä töissäni:
Enable Hyper-V on Windows 10

Se on mukana Windowsissa, jos ei ole Home..

--

Lisäksi näitä käytettäessä kannattaa katsoa, että virtualisointi on päällä BIOS:issa, muuten tulee yllättävää hitautta tai ei toimi.

--

Virtualbox on tuote, joka on mennyt Oraclelle kuolemaan.
 
En tiedä oliko tämä sarkasmia, mutta jos ei ollut niin tuskimpa radikaaleja muutoksia on tullut. Työkaverini käyttää Kalia Windows:n päällä penetraatiotestaamiseen ja tahmeaa on ja pikaisesti vilkaistuna Stackoverflowsta, Superuserista yms. löytyy edelleen miljoona threadia aiheesta tältä ja viime vuodelta.

Täytyypä myöntää että Kalista ole kokemusta, itse käyttänyt virtuaalikoneissa lähinnä Fedoraa ja Lubuntua. Mikä siinä tarkalleenottaen jumii, verkko hidas vaiko GUI?
 
Postgresql tietokannasta pitäisi kopioida yksi kenttä toiseen samassa taulussa, mutta kuinka..? :)

Table on näin:

Column_1,Column_2,Column_3
1,a,dataa
2,b,toistadataa
3,c,kolmattadataa
4,d,neljättädataa

Column_3:ssa oleva "kolmattadataa" pitäisi korvata "neljättädataa" tiedoilla, muuten kaikki pysyy ennallaan.
 
Postgresql tietokannasta pitäisi kopioida yksi kenttä toiseen samassa taulussa, mutta kuinka..? :)

Table on näin:

Column_1,Column_2,Column_3
1,a,dataa
2,b,toistadataa
3,c,kolmattadataa
4,d,neljättädataa

Column_3:ssa oleva "kolmattadataa" pitäisi korvata "neljättädataa" tiedoilla, muuten kaikki pysyy ennallaan.

INSERT INTO table (column3) WHERE column1 =3
SELECT column3, ...
FROM table
WHERE column1=4;


Tuo on copypastaa SQL INSERT INTO SELECT Statement ja vaatii muokkaamista sinulta mutta idea on tuossa. eli eka kerrot minne data laitetaan ja sitten valitset mitä laitetaan.

ok, ajatus meni sekasin tietenkin update niinku alla olevassa ohjeessa :darra:
 
Viimeksi muokattu:
INSERT lisää uuden rivin; UPDATE toimii halutulla tavalla:

UPDATE table SET Column_3 = (SELECT Column_3 FROM table WHERE Column_1 = 4) WHERE Column_1 = 3;
 
Täytys pyörittää windows koneessa linuxia, VMware vai Virtual box, onko niin väliä vai onko muita vaihtoehtoja?

Vmware on toiminut kivasti. Töissä workstation ja kotihommissa player.
Molemmissa on ajettu win xp, 7, 10, debian, ubuntu, slackware.
Hostina on ollut win 7 ja 10
 
Töissä on jossain joku VMware käytössä, se kun ei mulle asti varsinaisesti näy kun ssh:n yli linux-pannuja käyttelen eli toimii varsin hyvin. On meillä toki Winkkareitakin virtualisoituna mutta niihin en ole itse joutunut koskemaan.

Kotona taas pääsääntöisesti käytän VMware Playeria silloin kun joskus satunnaisesti tarvitsen esim jotain Windowsia käyttää. Virtualboxiakin olen kokeillut mutta jotenkin se on hankalampi ympäristö ja välillä on tullut jotain ihan ihme ongelmia vastaan. qemuakin on yhdessä jutussa tullut käytettyä kun oli vähän eksoottisempi case johon ei löytynyt millekään muulle virtuaalialustalle ohjeita mutta siitäkään ei jäänyt kovin hyvä maku suuhun.

Itseltäni siis ääni VMwarelle, sillä kaikki on vaan toiminut ilman suurempaa säätämistä (poissulkien eräs yksittäistapaus jossa jonkun bugin takia ei millään meinannut saada quest-pakettia asentumaan virtualisoituun winkkariin)
 
Word-asiakirjassa on useita liitteitä, joista jokainen koostuu suuresta määrästä kuvia.
Liitteet on erotettu toisistaan osanvaihdoilla (section break).

Miten saan VBA:lla skaalattua vain niitä kuvia, jotka sijaitsevat valitussa sectionissa?
Olen ihan aloittelija VBA:n käytössä, mutta tällaisen makron sain tehtyä, jolla saan skaalattua kaikki dokumentissa olevat kuvat (tai Inline Shape -objektit):

Koodi:
Sub resizeImages()
 Dim iShapeObject As Word.InlineShape
 For Each iShapeObject In ActiveDocument.InlineShapes
  With iShapeObject
   .ScaleHeight = 20
   .ScaleWidth = 20
  End With
 Next iShapeObject
End Sub

Mikä tämän tarkoitus on?

Koodi:
Dim iShapeObject As Word.InlineShape
For Each iShapeObject In ActiveDocument.InlineShapes

Tuossa määritetään iShapeObject kahteen kertaan heti peräkkäin ja ensimmäinen määritys ylikirjoittuu. Ei onnistuisi jollain oikealla ohjelmointikielellä....
 
Kysymys JavaScriptistä, Jest unit testauksesta ja Mockup-datasta:

Minulla on yksinkertainen JavaScript-funktio joka käyttää DBRecords luokkaa, esim.:

Function:
Koodi:
function getRecords(tableName) {
  var db = new DBRecords(tableName);
  return db.records.all();
}

Haluaisin kirjoittaa tuolle Jest-kirjastolla unit testejä ja ajaa niitä nodella. Ongelma on tuo DBRecords-luokka, jota ei ole testausympäristössä, eikä sitä voi sinne asentaa. Lisäksi tuotantoympäristössä tuota ei saa importata, koska se on suoraan kätettävissä. Joten mitään require-komentoja ei suoriteta tuotannossa.

Minulla on mockup-luokka tuota varten ja mockup-dataa. Kuinka injektoin tuon mockup-luokan tuonne testiin tai funktioon? En haluaisi sitä tuonne function js-tiedostoon kovakoodata importtaamalla, koska se taas sotkee tuotannon. Kiitos jo valmiiksi, varmasti simppeli homma...

Jest-testi:
Koodi:
const getRecords = require('./getRecords');

test('check not null data', () => {
  const tableName = 'users';
  expect(getRecords(tableName)).not.toBeNull();
});
 
Viimeksi muokattu:
Kysymys JavaScriptistä, Jest unit testauksesta ja Mockup-datasta:

Minulla on yksinkertainen JavaScript-funktio joka käyttää DBRecords luokkaa, esim.:

Function:
Koodi:
function getRecords(tableName) {
  var db = new DBRecords(tableName);
  return db.records.all();
}

Haluaisin kirjoittaa tuolle Jest-kirjastolla unit testejä ja ajaa niitä nodella. Ongelma on tuo DBRecords-luokka, jota ei ole testausympäristössä, eikä sitä voi sinne asentaa. Minulla on mockup-luokka tuota varten ja mockup-dataa. Kuinka injektoin tuon mockup-luokan tuonne testiin tai funktioon? En haluaisi sitä tuonne function js-tiedostoon kovakoodata importtaamalla, koska se taas sotkee tuotannon. Kiitos jo valmiiksi, varmasti simppeli homma...

Jest-testi:
Koodi:
const getRecords = require('./getRecords');

test('check not null data', () => {
  const tableName = 'users';
  expect(getRecords(tableName)).not.toBeNull();
});
Voisitko imortata sen sinne funktion js-tiedostoon ehdollisesti ympäristön mukaan? Esim näin: let DBRecords; process.env.NODE_ENV === 'test' ? DBRecords = require('DBRecords mock') : DBRecords = require('DBRecords production');

Sori formatointi. Kirjoitan puhelimella.
 
Voisitko imortata sen sinne funktion js-tiedostoon ehdollisesti ympäristön mukaan? Esim näin:
Koodi:
let DBRecords;
process.env.NODE_ENV === 'test' ? DBRecords = require('DBRecords mock') : DBRecords = require('DBRecords production');

Tämä (tai tämän variantti) tietenkin yksi mahdollisuus. Tuotannossa tuota ei tarvitse lainkaan importata, koska se on suoraan käytettävissä ajoympäristössä. Ideaali ratkaisu olisi, että jest ja testi sen sinne jotenkin injektoisi eikä alkuperäistä tiedostoa tarvitsisi mitenkään muokata.
 
Tämä (tai tämän variantti) tietenkin yksi mahdollisuus. Tuotannossa tuota ei tarvitse lainkaan importata, koska se on suoraan käytettävissä ajoympäristössä. Ideaali ratkaisu olisi, että jest ja testi sen sinne jotenkin injektoisi eikä alkuperäistä tiedostoa tarvitsisi mitenkään muokata.

Jotain tällaistako haet?
Koodi:
// package.json
"jest": {
  "setupFiles": [
    "<rootDir>/jest/globals.js"
  ]
}
How to Globally Mock an External Library in Jest
 
Siis missä yhteydessä haluat submitin tehtävän? Silloin kuin soft keyboard suljetaan / blurrataan pois tekstikentästä?

Silloin kun näppäimistöltä on painettu ok.

edit: Otetaanpas takasin, toimiihan tuo näköjään mobiilipuolellakin.
Olen painanut iOS näppäimistöltä vain tuota "valmis" nappia enkä rivinvaihtoa. User error.
 
Viimeksi muokattu:
Mistähän voi johtua, että tuo back-end softa alkanut sekoilemaan. Jos pidän sockettia portissa 3000, sinne tulee loputtomasti yhteydenottoja. Jos muutan porttia mihin tahansa muuhun, homma toimii. Aiemmin tämä ei ole moista tehnyt.
Alla pieni koodinpätkä yhdistämisestä. Pystyykö tässä katsomaan jotenkin mikä ohjelma tuohon yhdistelee?

Ei huvittaisi huvikseen muuttaa uutta porttia koska pitäisi sitten editoida toistakin softaa. Ja olisi kiva tietää mikä tämän edes aiheuttaa.

qDFWjOe.png
 
Mistähän voi johtua, että tuo back-end softa alkanut sekoilemaan. Jos pidän sockettia portissa 3000, sinne tulee loputtomasti yhteydenottoja. Jos muutan porttia mihin tahansa muuhun, homma toimii. Aiemmin tämä ei ole moista tehnyt.
Alla pieni koodinpätkä yhdistämisestä. Pystyykö tässä katsomaan jotenkin mikä ohjelma tuohon yhdistelee?

Ei huvittaisi huvikseen muuttaa uutta porttia koska pitäisi sitten editoida toistakin softaa. Ja olisi kiva tietää mikä tämän edes aiheuttaa.

qDFWjOe.png


Vähän enemmän koodia vois olla nähtävillä
 
JavaScript-kysymys.

Minun pitäisi tehdä mockup-luokka/funktio tämmöiselle viritykselle:
Koodi:
const results = new my_api_name.MyMethod().getRecordsById(tableName, itemId)

Kuinkas tuo rakennettaisi jotta voin käyttää tuota syntaksia?
 
SQL ongelma. Eli mulla on käsissä tyhmästi tehty taulu tähän tyyliin:
TUOTE MIN MAX
EKA 5 10
TOKA 10 15
ja tuossa rajalla katsotaan että arvon 10 tuote kuuluu luokkaan "EKA".
Haen taulusta arvoja näin vertailemalla:
TUOTE.HINTA > TAULU.MIN
and TUOTE.HINTA <= TAULU.MAX
Homma toimii hienosti muuten, mutta aivan alin arvo eli "5" jää pois. Miten tuon saa järkevimmin tehtyä?
 
SQL ongelma. Eli mulla on käsissä tyhmästi tehty taulu tähän tyyliin:
TUOTE MIN MAX
EKA 5 10
TOKA 10 15
ja tuossa rajalla katsotaan että arvon 10 tuote kuuluu luokkaan "EKA".
Haen taulusta arvoja näin vertailemalla:
TUOTE.HINTA > TAULU.MIN
and TUOTE.HINTA <= TAULU.MAX
Homma toimii hienosti muuten, mutta aivan alin arvo eli "5" jää pois. Miten tuon saa järkevimmin tehtyä?
Laita se on-merkki siihen minimiinkin
TUOTE.HINTA >= TAULU.MIN

Edit: eiku joo, sit tulee ongelmia ylemmän kans. Hmm...
 
SQL ongelma. Eli mulla on käsissä tyhmästi tehty taulu tähän tyyliin:
TUOTE MIN MAX
EKA 5 10
TOKA 10 15
ja tuossa rajalla katsotaan että arvon 10 tuote kuuluu luokkaan "EKA".
Haen taulusta arvoja näin vertailemalla:
TUOTE.HINTA > TAULU.MIN
and TUOTE.HINTA <= TAULU.MAX
Homma toimii hienosti muuten, mutta aivan alin arvo eli "5" jää pois. Miten tuon saa järkevimmin tehtyä?
(TUOTE.HINTA = TAULU.MIN)
OR
(TUOTE.HINTA > TAULU.MIN
and TUOTE.HINTA <= TAULU.MAX)
 

Statistiikka

Viestiketjuista
261 657
Viestejä
4 538 092
Jäsenet
74 857
Uusin jäsen
FinB

Hinta.fi

Back
Ylös Bottom