Pieniä kysymyksiä ohjelmoinnista

en halua tehdä peliä, vaan peliä ymmärtävän softan. monissa mielessäni olevissa peliympäristöissä ruudulla tapahtuvat tapahtumat ovat ymmärtääkseni ainoa data, jota pelistä tarjotaan (mitään tekstimuotoista logia ei kirjoiteta pelintarjoajan toimesta). lisäksi kun pelitapahtumia on monia, ja parhaimmillaan pelejä useita käynnissä samaan aikaan, niiden käsinkirjottaminen ei ole mieluisaa.
 
en halua tehdä peliä, vaan peliä ymmärtävän softan. monissa mielessäni olevissa peliympäristöissä ruudulla tapahtuvat tapahtumat ovat ymmärtääkseni ainoa data, jota pelistä tarjotaan (mitään tekstimuotoista logia ei kirjoiteta pelintarjoajan toimesta). lisäksi kun pelitapahtumia on monia, ja parhaimmillaan pelejä useita käynnissä samaan aikaan, niiden käsinkirjottaminen ei ole mieluisaa.
Saatan olla väärässäkin, mutta luullakseni on olemassa ratkaisuja, joilla pystyy "menemään väliin" sovelluksen suoritukseen ja nappaamaan kiinni vaikka tietyt funktiokutsut. "Function hooking" vaikuttaa hakutermille, joka saattaa tuottaa toivotunlaisia tuloksia.
 
En löytänyt viestiketjua omalle ongelmalle liittyen nodejs. Kai se on ihan ok kysyä apua täällä... ? Toisille pieni kysymys, itselle iso kun ei vielä kaikkea ymmärä ohjelmoinnista.

Yrittänyt tässä ymmärtää moduuleja nodejs:ssä, oma koodi sekä toimii ja ei toimi.
Tosiaan, Discord bottia tehnyt vapaa-ajalla (discord.js) ja siinä rinnalla Twitch botti (tmi.js).

Tiedostoja kaksi, joista main file on finskubot.js joka requestaa nowplaying.js tiedoston. Finskubot sisältää Discord-sälää (esim perus message.channel.send yms ja listenerit) ja nowplaying keskittyy ainoastaan Twitchin chatin kuuntelemiseen.

Finskubot.js hastebin
Nowplaying.js hastebin

Lyhyesti; Käytän PM2:sta pyörittämään bottiani. Finskubot:n avulla requestaan nowplaying tiedoston, joka yhdistää Twitchiin. Kun chattiin tulee tietty tekstinpätkä "Now Playing:" lähettää nowplaying.js kys. stringin finskubot.js:lle joka taas lähettää kyseisen tekstin tietylle Discord-kanavalle.

Jos ajan Finskubot.js tiedoston tulee error, nowplaying.js ei löydä functionia Finskubot (nowplaying.js rivi 12). Jos ajan PM2:lla ainoastaan nowplaying.js mitään ongelmia ei ole, eli tietyn viestin tullessa Twitchiin kyseinen viesti ilmestyy halutulle Discord-kanavalle.
 
module.exports.nowplaying = nowplaying;
Aika sotkuista tuo uusi syntaksi

Kiitos vastauksesta! Testasin tuota ja ei lähtenyt sillä toimimaan. Pallottelin hetken aikaa minkä jälkeen pistin kaikki moduleihin liittyvät sileäksi ja otin uudelleen käsittelyyn.

Lähti toimimaan seuraavalla:
Koodi:
var Nowplaying = require("./nowplaying.js");

// *snip*

exports.nowplaying = function nowplaying(song){
    Client.channels.get("kanavan-id").send(" **Now Playing: **" + song);
}

// *snip*
Koodi:
var Finskubot = require("./finskubot.js");

// *snip*

twitchClient.addListener("message", function(channel,user,message,self){
    if(message.match(/^Now Playing:/)){      
        console.log("# [TWITCH] Now Playing - " + nowplaying);
        Finskubot.nowplaying(nowplaying);
    }
});

upload_2017-11-5_14-31-34.png
 
Viimeksi muokattu:
Olettekos Go-kielessä käyttäneet jotain frameworkiä kun olette tehneet Rest apeja? Kattelin, että tollanen ku Gin Gonic näyttäis aika hyvältä.
Gin Web Framework

Mites API Rediksen kanssa?
 
Pari kyssäriä JWT (JSON web token) liittyen

Mikä on oikea/yleisesti hyväksytty tapa
  1. Luoda avain allekirjoitukselle
  2. Tallentaa allekirjoituksen avain
  3. Varautua avaimen vaihtamiseen? (Jos tälle edes on tarvetta)
Mulla on tällähetkellä kova koodattu random stringi javassa, ja tuo ei kuulosta omasta mielestä hyvältä idealta loppupeleissä.
 
