Pieniä kysymyksiä ohjelmoinnista

Xamarin Forms / Android App kysymys
Miten saa näytön koon ja kosketuksen xy-koordinaatin?
Toistaiseksi mennään kikkailemalla koko näytön täyttävän imageviewin kanssa.
tapping.jpg

Mielellään ilman ylimääräisiä plugineja.
 
Pohdiskelua...

Kun katson skriptin suoritusta konsolista, on response tyhjä kun alert-ruutu tulee tyhjänä esiin. Heti kun kuittaan ruudun painamalla ok, ilmestyy response sellaisena kun pitääkin.

Ymmärrän tämän niin, että tuo alert suoritetaan liian aikaisin eikä skripti ole vielä ehtinyt saada palautetta. Vai?

Alert pysäyttää js säikeen, eli koodi seisahtuu paikalleen kunnes kuittaa alertin.

koodi esimerkki vois myös autaa..
 
Alert pysäyttää js säikeen, eli koodi seisahtuu paikalleen kunnes kuittaa alertin.

koodi esimerkki vois myös autaa..
Koodi:
fetch('http://192.168.1.8/request?S_227_85', { mode: 'no-cors' })
.then(res => res.text())
.then(teksti => {
    alert(teksti);
})

Nyt haluttu string ilmestyy responseen ennen alertin kuittaamista, mutta ei tule mukaan alert-ruutuun.
 
Koodi:
fetch('http://192.168.1.8/request?S_227_85', { mode: 'no-cors' })
.then(res => res.text())
.then(teksti => {
    alert(teksti);
})

Nyt haluttu string ilmestyy responseen ennen alertin kuittaamista, mutta ei tule mukaan alert-ruutuun.


Kuten sanoin nykyaikaiset selaimet estää corsit.

fetch mode 'no-cors' voit tehdä kutsun, ja saada paluuna statuksen, mutta responseen ei sallita pääsyä.

no-cors — Prevents the method from being anything other than HEAD, GET or POST, and the headers from being anything other than simple headers. If any ServiceWorkers intercept these requests, they may not add or override any headers except for those that are simple headers. In addition, JavaScript may not access any properties of the resulting Response. This ensures that ServiceWorkers do not affect the semantics of the Web and prevents security and privacy issues arising from leaking data across domains.

Request.mode
 
Miten nuo isot palvelut, kuten Facebook, Twitter ja Reddit tekee liketykset yms tilapäivitykset? Esimerkiksi Twitterissä kun painaa sydäntä, niin palaute tulee heti (sydämen väri muuttuu). Käsittääkseni ne ei siis odota, että tietokannasta tulee vastaus ensin, eli käytännössä kutsut on optimistisia ja oletetaan, että kutsu menee onnistuneesti perille?
 
En tiedä, mutta luulisin, että se toimii niin, että käyttöliittymällä on oma tila, jota se ylläpitää. Käyttöliittymän tilaa päivitetään varmaankin suoraan ja palvelimen kanssa kommunikoidaan taustalla.
Koitan omalle sivulle saada samantyylistä systeemia rakennettua. Tällä hetkellä päivitän frontin vasta, kun palvelimelta tulee vastaus kutsuun. Tuntuu vähän köpöltä tuo viive, kun on tottunut moderneihin palveluihin. Täytynee tutustua noiden firmojen blogeihin. Sieltä voi löytyä mielenkiintoista tietoa.
 
Koitan omalle sivulle saada samantyylistä systeemia rakennettua. Tällä hetkellä päivitän frontin vasta, kun palvelimelta tulee vastaus kutsuun. Tuntuu vähän köpöltä tuo viive, kun on tottunut moderneihin palveluihin. Täytynee tutustua noiden firmojen blogeihin. Sieltä voi löytyä mielenkiintoista tietoa.
Eipä tuollaisen tekeminen hirveästi vaadi. Ylläpidät tiedon vaan jossain lokaalissa muistissa ja laitat palvelimelle postin tuosta tiedosta. Toki kannattaa tarkastaa vielä taustalla, että tuo palvelimelle lähettäminen onnistui. Jos ei niin toksit vaan frontin näyttämään jonkun virhesanoman.
 
