-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfaq.qmd
More file actions
504 lines (358 loc) · 25.9 KB
/
faq.qmd
File metadata and controls
504 lines (358 loc) · 25.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
---
title: "Spørsmål og svar"
css: faq.css
image: ./images/faq-logo.png
lightbox: true
callout-appearance: minimal
---
## Data
::: {.callout-tip collapse="true"}
### Hvordan kan jeg se innholdet i mitt team sine bøtter?
For å se innholdet i ditt teams sine bøtter kan du enten gjøre dette [med kode fra Jupyter](./statistikkere/jobbe-med-data.qmd#filbehandling), eller via [Google Cloud Console (GCC)](https://console.cloud.google.com/). Les mer om hvordan man kan [benytte GCC i SSB](./gcc.html).
Husk at det er kun [data-admins](./statistikkere/hva-er-dapla-team.html#data-admins) som skal kunne se innhold i kildeprosjektet til teamet. For å gjøre det må de aktivere en tilgang i [JIT-applikasjonen](/statistikkere/appendix/jit.qmd).
:::
::: {.callout-tip collapse="true"}
### Hvordan kan jeg gjenopprette filer fra bøtter?
Fremgangsmåten for gjenoppretting av filer er [beskrevet i Backup-kapitlet](./statistikkere/backup-data.qmd).
:::
::: {.callout-tip collapse="true"}
### Hvorfor får jeg ikke opprettet mapper fra Google Cloud Console (GCC)?
[I mars 2024 ble det gjort sikkerhetstiltak på Dapla](https://engage.cloud.microsoft/main/org/ssb.no/threads/eyJfdHlwZSI6IlRocmVhZCIsImlkIjoiMjcxODgyNTU2MTQ5NzYwMCJ9?trk_copy_link=V2) som innebar at funksjonaliteten **Download**, **Upload** og **Create folder** i GCC ble skrudd av. Hvis man prøver å opprette en mappe på den måten vil man få en feilemelding som starter med
`Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:`
Hvis man skal opprette mapper i en bøtte så må man gjøre det med [dapla-toolbelt](./statistikkere/jobbe-med-data.qmd#opprette-mapper), eller gjøre det fra en tjeneste som [Jupyter](./statistikkere/jupyter.qmd) i [Dapla Lab](./statistikkere/dapla-lab.qmd). Sistnevnte metode betyr at man åpner tjenesten som det teamet og tilgangsgruppen som har tilgang til ønsket bøtte, og deretter kan man opprette mapper med `mkdir` i terminalen.
:::
## Datatjenester
::: {.callout-tip collapse="true"}
### Jeg får meldingen **Account already exists** når jeg prøver å logge meg inn på Dapla. Hvordan løser jeg det?
:::: {.columns}
::: {.column width="47.5%"}
Det hender at man får melding om at *Account already exists* når man logger seg inn på en Dapla-tjeneste. For å løse dette gjør man følgende:
1. Velg *Add to existing account* som vist i @fig-add-existing-account.
2. Velg *Google* slik som vist i @fig-authenticate.
I @fig-authenticate skal du IKKE fylle inn *Username or email* og *Password*. Du skal kun trykke på *Google*-knappen.
Meldingen om at *Account already exists* forekommer svært sjelden, og typisk skjer det første gang man logger seg inn på en tjeneste.
:::
::: {.column width="5%"}
<!-- empty column to create gap -->
:::
::: {.column width="47.5%"}
{#fig-add-existing-account}
{#fig-authenticate}
:::
::::
:::
::: {.callout-tip collapse="true"}
### Hvordan finner jeg et Google-prosjekt sin prosjekt-ID?
Prosjekt-ID-en til et Google-prosjekt er en unik identifikator som brukes til å identifisere prosjektet i Google Cloud Platform. Prosjekt-ID-en er en streng som består av små bokstaver, tall og bindestrek. Prosjekt-ID-en er ikke det samme som prosjektnavnet, som kan inneholde store bokstaver og mellomrom.
Du finner prosjekt-ID ved logge deg inn på [GCC](./statistikkere/gcc.html#innlogging), [åpne prosjektvelgeren](./statistikkere/gcc.html#prosjektvelger), søk opp ditt prosjekt, og så ser du det i høyre kolonne, slik som vist i denne sladdete kolonnen i @fig-prosjektvelger.
{fig-alt="Bilde som viser prosjektvelgeren i Google Cloud Console" #fig-prosjektvelger}
:::
::: {.callout-tip collapse="true"}
### Hva gjør jeg når jeg får en feilmelding ved utrulling av en ny Delomaten-jobb?
Hvis man får feilmeldinger ved utrulling av Delomat-jobber, så bør man først undersøke hva feilmeldingen sier. Den gir ofte nyttige tilbakemelding om det er gjort noen formelle feil. Hvis dette ikke fører frem, så kan man ta kontakt med Kundeservice for hjelp.
Konfigurasjonsfilen valideres automatisk når du oppretter en pull request i GitHub.
Hvis noe er feil får du en feilmelding:

Eksempel på feilmelding i workflow

:::
::: {.callout-tip collapse="true"}
### Hvorfor får jeg feilmelding når jeg prøver å slette en delt-bøtte? Jeg får melding om at **Error trying to delete bucket <bøttenavn> objects without 'force destroy' set to true** når jeg prøver å slette en delt-bøtte ved å fjerne den fra *shared-buckets.yaml*
En delt-bøtte kan kun slettes hvis den er helt tom for data. Det betyr at:
- Alle filer og mapper må være slettet.
- Siden filer versjoneres i delt-bøtter må også alle gamle versjoner av filer også være slettet (såkalt *non-current* objekter).
Hvis man har prøvd å slette en delt-bøtte ved fjerne bøtten fra [shared-buckets.yaml](./statistikkere/deling-av-data.qmd#opprettelse-av-bøtte), kjøre `atlantis apply` og deretter fått feilmeldingen `Error trying to delete bucket <bøttenavn> objects without 'force destroy' set to true`, så betyr det at det fortsatt ligger data i bøtta. Da kan du gjøre følgende for å få slettet bøtta:
1. Legg til delt-bøtta i buckets-shared.yaml igjen og kjør `atlantis apply` etter å ha fått godkjenning.
2. Kjør følgende Python-script i en tjeneste på Dapla Lab som er startet med teamets **developers**-gruppe og `google-cloud-storage` er installert:
```{.python filename="Notebook"}
import google.cloud.storage as storage
client = storage.Client()
for blob in client.list_blobs("FULLT NAVN PÅ DELT-BØTTE", versions=True):
blob.delete()
```
3. Fjern delt-bøtta fra buckets-shared.yaml igjen og kjør `atlantis apply` etter godkjenning.
Fungerer ikke det så kan man ta kontakt med Kundeservice og få hjelp.
:::
::: {.callout-tip collapse="true"}
### Hvordan sjekker jeg om Kildomaten er tilgjengelig for mitt team?
:::: {.columns}
::: {.column width="47.5%"}
Du kan sjekke om teamet ditt har tilgang til Kildomaten ved å gå inn i teamets IaC-repo. Du finner IaC-repoet ved å søke etter team-navnet på statisticsnorway på Github. Repoet er det som heter `<teamnavn>-iac`. Inne i repoet går du inn filen `infra/projects.yaml`.
I eksemplet til høyre ser vi hvordan filen ser ut for det fiktive teamet **dapla-example**. For dette teamet ser vi at Kildomaten er skrudd på i prod-miljøet til teamet, men ikke test-miljøet.
:::
::: {.column width="5%"}
<!-- empty column to create gap -->
:::
::: {.column width="47.5%"}
```{.yaml filename="dapla-example-iac/infra/projects.yaml"}
team_uniform_name: dapla-example
projects:
- project_name: dapla-example
env: test
features:
- dapla-buckets
- project_name: dapla-example
env: prod
features:
- dapla-buckets
- transfer-service
- kildomaten
```
:::
::::
:::
::: {.callout-tip collapse="true"}
### Atlantis feiler når jeg skrur på en *feature*. Hva gjør jeg?
Når man skrur på en *[feature](./features.html)* på Dapla, så er det verktøyet **Atlantis** som ruller ut infrastrukturen på GCP.
I mange tilfeller kan det hjelpe å skrive `atlantis plan` i kommentarfeltet til PR'en, slik at Atlantis får kjørt planen en gang til.
Hvis den da ikke viser noen feil, så kan du skrive `atlantis apply` i kommentarfeltet og endringene vil bli effektuert.
Får du fortsatt feilmeldinger etter å ha kjørt `atlantis plan` på nytt, så bør du kontakte Kundeservice for hjelp.
:::
::: {.callout-tip collapse="true"}
### Hvordan kan jeg pause en regelmessig jobb i Transfer Service?
Man kan pause en regelmessig jobb med Transfer Service fra [Google Cloud Console](https://console.cloud.google.com/) i nettleseren.
1. Åpne [Consolet](https://console.cloud.google.com/)
2. Velge riktig Google prosjekt, slik som vist @fig-project
{#fig-project}
3. Søk opp **Transfer Jobs** i søkefeltet øverst på siden.
4. Velg hvilken Transfer Service jobb som skal endres.
5. Velg **Disable job** som vist i @fig-disable
{#fig-disable}
For å aktivere jobben kan man følge stegene over, men da velge **Enable job** i siste steg.
:::
## Dapla Lab
::: {.callout-tip collapse="true"}
### Hvor finner jeg dokumentasjonen til Dapla Lab tjenester der?
Her finner du [Dokumentasjonen for Dapla Lab](./statistikkere/dapla-lab.qmd).
[Dokumentasjon for tjenestene](./statistikkere/jupyter.qmd) finner du i Dapla-manualen under Datatjenester/Dapla Lab tjenester.
:::
::: {.callout-tip collapse="true"}
### Hvorfor får jeg feilmelding i Dapla Lab etter å ha vært borte fra datamaskinen min en stund?
I de fleste tilfeller vil dette løses seg ved at laster inn siden på nytt eller *refresher* siden.
Grunnen til at det skjer er at Dapla Lab bare er tilgjengelig for de som er logget på SSBs nettverk. Hvis du forlater maskinen med Dapla Lab åpnet i nettleseren over lang tid, så kan det være at du har falt ut av SSBs nettverk og Dapla Lab ikke oppdager at du er logget inn igjen.
:::
::: {.callout-tip collapse="true"}
### Hva betyr det at tjenesten min er *suspendert*?
{style="max-width: 50%; float: right;" fig-alt="Tjenesteikon for Jupyter"}
At en tjeneste er suspendert betyr at tjenesten er satt på pause. I praksis vil det si at ressursene, f.eks. CPU og RAM, som tjenesten har reservert har blitt frigjort. Man kan starte tjenesten på nytt ved å trykke på *Play*-knappen i bildet til høyre, og man starter opp tjenesten på nytt med de samme ressursene. Alt som ble lagret i tjenestens lokale filsystem under `/home/onyxia/work/`blir også gjennopprettet, mens resten blir borte. Derfor bør alltid kode lagres under `work`-mappen.
:::
::: {.callout-tip collapse="true"}
### Hvorfor fungerer det ikke med å melde seg ut av automatiske pausingen av tjenester på Dapla Lab?
Hvis man opplever at en tjeneste fortsatt pauses selv om man har endret visningsnavnet til tjenesten til å inkludere ` [nosuspend]`, så kan det skyldes at man faktisk ikke har lagret det nye navnet. For å lagre det nye navnet så må man trykke **Enter** etter at man skrevet inn ` [nosuspend]`. Gjør man ikke dette kan det tilsynelatende virke som om du har endret navnet selv om det ikke lagret. Du kan verifisere at navnet er riktig ved *refreshe* siden og se at navnet nå er riktig.
:::
::: {.callout-tip collapse="true"}
### Kan jeg jobbe med kildedata fra Dapla Lab?
Ja. Medlemmer av gruppen **data-admins** kan gi seg selv midlertidig tilgang til kildedata. Dette gjøres ved å bruke Just-in-Time Access (JIT) applikasjonen: [https://jitaccess.dapla.ssb.no](https://jitaccess.dapla.ssb.no). Les [manual-artikkelen om JIT](./statistikkere/appendix/jit.qmd) for en veiledning.
:::
::: {.callout-tip collapse="true"}
### Hvorfor kan jeg ikke jobbe med dataene til alle team jeg er med i fra tjenestene i Dapla Lab?
Mange ansatte i SSB er med i flere Dapla-team, og hvert av brukernes teammedlemskap gir ofte tilgang til data iht til formaålet for teamet. hver av teamene har tilgang til sine data og potensielt andres delt data. For å unngå for brede tilganger til data så innfører vi at en bruker må bestemme seg for hvilket team og tilgangsgruppe de skal representere før de starter arbeid med data i et programmeringsmiljø. Dette gjør at vi kan være sikker på at ingen kan koble data på tvers av team.
:::
::: {.callout-tip collapse="true"}
### Hvordan søker jeg om åpning for utgående trafikk i Dapla Lab (åpning av APIer for å hente data)?
Hvis du trenger å hente data fra eksterne kilder til bruk i statistikkproduksjonen (f.eks. APIer), må du søke om tilgang til dette hos Team M2M. Dette gjøres ved å melde sak til Kundeservice. Se veiledning nedenfor.
Fra Byrånettet velg **Arbeidsverktøy** og **Meld sak til kundeservice**. Logg deg inn ved å velge **Logg inn med federert autentisering**. Inne løsningen velger du deretter **Dapla helpdesk**. @fig-dapla-helpdesk viser menyen som vises.
{fig-alt="Visning av Dapla Helpdesk" #fig-dapla-helpdesk}
Fra menyen velger du **Søknad for utgående trafikk i DaplaLab**, fyller ut skjemaet som vises og trykker på «Send».
Team M2M vil så godkjenne eller avslå søknaden. Hvis søknaden godkjennes sendes saken videre til Kundeservice for effektuering. Hvis avslag så får du en begrunnelse for dette fra Team M2M.
:::
::: {.callout-tip collapse="true"}
### Hvilke miljøvariabler er tilgjengelig i utviklingstjenestene?
Dette er miljøvariablene som alltid vil være tilgjengelig i Jupyterlab, Rstudio og VSCode:
| Miljøvariabel | Forklaring |
|---------------------------------|-----------------------------------------------------------------------|
| DAPLA_ENVIRONMENT | Hvilket dapla-lab miljø du kjører i f.eks PROD, TEST eller DEV |
| DAPLA_REGION | Hvilket dapla miljø du kjører i f.eks. DAPLA_LAB eller BIP |
| DAPLA_USER | Epostaddressen til den innloggede brukeren f.eks. obr@ssb.no |
| DAPLA_SERVICE | Dapla tjenesten som er i bruk f.eks. JUPYTERLAB eller VS_CODE |
| STAT_TEMPLATE_DEFAULT_REFERENCE | Hvilken versjon av ssb-project templatet som skal brukes f.eks. 1.1.8 |
| PSEUDO_SERVICE_URL | URL til pseudotjenesten for bruk til testing |
| STATBANK_BASE_URL | URL til statistikkbanken |
| STATBANK_ENCRYPT_URL | URL til 'statbank-authenticator' sitt krypteringsendepunkt |
| STATBANK_TEST_BASE_URL | URL til statistikkbanken (i test) |
| STATBANK_TEST_ENCRYPT_URL | URL til 'statbank-authenticator (i test)' sitt krypteringsendepunkt |
:::
::: {.callout-tip collapse="true"}
### Hvordan løser jeg feilmeldinger knyttet til at **data rate exceeded** i Jupyter?
Når du mottar følgende melding i Jupyter:
> **Feilmelding:**
> ```
> IOPub data rate exceeded.
> The Jupyter server will temporarily stop sending output
> to the client in order to avoid crashing it.
> To change this limit, set the config variable
> `--ServerApp.iopub_data_rate_limit`.
>
> Current values:
> ServerApp.iopub_data_rate_limit=1000000.0 (bytes/sec)
> ServerApp.rate_limit_window=3.0 (secs)
> ```
betyr det at mengden data som sendes fra jupyter-kernelen til jupyterlab-frontend overskrider den tillatte grensen. Selv om det er mulig å justere `ServerApp.iopub_data_rate_limit` og `ServerApp.rate_limit_window` for å endre denne grensen, ønsker vi ikke dette. Å endre disse verdiene kan ha en negativ påvirkning på Jupyterlab sin ytelse.
#### Her er noen løsningsforslag:
1. Reduser datamengden: Prøv å redusere datamengden du prøver å vise. Hvis du for eksempel viser en stor pandas dataframe, kan du vise kun toppradene med `df.head()` eller et tilfeldig utvalg med `df.sample(10)`.
2. Legg til forsinkelse: Bruk `time.sleep()`-funksjonen i Python for å legge til en pause mellom hver utskrift. Dette kan spre utdataene over en lengre tidsperiode, noe som kan hjelpe med å unngå å overskride datagrensen.
3. Skriv til en fil: I stedet for å skrive utdata direkte i Jupyter, kan du vurdere å skrive dataene til en fil. Dette omgår IOPub-datahastighetsgrensen, og du kan se gjennom dataene i ettertid.
4. Unngå utskrift: Hvis du kun trenger å utføre beregninger eller operasjoner på dataene, vurder å gjøre det uten å skrive ut resultatene i Jupyter.
:::
::: {.callout-tip collapse="true"}
### Hvordan jobber jeg med notebooks i VS Code?
For å jobbe med notebooks i VS Code kan du gjøre følgende:
1. Åpne en ny [Vscode-python](./statistikkere/vscode-python.qmd)
2. Åpne en terminal under **File/Terminal/New terminal**
3. Opprett et [ssb-project](./statistikkere/ssb-project.qmd) som vanlig under mappen `/home/onyxia/work/` ved å skrive `ssb-project create <prosjektnavn>`.
- Dersom du allerede har et ssb-project, skriver du `cd <prosjektnavn>` etterfulgt av `ssb-project build`. Da blir prosjektets tilhørende pakker installert i en kernel med samme navn som prosjektet.
4. Gå inn i mappen med `cd <prosjektnavn>`
5. Installer ønskede pakker `poetry add pandas`, f.eks. Pandas.
6. Velg prosjektmappen i filutforskeren ved å gå til **File/Open folder/** og åpne prosjektmappen i boksen som vises.
7. Opprett en notebook-fil og åpne den.
8. Trykk **Refresh** på hele nettsiden for å få opp visningen av den nyopprettede kernels.
8. Øverst til høyre i Notebooken kan du trykke på **Select kernel** og utforskeren velger du **Jupyter kernels** og deretter den som har samme navn som prosjektet ditt.
9. Til slutt kan du teste at riktig Python-installasjon er valgt ved å importere pakken du akkurat installerte.
Du må kjøre en `ssb-project build`, som beskrevet over, hver gang en instans av Jupyter, eller VSCode blir startet. Hvis du isteden åpner en pauset (suspendert) instans, vil du kunne fortsette arbeidet fra forrige kjøring uten å måtte kjøre `ssb-project build`.
:::
::: {.callout-tip collapse="true"}
### Hvordan kjører man en Dash-app?
#### Fra vscode-python tjenesten
Det fungerer best å kjøre Dash-apper i en egen fane i nettleseren. Inline-visning av figurer fungerer ikke enda.
Her er et eksempel på hvordan man lager en Dash-app i DaplaLab i en vscode tjeneste:
1. Installer `pandas` og `dash` i et [ssb-project](./statistikkere/ssb-project.qmd).
2. Opprett et python-script i prosjektet som f.eks. heter `app.py`.
3. Kjør scriptet ved å kjøre følgende kommando fra terminalen: `poetry run python ./app.py`
4. Deretter kommer det opp et dialog-vinduet hvor du velger `Open in browser`.
Her er et eksempel på script som fungerer i Vscode-python:
```{.python filename="app.py"}
from dash import Dash, html, dcc, callback, Output, Input
import plotly.express as px
import pandas as pd
# Creating a sample dataset similar to the Gapminder dataset
data = {
'country': ['Afghanistan', 'Afghanistan', 'Afghanistan', 'Brazil', 'Brazil', 'Brazil', 'China', 'China', 'China'],
'continent': ['Asia', 'Asia', 'Asia', 'South America', 'South America', 'South America', 'Asia', 'Asia', 'Asia'],
'year': [1952, 1977, 2007, 1952, 1977, 2007, 1952, 1977, 2007],
'lifeExp': [28.801, 39.877, 43.828, 50.917, 59.504, 72.390, 44.000, 63.739, 72.961],
'pop': [8425333, 12412311, 31889923, 56602560, 80461570, 190010647, 556263527, 862030000, 1318683096],
'gdpPercap': [779.4453145, 786.11336, 974.5803384, 2108.944355, 5718.766744, 9065.800825, 400.448611, 1488.041713, 4959.114854]
}
# Creating DataFrame
df = pd.DataFrame(data)
# Creating the app
app = Dash(
__name__,
requests_pathname_prefix='/proxy/8050/',
serve_locally=True
)
app.layout = [
html.H1(children='Title of Dash App', style={'textAlign':'center'}),
dcc.Dropdown(df.country.unique(), 'Canada', id='dropdown-selection'),
dcc.Graph(id='graph-content')
]
@callback(
Output('graph-content', 'figure'),
Input('dropdown-selection', 'value')
)
def update_graph(value):
dff = df[df.country==value]
return px.line(dff, x='year', y='pop')
if __name__ == '__main__':
app.run(debug=True)
```
#### Fra jupyter tjenesten
Det fungerer best å kjøre Dash-apper i en egen fane i nettleseren, men inline-visning skal også være mulig i notebook.
Her er et eksempel på hvordan man lager en Dash-app i DaplaLab i en jupyter tjeneste:
1. Installer `pandas` og `dash` i et [ssb-project](./statistikkere/ssb-project.qmd).
2. Opprett en notebook i prosjektet som f.eks. heter `app.ipynb`.
Her er et eksempel på kode som fungerer i jupyter:
```{.python filename="app.ipynb"}
# %%
# Notebook cell 1
from dash import Dash, html, dcc, callback, Output, Input
import plotly.express as px
import pandas as pd
# %%
# Notebook cell 2
# Creating a sample dataset similar to the Gapminder dataset
data = {
'country': ['Afghanistan', 'Afghanistan', 'Afghanistan', 'Brazil', 'Brazil', 'Brazil', 'China', 'China', 'China'],
'continent': ['Asia', 'Asia', 'Asia', 'South America', 'South America', 'South America', 'Asia', 'Asia', 'Asia'],
'year': [1952, 1977, 2007, 1952, 1977, 2007, 1952, 1977, 2007],
'lifeExp': [28.801, 39.877, 43.828, 50.917, 59.504, 72.390, 44.000, 63.739, 72.961],
'pop': [8425333, 12412311, 31889923, 56602560, 80461570, 190010647, 556263527, 862030000, 1318683096],
'gdpPercap': [779.4453145, 786.11336, 974.5803384, 2108.944355, 5718.766744, 9065.800825, 400.448611, 1488.041713, 4959.114854]
}
# Creating DataFrame
df = pd.DataFrame(data)
# Creating the app
port = 8050 # must be between 1024 and 9999
service_prefix = os.getenv('JUPYTERHUB_SERVICE_PREFIX', '/')
domain = os.getenv('JUPYTERHUB_HTTP_REFERER', None)
app = Dash(
__name__,
requests_pathname_prefix=f"{service_prefix}proxy/{port}/",
serve_locally=True
)
app.layout = [
html.H1(children='Title of Dash App', style={'textAlign':'center'}),
dcc.Dropdown(df.country.unique(), 'Canada', id='dropdown-selection'),
dcc.Graph(id='graph-content')
]
@callback(
Output('graph-content', 'figure'),
Input('dropdown-selection', 'value')
)
def update_graph(value):
dff = df[df.country==value]
return px.line(dff, x='year', y='pop')
if __name__ == '__main__':
# For jupyter_mode, choose between 'external' or 'inline'.
# 'jupyterlab' should also be poosible, but doesn't seem to work...
app.run(jupyter_mode="external", jupyter_server_url=domain, port=port)
```
:::
::: {.callout-tip collapse="true"}
### Hvorfor har blitt mine lagrede tjenestekonfigurasjoner blitt borte?
Lagrede tjenestekonfigurasjoner er kun lagret lokalt i brukerens nettleser. Hvis du akkurat har slettet nettleserens nettlesingsdata (historikk, logg, etc.) vil også lagrede tjenestekonfigurasjoner slettes. Det samme er tilfellet hvis man tar i bruk en ny nettleser.
:::
## Git og GitHub
::: {.callout-tip collapse="true"}
### Hvordan får jeg slettet et GitHub-repo under statisticsnorway?
Hovedregelen er at vi arkiverer repoer istedenfor å slette. Det skyldes at vi kan trenge å ettergå historikken i repoer ved et senere tidspunkt. Arkivering av repoer kan du gjøre selv under **Settings** i repoet.
I de tilfellene der du mener at det gir mest mening å slette repoet, så må dette gjøres av en Github-administrator. Da [sender du en henvendelse til Kundeservice](https://ssb.pureservice.com/) og ber om at repoet slettes. Husk å oppgi navnet på repoet du ønsker å få slettet.
:::
::: {.callout-tip collapse="true"}
### Hvorfor viser `git status` endringer når jeg ikke har endret filene?
Dette kan noen ganger forekomme med notebooks eller `ipynb`-filer fordi de inneholder metadata som kan bli endret over tid. Siden `ipynb`-filer er et `json`-basert format, som inkluderer metadata som oppdaterer seg i bakgrunnen, så kan en endring i strukturen til metadataene føre til endringer i den underliggende `json`-fila selv om man ikke har gjort endringer i `ipynb`-fila. Endringene blir deretter plukket opp av `git` som følger med på endringer i filene.
En mulig løsning er å sjekke inn endringene i kodebasen.
I noen tilfeller viser `git status` at det har skjedd endringer i filer, men `git diff` viser ingen endring. I disse tilfellene kan det være ulike problemer i bakgrunnen. [Se denne oversikten](https://statistics-norway.atlassian.net/wiki/spaces/A700/pages/3211952133/Git+status+viser+endrede+filer+men+git+diff+viser+ingen+endring) over problemer og tilhørende løsninger.
:::
::: {.callout-tip collapse="true"}
### Hvordan setter jeg opp 2FA med Authenticator-appen mot GitHub etter at jeg har byttet telefon?
Første gang man begynner å jobbe med kode i SSBs GitHub-organisasjon [statisticsnorway](https://github.com/statisticsnorway), så følger man [denne oppskriften fra Dapla-manualen](./statistikkere/git-og-github.qmd#to-faktor-autentisering). Men hvis man bytter telefon eller lignende, så må man sette opp dette på nytt.
Prosessen for å bytte 2FA-metode for autentisering er [beskrevet i GitHub sin dokumentasjon](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/changing-your-two-factor-authentication-method#changing-an-existing-two-factor-authentication-method). Gjør følgende:
1. Logg deg inn med din bruker på <https://github.com/>.
2. Klikk på din profil, øverst til høyre på siden, og velg **Settings**
3. I menyen til venstre velger du **Password and authentication**
4. Skroll ned til **Two-factor-authentication**
5. Under **Two-factor-methods** vil du se **Authenticator app (Configured)** hvis du har brukt dette tidligere.
6. Trykk **Edit**
7. Skann QR-koden som dukker opp med Authenticator-appen på din nye mobil.
8. Følg instruksjonene og lagre autentiseringsmetoden når du er ferdig.
:::
::: {.callout-tip collapse="true"}
### Hvordan kan jeg gi flere brukere tilgang til et GitHub-repository?
Når du oppretter et GitHub-repository, blir din bruker automatisk satt som **admin** på repositoryet. For at flere personer skal få tilgang, må du selv legge dem til i GitHub.
#### Legge til et helt team (anbefalt)
Hvis du jobber i et team, anbefales det å gi tilgang via et **GitHub-team**. Da slipper du å administrere enkeltbrukere én og én.
1. Gå til repositoryet på GitHub
2. Velg **Settings**
3. Gå til **Collaborators and teams**
4. Under **Teams**, søk opp og legg til ønsket team
5. Velg riktig tilgangsnivå (for eksempel `Read`, `Write` eller `Admin`)
Alle medlemmene i teamet vil da få tilgang til repositoryet.
#### Legge til enkeltbrukere
Hvis du kun skal gi tilgang til én personer:
1. Gå til repositoryet på GitHub
2. Velg **Settings**
3. Gå til **Collaborators and teams**
4. Under **Collaborators**, legg til GitHub-brukernavnet til personen
5. Velg ønsket tilgangsnivå
:::