Pari kyssäriä JWT (JSON web token) liittyen

Mikä on oikea/yleisesti hyväksytty tapa
  1. Luoda avain allekirjoitukselle
  2. Tallentaa allekirjoituksen avain
  3. Varautua avaimen vaihtamiseen? (Jos tälle edes on tarvetta)
Mulla on tällähetkellä kova koodattu random stringi javassa, ja tuo ei kuulosta omasta mielestä hyvältä idealta loppupeleissä.

Kiinnostava aihe myös itselle. Omat tavat ovat olleet:
1. Avain (secret) on generoitu kerran tuotantoonsiirron yhteydessä tehokkaalla randomgeneraattorilla (koska teen Pythonilla niin olen käyttänyt urandom-funktiota).
2. Avain on kiinteästi palvelimen/containerin ympäristömuuttujissa josta se haetaan
3. Jos avain jostain syystä pitää vaihtaa niin se vain generoidaan uudestaan ja tallennetaan ympäristömuuttujiin. Loppukäyttäjille tämä tarkoittaa vain sitä, että he joutuvat tekemään uuden loginin, joten ei paha. Tämän voi tehdä vaikka yöllä, koska käyttäjät joutuvat joka tapauksessa aamulla tekemään loginin koska tokenin exp on vain 8 tuntia.

urandomista juttua (vastaava varmasti löytyy Javasta)
os.urandom(n)

Return a string of n random bytes suitable for cryptographic use.

This function returns random bytes from an OS-specific randomness source. The returned data should be unpredictable enough for cryptographic applications, though its exact quality depends on the OS implementation. On a UNIX-like system this will query /dev/urandom, and on Windows it will use CryptGenRandom(). If a randomness source is not found, NotImplementedError will be raised.
 
Viimeksi muokattu:
Kysytään nyt täältäkin, että kun vaihdoin Asus emoon Asrock emon bios piirin ja se alkoi toimimaan,
niin voiko muihinkin emoihin olla mahdollista kokeilla random bios piiriä?
Jotenkin tullut aina kuviteltua, että bios piiri täytyisi olla täsmälleen sama.
 
Asus ja Asrock ovat kaksi brändiä samalta valmistajalta, ja jos vielä emojen piirisarjat ovat samat, voi hyvällä tuurilla käydä niin että toisen emon BIOS toimii.

Mutta seurauksia voi toki olla, esim. DMI-tiedot ovat tuollaisen tempun jälkeen todennäköisesti väärin (eli diagnostiikkaohjelmat saattavat näyttää emolevyn mallin ja sarjanumeron väärin), ja piirisarjaan kuulumattomat lisäkilkkeet emolevyssä saattavat myös toimia oudosti tai olla kokonaan toimimatta. Esimerkiksi emolevyn lämpötilan ja tuuletinten valvontanäyttö BIOSissa saattaa olla toimimaton jos emolevyssä onkin käytetty eri valvontapiiriä kuin siinä emossa jota varten BIOS on ohjelmoitu. Jos koneitten integroidut äänipiirit ovat erilaiset tai emolevyllä on eri määrä ääniliitäntöjä, myös äänien ohjaus voi toimia hassusti: joillakin äänipiireillä asiat on järjestetty siten että BIOSissa on tietotaulukko joka kertoo mikä äänipiirin fyysinen ulostulo vastaa mitäkin liitäntää.

Tuota vaan ei oikein voi tietää etukäteen, ja kovin moni ei ole niin rikas että voisi kokeilla tuollaista huvin vuoksi.
 
kovin moni ei ole niin rikas että voisi kokeilla tuollaista huvin vuoksi.
Jollain harrastajalla jolla on eeprom kirjoittaja tuo voi olla halvempaa kun voi sitten sen brikatun biosin vaihtaa takas oikeaan, toki sillä edellytyksellä että koko paska ei räjähtänyt silmille testatessa. AsRock ja Asus menevät kokoajan kauemmaksi toisistaan, aluksihan ne oli käytännössä samat lankut AsRockilta vaan halvemmilla komponenteilla.
 
Asus ja Asrock ovat kaksi brändiä samalta valmistajalta, ja jos vielä emojen piirisarjat ovat samat, voi hyvällä tuurilla käydä niin että toisen emon BIOS toimii.