Jollain logiikalla tosiaan virhettä käyttäjälle, tai sen liketyksen poistaminen UI:sta, jos palvelin ei vastaa tai vastaa virheellä. Eipä se sen kummempaa vaadi.
 
Kysymys liittyen css media queryyn.
Onko jotain hyväksi todettua tapaa havaita käytetty laite (puhelin, tabletti, pc)?

Vai käytänkö suosiolla javascriptiä media queryn kaverina?
Tämä aiheuttaa tällä hetkellä ongelmia projekteissani, kun en tiedä mikä olisi oikea tapa hoitaa tämä.
 
Kysymys liittyen css media queryyn.
Onko jotain hyväksi todettua tapaa havaita käytetty laite (puhelin, tabletti, pc)?

Vai käytänkö suosiolla javascriptiä media queryn kaverina?
Tämä aiheuttaa tällä hetkellä ongelmia projekteissani, kun en tiedä mikä olisi oikea tapa hoitaa tämä.

Miksi css media queryt ei riittäisi viewportin tunnistukseen? Kysymys ei oikein aukaise varsinaista ongelmaa.
 
Kysymys liittyen css media queryyn.
Onko jotain hyväksi todettua tapaa havaita käytetty laite (puhelin, tabletti, pc)?

Vai käytänkö suosiolla javascriptiä media queryn kaverina?
Tämä aiheuttaa tällä hetkellä ongelmia projekteissani, kun en tiedä mikä olisi oikea tapa hoitaa tämä.
Käännetäänpä kysymys toiselle kantille: mitä yrität saavuttaa?

Jos kyse on tietyistä tyyleistä päätelaitteesta riippuen, niin käytät CSS:ää. Tällöin voit lukaista esim. tämän 02/2019 päivitetyn artikkelin aiheesta: Media Queries for Standard Devices | CSS-Tricks

Jos taas kyse on toiminnallisuudesta, niin silloin käytät JS:ää. Tällöin kannattaa tutustua `matchMedia()` funktioon: Window.matchMedia()
 
Miksi css media queryt ei riittäisi viewportin tunnistukseen? Kysymys ei oikein aukaise varsinaista ongelmaa.

Ehkä ongelma on enemmänkin se, etten osaa niitä käyttää.
Mutta hyvä tietää, jotta pelkästään niillä pärjää.

Käännetäänpä kysymys toiselle kantille: mitä yrität saavuttaa?

Jos kyse on tietyistä tyyleistä päätelaitteesta riippuen, niin käytät CSS:ää. Tällöin voit lukaista esim. tämän 02/2019 päivitetyn artikkelin aiheesta: Media Queries for Standard Devices | CSS-Tricks

Jos taas kyse on toiminnallisuudesta, niin silloin käytät JS:ää. Tällöin kannattaa tutustua `matchMedia()` funktioon: Window.matchMedia()

Yritin väsätä media querya iPadille (landscape), mutta kaikesta huolimatta sama query suoritettiin desktopilla.
Mutta löysi tuohon jo toimivan ratkaisun media queryna.

Pitääpä tutustua aiheeseen vähän paremmin.
 
mitä yrität saavuttaa?

Tämä. Tämä kannattaa AINA kertoa kun täällä jotain kyselee. Liian usein kysyjä kysyy aivan väärää asiaa, ja sitten taas arvuutellaan, mitä oikeasti ollaan tekemässä. En tiedä, oliko tässä niin, mutta tuohon vastaamisella saa helpommin relevantteja vastauksia.
 
Ehkä ongelma on enemmänkin se, etten osaa niitä käyttää.
Mutta hyvä tietää, jotta pelkästään niillä pärjää.



Yritin väsätä media querya iPadille (landscape), mutta kaikesta huolimatta sama query suoritettiin desktopilla.
Mutta löysi tuohon jo toimivan ratkaisun media queryna.

