# Väderprogram (Javascript)

Susanna Huhtanen
ihmis.suski@gmail.com 2012
Marta Maria Casetti
mmcasetti@gmail.com 2013
Hur du planerar ett program som använder asynkrona anrop. Asynkrona anrop kommer presenteras genom ett väderprogram.
Sebastian Rasmussen
sebras@gmail.com 2019
Anders Jonsson
anders.jonsson@norsjovallen.se 2021

# Väderprogram

        I denna guide kommer vi konstruera ett väderprogram som använder asynkrona anrop. Väderinformation i detta exempel hämtas från geonames.org och programmet använder ICAO-koder  för att skicka din väderbegäran. För att skriva alla kodexemplen själv behöver du en redigerare att skriva kod i, Terminal samt GNOME 3 eller högre installerat på din dator. I denna guide kommer vi gå igenom följande delar:

          Planera det grafiska användargränssnittet
          Asynkrona anrop
          Huvudprogramfilen
          Det lokala biblioteket GeoNames
          Autotools och ikoner

Efter att ha läst denna handledning bör du se detta på din skärm:

# Planera det grafiska användargränssnittet

Att strukturera ett program för GNOME 3 betyder att du kommer använda GTK+. Den viktigaste saken att komma ihåg är att huvudfönstret endast kommer acceptera en komponent. Du måste planera din struktur enligt detta (detta exempel använder Gtk.Grid). En användbar metod är att rita ut huvudfönstret och placera varje komponent som behövs i den rutan. Genom att titta på en bild på ditt framtida program är det lättare att säga vad relationerna mellan komponenter är. Exempelvis så placerar Gtk.Grid dina komponenter i relation till andra komponenter, så efter att den första komponenten är på plats kan placering av komponenter göras i förhållande till någon annan komponent i rutnätet.

# Asynkrona anrop

With many programming languages, all operations are run synchronously - you tell the program to do something, and it will wait until that action completes before proceeding. This is however bad for graphical user interfaces, as then the whole application will be frozen while the program waits for the operation. Going asynchronous (async) helps here. With async calls, your UI won't be blocked with any requests. Async calls make your application more flexible and better equipped to handle situations when calls take more time than expected or for some reason get jammed. Async calls can be used for example file system I/O and for slower calculations in the background.

In this example we have to get data from geonames.org. While we do that we want the rest of our program to continue. If we wouldn't get any information from geonames.org for the lack of internet connection and this would be a synchronous application we would never get to the point where our main_quit() is processed correctly and the application would have to killed from Terminal.

# Programmets olika delar