Pieniä kysymyksiä ohjelmoinnista

Zapierilla varmasti onnistuu. Heillä on myös free tier. Facebook + Google Calendar Integrations

Tuonkin eilen löysin ja pitkään kaivelin.

Facebook Pages + Google Calendar Integrations

Tuossa on tarkempi linkki, mutta ei ole Facebook pagesilla triggeriä uudesta eventistä.. Actioniksi olisi kyllä valmis "Tee event kalenteriin", mutta tuo trigger puuttuu.

EDIT:
Zapier support sanoi:
Thanks for getting in touch today. Unfortunately there is no longer a "New Event" trigger as Facebook as deprecated the corresponding API endpoint.

Tulipahan kysyttyäkin Zapierilta...
 
Viimeksi muokattu:
Mitään ideaa miksi Node servu kaatuu n. 30min / 1h jälkeen? Ainoat Sockettiin liittyvät on tässä ja jotain on vialla ilmeisesti.

xM6FxP5.png
 
saako tuon kiinni on('error') eventillä?
Tarkoitatko näin? Onko muuten normaalia, että vaikka koko Unreal ei ole päällä, ja mitään mahdollisuutta ottaa socket yhteyttä niin silti tämä serveri saa otettua yhteyden johonkin?

nainko.png
Annan olla tuon päällä, otan aikaa ja katson milloin kaatuu
 
Onko muuten normaalia, että vaikka koko Unreal ei ole päällä, ja mitään mahdollisuutta ottaa socket yhteyttä niin silti tämä serveri saa otettua yhteyden johonkin?

No tuskin se mitää yhteyttä saa aikaiseksi, jos ei ole minne yhdistää. :confused:

Toinen asia on sitten se että, varmistuuko tuo socketti yhteydestä, eli voihan se kuvitella kuuntelevansa olematonta sockettia.

Annan olla tuon päällä, otan aikaa ja katson milloin kaatuu

nyt kun handläät ton errorin niin ei pitäs kilahtaa tuon node instanssin, se vaan loggaa errorin ja jatkaa kuuntelua.

luultavasti olen väärrässä, mutta tuurilla joskus :nb:
 
No tuskin se mitää yhteyttä saa aikaiseksi, jos ei ole minne yhdistää. :confused:

Toinen asia on sitten se että, varmistuuko tuo socketti yhteydestä, eli voihan se kuvitella kuuntelevansa olematonta sockettia.



nyt kun handläät ton errorin niin ei pitäs kilahtaa tuon node instanssin, se vaan loggaa errorin ja jatkaa kuuntelua.

luultavasti olen väärrässä, mutta tuurilla joskus :nb:
Olisi loistavaa! Ainakin hyvä alku. Pistän raporttia mitä error tuo tullessaan :)
 
Näköjään tulee TimeOut aina 15000ms jälkeen. Hmm, ideoita?

error.png

edit: Serveri ei kaadu enää kun se vaan catchaa virheen, hyvä homma, mutta mikähän juttu tuo TimeOut sitten on.
 
Ainakin PHP:ssä on sellainen viritys, että prosessi kuolee automaattisesti, jos se kestää liian pitkään. Luullakseni syynä on se, että lähtökohtaisesti "liian pitkään" kestävä ajo tarkoittaa sitä, että ohjelman suoritus on juuttunut esim. ikuiseen silmukkaan ja se on parempi tappaa. Nodessa voi hyvinkin olla aina sama juttu, ja luultavasti siinäkin timeoutin pituutta voi jotenkin säätää.
 
Jaahas. Saattoi olla, että mulla oli portissa 3000 jotain outoa. Kun vaihdoin porttia niin lähti nuo haamu-yhteydet pois ja ollut jo tunnin päällä yhteys ilman ongelmia.

edit: Hah, lähes heti kirjoittamisen jälkeen kaatui jälleen. Pahus
 
Siinä näkyy alussa "Deprecated createSecurePair. Viittaako, että yrittää luoda suojattua, mutta pyytää tekemään se toisennimisellä metodilla. Tai jotain... Silloin se voisi jäädä odottamaan vastausta, joka laukeaa timeouttiin.
Nimimerkillä "Asiaa tuntematon".

Näkyy muuttuneen versiossa:

Class: SecurePair#
- Added in: v0.3.2Deprecated since: v0.11.3

Class: tls.TLSSocket#
- Added in: v0.11.4

Eli ympäristösi on muuttunut.
 
Viimeksi muokattu:
Siinä näkyy alussa "Deprecated createSecurePair. Viittaako, että yrittää luoda suojattua, mutta pyytää tekemään se toisennimisellä metodilla. Tai jotain... Silloin se voisi jäädä odottamaan vastausta, joka laukeaa timeouttiin.
Nimimerkillä "Asiaa tuntematon".