Pitääpä tutustua aiheeseen vähän paremmin.

Tässä on hyvin pelkistety esimerkki ns. mobile first leiskasta, eli idea on pitää layout oletuksena perus blockeina.
Ja sitä mukaan kun näytön leveys kasvaa ja vaatii muutoksia, niitä määritellään media-queryjen avulla.

weathered-glade-u6lfl - CodeSandbox
 
Miten nuo isot palvelut, kuten Facebook, Twitter ja Reddit tekee liketykset yms tilapäivitykset? Esimerkiksi Twitterissä kun painaa sydäntä, niin palaute tulee heti (sydämen väri muuttuu). Käsittääkseni ne ei siis odota, että tietokannasta tulee vastaus ensin, eli käytännössä kutsut on optimistisia ja oletetaan, että kutsu menee onnistuneesti perille?

Redis cache on ainakin ollut Redditin käytössä

View Counting at Reddit
 
Miten reactissa pystyy lisäämään useamman luokan samalle elementille ehdollisestin (conditionally) ?

Tyyliin:
Koodi:
<div className="class-a class-x">
...
</div>


Yhden luokan saan lisättyä ehdollisestin, seuraavastin:
Koodi:
<div className={condition ? 'class-a' : 'class-b'}>
...
</div>
 
Miten reactissa pystyy lisäämään useamman luokan samalle elementille ehdollisestin (conditionally) ?

Tyyliin:
Koodi:
<div className="class-a class-x">
...
</div>


Yhden luokan saan lisättyä ehdollisestin, seuraavastin:
Koodi:
<div className={condition ? 'class-a' : 'class-b'}>
...
</div>

Laita ne taulukkoon, käytä join()-funktiota niiden liittämiseen stringiksi ja anna lopputulos luokaksi.

Useamman luokan ehdollinen renderöinti vaatii jo pikkasen filtteriä mukaan. Mutta käytännössä joo array kautta menee helpoiten.

Koodi:
const classes = {
  "class-a": true,
  "class-b": false,
  "class-x": true,
  "class-y": false
};

const activeClasses = Object.entries(classes)
  .reduce((acc, [className, condition]) => (condition ? acc + " " + className : acc),"")
  .trim();

edit: pikkubugi korjattu :vihellys:


Jos et halua keksiä pyörää uudelleen, tutustu kirjastoihin classnames ja clsx
 
Viimeksi muokattu:
Mites tuon uuden Windows Terminaalin kanssa saisi tehtyä shortcutteja? Mulla on esim. tietokantayhteyden avaamiseen tällainen shortcut:

Koodi:
C:\Windows\System32\cmd.exe /k mongo "mongodb+srv://db.urli" --username username

Koitin korvata tuon tällä:

Koodi:
C:\Users\username\AppData\Local\Microsoft\WindowsApps\wt.exe /k mongo "mongodb+srv://db.urli" --username username

Mutta ei toimi.
 
Miksi PHP:ssä on luotu monta is_[type] funktiota sen sijaan, että olisi pelkkä is, jolle syötetään arvo ja operaattori?
Esim. is_array($arvo) vs is('array', $arvo)

Tuommoisen universaalin issin tekee toki itsekin.
 
Miksi PHP:ssä on luotu monta is_[type] funktiota sen sijaan, että olisi pelkkä is, jolle syötetään arvo ja operaattori?
Esim. is_array($arvo) vs is('array', $arvo)

Tuommoisen universaalin issin tekee toki itsekin.