Mutta seurauksia voi toki olla, esim. DMI-tiedot ovat tuollaisen tempun jälkeen todennäköisesti väärin (eli diagnostiikkaohjelmat saattavat näyttää emolevyn mallin ja sarjanumeron väärin), ja piirisarjaan kuulumattomat lisäkilkkeet emolevyssä saattavat myös toimia oudosti tai olla kokonaan toimimatta. Esimerkiksi emolevyn lämpötilan ja tuuletinten valvontanäyttö BIOSissa saattaa olla toimimaton jos emolevyssä onkin käytetty eri valvontapiiriä kuin siinä emossa jota varten BIOS on ohjelmoitu. Jos koneitten integroidut äänipiirit ovat erilaiset tai emolevyllä on eri määrä ääniliitäntöjä, myös äänien ohjaus voi toimia hassusti: joillakin äänipiireillä asiat on järjestetty siten että BIOSissa on tietotaulukko joka kertoo mikä äänipiirin fyysinen ulostulo vastaa mitäkin liitäntää.

Tuota vaan ei oikein voi tietää etukäteen, ja kovin moni ei ole niin rikas että voisi kokeilla tuollaista huvin vuoksi.

Ei sitä rikas tarvi olla jos vaihtelee rikkinäisten emojen bios piirejä :lol:
Voisikohan vaihtaa lennosta sen alkuperäisen bios piirin, ja siihen sitten flashata oikean biosin?
 
Ei sitä rikas tarvi olla jos vaihtelee rikkinäisten emojen bios piirejä :lol:
Voisikohan vaihtaa lennosta sen alkuperäisen bios piirin, ja siihen sitten flashata oikean biosin?
En suosittele, pahimmassa tapauksessa se koko emolevy menee rikki jolloin tulee kalliimmaksi.
 
Kuinkas java:lla on järkevää ottaa klooni oliosta, niin että myös olion koostavat oliot clonataan..

esim

Koodi:
public class Taskulamppu implements Cloneable{
    Paristo paristo;
    Polttimo polttimo;

    ...
    
    @Override
    public Taskulamppu clone() {
        return super.clone();
    }
}


Tällä hetkellä ongelma on että alkuperäinen ja klooni olio ovat kyllä muistissa fyysisesti omissa osoitteissaan, mutta molemmat viittavat edeleen samaan paristoon ja polttimoon.
 
Tällä hetkellä ongelma on että alkuperäinen ja klooni olio ovat kyllä muistissa fyysisesti omissa osoitteissaan, mutta molemmat viittavat edeleen samaan paristoon ja polttimoon.

Javasta puuttuu sisäänrakennettu deepclone. Joudut toteuttamaan sen itse.

Vaihtoehtoja on joko serialisoida koko objekti ja deserialisoida se sitten uudeksi olioksi, tai tehdä vaan itse jonkinlainen kloonaus joka tekee uudet oliot ja iskee referenssit paikalleen. Riippunee kuinka geneerisen toteutuksen tarvitsee, kuinka tehokkaan ja kuinka usealle luokalle.

Stackoverflowssa on ihan hyviä ehdotuksia Java: recommended solution for deep cloning/copying an instance
 
Javasta puuttuu sisäänrakennettu deepclone. Joudut toteuttamaan sen itse.

Vaihtoehtoja on joko serialisoida koko objekti ja deserialisoida se sitten uudeksi olioksi, tai tehdä vaan itse jonkinlainen kloonaus joka tekee uudet oliot ja iskee referenssit paikalleen. Riippunee kuinka geneerisen toteutuksen tarvitsee, kuinka tehokkaan ja kuinka usealle luokalle.

Stackoverflowssa on ihan hyviä ehdotuksia Java: recommended solution for deep cloning/copying an instance

Pitääpäs koitaa tota serialisointia. Se mulla kävi ekana mielessä, mutta kuulosti vähän "purukumi" ratkaisulta! Toisaalta noista helpoiten ylläpidettävä, jos rakenne muuttuu :tup:
 
Itse varmaan pyrkisin viimeiseen asti suunnittelemaan kaiken niin, ettei syvää kopiota joutuisi tekemään ollenkaan. Se on sitten huonompi homma, jos sellaista kaikesta huolimatta oikeasti tarvitsee, mutta tuostahan niitä ratkaisuja löytyy siihenkin tilanteeseen.
 
SerializationUtils on hyvä, siinä on clone(). Jossain Apache Commons -kirjastossa se on. Sellaisena aika ikääntynyt, ja varmaan uudempiakin löytyy, mutta se on toiminut ja sillä olen kloonannut. Kaikkien komponenttien on vain sitten implementoivata java.io.Serializable.
 
android.
ajatuksissa on app joka on käytännössä katsoen kännykkäversio olemassaolevasta nettisivusta.
ainoa kännykän omaa ominaisuutta käyttävä detalji on "lähellä" tyyppinen haku joka tarkistaa gps sijainnin
ja esittelee paikallisia tuloksia aiheesta.
mainosrahoitteinen.

kysytään näin päin: millä tuollaista voisi kasata?
 