Näkyy muuttuneen versiossa:

Class: SecurePair#
- Added in: v0.3.2Deprecated since: v0.11.3

Class: tls.TLSSocket#
- Added in: v0.11.4

Eli ympäristösi on muuttunut.

Noi "Deprecated" funkkarit yleensä kyllä toimii ihan hyvin, harvoin niitä poistetaan kokonaan.

Mutta @Jean_Sipulius vios tarkastaa Depsujensa veriost koska toi tosiaan kuoletettu jo node versiossa 0.11.3 ja node on tänään v11.6 :D
 
Selvisi asia. Koodissa itsessään ei ole ollut mitään vikaa ja tuo Socket, ei liittynyt tämän koodin sockettiin vaan täysin muuhun. Azuren tietokannassa on sisäänrakennettu LoadBalancer, joka tuhoaa idle-yhteydet, jos ne ei ole aktiivisia 4-20 minuutin aikana (saa itse päättää).

Sinne kun lähetti pienen pingin, ennen tuota timeria niin johan yhteys pysyy elossa! Jos joku muu kamppailee saman asian kanssa niin tuossa voi olla syy :)

edit: Hmm, lieköhän uudessa Nodessa joku sisäinen ominaisuus, joka olisi hoitanut Azuren ongelman? Pitää kokeilla jossain välissä. Epäilen kuitenkin, että sama ongelma jatkuisi :)
 
Osaako joku sanoa, että miten saisin tällä https://svgjs.com/ kirjastolla käännettyä SVG:ssä tiettyä osaa?
Sanotaan vaikka, että kyse on G elementistä IDllä spinner.
SVG ladataan suoraan html sekaan backendissä ja toistaiseksi olen käyttänyt ko. kirjaston adopt funktiota, jota kutsun, kun document.ready jälkeen.

Ei meinaa tulla yhtään mitään. En pääse millään kiinni em. spinner elementtiin SVG sisässä, jota voisin sitten helposti käännellä rotate-metodia kutsumalla.
 
Osaako joku sanoa, että miten saisin tällä https://svgjs.com/ kirjastolla käännettyä SVG:ssä tiettyä osaa?
Sanotaan vaikka, että kyse on G elementistä IDllä spinner.
SVG ladataan suoraan html sekaan backendissä ja toistaiseksi olen käyttänyt ko. kirjaston adopt funktiota, jota kutsun, kun document.ready jälkeen.

Ei meinaa tulla yhtään mitään. En pääse millään kiinni em. spinner elementtiin SVG sisässä, jota voisin sitten helposti käännellä rotate-metodia kutsumalla.
En ole ikinä JS:llä joutunut svg:tä manipuloimaan, mutta olisiko tästä jotain apua: Using Javascript with SVG ?
Etenkin kohdasta "Getting an element" alkaen.
 
En ole ikinä JS:llä joutunut svg:tä manipuloimaan, mutta olisiko tästä jotain apua: Using Javascript with SVG ?
Etenkin kohdasta "Getting an element" alkaen.
Juu, siis jQueryllä pääsen nopeasti kiinni ja muokkaamaan, mutta olisin halunnut käyttää tuota kirjastoa, kun siinä on tietyt ongelmat ratkottu valmiiksi.
Vaikuttaa taas vaan ylitsepääsemättömältä, vaikka pitäisi olla ko. tarpeeseen tehty kirjasto.

Ja toisaalta, käytän vähän tuon kirjaston ominaisuuksia, joten sinällään en sitä edes tarvitse.
Olisi ollut vain hyvä, jos olisi saanut kätevästi käyttöön... mutta dokumentaatio on ainakin omasta mielestä todella epäselvä mm. sen suhteen, että mitä kirjastossa on ja mitä varten pitää ladata sille tehtyjä lisäosia jne.
 
Äkkiseltään näyttäisi, että tuossa kirjastossa ei ole tukea valmiin SVG:n muokkaamiselle vaan pelkästään tuon kirjaston avulla luotujen.
 
Äkkiseltään näyttäisi, että tuossa kirjastossa ei ole tukea valmiin SVG:n muokkaamiselle vaan pelkästään tuon kirjaston avulla luotujen.
Tätä hieman pohdiskelin. En kuitenkaan jaksanut uskoa, koska siinä oli niitä eri menetelmiä tuoda SVG:tä.
Mene ja tiedä...
 