Vähemmän virheitä, kun voi helposti tarkistaa kirjoitusvaiheessa syntaksin automaattisesti? is_arrau vs is('arrau'...
 
Miksi PHP:ssä on luotu monta is_[type] funktiota sen sijaan, että olisi pelkkä is, jolle syötetään arvo ja operaattori?
Esim. is_array($arvo) vs is('array', $arvo)

Tuommoisen universaalin issin tekee toki itsekin.
Jos arvata pitäisi, PHP:n tapauksessa homma on vähän tuollaiseksi suunnittelun puutteen takia. Voi olla ihan hyväkin ratkaisu tai sitten ei (en jaksa pohtia syvällisemmin eikä heti tule mieleen syitä, miksi pitäisi olla tavalla X tavan Y sijaan), mutta koko PHP vaikuttaa sille, että asiat ovat aika orgaanisesti muotoutuneet sellaisiksi kuin ne ovat.
 
Asia selvä. Pitänee sitten unohtaa koko juttu. Kiitos kaikille neuvoja antaneille.
Tällainen tuli vastaan: https://crossorigin.me/

Eli proxy CORS-pyynnöille. En tosin tiedä, miten toimisi sisäverkkoon (tuskin). Mutta jätän tähän, jotta tulee tietouteen vastaavien ongelmien kanssa painiville, jos eivät halua tehdä omaa proxya.

Luonnollisesti mitään sensitiivistä ei tuon kautta kannata liikutella.
 
Miten reactilla pitäisi käsitellä taulukon suodatusta kun käytössä on useampi 'rasti ruutuun' -elementti?
Jos tuosta koko suodatuksesta väsäisi oman komponentin, niin miten saan kätevästin usealta checkbox -elementiltä tilan (on/off)

Ja jos nuo saisi esimerkiksi taulukossa, niin miten suodatan taulukossa olevan datan perusteella?
En välttämättä kaipaa edes koodia, mutta jos saisi hivenen osviittaa miten edetä.

Joka tapauksessa, alla linkki codesandbox esimerkkiin, jossa on yksi suodatin sekä taulukko.
bold-cartwright-7w7hb - CodeSandbox
 
Miten reactilla pitäisi käsitellä taulukon suodatusta kun käytössä on useampi 'rasti ruutuun' -elementti?
Jos tuosta koko suodatuksesta väsäisi oman komponentin, niin miten saan kätevästin usealta checkbox -elementiltä tilan (on/off)

Ja jos nuo saisi esimerkiksi taulukossa, niin miten suodatan taulukossa olevan datan perusteella?
En välttämättä kaipaa edes koodia, mutta jos saisi hivenen osviittaa miten edetä.

Joka tapauksessa, alla linkki codesandbox esimerkkiin, jossa on yksi suodatin sekä taulukko.
bold-cartwright-7w7hb - CodeSandbox

Array filtteria ja includes käyttämällä. Eipä se oikeen muuta kun lisää vaan ehtoja sinne ja tänne.

usean checkboxin tilan voit viedä arraylle tai map ihan kummin haluat ja useReducer hookilla tietinkin väännät jo vaikka mikälaisen tilan komponentille.

holy-silence-mqn0z - CodeSandbox mitenkään ajatuksella en tätä tehnyt, mutta nopeesti vääntämällä tälläkertaa tuli tällänen. :joy:
 
Array filtteria ja includes käyttämällä. Eipä se oikeen muuta kun lisää vaan ehtoja sinne ja tänne.

usean checkboxin tilan voit viedä arraylle tai map ihan kummin haluat ja useReducer hookilla tietinkin väännät jo vaikka mikälaisen tilan komponentille.

holy-silence-mqn0z - CodeSandbox mitenkään ajatuksella en tätä tehnyt, mutta nopeesti vääntämällä tälläkertaa tuli tällänen. :joy:

Näyttäis pelaavan hienostin, minä kiitän!
Pitääpä hivenen tutustua tähän luomukseen.
 
Array filtteria ja includes käyttämällä. Eipä se oikeen muuta kun lisää vaan ehtoja sinne ja tänne...

En vain käsitä miten tuo filtteröinti toimii tuossa sun esimerkissä.
Yritin muokata tuota esimerkkiäsi niin, että pystyisin suodattamaan useammasta sarakkeesta, mutta se meni aika sotkuksi.

Olisin kiitollinen jos viitsisit lisätä muutaman kommentin tohon :)
 
