SIDEBAR
»
S
I
D
E
B
A
R
«
Havfrue: A Googol-sized Mermaid Facing the Book
Oct 5th, 2018 by miki

Europe, Denmark and my local neighbourhood of Western Jutland is going to get its connectivity boosted by the Havfrue transatlantic cable system being built by a consortium consisting of Google, Facebook, Aqua Comms and Bulk Infrastructure. To quote the announcement done by Google;

To increase capacity and resiliency in our North Atlantic systems, we’re working with Facebook, Aqua Comms and Bulk Infrastructure to build a direct submarine cable system connecting the U.S. to Denmark and Ireland. This cable, called Havfrue (Danish for “mermaid”), will be built by TE SubCom and is expected to come online by the end of 2019.
Google blog post, 2018-01-16

Digging into the details first reveals the projected trench as illustrated in below by some of the stakeholders;

Havfrue cable, cloud.google.com

Projected trench of the Havfrue cable as illustrated by cloud.google.com.

Havfrue cable, te.com

Projected trench of the Havfrue cable as illustrated by TE SubCom.

Projected layout of the Havfru cable.

Projected trench of the Havfrue cable as illustrated by submarinecablemap.com.

 

 

More digging into the Danish parts reveals that most sources mention Blåbjerg (Blaabjerg) as the Danish landing point for Havfrue (just as TAT-14), although ComputerWorld DK (see Press Coverage below) relays the information that it will land at Endrup (where COBRAcable is terminated). However, a FCC application dated 2018-05-25 SCL-00214S (pdf) refers to it as the “Havfrue system” and specifically states that a new cable landing station will be constructed in Blaabjerg (as well as in Leckanvy, Ireland and Kristiansand, Norway);

The Havfrue system will consist of three segments. (1) The Main Trunk will connect the existing cable landing station at Wall, New Jersey with a new cable landing station to be constructed at Blaabjerg, Denmark. (2) The Ireland Branch will connect a new cable landing station to be constructed at Old Head Beach, Leckanvy, Ireland with a branching unit on the Main Trunk. (3) The Norway Branch will connect a new cable landing station at Kristiansand, Norway with a branching unit on the Main Trunk.
The application also reveals the following distribution of ownership and control of the main trunk (US<->DK);
  1. 33.333%
    • AEC2
    • Facebook (via Edge USA/Edge Network Services Limited)
  2. 16.667%
    • Google (via GU Holdings/Google Infrastructure Bermuda Ltd/affiliate)
    • Optibulk
Ownership of the Blaabjerg landing station will be jointly between the above via the corporations America Europe Connect 2 Denmark ApS (for AEC2) and Edge Denmark (for Facebook) but it will be operated by AEC2.
As a spin off of Aqua Comms’ involvment in the Havfrue system they are also connecting Esbjerg to the UK via a new cabled dubbed North Sea Connect.

Google is currently also projecting its own private subsea cables, some of the rationale behind their mixed private/consortium/lease approach are disclosed in blog post from 2018-07-17 announcing the Dunant cable, which is the first Google private transatlantic subsea cable projected to connect Virginia Beach and France.

Contractor/Supplier/Stakeholder Information

At Cable Map Sites

Danish Press Coverage

Other

 

[Danish] S&S: gemme data i Arduino ROM/Flash (PROGMEM / F())
Dec 21st, 2016 by miki

Mit svar på et spørgsmål i Facebook-gruppen Danske Arduino Entusiaster omkring Arduino ROM/Flash, PROGMEM og system-inklude-filer.

Spørgsmål

Hej er der en der ved hvor jeg kan hente dett lib. <avr/pgmspace.h> jeg skal bruge denne funktion PROGMEM
så jeg kan gemme et billede i Arduino uden SD kort
det kan være der er en der kender en anden måde at gøre det på.

Svar

pgmspace.h er en inklude-fil som er en del af c-biblioteket til AVR-arkitekturen (avr-libc). C-bibliotekets inklude-filer vil normalt ligge i kompilerens “system include”-sti (se GCC options -I og -isystem). Dermed kan den inkluderes blot med “#include <avr/pgmspace.h>”. Se evt. også Arduino-referencen på https://www.arduino.cc/en/Reference/PROGMEM.
 