Tätä hieman pohdiskelin. En kuitenkaan jaksanut uskoa, koska siinä oli niitä eri menetelmiä tuoda SVG:tä.
Mene ja tiedä...
Testasitko tätä: Referencing ?
eli SVG.adopt
Haet siis noilla aiemmin linkkaamillani ohjeilla SVG:n dommista oikean elementin ja sitten tuuppaat sen tolle adoptille.
 
Osaako joku sanoa, että miten saisin tällä https://svgjs.com/ kirjastolla käännettyä SVG:ssä tiettyä osaa?
Sanotaan vaikka, että kyse on G elementistä IDllä spinner.
SVG ladataan suoraan html sekaan backendissä ja toistaiseksi olen käyttänyt ko. kirjaston adopt funktiota, jota kutsun, kun document.ready jälkeen.

Ei meinaa tulla yhtään mitään. En pääse millään kiinni em. spinner elementtiin SVG sisässä, jota voisin sitten helposti käännellä rotate-metodia kutsumalla.
SVG.get()-funktiolla kenties? Näin ikkään: SVG.Rect - JSFiddle

Tuo yllä mainittu adopt() vaikuttaa siltä, että se on tarkoitettu svg:n ulkopuolisten elementtien kanssa kikkailuun.
 
Mitenkäs nyt React 16 kanssa saan näppärästi class componentissa validit html attribuutit propseista.

Koodi:
import React, { Component } from 'react';

export default class App extends Component {
  render() {
    return (
      <div className="App">
        <MyCustomInput
          name={'email'}
          type={'email'}
          veryCustomProp={() => 'something'}
        />
      </div>
    );
  }
}

class MyCustomInput extends Component {
  constructor(props) {
    super(props);
    this.state = {};
  }
  componentDidMount() {
    this.props.veryCustomProp();
  }
  render() {
    let { veryCustomProp, ...rest } = this.props;
    return <input className="cutomInput" {...rest} />;
  }
}

eli onko tosiaan ainoa vaihtoehto destructoida propsit renderissä jotta voin käyttää {..rest}?

Jos renderi näyttää tältä, niin react 16 antaa varoituksen, koska se yrittää tukkia tota veryCustomProp DOM:iin. (react 15 vain ignorasi ei validit html attribuutit)
Koodi:
  render() {
    return <input className="cutomInput" {...this.props} />;
  }
 
Taas tyhmä kysymys eli mulla on perus laskin switchillä, joka ottaa vastaan vastaan numeron jonka perusteella tehdään case. Ongelmana on, etten haluu kirjotella jokasta tulosta erikseen eli tyyliin kuin toi vikan rivin tulostus, mutta op-muuttuja on tolla koodilla siis numero (1-4) koska se on mitä syötetään. Voiko noille caseille antaa samalla jonku stringin tulostusta vai miltä kantilta tota pitäs kattoo.

Koodi:
                op = Convert.ToInt32(Console.ReadLine());

                switch (op)
                {
                    case 1:
                        result = a + b;
                        switchConfirm = true;
                        break;
                    case 2:
                        result = a - b;
                        switchConfirm = true;
                        break;
                    case 3:
                        result = a * b;
                        switchConfirm = true;
                        break;
                    case 4:
                        result = a / b;
                        switchConfirm = true;
                        break;
                    default:
                        Console.WriteLine($"An unexpected input ({op}), pick again ");
                        break;
                }

Console.WriteLine($"{a.ToString()} {op} {b.ToString()} = {result.ToString}");

Eli jos syöttää 1 niin output: a 1 b = ab, kun tarkotuksena ois tietty tulostaa a + b = ab

Tietysti voisin luoda stringin nimeltä op_string ja joka casessa nimetä sen +-*/ jne, mutta jotenkin sekin tuntuu "väärältä"
 
Viimeksi muokattu:
Taas tyhmä kysymys eli mulla on perus laskin switchillä, joka ottaa vastaan vastaan numeron jonka perusteella tehdään case. Ongelmana on, etten haluu kirjotella jokasta tulosta erikseen eli tyyliin kuin toi vikan rivin tulostus, mutta op-muuttuja on tolla koodilla siis numero (1-4) koska se on mitä syötetään. Voiko noille caseille antaa samalla jonku stringin tulostusta vai miltä kantilta tota pitäs kattoo.

Koodi:
                op = Convert.ToInt32(Console.ReadLine());

                switch (op)
                {
                    case 1:
                        result = a + b;
                        switchConfirm = true;
                        break;
                    case 2:
                        result = a - b;
                        switchConfirm = true;
                        break;
                    case 3:
                        result = a * b;
                        switchConfirm = true;
                        break;
                    case 4:
                        result = a / b;
                        switchConfirm = true;
                        break;
                    default:
                        Console.WriteLine($"An unexpected input ({op}), pick again ");
                        break;
                }