En vain käsitä miten tuo filtteröinti toimii tuossa sun esimerkissä.
Yritin muokata tuota esimerkkiäsi niin, että pystyisin suodattamaan useammasta sarakkeesta, mutta se meni aika sotkuksi.

Olisin kiitollinen jos viitsisit lisätä muutaman kommentin tohon :)


Koodi:
const userMatch = userFilter.length ? userFilter.includes(elem.userId) : true;
jos userFilter on tyhjä TAI pitää sisällään ko elementin userid palautuu true

Koodi:
const titleMatch = titleInput.value ? elem.title.includes(titleInput.value) : true;
jos titleInput on tyhjä TAI ko. elementin title sisältää inputin arvon substriginä palautuu true.

Koodi:
const bodyMatch = bodyInput.value ? elem.body.includes(bodyInput.value) : true;
jos bodyInput on tyhjä TAI ko. elementin body sisältää inputin arvon substriginä palautuu true.

Koodi:
return userMatch && titleMatch && bodyMatch;

jos kaikki kolme testiä ovat tosia, palautetaan true. eli ko. elementti läpäisee filterin ja päätyy taulukkoon näkyville.

Eli sun täytyy hakuehdon lisäksi tarkastaa onko ko. hakuehto käytössä jos ei ole, palautetaan oletuksena true koska ko. suodatusta ei haluta suorittaa.

edit:

olisiko tää helpompi sisäistää?
Koodi:
  const dataFilter = elem => {
    const userMatch = !userFilter.length || userFilter.includes(elem.userId);
    const titleMatch = !titleInput.value || elem.title.includes(titleInput.value);
    const bodyMatch = !bodyInput.value || elem.body.includes(bodyInput.value);
    return userMatch && titleMatch && bodyMatch;
  };
 
Viimeksi muokattu:
Nodella ja csv-parserilla muunsin csv-tiedoston array[Object]-muotoon.

Miksi jokaisen objektin KUNTANRO-avaimen arvon tyyppi on 'undefined'?

Koodi:
console.log(data[1]);
console.log('***');
console.log(typeof data[1].KUNTANRO);
console.log(typeof data[1].MAISTRAATTINRO);
console.log('***');
console.log(data[1].KUNTANRO);
console.log(data[1].MAISTRAATTINRO);
Koodi:
{ 'KUNTANRO': '9',
  KUNTANIMIFI: 'Alavieska',
  KUNTANIMISV: 'Alavieska',
  KUNTAMUOTO: 'Kunta',
  KIELISYYS: 'suomi',
  VAALIPIIRINRO: '12',
  VAALIPIIRIFI: 'Oulun vaalipiiri',
  VAALIPIIRISV: 'Uleåborgs valkrets',
  MAISTRAATTINRO: '796',
  MAISTRAATTINIMIFI: 'Pohjois-Suomen maistraatti',
  MAISTRAATTINIMISV: 'Magistraten i Norra Finland',
  'PALVELUYKSIKKÖNRO': '130',
  'PALVELUYKSIKKÖFI': ' Ylivieskan yksikkö',
  'PALVELUYKSIKKÖSV': ' Enheten i Ylivieska',
  MAAKUNTANRO: '16',
  MAAKUNTANIMIFI: 'Pohjois-Pohjanmaa',
  MAAKUNTANIMISV: 'Norra Österbotten' }
***
undefined
string
***
undefined
796
 
Huomaatko kuntanro:ssa nuo '' ympärillä.
 
Viimeksi muokattu:
Nodella ja csv-parserilla muunsin csv-tiedoston array[Object]-muotoon.

Miksi jokaisen objektin KUNTANRO-avaimen arvon tyyppi on 'undefined'?