^ Eikö HTML5:n geolocation riitä, jos se on kerran jo valmis saitti? Tekee saitista vaan responsiivisen CSS:llä ja höntsällä, jos ei sitä jo ole. Voihan siitä askarrella myös puhelinta varten jonkinlaisen progressiivisen web app:n samalla jos haluaa (riippuen siitä miten sovellus/toimii ja jos se on mahdollista).
 
android.
ajatuksissa on app joka on käytännössä katsoen kännykkäversio olemassaolevasta nettisivusta.
ainoa kännykän omaa ominaisuutta käyttävä detalji on "lähellä" tyyppinen haku joka tarkistaa gps sijainnin
ja esittelee paikallisia tuloksia aiheesta.
mainosrahoitteinen.

kysytään näin päin: millä tuollaista voisi kasata?
Android-kehitystyökalut ja WebView saattavat olla aika hyvä lähtökohta, jos tosiaan tarvitsee olla erillinen sovellus. Tosin jos nettisivu ei ole responsiivinen, suosittelen vahvasti tekemään siitä sellaisen, koska Google tiputtaa mobiililaitteilla huonosti toimivia sivuja hakutuloksissa huonommille sijoille. Pelkkä erillinen mobiilisovellus ja vain tietokoneilla käytettäväksi sopiva nettisivu lienevät nykyään suoraan sanottuna surkea ratkaisu ellei tietokonekäyttö ole ainoa tehokas käyttötapa ja sovellus ole vain käytön tukena rajatummin ominaisuuksin.
 
responsiivisuus ei ole ongelma koska kohderyhmälle tärkein on sisällön tarkkuus, ei krumeluurit.
tän takia siis flashit on minimissään (mainokset) mutta css:lle sitten löytyy mittaa ja kunnolla.

wordpressille löytää guuggeli kaikenlaisia purkkaviritelmiä mutta eikös sillä ole aika paska maine? Wp:llä siis.
 
responsiivisuus ei ole ongelma koska kohderyhmälle tärkein on sisällön tarkkuus, ei krumeluurit.
tän takia siis flashit on minimissään (mainokset) mutta css:lle sitten löytyy mittaa ja kunnolla.

wordpressille löytää guuggeli kaikenlaisia purkkaviritelmiä mutta eikös sillä ole aika paska maine? Wp:llä siis.
Esim tommonen sivusto kuin io-tech.fi - Suomalainen tietotekniikkasivusto käyttää semmosta
 
responsiivisuus ei ole ongelma koska kohderyhmälle tärkein on sisällön tarkkuus, ei krumeluurit.

Ei kai responsiivisuus liity krumeluureihin. Päin vastoin. Responsiivinen sivu on usein karsittu krumeluureista niin, että kontentti jää jäljelle. Pointtina vain vaivaton käyttö mobiililaitteilla. Olis kiinnostava kuulla, minkä sivuston käyttäjät eivät halua toimivia sivuja myös mobiililla? Ettei vain ylläpitäjä tee oletuksia käyttäjien tarpeista :think:
 
On, WordPress (lisäosineen) on tuttu näky muun muassa Viestintäviraston varoituksissa.
Tuolla statistiikkaa: Wordpress Wordpress : CVE security vulnerabilities, versions and detailed reports


Ei se WP:n mainetta puhdista, eikä etenkään tee siitä hyvää softaa.
Tämä on nyt aivan väärä ketju Wordpress-keskusteluun kun suurin osa noista Wordpress-asennuksista on tavallisten tallaajien tekemiä ja ei voida puhua mistään ohjelmointiosaamisesta. Suurin osa on myös noita plugineilla ja valmisteemoilla tehtyjä purkkaviritelmiä jotka ovat tasan niin turvallisia kuin se heikoin plugari. Ei WP:ssä ole mitään pahaa osaavissa käsissä ja tästä kielii myös sen suosio isojen yritysten verkkosivustoalustana. Merkittävä osa suurista mediataloista ja myös verkkokaupoissa pyörii WP:n päällä.

Ei Wordpress ole mikään ongelmaton alusta mutta tällä hetkellä ehdottomasti suosituin, helpoin ja nopeiten kehittyvä.

cms-marketshare-1.jpg

WordPress-Website-Stats-IBL-Infotech.png


Keskustelua sisällönhallintajärjestelmistä ja web-kehityksestä voidaan jatkaa täällä:
Yleistä keskustelua webdevauksesta
 
Nonii CSS velhot, mitä vi**ua tää chrome nyt pelleilee?!

HTML:
<style>
article .article-header {
    font-weight: normal;
    margin: 8px, 0px !important;
    padding: 0px, 4px !important;
}

</style>
<article>
    <h4 class="article-header">head4</h4>
</article>
upload_2017-12-1_16-13-15.png
 
Nonii CSS velhot, mitä vi**ua tää chrome nyt pelleilee?!