Console.WriteLine($"{a.ToString()} {op} {b.ToString()} = {result.ToString}");

Eli jos syöttää 1 niin output: a 1 b = ab, kun tarkotuksena ois tietty tulostaa a + b = ab

miten olis array ops = ['?','+','-','*','/'] ja tulosta sitte vaan ops[op]

default casee laitat op = 0 tai jotain muuta fiksua.
 
Justiin tänään tutkailin erästä JS sovellusta, joka sisälsi paljon/piiiitkiä switch ehtolauseita.

Eroaako ne mitenkään esim. objektin käytöstä? Nopeus, siisteys, jtn muuta?
Itse olisin varmaan tehnyt objektin, josta vain avaimella noudan halutun arvon...
 
Justiin tänään tutkailin erästä JS sovellusta, joka sisälsi paljon/piiiitkiä switch ehtolauseita.

Eroaako ne mitenkään esim. objektin käytöstä? Nopeus, siisteys, jtn muuta?
Itse olisin varmaan tehnyt objektin, josta vain avaimella noudan halutun arvon...
Ellei puhuta hyvin isoista ehtomääristä, voisi ainakin kuvitella nopeuden olevan molemmissa samaa luokkaa. Toki jos on suorituskykykriittinen osa, lienee turha lähteä spekuloimaan vaan kannattaa suosiolla mitata suorituskyky ja tehdä valinta sen perusteella. Tosin lähtökohtaisesti voisi kuvitella, ettei missään tiukassa silmukassa kannattaisi ainakaan luoda toistuvasti "switch-oliota" varsinkaan, jos ehtomäärä on iso. Joka tapauksessa ellet tiedät tarvitsevasi kaikkea mahdollista suorituskykyä, silläkään ei liene väliä - eli ei kannata optimoida ennenaikaisesti. Siisteys riippuu vähän siitä, mitä tarkalleen ottaen tekee ja miten. Itse näkisin, että molemmissa on puolensa siisteyden kannalta. Kirjoittamallahan tuon näkee helpoiten.
 
Miten pythonin moduleita kuuluisi importtaa? Tein Visual Studiolla testiksi projektin missä juuressa on "PythonTraining.py" tiedosto ja alihakemiston pyfund minne loin tiedoston words.py

Avasin interactive windowin ja ajoin siellä:

Koodi:
>>> from pyfund.words import *
>>> words
<module 'pyfund.words' from '.\\pyfund\\words.py'>
>>> words.print_items([1,2,3,"lalala"])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'pyfund.words' has no attribute 'print_items'

Vastaavanlaisesti laitoin tuohon juuressa olevaan tiedostoon koodin:

Koodi:
from pyfund.words import print_items

def main():
    print_items([1,2,3,"lalala"])
    

if __name__ == '__main__':
    main()

Ja sitten interactive windowissa:
Koodi:
>>> from PythonTraining import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ".\PythonTraining.py", line 1, in <module>
    from pyfund.words import print_items
ImportError: cannot import name 'print_items'
 
Miten pythonin moduleita kuuluisi importtaa? Tein Visual Studiolla testiksi projektin missä juuressa on "PythonTraining.py" tiedosto ja alihakemiston pyfund minne loin tiedoston words.py

Avasin interactive windowin ja ajoin siellä:

Koodi:
>>> from pyfund.words import *
>>> words
<module 'pyfund.words' from '.\\pyfund\\words.py'>
>>> words.print_items([1,2,3,"lalala"])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'pyfund.words' has no attribute 'print_items'

Vastaavanlaisesti laitoin tuohon juuressa olevaan tiedostoon koodin:

Koodi:
from pyfund.words import print_items

def main():
    print_items([1,2,3,"lalala"])
  

if __name__ == '__main__':
    main()

Ja sitten interactive windowissa:
Koodi:
>>> from PythonTraining import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ".\PythonTraining.py", line 1, in <module>
    from pyfund.words import print_items
ImportError: cannot import name 'print_items'
Tulee ekana mieleen se, että sulta puuttuu __init__.py tiedosto sieltä kansiosta jossa se moduuli on, lukase lisää täältä 6. Modules — Python 3.7.2 documentation
 
Millä perustalla nykyään kannattaa toteuttaa web-sovelluksen back end?
 
Tuohan se näemmä oli. Onko Pythonissa tarkoitus, että moduuleita kutsutaan "moduuli.main()" vai pitäisikö pelkkä "moduuli" toimia?

Jos laitat
Koodi:
import moduuli
niin sieltä kutsutaan moduuli.main()