Koodi:
console.log(data[1]);
console.log('***');
console.log(typeof data[1].KUNTANRO);
console.log(typeof data[1].MAISTRAATTINRO);
console.log('***');
console.log(data[1].KUNTANRO);
console.log(data[1].MAISTRAATTINRO);
Koodi:
{ 'KUNTANRO': '9',
  KUNTANIMIFI: 'Alavieska',
  KUNTANIMISV: 'Alavieska',
  KUNTAMUOTO: 'Kunta',
  KIELISYYS: 'suomi',
  VAALIPIIRINRO: '12',
  VAALIPIIRIFI: 'Oulun vaalipiiri',
  VAALIPIIRISV: 'Uleåborgs valkrets',
  MAISTRAATTINRO: '796',
  MAISTRAATTINIMIFI: 'Pohjois-Suomen maistraatti',
  MAISTRAATTINIMISV: 'Magistraten i Norra Finland',
  'PALVELUYKSIKKÖNRO': '130',
  'PALVELUYKSIKKÖFI': ' Ylivieskan yksikkö',
  'PALVELUYKSIKKÖSV': ' Enheten i Ylivieska',
  MAAKUNTANRO: '16',
  MAAKUNTANIMIFI: 'Pohjois-Pohjanmaa',
  MAAKUNTANIMISV: 'Norra Österbotten' }
***
undefined
string
***
undefined
796


Onko avaimessa jotain ihme merkkejä vai miksi se on kääritty lainauksiin?

Koita myös data[1]['KUNTANRO']
 
Mitä cloud palvelua voi opiskella ilman että maksaa kuukausimaksua siitä. Tai jollain kokeiluversiolla. Azure, AWS? Tarkoituksena olisi saada laitettua oma projekti sinne pyörimään.
 
Miksi jokaisen objektin KUNTANRO-avaimen arvon tyyppi on 'undefined'?

Koska objektin avain ei ole KUNTANRO vaan 'KUNTANRO'. Nämä kaksi ovat eri tilanteita:

Koodi:
// Olettamasi tilanne
const wishfulThinking = {
  'KUNTANRO': 9
  kuntanimi: 'Alavieska'
}

// Todellinen tilanne
const reality = {
   "'KUNTANRO'": 9,
   kuntanimi: 'Alavieska'
}

Todennäköisesti nämä heittomerkit ovat osa lähdetiedostoa.
 
Mitä cloud palvelua voi opiskella ilman että maksaa kuukausimaksua siitä. Tai jollain kokeiluversiolla. Azure, AWS? Tarkoituksena olisi saada laitettua oma projekti sinne pyörimään.
Heroku on ilmainen yhdellä prosessilla. Servu menee tosin sleep-tilaan 30 minuutin idlauksen jälkeen ja tällöin tunnit ei kulu.
 
Mitä cloud palvelua voi opiskella ilman että maksaa kuukausimaksua siitä. Tai jollain kokeiluversiolla. Azure, AWS? Tarkoituksena olisi saada laitettua oma projekti sinne pyörimään.

Ensimmäisen vuoden ajalle AWS, Azure ja Google Cloud sisältää ilmaiseksi käytettäviä palveluja ja/tai credittejä. Muistaakseni kaikissa noissa tarkempiin tietoihin pääsee ihan etusivun / signupin kautta, eikä vaadi mitään temppuja (luottokortin todennäköisesti). Noissa myös aika hyvin 'näin teet tällaista' esimerkkejä.
 
Koska objektin avain ei ole KUNTANRO vaan 'KUNTANRO'. Nämä kaksi ovat eri tilanteita:

Koodi:
// Olettamasi tilanne
const wishfulThinking = {
  'KUNTANRO': 9
  kuntanimi: 'Alavieska'
}

// Todellinen tilanne
const reality = {
   "'KUNTANRO'": 9,
   kuntanimi: 'Alavieska'
}

Todennäköisesti nämä heittomerkit ovat osa lähdetiedostoa.
Kokeiltu data[1]['KUNTANRO'] ja data[1]["'KUNTANRO'"] yhtä huonolla menestyksellä. Lähdetiedosto: Kunnat - Voimassa olevat Suomen kunnat 1.1.2018 - Avoindata.fi
 