HTML:
<style>
article .article-header {
    font-weight: normal;
    margin: 8px, 0px !important;
    padding: 0px, 4px !important;
}

</style>
<article>
    <h4 class="article-header">head4</h4>
</article>
upload_2017-12-1_16-13-15.png
Asiasta mitään ainakaan suoraan tietämättä: lukeeko noissa kolmioissa mitään, jos vie hiiren päälle?
 
Marginien ja paddingien arvot erotetaan välilyönnillä, ei pilkulla. Chrome ilmoittaa tuosta aika selkeästi "invalid property value", jos katsot mitä kolmio yrittää kertoa. Tismalleen saman tekee Firefox.

Välttäisin myös aina !important -lisäohjeistuksen käyttöä, jos mahdollista.
 
Viimeksi muokattu:
Nonii CSS velhot, mitä vi**ua tää chrome nyt pelleilee?!

HTML:
<style>
article .article-header {
    font-weight: normal;
    margin: 8px, 0px !important;
    padding: 0px, 4px !important;
}

</style>
<article>
    <h4 class="article-header">head4</h4>
</article>
upload_2017-12-1_16-13-15.png
Margin ja padding arvoja ei erotella pilkuilla vaan välilyönneillä,
elikkäs
HTML:
<style>
article .article-header {
    font-weight: normal;
    margin: 8px 0px !important;
    padding: 0px 4px !important;
}

</style>
<article>
    <h4 class="article-header">head4</h4>
</article>
 
Margin ja padding arvoja ei erotella pilkuilla vaan välilyönneillä,
elikkäs
HTML:
<style>
article .article-header {
    font-weight: normal;
    margin: 8px 0px !important;
    padding: 0px 4px !important;
}

</style>
<article>
    <h4 class="article-header">head4</h4>
</article>

:facepalm:
 
Marginien ja paddingien arvot erotetaan välilyönnillä, ei pilkulla. Chrome ilmoittaa tuosta aika selkeästi "invalid property value", jos katsot mitä kolmio yrittää kertoa. Tismalleen saman tekee Firefox.

Välttäisin myös aina !important -lisäohjeistuksen käyttöä, jos mahdollista.
Siis kyllähän mä tämän tiesin, css tulee rustattua nii saatana harvoin.

Tosian !importantit oli vaan epätoivoinen hätäratkaisu. Ja tää koko homma oli joku aivan omanluokan aivopieru, ja tarvitsin jonku vaan osottaan sormella typoa.

:beye:
 
Olisikohan kenelläkään tällaiseen tiedostonsiirtoon sopivaa ratkaisua? Mahdollisuuksia rajoittaa se, että tämä täytyisi hoitaa Windowsin komentoriviltä (bat- tai cmd-ajo), tai jollain muulla helpolla, yleispätevällä ja ilmaisella ratkaisulla.

Levyllä on hakemistoja seuraavaan tapaan, eli useita päähakemistoja, joissa useita alihakemistoja:
  • C:\Aapeli\ok\
  • C:\Aapeli\tutut\
  • C:\Aapeli\uudet\
  • C:\Baabeli\aakkos\
  • C:\Baabeli\listat\
  • C:\Baabeli\nimet\
  • C:\Baabeli\verkko\
Sitten on iso liuta tiedostoja yhdessä hakemistossa:
  • joulupukki_aakkos_20170912_010.txt
  • joulupukki_listat_20151224_110.txt
  • joulupukki_nimet_20171224_990.txt
  • joulupukki_ok_20171224_z10.txt
  • joulupukki_tutut_20171024_010.txt
  • joulupukki_uudet_20170912_010.txt
  • joulupukki_verkko_20170912_010.txt

Tiedostot pitäisi saada siirrettyä oikeisiin alihakemistoihin tiedostonimessä toisena olevan, tässä lihavoidun nimielementin mukaan. Nimen alku on kaikissa sama ja nimen lopulla ei kohteen kannalta merkitystä.

Saanko siirrettyä tiedostot jotenkin oikeisiin alihakemistoihin ko. elementin mukaan? Kaikki tiedostot eivät päivity samoina aikoina, joten paras ratkaisu kenties olisi, että nämä hakemistot luodaan vasta siirtäessä kyseisen lyhenteen mukaisiksi, mutta samalla täytyisi luoda myös tuo ylempi hakemisto (Aapeli, Baabeli, jne.). Pystyykö hakemistorakenteen mallin tekemään valmiiksi esim. csv-tiedostoon, josta oikea rakenne sitten luetaan ja luodaan siirron yhteydessä?

Siirtourakka ei ole kertaluonteinen, vaan toistuvaa rutiinihommaa. Siksipä yritän keksiä sille tällaista automatiikkaa. Saattaa myös olla, että ajattelen asiaa turhan vaikeasti, tai väärällä tavalla, joten kaikki ehdotukset ovat tervetulleita!
 