mutta jos importtaat eksplisiittisesti mainin, eli

Koodi:
from moduuli import main

niin sitten voit kutsua moduulista sitä mainia pelkästään main() , jos ymmärsin oikein mitä kysyt :)

Tosin, jollei moduulin ole tarkoitus pyöriä yksinään, niin se ei sitä mainia tarvitse. Tai en ole koskaan kutsunut toisen moduulin mainia toisesta, ainoastaan luokkia(oliota) tai funktioita.
 
Jos laitat
Koodi:
import moduuli
niin sieltä kutsutaan moduuli.main()

mutta jos importtaat eksplisiittisesti mainin, eli

Koodi:
from moduuli import main

niin sitten voit kutsua moduulista sitä mainia pelkästään main() , jos ymmärsin oikein mitä kysyt :)

Tosin, jollei moduulin ole tarkoitus pyöriä yksinään, niin se ei sitä mainia tarvitse. Tai en ole koskaan kutsunut toisen moduulin mainia toisesta, ainoastaan luokkia(oliota) tai funktioita.

Tänks. Ilmeisesti tarkoitus on aina käyttää tuota:

Koodi:
import module

Tyyliä?
 
Koodi:
from pillow import PIL
from threading import Thread
Tänks. Ilmeisesti tarkoitus on aina käyttää tuota:

Koodi:
import module

Tyyliä?
Ei ole aina tarkoitus käyttää tuota.

Esimerkiksi moduuleja, joissa on monta eri luokkaa sisällä ja halutaan käyttää vaan jotain tiettyä luokkaa, niin voidaan myös importata vain kyseinen luokka.

Koodi:
from PIL import Image
from threading import Thread

Myös Flaskin kanssa näkee käytettävän usein spesifejä importteja tyyliin:
Koodi:
from flask import Blueprint, render_template, redirect, url_for, request, flash

Tämä ei ole suositeltavaa:
Koodi:
from moduuli import *
 
  • Tykkää
Reactions: ted
Tänks. Ilmeisesti tarkoitus on aina käyttää tuota:

Koodi:
import module

Tyyliä?

Riippuu vähän keneltä kysyy, mutta kai suositus on, että eksplisiittisesti importataan. Tosin, itse käytän import moduuli -tapaa, niin tietää mistä moduulista kutsuu funktiota. Tai ainakin itselläni helpottaa debuggaamista. Toki jos on monta eri moduulia, missä samannimiä funktioita, esim. read(), niin sitten voi tehdä näin (muistaakseni):

Koodi:
from moduuli_1 import read as read_1
from moduuli_2 import read as read_2

#koodia

read_1()
read_2()
 
Millä perustalla nykyään kannattaa toteuttaa web-sovelluksen back end?
Ei tästä nyt ota tolkkua. Mihin kieleen sitä kannattaisi ryhtyä?
Jos kärkenä on verkkopalvelut, niin mihin suuntaan se on menossa?
Oletuksena, että pitäisi olla käyttäjätilit, käyttäjäryhmät, ryhmäsisällöt ja verkkokauppa sekä näiden välinen viestinvaihto?

Python taipuu toki moneen, mutta ehkä se on sen takia enemmän varsinaisiin sovelluksiin kuin "vain" verkkopalveluihin sopiva.
Vastaavasti taas JS olisi verkkopalveluiden näkökulmasta jotenkin luonteva valinta.
Mutta JS-vaihtoehtojakin on niin pirusti ml. kaikki toteutustekniikat.

Mutta aina tuntuu olevan aivan hemmetin takkusta näiden kanssa.
Nimim. juuri koitin asentaa yhden node sovelluksen, niin eihän se edes onnistunut Windowsissa "file name too long" :facepalm:
Jos se nyt C:n juureen asentaa, niin ehkä onnistuu...Juu, en ole asentamassa.
 
Pienoinen ongelma saada Leaflet ja GeoServer puhumaan samaa kieltä.

Eli GeoServer tarjoaa WMS-palveluna MML:n 1:320 000 -taustakartan Leafletille. Leafletiin on lisätty kuvan oikeassa yläkulmassa näkyvä nasta, jonka pitäisi olla Helsingin kohdilla. Jostain syystä se ei ole.

Jos karttaa klikkaa Helsingin kohdalta, niin saadaan koordinaatti, joka sijaitsee oikeasti Alankomaiden ja Belgian rajalla, ei siis Helsingissä. Spoilerissa on kommenttiblokissa toinen WMS-tarjoaja, jonka karttapohjalla nasta näkyy oikeassa paikassa.

GeoServerin pohjakarttatasoon ei ole tehty muita muutoksia kuin toisessa kuvat näkyvät.