Puhdista lähdedata heti ensimmäisenä ennen kuin tuuppaat sen jsoniin niin ei tarvitse kikkailla.
Tuolla lähti toimiman: awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' kuntaluettelo-laajat-tiedot-2018-01-01.csv > kuntaluettelo-laajat-tiedot-2018-01-01.csv.nobom

Tiedoston alussa oleva 'UTF-8 byte order mark' (/357 / 273 /277) oli varmaankin syynä. Se tarttui ensimmäiseen avaimeen näkymättömäksi merkiksi.
 
Viimeksi muokattu:
Oma kirjoittamani (toki lähteenä on käytetty "jonkin" verran nettiä") Powershell script joka kirjoittaa logitiedostoon login päivämäärän ja kellonajan, Windows käyttäjänimen, Windows profiilin sijainnin ja tämän profiilin koko niin gigatavuina kuin megatavuina.

Koodi:
$Date = Get-Date -Format yyyy.MM.dd_HH.mm.ss
$LOGFILE = "User folder size " + $Date + ".txt"
$Size = (Get-ChildItem $env:userprofile -Recurse | Measure-Object -Property Length -Sum).sum
Write-Output ("Log Date and Time: " + $Date) >> $LOGFILE
Write-Output ("Username: " + $env:USERNAME) >> $LOGFILE
Write-Output ("Profile Location: " + $env:USERPROFILE) >> $LOGFILE
Write-Output ("Profile size in: " + "{0:N2}" -f ($Size/1MB) + " MB") >> $LOGFILE
Write-Output ("Profile size in: " + "{0:N2}" -f ($Size/1GB) + " GB") >> $LOGFILE
Start $LOGFILE

Powershell scriptiä kirjoitan omaksi huvikseni omaan käyttöön ja oppiakseni powershell scriptausta. En ole ikinä koodausta tai scriptausta muutenkuin omaksi huvikseni ja omin päin opiskellut joten kaikki palaute on hyväksi. Eli mikä pistää silmään, mikä on tehty hyvin ja mikä huonosti? Ja mitä parannettavaa tuossa ois?
 
Eli mikä pistää silmään, mikä on tehty hyvin ja mikä huonosti? Ja mitä parannettavaa tuossa ois?

Ainakin noi stringien ynnäykset ovat aika karseita, ihan kielestä riippumatta. Oma versio:

Koodi:
$Date = Get-Date -Format yyyy.MM.dd_HH.mm.ss
$logFileName = "User folder size $($Date).txt"
$Size = Get-ChildItem $env:userprofile -Recurse | Measure-Object -Property Length -Sum | Select-Object -ExpandProperty Sum

@"
Log Date and Time: $Date
Username: $($env:USERNAME)
Profile Location: $($env:USERPROFILE)
Profile size in: {0:N2} MB
Profile size in: {1:N2} GB
"@ -f ($Size / 1MB), ($Size / 1GB) | Set-Content -Path $logFileName

Start-Process $logFileName
 
Viimeksi muokattu:
Korjailtu ja lisätty vähän tavaraa. Ja kyllä, olen hankkimassa kirjaa tähän hommaan. Ihan mielenkiintoinen homma näin innokkaan harrastelijan silmin:

Koodi:
$Date = Get-Date -Format yyyy.MM.dd_HH.mm.ss
$LogFileName = "PC log $($Date).txt"
$Size = Get-ChildItem $env:userprofile -Recurse | Measure-Object -Property Length -Sum | Select-Object -ExpandProperty Sum
$SizeMB = "{0:N2}" -f ($Size / 1MB)
$SizeGB = "{0:N2}" -f ($Size / 1GB)
$Mem = Get-CimInstance -className Win32_PhysicalMemory | Measure-Object capacity -Sum | % {[Math]::Round(($_.sum / 1GB),2)}
$CPU = (Get-CimInstance -ClassName Win32_Processor | select Name | out-string).Trim()
$GPU = (Get-CimInstance -className Win32_VideoController | select Name | out-string).Trim()
$PC_info = Get-CimInstance -ClassName Win32_ComputerSystem | select -property Name, PrimaryOwnername, Domain, Model, Manufacturer | out-string

@"
Log Date and Time: $Date
Profilename: $env:USERNAME
Profile size in: $SizeMB MB
Profile size in: $SizeGB GB

Processor:
$CPU

Memory size: $Mem GB

Videocard(s):
$GPU

Windows info: $PC_info
"@ | Set-Content -Path $LogFileName

Start-Process $LogFileName
 
Eräässä open source c# palikassa on kirjoitettu integeri byteiksi näin:
Koodi:
            WriteByte((byte)(val & 0xFF));
            WriteByte((byte)((val >> 8) & 0xFF));
            WriteByte((byte)((val >> 16) & 0xFF));
            WriteByte((byte)((val >> 24) & 0xFF));
Eikö nuo and operaatiot ole tuossa tarpeettomia? Tämänhän pitäisi tuottaa sama lopputulos:
Koodi:
            WriteByte((byte)val);
            WriteByte((byte)(val >> 8));
            WriteByte((byte)(val >> 16));
            WriteByte((byte)(val >> 24));
Vai olenko missannut jotain oleellista noihin casteihin liittyen?
 
Eräässä open source c# palikassa on kirjoitettu integeri byteiksi näin:
Koodi:
            WriteByte((byte)(val & 0xFF));
            WriteByte((byte)((val >> 8) & 0xFF));
            WriteByte((byte)((val >> 16) & 0xFF));
            WriteByte((byte)((val >> 24) & 0xFF));
Eikö nuo and operaatiot ole tuossa tarpeettomia? Tämänhän pitäisi tuottaa sama lopputulos:
Koodi:
            WriteByte((byte)val);
            WriteByte((byte)(val >> 8));
            WriteByte((byte)(val >> 16));
            WriteByte((byte)(val >> 24));
Vai olenko missannut jotain oleellista noihin casteihin liittyen?
Tuo jälkimmäinen taitaa pystyä heittämään OverflowExceptionin.
 
Onko kukaan oikeasti törmännyt laadukkaaseen avoimeen lähdekoodiin?
Tai sellaiseen, joka lunastaa ne lupaukset modular, extendable ja developer friendly?

Esim. joku verkkokauppakehys - eikö sellaisen ominaispiirteeksi pitäisi kuulua erityisesti tuotteiden, tilausten ja asiakastietojen hallinta sekä muokattavuus?
Esim. kentän lisääminen tuotteelle ei pitäisi vaatia ensinnäkään dokumentaation ulkopuolista tiedonhakua ts. joltain foorumilta pitää etsiä "issue", jossa joku ratkaisee asian ja käyttää siihen noin 200 riviä koodia.
Mun mielestä tuossa ei ole mitään järkeä.

Rakenteita on toki monenlaisia, mutta eikö tuo nyt pitäisi olla lähinnä tuoteluokan perintä ja uusien "kenttien" lisäys?
Tai jopa ihan GUIhin asti toteutettu ratkaisu, jossa voi vain drag'n'drop uusia kenttiä?
 
Hyvin yksinkertainen ongelma: miten saan testattua javassa, onko taulukko määritelty 0-alkioiseksi?

eli tilanne on siis se, että taulukko voi olla
char [][] taulu = new char {{}};
System.out.println(taulu.length); // 1

Tuohan ei siis ole null ja pituuskin on 1

Mutta ongelman luo se, että myös
char [][] taulu = new char {{'1'}};
System.out.println(taulu.length); // 1
Tuon taulun pituus on 1.

Eli mitä ihmettä? Miten saan poimittua tiedon siitä, koska syötetaulu on vailla alkioita, mutta kuitenkin esitelty?
 

Uusimmat viestit

Statistiikka

Viestiketjuista
261 661
Viestejä
4 536 421
Jäsenet
74 861
Uusin jäsen
Juusoroccat

Hinta.fi

Back
Ylös Bottom