Bemærk at PROGMEM ikke er en funktion, men en storage modifier (lager-modifikator) som fortæller kompileren at den kan placere en en given variabel i ikke-skrivbar lager (ROM/Flash). Der skal efterfølgende anvendes specielle funktioner til at læse data fra en sådan variabel (se referencen).
Arduino-frameworket har dog lavet en nem måde at placere konstant-strenge i Flash på (normalt lagres de i SRAM!), nemlig funktionen F() som kan anvendes direkte i f.eks. printf/write/print (Serial.print(F(“Waiting for connection”));)
 
Hvis du vil inspicere indholdet af pgmspace.h, kan du finde filen i Arduino IDE’ets installations-mappe under hardware/tools/avr/avr/include/avr/pgmspace.h. Det er ikke en man kan/skal redigere manuelt i, da den er tæt koblet med den binære kode i selve biblioteket.
 
Der findes også EEPROM-lager du sikkert vil kunne bruge til samme formål; https://www.arduino.cc/en/Reference/EEPROM

Se svaret på Facebook.

Den videre færd med F()

Da jeg ikke kunne finde en uddybende forklaring på F()-funktionen (som egentlig er en makro) i Arduino-dokumentationen (brugen nævnes meget kort i PROGMEM , Memory og Print), gravede jeg efterfølgende lidt rundt for at lære mere. I de sparsomme Arduino-eksempler er den anvendt udelukkende med konstante strenge, hvilket også viser sig at være et krav (eller i hvert fald noget der kan castes til const char *).

Makroen er defineret af Arduino-frameworket i filen hardware/arduino/avr/cores/arduino/WString.h (referencerne er ifht. min lokale installation af Arduino 1.6.9, pt. er nyeste 1.6.13) således:

#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))

Altså parametren til F() bruges som parameter til PSTR() (progmem string, er mit bud på navn) som er en makro defineret i pgmspace.h fra avr-libc.

Dens funktion er at caste parametrens type til konstant streng-pointer med PROGMEM modifier;

#define PSTR(s) ((const PROGMEM char *)(s))

Skal vi se på hvad PROGMEM rent faktisk er, så finder vi endnu et sæt makroer der ender med at blive udviddet til kompiler-attributten  __progmem__, igen definieret i pgmspace.h (hardware/tools/avr/avr/include/avr/pgmspace.h):

#define PROGMEM __ATTR_PROGMEM__

#define __ATTR_PROGMEM__ __attribute__((__progmem__))

__progmem__ attributten er en instruks til kompileren (GCC) og linkeren om ved programmering/flashing af programmet at placere disse data i en sektion af hukommelsen der hedder “.progmem“. Se evt. mere om dette i GCC-kompilerens dokumentation. For hver AVR-chip kompileren understøtter er der eksakte definitioner af hvilke hukommelsesadresser .progmem ligger på for netop denne chip.

Dvs. når man i sin kode skriver F(“test”) får man i virkeligheden:

(reinterpret_cast<const __FlashStringHelper *>(((const __attribute__((__progmem__)) char *)(“test”)))

Altså en konstant streng der lagres i AVR-processorens progmem-sektion, og som returværdi får en pointer til en konstant instans af en klasse kaldet “__FlashStringHelper“. Denne klasse må være lavet sådan at den anvender de korrekte mekanismer til at læse fra progmem-området (måske mere om dette i en senere artikel). Arduinos funktion-bibliotek (Serial.print() mm.) er lavet således at de direkte kan tage en parameter af denne type som erstatning for en konstant-streng (og det er netop her Arduino-frameworket viser sin værdi ved at abstrahere sådanne kompleksiteter væk fra programmøren).

(Danish language) S&S: Brug GUI-programmer på tværs af brugere og maskiner (kommander X-vinduer med DISPLAY)
Jan 12th, 2016 by miki

Fra en tråd i gruppen “Linux for begyndere” (https://m.facebook.com/groups/332217263612804?view=permalink&id=549911778510017)

Spørgsmål

Hvordan bliver man root bruger i linux mint ?? i grafisk brugerflade ??

Svar

For fremtidig reference:
Hvis man ønsker at køre en X-klient (et vilkårligt grafisk/GUI program) som root-brugeren, men vise dets vinduer på en X-server (typisk dit desktop environment/DE, som f.eks Gnome/KDE/Unity/lxde/xfce m.f.) der eksekveres af en ikke-privilegeret bruger kan man gøre som følger:

1) som X-server-brugeren kør kommandoen ‘xhost +’ i en grafisk konsol/terminal. Dette tillader at alle brugere og maskiner må vise vinduer på X-serveren (ja, X er en netværksprotokol). Tilladelsen bevares indtil X-serveren genstartes, eller den trækkes tilbage med ‘xhost -‘.

2) som root (su/sudo) eksekver det ønskede GUI-program, med specifikation af hvilken X-server og hvilket display dets vinduer ønskes vist på i DISPLAY environment-variablen (ja, det er muligt at køre flere separate X-servere/displays på samme maskine).
Simpleste form med visning på display 0 på den lokale maskine vil være (med xterm-konsollen som eksempel) ‘DISPLAY=:0 xterm’. Vil man vise vinduet på en anden maskines X-server skal IP-adressen blot angives før ‘:’, som f.eks.: ‘DISPLAY=192.168.1.10:0 xterm’ (det er stadig en xterm der afvikles på den lokale maskine, vinduet vises blot på en ekstern X-server (ja, det kan være farligt, pas på).

Bemærk at man med sudo skal passe på at sætte env-vars i den rigtige shell. F.eks. vil sudo direkte foran ovenstående ikke virke da sudo afskærmer env af sikkerhedsgrunde. I stedet vil man kunne benytte følgende trick: sudo bash -c ‘DISPLAY=:0 xterm’ (enkelt citationstegn til -c er vigtigt).

[Danish language] S&S: brug hele SD-kortet (udvidelse af Linux/ext-filsystem)
Sep 10th, 2015 by miki

Nedenfor et spørgsmål jeg kastede mig ud i at svare på i “Linux for Begyndere“-gruppen på Facebook, se den originale tråd på facebook.com/groups/332217263612804/permalink/510936462407549/.
For fremtiden vil jeg forsøge at samle et sammenkog af den hjælp og vejledning jeg yder på dansk i diverse roller i Spørgsmål & Svar-kategorien her på bloggen. Forhåbentlig vil andre kunne bruge det til noget, og i det mindste vil jeg selv kunne bruge det som reference ;).

Spørgsmål

Har installeret Debian 8 på min UDOO.  Kan nogen fortælle mig, hvorledes jeg udvider filsystem, til hele SD-kortet?

Svar

Uden at jeg kender UDOO nærmere, så er der uanset distribution og arkitektur to trin i processen at udvide en ext{2,3,4}- partition.

Uagtet hvad forskellige guides siger, kan dette i dag gøres live/online/realtime, dvs. uden at skulle umount-e filsystemet:
  1. Udvid pågældende partition i partitionstabellen for block-devicet hvor den ligger, dette kræver selvsagt at der er fysisk plads på disken lige efter den eksisterende. Med “fdisk /dev/<blockdevice>” på kommandolinjen indbærer det konkret at ‘d’-elete partitionen, og derefter lave en ‘n’-ew. Det vigtige er at start-sektoren på den nye partition er identisk med den gamle. Ændringer kan kontrolleres på ethvert tidspunkt ved at ‘p’-rinte partitionslayout. Laver man fejl kan man altid ‘q’-uitte og starte fdisk igen, det nye layout bliver først skrevet til disken når man er tilfreds og ‘w’-riter til disken. Kør herefter ‘partprobe’ (eller genstart), for at opdatere kernens partitionstabel-datastrukturer, ellers vil kun det gamle layout være synligt for applikationer.
  2. Udvid filsystemet på pågældende partition med “resize2fs /dev/<partition>”. Angiver du ikke nogen filsystemstørrelse vil filsystemet udvides til at udfylde hele partitionens størrelse som angivet i partitionslayoutet, hvilket som oftest er det man ønsker.
Typiske værdier for <blockdevice> er “sdb”, “hdb” eller “mmcblk0” afhængig af hvilket interface disken er tilsluttet (sata, pata, usb).
Typiske værdier for <partition> er tilsvarende “sdb2”, “hdb2” eller “mmcblk0p2”.
Backup af vigtig data og ekstrem omhyggelighed ved valg af enheder er “en god ting”(TM) når man roder på dette niveau.
»  Substance:WordPress   »  Style:Ahren Ahimsa
© 2016 Mikini Services