Koodi:
<!DOCTYPE html>
<html>
    <head>
        <title>Kartta</title>
        <!-- Styles -->
        <link rel="stylesheet" href="styles/styles.css" />

        <!-- Leaflet -->
        <link rel="stylesheet" href="js/leaflet/leaflet.css" />
        <script src="js/leaflet/leaflet.js"></script>

        <!-- Meta -->
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    </head>
    <body>
    <div id="mapContainer">
        <script>

         var myMap = L.map('mapContainer', {
          center: [51.170229, 1.491668],
          zoom: 10,
          crs: L.CRS.EPSG3857
          });

          var wmsLayer = L.tileLayer.wms('http://192.168.1.186:8080/geoserver/ows?', {
           layers: 'taustakartta:taustakartta'
           }).addTo(myMap);


          var marker = L.marker([60.170573, 24.941650]).bindTooltip("Tooltip", {permanent: true}).addTo(myMap);

          /*
          var wmsLayer = L.tileLayer.wms('https://demo.boundlessgeo.com/geoserver/ows?', {
           layers: 'ne:ne'
           }).addTo(myMap);
          */

          var popup = L.popup();
            
          function onMapClick(e) {
           popup
           .setLatLng(e.latlng)
           .setContent("You clicked the map at " + e.latlng.toString())
           .openOn(myMap);
           }
            
          myMap.on('click', onMapClick); 

        </script>
    </div>
    </body>
</html>

kartta.PNG geoserver.PNG
 
Mutta aina tuntuu olevan aivan hemmetin takkusta näiden kanssa.
Nimim. juuri koitin asentaa yhden node sovelluksen, niin eihän se edes onnistunut Windowsissa "file name too long" :facepalm:
Jos se nyt C:n juureen asentaa, niin ehkä onnistuu...Juu, en ole asentamassa.

Tämän takia näitä pyöritetäänkin nykään containereissa... Mitä tulee bäkkärikieliin niin jos valitsee Node, Python tai Go niin ei ihan hirveän metsään mene.
 
Pienoinen ongelma saada Leaflet ja GeoServer puhumaan samaa kieltä.

Eli GeoServer tarjoaa WMS-palveluna MML:n 1:320 000 -taustakartan Leafletille. Leafletiin on lisätty kuvan oikeassa yläkulmassa näkyvä nasta, jonka pitäisi olla Helsingin kohdilla. Jostain syystä se ei ole.

Jos karttaa klikkaa Helsingin kohdalta, niin saadaan koordinaatti, joka sijaitsee oikeasti Alankomaiden ja Belgian rajalla, ei siis Helsingissä. Spoilerissa on kommenttiblokissa toinen WMS-tarjoaja, jonka karttapohjalla nasta näkyy oikeassa paikassa.

GeoServerin pohjakarttatasoon ei ole tehty muita muutoksia kuin toisessa kuvat näkyvät.

Mistään mitään tietämättä, voiko tämä https://i.gyazo.com/a34a1f1800d782c8e9db2d145f5de4e6.png olla syyllinen
 
Sinällään ohjelmointia liippaava kysymys tahi kommentti, kun esim. Google Drivessa ei voi erottaa linkkisolusta pelkkää URLia.
Kuitenkin, kun viet kursorin päälle, niin kummasti osaa tooltipsissä esittää URLin.

Sama vaivaa Exceliä ja pitää viritellä skriptit, että onnistuu - ehkä.
Eikä ainakaan Drivessa onnistunut Googlesta löytyneiden ohjeiden avulla ja funktion jälkeen solu on tyhjä.

Tuntuisi, että tällainen olisi aika built-in, mutta ei ilmeisesti...
 
Sinällään ohjelmointia liippaava kysymys tahi kommentti, kun esim. Google Drivessa ei voi erottaa linkkisolusta pelkkää URLia.
Kuitenkin, kun viet kursorin päälle, niin kummasti osaa tooltipsissä esittää URLin.

Sama vaivaa Exceliä ja pitää viritellä skriptit, että onnistuu - ehkä.
Eikä ainakaan Drivessa onnistunut Googlesta löytyneiden ohjeiden avulla ja funktion jälkeen solu on tyhjä.

Tuntuisi, että tällainen olisi aika built-in, mutta ei ilmeisesti...

En kyllä yhtää ymmärrä mitä tarkoitat tässä? Avaas vähän.

ps.
Tuolla on muuten ihan exeli lankakin.
 
Jos ei omista Exceliä ja haluaisi käyttää Googlen tuotteita monestakin perustellusta syystä, niin ei onnistu.
Ei onnistu, vaikka Google Sheets itsessään tunnistaa linkitetun solun ja sen osoitteen, niin solun tekstiä ja linkkiä ei saa erotettua toisistaan.