Olisikohan kenelläkään tällaiseen tiedostonsiirtoon sopivaa ratkaisua? Mahdollisuuksia rajoittaa se, että tämä täytyisi hoitaa Windowsin komentoriviltä (bat- tai cmd-ajo), tai jollain muulla helpolla, yleispätevällä ja ilmaisella ratkaisulla.

Levyllä on hakemistoja seuraavaan tapaan, eli useita päähakemistoja, joissa useita alihakemistoja:
  • C:\Aapeli\ok\
  • C:\Aapeli\tutut\
  • C:\Aapeli\uudet\
  • C:\Baabeli\aakkos\
  • C:\Baabeli\listat\
  • C:\Baabeli\nimet\
  • C:\Baabeli\verkko\
Sitten on iso liuta tiedostoja yhdessä hakemistossa:
  • joulupukki_aakkos_20170912_010.txt
  • joulupukki_listat_20151224_110.txt
  • joulupukki_nimet_20171224_990.txt
  • joulupukki_ok_20171224_z10.txt
  • joulupukki_tutut_20171024_010.txt
  • joulupukki_uudet_20170912_010.txt
  • joulupukki_verkko_20170912_010.txt

Tiedostot pitäisi saada siirrettyä oikeisiin alihakemistoihin tiedostonimessä toisena olevan, tässä lihavoidun nimielementin mukaan. Nimen alku on kaikissa sama ja nimen lopulla ei kohteen kannalta merkitystä.

Saanko siirrettyä tiedostot jotenkin oikeisiin alihakemistoihin ko. elementin mukaan? Kaikki tiedostot eivät päivity samoina aikoina, joten paras ratkaisu kenties olisi, että nämä hakemistot luodaan vasta siirtäessä kyseisen lyhenteen mukaisiksi, mutta samalla täytyisi luoda myös tuo ylempi hakemisto (Aapeli, Baabeli, jne.). Pystyykö hakemistorakenteen mallin tekemään valmiiksi esim. csv-tiedostoon, josta oikea rakenne sitten luetaan ja luodaan siirron yhteydessä?

Siirtourakka ei ole kertaluonteinen, vaan toistuvaa rutiinihommaa. Siksipä yritän keksiä sille tällaista automatiikkaa. Saattaa myös olla, että ajattelen asiaa turhan vaikeasti, tai väärällä tavalla, joten kaikki ehdotukset ovat tervetulleita!
Tuo onnistuu helposti skriptillä, joku windows osaaja varmasti saa tuollaisen aikaan nopeasti. Ajastuskin onnistuu, eli tuon skriptin voi ajaa vaikka kerran tunnissa tjsp.

Nuo tiedostot tulevat ilmeisesti jostain softasta ulos, eikö sitä voi konffata laittamaan noita jo valmiiksi oikeisiin kansioihin?
 
Tuo onnistuu helposti skriptillä, joku windows osaaja varmasti saa tuollaisen aikaan nopeasti. Ajastuskin onnistuu, eli tuon skriptin voi ajaa vaikka kerran tunnissa tjsp.

Nuo tiedostot tulevat ilmeisesti jostain softasta ulos, eikö sitä voi konffata laittamaan noita jo valmiiksi oikeisiin kansioihin?

Tiedostot tulevat tosiaan ulos softasta, jonne kansiot onkin jo konffattu. Normaalitilanteessa kaikki olisi kunnossa, mutta osa prosessia ei nyt erinäisistä syistä toimi ja se vaihe joudutaan tekemään vähän työläästi käsin. Tämä "poikkeustilanne" on nyt kestänyt pari kuukautta, joten korjausta odotellessani rupesin miettimään miten saisin nopeutettua tätä näpertelyä.
 
@GPO

Pitää katsoa jos mulla olisi aikaa tässä joulukiireiden välissä viritellä sinulle jonkinlaista battia joka hoitaisi homman.

Arkistoista löytyy yli 1000 riviä pitkä batti jossa käsittelin juuri kaipaamiasi asioita yms. :)
 
  • Tykkää
Reactions: GPO
Siinä on jo batilla kokoa! :)

Hieno juttu, jos ehdit battia virittelemään! Älä kuitenkaan hirveästi näe vaivaa tuon eteen, että ehdit jouluunkin keskittyä. :)
 
Koodi:
@echo off

for /f %%a in (aapeli.txt) do (
   echo if not exist "C:\Aapeli\%%a\" mkdir C:\Aapeli\%%a
   echo move C:\Source\*%%a*.txt C:\Aapeli\%%a\
)

for /f %%b in (baapeli.txt) do (
   echo if not exist "C:\Baapeli\%%b\" mkdir C:\Baapeli\%%b
   echo move C:\Source\*%%b*.txt C:\Baapeli\%%b\
)