Kuukkeloimalla löydetty skriptikään ei näytä toimivan enää ja palauttaa tyhjän vastauksen.
Joku muukin voisi toki testata: Extract URLs or Link Text from a Google Sheets Cell - BetterCloud Monitor
 
Nyt en kyllä minäkään ymmärrä mistä tässä puhutaan.

Siis haluat hakea linkin jostain google sheets -dokumentin solusta, jossa on muutakin tietoa URL:n lisäksi? Voitko laittaa screenshotin?
 
Kuukkeloimalla löydetty skriptikään ei näytä toimivan enää ja palauttaa tyhjän vastauksen.
Joku muukin voisi toki testata: Extract URLs or Link Text from a Google Sheets Cell - BetterCloud Monitor
Kyllä tämä linkin skripti toimii ainakin uuteen tyhjään Google Sheetiin. Tiedä sitten mikä se sinun tiedostosi on, joku importattu Excel?

Kun valitset sen linkin sisältävän solun, niin mitä formula-kentässä näkyy? Pitäisi olla tyyllin:
Koodi:
=HYPERLINK("https://www.google.com/","Testi linkki")
 
Nyt en kyllä minäkään ymmärrä mistä tässä puhutaan.

Siis haluat hakea linkin jostain google sheets -dokumentin solusta, jossa on muutakin tietoa URL:n lisäksi? Voitko laittaa screenshotin?
No se on aika tavanomaista, että linkkiteksti eroaa urlista, ja tässä on kyse niiden erottamisesta omiksi soluiksi.

Kyllä tämä linkin skripti toimii ainakin uuteen tyhjään Google Sheetiin. Tiedä sitten mikä se sinun tiedostosi on, joku importattu Excel?

Kun valitset sen linkin sisältävän solun, niin mitä formula-kentässä näkyy? Pitäisi olla tyyllin:
Koodi:
=HYPERLINK("https://www.google.com/","Testi linkki")
Jep, Excelistä kopioitu, jolloin ei näytä olevan sitä kaavaa. (HTML-sivuhan se google taulukko on, jolloin siinä voi olla erityyppisiä linkkiratkaisuja)
Sain kuitenkin luotua Exceliin funktion, joka riisui URLit omaan sarakkeeseen.
 
Pienoinen ongelma saada Leaflet ja GeoServer puhumaan samaa kieltä.

Eli GeoServer tarjoaa WMS-palveluna MML:n 1:320 000 -taustakartan Leafletille. Leafletiin on lisätty kuvan oikeassa yläkulmassa näkyvä nasta, jonka pitäisi olla Helsingin kohdilla. Jostain syystä se ei ole.

Jos karttaa klikkaa Helsingin kohdalta, niin saadaan koordinaatti, joka sijaitsee oikeasti Alankomaiden ja Belgian rajalla, ei siis Helsingissä. Spoilerissa on kommenttiblokissa toinen WMS-tarjoaja, jonka karttapohjalla nasta näkyy oikeassa paikassa.

GeoServerin pohjakarttatasoon ei ole tehty muita muutoksia kuin toisessa kuvat näkyvät.

Koodi:
<!DOCTYPE html>
<html>
    <head>
        <title>Kartta</title>
        <!-- Styles -->
        <link rel="stylesheet" href="styles/styles.css" />

        <!-- Leaflet -->
        <link rel="stylesheet" href="js/leaflet/leaflet.css" />
        <script src="js/leaflet/leaflet.js"></script>

        <!-- Meta -->
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    </head>
    <body>
    <div id="mapContainer">
        <script>

         var myMap = L.map('mapContainer', {
          center: [51.170229, 1.491668],
          zoom: 10,
          crs: L.CRS.EPSG3857
          });

          var wmsLayer = L.tileLayer.wms('http://192.168.1.186:8080/geoserver/ows?', {
           layers: 'taustakartta:taustakartta'
           }).addTo(myMap);


          var marker = L.marker([60.170573, 24.941650]).bindTooltip("Tooltip", {permanent: true}).addTo(myMap);

          /*
          var wmsLayer = L.tileLayer.wms('https://demo.boundlessgeo.com/geoserver/ows?', {
           layers: 'ne:ne'
           }).addTo(myMap);
          */

          var popup = L.popup();
           
          function onMapClick(e) {
           popup
           .setLatLng(e.latlng)
           .setContent("You clicked the map at " + e.latlng.toString())
           .openOn(myMap);
           }
           
          myMap.on('click', onMapClick);

        </script>
    </div>
    </body>
</html>

kartta.PNG geoserver.PNG
Jonkinlainen ratkaisu:
1) Yksirivinen .prj-päätteinen tiedosto GeoServerin karttatiedostojen sekaan samaan kansioon:
Koodi:
PROJCS["ETRS89 / TM35FIN(E,N)",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","3067"]]
2) GeoSerververissä luodaan ImageMosaic-tyyppinen store kartta-aineistosta (WorldImage toimii myös, mutta raskas renderöitymään)
3) saatavaan karttatasoon 'Declared SRS: EPSG:4326' ('SRS handlingia' en testaillut, 'Bounding boxes' jätetty oletuksiin)
4) index.html:stä 'crs: L.CRS.EPSG3857' pois
 
Jos ei omista Exceliä ja haluaisi käyttää Googlen tuotteita monestakin perustellusta syystä, niin ei onnistu.
Ei onnistu, vaikka Google Sheets itsessään tunnistaa linkitetun solun ja sen osoitteen, niin solun tekstiä ja linkkiä ei saa erotettua toisistaan.

Kuukkeloimalla löydetty skriptikään ei näytä toimivan enää ja palauttaa tyhjän vastauksen.
Joku muukin voisi toki testata: Extract URLs or Link Text from a Google Sheets Cell - BetterCloud Monitor
upload_2019-2-1_22-25-38.png


Koodi:
/**
 * Returns the URL of a hyperlinked cell, if it's entered with hyperlink command.
 * Supports ranges
 * @param {A1}  reference Cell reference
 * @customfunction
 */
function linkURL(reference) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var formula = SpreadsheetApp.getActiveRange().getFormula();
  var args = formula.match(/=\w+\((.*)\)/i);
  try {
    var range = sheet.getRange(args[1]);
  }
  catch(e) {
    throw new Error(args[1] + ' is not a valid range');
  }
  var formulas = range.getFormulas();
  var output = [];
  for (var i = 0; i < formulas.length; i++) {
    var row = [];
    for (var j = 0; j < formulas[0].length; j++) {
      var url = formulas[i][j].match(/=hyperlink\("([^"]+)"/i);
      row.push(url ? url[1] : '');
    }
    output.push(row);
  }
  return output
}

edit: oli joku satavuotta vanha välilehti auki, asia on näköjään jo keskusteltu täällä
 
Kukaan tutustunut tähän kirjastoon, jolla voi ainakin osoitteen yli ladata JSON-statia badosa/JSON-stat ?
En löytänyt mitään viitteitä POST metodista, joten ajattelin, että voiko POSTin hoitaa muulla tapaa ja syöttää vain sen vastauksen tuolle kirjastolle?
En vain löytänyt mitään siihenkään liittyen...

EDIT: itse itselleni vastaten eli voi syöttää dataa yksinkertaisesti JSONstat(object);
 
Yritän pientä create-react-app ohjelmaa testailla Jestillä ja Enzymellä, joka on aivan uusi tuttavuus mutta ei kelpaa. Antaa errorin: Cannot find module 'enzyme' from 'tester.test.js'

Koodi:
import React from 'react';
import { shallow } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';

Vai pitääkö luoda jotain setuppifiluja, kun dokumentaatiossa puhutaan sellasista. Installation · Enzyme
 
Yritän pientä create-react-app ohjelmaa testailla Jestillä ja Enzymellä, joka on aivan uusi tuttavuus mutta ei kelpaa. Antaa errorin: Cannot find module 'enzyme' from 'tester.test.js'

Koodi:
import React from 'react';
import { shallow } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';

Vai pitääkö luoda jotain setuppifiluja, kun dokumentaatiossa puhutaan sellasista. Installation · Enzyme

Kai sulla on depsuna tuotu enzyme package.jsoniin?

Ja kyllä se taitaa vaatia ton setupin myös. Jestin konffifiluun sitten kerrot sen olemassaolosta.
 
Viimeksi muokattu:
Kai sulla on depsuna tuotu enzyme package.jsoniin?

Ja kyllä se taitaa vaatia ton setupin myös. Jestin konffifiluun sitten kerrot sen olemassaolosta.

Missäs tää Jestin konffifilu sitten löytyy, vai pitääkö se ite luoda? Oon siis aivan pihalla reactista, testaamisesta sitte puhumattakaan. Yritän noita dokumentaatioita seurata, mutta mikään ei tunnu toimivan.
 

Uusimmat viestit

Statistiikka

Viestiketjuista
261 846
Viestejä
4 548 980
Jäsenet
74 855
Uusin jäsen
Nåksuu

Hinta.fi

Back
Ylös Bottom