Tiedostoihin aapeli.txt ja baapeli.txt tulee hakusanat sana per rivi ja poista echot.

Edit: Niin tuo koodin pätkä täytyy tallentaa .bat tiedostoon.
 
Viimeksi muokattu:
Koodi:
@echo off

for /f %%a in (aapeli.txt) do (
   echo if not exist "C:\Aapeli\%%a\" mkdir C:\Aapeli\%%a
   echo move C:\Source\*%%a*.txt C:\Aapeli\%%a\
)

for /f %%b in (baapeli.txt) do (
   echo if not exist "C:\Baapeli\%%b\" mkdir C:\Baapeli\%%b
   echo move C:\Source\*%%b*.txt C:\Baapeli\%%b\
)

Tiedostoihin aapeli.txt ja baapeli.txt tulee hakusanat sana per rivi ja poista echot.

Edit: Niin tuo koodin pätkä täytyy tallentaa .bat tiedostoon.
Kiitos! Täytyypä testata tätä heti kun hommat rauhoittuvat. :)
 
Koodaan käyttöliittymää C++:aa ja SFML:ää käyttäen.
Jokaisella käyttöliittymän osasella, kuten painikkeilla, tekstibokseilla ym. oma luokkansa, joka sisältää renderöintifunktion, joka tarvitsee fontin, värit ym. vastaavia kautta käyttöliittymän samana pysyviä tietoja. Mikä on oikea tapa siirtää nämä renderöintifunktioon? Tällä hetkellä ne ovat vain funktion argumentteina, mutta onko fiksumpaa tapaa?

Ne olisi siis jotenkin hyvä saada tunntetuksi kaikkialla, mutta toisaalta globaaleja muuttujia ei saisi tehdä.
 
Ne olisi siis jotenkin hyvä saada tunntetuksi kaikkialla, mutta toisaalta globaaleja muuttujia ei saisi tehdä.
Lasketko nimiavaruuteen upotetun muuttujan globaaliksi muuttujaksi? :D Yksi vaihtoehto olisi kai tehdä luokka, jonka staattisia muuttujia ominaisuudet ovat, mutta se voisi tuntua vähän tyhmältä, kun C++:ssa ei tarvitse upottaa kaikkea johonkin luokkaan. Tosin enpä ole C++:aa pahemmin käyttänyt, joten ehkä nämä ehdotukset ovat jotain tyylivirheitä, mutta äkkiseltään kuulostavat omaan korvaani ihan järkeviltä.
 
Koodaan käyttöliittymää C++:aa ja SFML:ää käyttäen.
Jokaisella käyttöliittymän osasella, kuten painikkeilla, tekstibokseilla ym. oma luokkansa, joka sisältää renderöintifunktion, joka tarvitsee fontin, värit ym. vastaavia kautta käyttöliittymän samana pysyviä tietoja. Mikä on oikea tapa siirtää nämä renderöintifunktioon? Tällä hetkellä ne ovat vain funktion argumentteina, mutta onko fiksumpaa tapaa?

Ne olisi siis jotenkin hyvä saada tunntetuksi kaikkialla, mutta toisaalta globaaleja muuttujia ei saisi tehdä.

Tee olion jossa on kaikki tyylittely ja getterillä napsit sieltä?
 
Saattaapi mennä hieman väärällä alueelle mutta kuitenkin eli miten Linuxin puolella scriptissä voisi tehdä if:n joka ilmoittaa OK jos muuttuja on 1 tai isompi ja FAIL jos muuttuja on pienempi, kuin 1 (käytännössä siis tässä tapauksessa 0) tai täysin tyhjä.

if [ "$muuttuja" -gt "1" ] ; then
if [ -z "$muuttuja" ]

Ilmeisesti jotenkin noiden yhdistelmällä mutta miten && tai || ?
 
Saattaapi mennä hieman väärällä alueelle mutta kuitenkin eli miten Linuxin puolella scriptissä voisi tehdä if:n joka ilmoittaa OK jos muuttuja on 1 tai isompi ja FAIL jos muuttuja on pienempi, kuin 1 (käytännössä siis tässä tapauksessa 0) tai täysin tyhjä.

if [ "$muuttuja" -gt "1" ] ; then
if [ -z "$muuttuja" ]

Ilmeisesti jotenkin noiden yhdistelmällä mutta miten && tai || ?


Ei ehkä siistein ratkaisu mutta:

Koodi:
if [ -z "$var" ]

then

       echo "\$var is empty"

else

    if [ "$var" -ge "1" ]

    then

       echo "OK"

    else

       echo "FAIL"

    fi

fi

En ole bash/shell guru joten tämä ei välttämättä ole paras/oikein tapa tehdä tätä.
 
Viimeksi muokattu:
Saattaapi mennä hieman väärällä alueelle mutta kuitenkin eli miten Linuxin puolella scriptissä voisi tehdä if:n joka ilmoittaa OK jos muuttuja on 1 tai isompi ja FAIL jos muuttuja on pienempi, kuin 1 (käytännössä siis tässä tapauksessa 0) tai täysin tyhjä.

if [ "$muuttuja" -gt "1" ] ; then
if [ -z "$muuttuja" ]

Ilmeisesti jotenkin noiden yhdistelmällä mutta miten && tai || ?


tätä vissiinkin haetaan foo >= 1

Koodi:
#!/bin/bash
echo "$var"
if [ "$var" -ge 1 ]
  then
    echo "OK"
  else
    echo "FAIL"
fi

edit: ja toimii myös tupla suluilla

Koodi:
#!/bin/bash
if (("$var" >= 1))
  then
    echo "OK"
  else
    echo "FAIL"
fi



http://tpcg.io/Cni8nz
 
Viimeksi muokattu:
Olisiko täällä ketään Unity mestaria? Sellainen ongelma, että mulla on kasa buttoneita ja sama määrä scriptablObjecteja. Jokaisella buttonilla on siis oma objekti jossa on parametrit pelissä olevalle upgradelle. Miten saisin scriptillä helposti tietoon mitä buttunia on painettu ja siihen linkitetyn objektin arvot käyttöön? Ei huvittaisi lyödä jokaista buttonia erikseen scriptiin jne.
 
Excel VBA (2013) -kysymys:

Jos sarakkeen B solu on tyhjä, niin miten tyhjennetään vastaavaa solu sarakkeesta D?

Työkirja sisältää automaattisesti päivittyvän kellonajan sarakkeeseen D, joka jää sitten häiritsevästi killumaan jos sarakkeesta B poistetaan sisältö syystä tahi toisesta.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Then

Application.EnableEvents = False
Cells(Target.Row, 4).Value = Date
Application.EnableEvents = True

End If

End Sub
 
Nyt lyö tyhjää. Tarkoituksena muuntaa kuukausi ko. kuukauden järjestysnumeroksi.
Vielä niin, että ei ole väliä onko se kirjoitettu isolla vai pienellä.
Tuo alla oleva pätkä toimii, jos kuukausi on kirjoitettu pienellä, muutoin ei.

Kuukaudet on listattu tässä tapauksessa suomeksi
Koodi:
String abc = "Toukokuu";
       ReturnDate x = new ReturnDate();
           System.out.println(abc + " on " + x.monthToInt(abc));
Koodi:
public int monthToInt(String monthString) {
       monthString = monthString.toLowerCase();
       int x = 0;
       int kn = 0;
       for (String s:MONTHS) {
           if (monthString==s) {
               kn=x;
           }
           x=x+1;
       }
       return kn+1;
Koodi:
    public static final String[] MONTHS = {"tammikuu", "helmikuu",
       "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu",
       "syyskuu", "lokakuu", "marraskuu", "joulukuu"};
 
Nyt lyö tyhjää. Tarkoituksena muuntaa kuukausi ko. kuukauden järjestysnumeroksi.
Vielä niin, että ei ole väliä onko se kirjoitettu isolla vai pienellä.

Stringit ovat olioita ja niitä vertaillaan equalsilla, ei ==, olettaen että tässä on nyt kyse Javasta.

Lisäksi jos käyt läpi listaa/taulukkoa ja tarvitset indeksejä, se kannattaisi tehdä joko while -loopilla tai for (int i = 0; i < arr.length; i++) loopilla. ForEach on nimenomaan tilanteisiin, jossa indeksoinnille ei ole tarvetta.

Vaihtoehtoisesti...
Koodi:
return MONTHS.indexOf(monthString.toLowerCase());

Tässä kohtaa myös Enum voi olla jo aika kätevä.
 
Stringit ovat olioita ja niitä vertaillaan equalsilla, ei ==, olettaen että tässä on nyt kyse Javasta.

Lisäksi jos käyt läpi listaa/taulukkoa ja tarvitset indeksejä, se kannattaisi tehdä joko while -loopilla tai for (int i = 0; i < arr.length; i++) loopilla. ForEach on nimenomaan tilanteisiin, jossa indeksoinnille ei ole tarvetta.

Vaihtoehtoisesti...
Koodi:
return MONTHS.indexOf(monthString.toLowerCase());

Kiitos!
Javasta kyse ja nyt pelittää.
 

Statistiikka

Viestiketjuista
261 816
Viestejä
4 548 227
Jäsenet
74 849
Uusin jäsen
Pizzapäivä123

Hinta.fi

Back
Ylös Bottom