Jemig. Bezig om wat zaken te installeren en testen en ik kom op een video van SpaceInvader One waarin aangegeven wordt hoe eenvoudig het is om te zien wat er op je publieke IP adres gedownload wordt. Daarbij kun je andere soortgelijke IP adressen proberen om te zien wat zij downloaden en zien:
Deze buurtbewoners kunnen blijkbaar niet genoeg krijgen van wat porno. Op zich niet erg natuurlijk, ieder zo zijn eigen ding … maar ben je ervan bewust dat als dit al zichtbaar is voor iedereen op het internet, dat de ISP dit dus ook ziet en zonder problemen deze data kan doorgeven aan de autoriteiten!
Om ervoor te zorgen dat alles een beetje veilig blijft op het internet probeer ik nu wat zaken uit. DuckDNS is iets dat icm VPNs wordt gebruikt. DuckDNS is een gratis Dynamic DNS maar met de extra optie dat het publieke IP adres meewijzigt, indien de provider het aanpast. Dus geen broken koppeling meer na een herstart van je router!
DuckDNS is ook te installeren als APP en vraagt om wat gegevens. Zelf ingelogd via GitHub bij DuckDNS en dan kun je zelf een domein aanmaken:
alle verwijzingen naar mijn omgeving heb ik maar even verwijderd voor de veiligheid. Dan weer terug in UNRAID waar je de gegevens van je subdomein moet invullen.
Zoals te zien moest ik ook nog de netwerk instelling aanpassen. Als alles compleet is zoek naar Wireguard app en installeer deze.
nadat ik mijn Unraid server eindelijk aan de loop kreeg, kon ik na een tijdje wachten (pre-clear en parity check) eindelijk aan de gang met het inrichten van mijn eigen server. Hoe anders is het dan de Synology NAS die ik probeer te vervangen, maar daarbij komt ook direct de uitdaging dat je alles echt zelf moet uitzoeken. Dat hoeft bij zo’n kant en klare NAS dus helemaal niet.
Graag wil ik mijn documenten foto’s van mijn Iphone synchroniseren, aangezien het ding altijd barstensvol staat en om de zoveel dagen zeurt dat mijn opslag weer vol begint te raken. Het rare is dat dan ook de telefoon wat kuren krijgt, zoals chrashende apps!
Dus op zoek naar iets dat ik al kende: OwnCloud. Dat wilde ik eens implementeren, omdat ik vanuit mijn werk de vraag kreeg of we ook een eigen gehoste dropbox achtige oplossing konden implementeren. Dat had ik thuis eens uitgeprobeerd, maar kreeg het niet helemaal lekker aan de praat. Gelukkig stond er een Docker variant erbij, dus geinstaleerd en informatie opgezocht. Blijkt dat OwnCloud nu met een verdienmodel bezig is, waarbij steeds meer functionaliteit beschikbaar is als je er licenties bij koopt. De spin-off hiervan was dus Nextcloud en uiteraard ga je daar dan naar kijken. Ook deze was aanwezig in de repository, dus die snel geinstalleerd.
Netwerk wijziging doorgevoerd, zodat het op een eigen IP adres te bereiken was, maar na inloggen kreeg ik de melding dat de SQLite DB niet bedoeld was om echt te gebruiken. Dan moest je een MySQL of een MariaDB installeren. Ook dat weer opgezocht. MySQL is natuurlijk niet meer helemaal vrij, aangezien het van Oracle is geworden. De spin-off daarvan is MariaDB, dus ook die opgezocht.
Echter kreeg ik deze ook niet aan de praat onder de standaard netwerk instellingen. Weet niet of ik wat verkeerd heb gedaan, maar deze heeft nu ook zijn eigen IP adres. Het poortje dat gebruikt werd in de tooltip (5432), klopte niet met wat er gebruikt werd (3306). Nadat ik dat gewijzigd had en ook alle default waardes van de MariaDB had aangepast, kon ik dit invoeren bij de NextCloud login pagina. Daarna installeert deze dus zaken in de MariaDB en start deze op. Heb alle standaard zaken laten installeren en dat was veel meer dan ik had gedacht. Dus ik heb er een collaboratie werkplek bij gekregen:
Gezien het feit dat ik niets van Nextcloud afweet, zal ik misschien nog wat updates kunnen toevoegen van de zaken die ik ontdekt heb.
Foto backup
nadat ik overal doorheen had gescrolled, heb ik een nieuw account gemaakt:
*update 15-07-2022 na 8,5 maand!*
Op dit moment heb ik grote problemen ondervonden.
Eerst heb ik nextcloud helemaal geconfigureerd en via reverse proxy met certificaten etc via internet ontsloten. Toen ik zag dat er veel verkeer binnen probeerde te komen, dacht ik dat het misschien maar het beste was om alles alleen maar intern te gebruiken.
Nu heb ik al aardig wat data opgeslagen in Nextcloud (ik geloof iets van 68 GB!)
Maar ik kwam al zoekende naar een blog waarin staat dat ik Nextcloud zo secure mogelijk via internet kan laten ontsluiten kwam ik meerdere informatieve sites tegen waarbij ik verbeteringen heb doorgevoerd.
Zo heb ik mijn eigen website URL (dit is dus een onderdeel van studiostuiterbal.com) beveiligd met certificaten. Wist niet precies hoe at moest, maar met Hostinger krijg je dat via een eenvoudig menu te zien wat er mogelijk is. bye bye lelijke foutmelding in de browser dat het wel of niet betrouwbaar kon zijn. Deze informatie is per definitie niet betrouwbaar, omdat ik dit in de late avonduurtjes allemaal vastleg. Met of zonder een borrel 😉
Nu kwam ik ook tegen dat er een eenvoudige administratief overzicht te verkrijgen is en dat je dan te zien krijgt wat er allemaal wel of niet mankeert aan je Nextcloud installatie. De blog liet een schattig lijstje zien van 3 punten ..
Ik kreeg natuurlijk weer meer, met een vette oranje warning. Denk dat het nog erger kan met de rode fouten, maar dat weet ik niet zeker. Dacht dat ik met een commandootje uitvoeren iig eenvoudig de lijst met missende indexen kon verhelpen, omdat het commando er gewoon bij staat.
Dus ik via de console entry van Unraid server: fout –> geen occ bekend …
Daarna via de console van de Nextcloud docker container –> fout verkeerde gebruiker …
Weer terug naar de console entry van de Unraid server: maar nu met docker exec –> weer fout verkeerde gebruiker … hmmz …
ok, nu wat gevonden met de naam van de gebruiker:
en warempel –> mijn lijstje ziet er net zo schattig uit als in de blog.
Daarna komt die fout met SVG. De standaard update die werd voorgesteld werkte niet:
apt-get install libmagickcore-6.q16-6-extra
Dat moest natuurlijk met “docker exec” ervoor zijn. Weer een foutmelding. Package kon niet gevonden worden.
Dus bedacht ik mij dat er bij een apt-get update hoort. Dat uitgevoerd en daarna weer het eerste commando. Ging goed, behalve dat er een Abort werd gedaan voordat ik op Y/n kon klikken.
Daarvoor moest je weer bij het install commando -y toevoegen. Dan wordt de Y automagisch doorgevoerd. Op het moment van typen, zie ik dus dat er van alles gedownload wordt, er van alles geinstalleerd en geconfigureerd wordt en zo zijn we een behoorlijke tijd bezig, hoop zo erg dat mijn installatie hier niet van in de soep draait 🙁 … ik heb begrepen dat wanneer ik nu een stop en start uitvoer al deze instellingen weer verdwenen zijn ..
Mijn ogen vallen op dit moment dicht van vermoeidheid, dus ik laat het scherm lekker open en zie morgenochtend wel wat het resultaat is geweest.
Dus ik was al een hele lange tijd erg gelukkig met de gekregen Synology. Mijn zwager is nogal van de nieuwe gadgets en had deze oude in huis liggen en ik mocht hem gebruiken. Dus altijd een fijne ervaring mee gehad, behalve dan het feit dat ik er niets meer mee kon updaten.
Zoektocht
Dan begint de zoektocht. Je wilt tegenwoordig al snel meer dan wat je met de oude hardware kon, dus als je een server plaatst dan wil je wel wat extra naast het file sharen/backuppen. Dus dan denk je al snel aan Apps installeren en gebruiken, eventueel wat virtuele omgevingen / servertjes neerzetten om te gebruiken. Dan kom je al snel in het hogere segment. Een oude schoolvriend en tegenwoordig collega nog even lastig gevallen met de vraag wat de keuzes waren. In dat gesprek kwam het er vooral op neer wat je er mee wilt en het was iig wel zo fijn dat je zo’n Synology kant en klaar geleverd krijgt zonder alle poespas.
Dus kijkend kwam ik al snel op een DS920+ en later bedacht ik mij dat een klein beetje meer geheugen en power wel handig zou zijn voor eventuele virtuele omgevingen. Dus dan kwam ik al snel uit op een DS1520+ uit. Dus zo rond de 1500 euro zou dat uitkomen.
Ander geluid
Mijn zwager is altijd al een beetje aan het friemelen met PC’s en servers en gaf aan dat ik voor dat geld voor beter een eigen server kon gaan samenstellen omdat je dan veel meer keuzevrijheid had en voor dat geld een veel zwaardere machine kon plaatsen.
Ik heb een cursus gehad over archimate en moet binnenkort een examen inplannen. We hebben nog een aantal examen voorbeeldvragen open staan en deze moest je nadat je de stof had geleerd nog een keertje maken: gewoon om te zien of je alle basis hebt, of misschien nog op een bepaald onderdeel moet focussen.
Ik begin met de passieve structuren, oftewel “passive structures”. Deze passieve structuren worden door de actieve structuren gemanipuleerd, oftewel aangepast (denk CRUD acties).
De tekeningen zijn volgens mij ook altijd hoekig aan de bovenkant…
We beginnen met de business layer en passive structures/elements:
Business Passive Structure Elements
Hierin zie je eigenlijk maar 2 onderdelen:
Business Object en Representation. De belangrijkste bedrijfs concepten staan in deze objecten. Contract is een specialisatie van een BO.
Een Business Object geeft een concept weer, dat gebruikt wordt in een bepaald bedrijfsdomein. ArchiMate focust meer op types dan op instanties. Hiermee wil gezegd worden dat een BO meer een object type (zoals UML of Java Class) zal zijn, waarmee meerdere instanties gemaakt kunnen worden. Heel af en toe worden wel instanties bedoeld, maar dat gaat over singletons. Dus waar maar 1 instantie van mogelijk is. Ze zijn passief omdat ze niets triggeren. Dus niet iets starten, zoals een business proces. Een BO kan gebruikt worden om informatie te laten zien dat vanuit het business point of view van belang is. Een BO kan door een Data Object worden gerealiseerd.
Een BO kan accessed worden, door business proces, business function, business interaction, business events en/of business services.
Een BO kan ook een association, specialization, aggregation of een composition relatie hebben met andere BO’s. Een BO kan realized worden door een representation of een Data Object of beide.
CONTRACT
Een contract toont een formele of informele specificatie van een overeenkomst tussen een leverende- en consumerende partij dat de rechten en plichten specificeert omtrent een product en legt voor functionele en non-functionele parameters voor interactie.
Het element contract kan in de juridische zin, maar ook meer in de informele overeenkomst als zijnde geassocieerd met een product. Het kan ook een SLA zijn of bevatten, wat beschrijft wat de functionaliteit en kwaliteit van de services dat het product levert. Contract is een specialisatie (specialization) van een Business Object.
De relaties die bij een BO van toepassing zijn, zijn ook bij een contract mogelijk. Als extra kan een contract ook nog een aggregation relatie hebben met een product. Product komt uit de business layer als composite element.
Een voorbeeld kan zijn een bank contract of een telebankier contract of een service level agreement contract
REPRESENTATION
Een representation vertegenwoordigt een waarneembare vorm van de informatie dat door een BO wordt gedragen.
Representations (zoals berichten of documenten) zijn de waarneembare dragers van informatie die aan BO’s gerelateerd. Als het relevant is, kunnen representations in verschillende variaties voorkomen. Zoals bijvoorbeeld als medium (electronisch, papier, audio etc) of formaat (HTML, PDF, ASCI, RTC etc). 1 BO kan meerdere representations hebben. En een enkele representation kan ook 1 of meerdere specifieke BO’s realiseren (realize relatie).
Een “meaning” kan geassocieerd worden met een representation die deze meaning draagt. Meaning is een beschrijving dat duidelijk maakt wat het doel is van het element. Net zoals de eerder genoemde representation en business object is het een zelfstandig naamwoord wat betreft de naam van het object. Dus een relatie-bericht of een factuur pdf.
Business Layer en behavior elements
Getekend als ovalen in archimate.
Je ziet 3 onderdelen: Business Proces, Business Function en Business Interaction
We gaan nu in op de daadwerkelijke taal, die dit blijkbaar allemaal mogelijk maakt.
Dart is een zogenaamde conservatieve programmeer taal. Niet ontwikkeld om allerlei nieuwe zaken te tonen, maar meer om een voorspelbaar en stabiele programmeer omgeving te maken. Komt van Google uit 2011, met als doel om JavaScript als de taal van het web van de troon af te stoten.
Dit cookbook doet een aanname dat je bekend bent met C-style talen, maar dat ben ik niet. Zal misschien wat extra achtergrond informatie nodig hebben, maar de uitleg die ze overslaan zoals If statements, loops en switches zijn natuurlijk heel erg bekend en niet alleen maar in de C wereld bekend.
In het boek wordt gezegd dat je via een online dart platform kunt gaan, of dat je een VS of IntelliJ IDE moet gebruiken. Omdat ik het meeste werk verricht met Atom, heb ik natuurlijk gezocht of er een Dart plugin voor Flutter / Dart aanwezig is. Deze heb ik gevonden. Met de meeste downloads heb ik opgehaald en daarbij werd ook een toolbar geinstalleerd. De plugin herkende zelf al de SDK installatie met Flutter die ik op de schijf had staan, dus dat leek goed te gaan:
Atom Dart Plugin
Variabelen declareren – var vs final vs const
variabelen zijn nodig om input op te slaan, iets aan te passen of met deze input te doen en dan later als output mee terug te geven. Zonder variablen is dit dus niet mogelijk.
Een nieuwe trend, is blijkbaar niet-wijzigbare-variabelen. Dus eenmaal geset: that is it! Dit is veiliger, hebben geen side effects en leiden tot minder bugs als gevolg.
In het volgend stuk gaan we een klein programma maken, dat variabelen declareert in de 3 verschillende manieren dat Dart toestaat:
Haal alles weg uit de main.dart die automatisch is gemaakt.
Een main function toevoegen, wat voor elk Dart programma het beginpunt is:
main() {
variablePlayground();
}
Deze code kan niet uitgevoerd worden, omdat de functie variablePlayground() nog niet gedefinieerd is. Deze functie is een hub(?) voor alle andere voorbeelden in dit playbook recept.
void geeft aan dat er niets terugkomt uit deze functie. Dit is bij andere talen volgens mij ook al zo.
Daarna moet je deze basisTypes definiëren en het mooie van deze variabelen is dat je ze kunt wijzigen:
void basicTypes() {
int four = 4;
double pi = 3.14;
num someNumber = 24601;
bool yes = true;
bool no = false;
int nothing;
print(four);
print(pi);
print(someNumber);
print(yes);
print(no);
print(nothing == null);
}
Nog steeds kan dit niet uitgevoerd worden, aangezien de 3 andere methodes nog niet bekend zijn.
Zelf heb ik om te testen even wat zaken als comments uitgesloten. Daarmee kon ik iig de uitvoer zien van de print statements:
De syntax voor een mutable variable is hetzelfde als in vele andere talen. Eerst het type (int, double etc.) dan de naam en na de = de waarde. Als je geen waarde toekent, dan is het automatisch null.
Blijkbaar was er in de oudere versie dat je gewoon een variabele zonder instantiatie kon doen, maar daar kan Dart nu niet meer tegen blijkt. Daarom heb ik de onderste print statement er ook uit moeten halen. Deze had ik weer terug gedaan en ik kreeg een warning in DartPad:
Bij view docs stond in ieder geval het volgende vermeld:
dat kwam dus doordat hij niet null mocht zijn. Als je dat wel wilt kunnen laten gebeuren, dan moet je achter het type een ‘?’ zetten:
int? om hem ook leeg te kunnen laten zijn
Dart heeft een speciaal type: dynamic, die eigenlijk staat voor de gratis uit de gevangenis komen kaart staat (Monopoly?) maar dan van het types systeem. Je kunt dit type voor je variabele zetten om ervoor te zorgen dat je eigenlijk alles erin kan plaatsen!
Dart var keyword is net anders dan dynamic. Zodra er een waarde aan de variabele is toegekend, zal Dart het type onthouden! De waarde mag nog steeds gewijzigd worden, maar de type niet meer!
void typeInterpolation() {
var anInteger = 15;
var aDouble = 27.6;
var aBoolean = false;
print(anInteger.runtimeType);
print(anInteger);
print(aDouble.runtimeType);
print(aDouble);
print(aBoolean.runtimeType);
print(aBoolean);
}
var keyword
Er zijn nog 2 keywords, voor niet wijzigbare variabelen: final en const.
void immutableVariables() {
final int immutableInteger = 5;
final double immutableDouble = 0.015;
print(immutableInteger);
print(immutableDouble);
// Type annotation is optional
final interpolatedInteger = 10;
final interpolatedDouble = 72.8;
print(interpolatedInteger);
print(interpolatedDouble);
const aFullySealedVariable = true;
print(aFullySealedVariable);
}
Maar dat moet je natuurlijk niet zomaar geloven, vandaar dat ik gewoon zelf toch nog de interpolatedDouble heb geprobeerd aan te passen:
final var kan maar eenmaal geset worden
var, final en const kunnen op deze wijze gedeclareerd worden:
var animal = 'Duck';
final numValue = 42;
const isBoring = true;
var kan dus gewijzigd worden. final kunnen slechts eenmaal geassigned worden, maar door gebruik van objecten kun je de velden van de objecten wel wijzigen. Const zijn compile time constanten en totaal niet wijzigbaar. Een type toekennen kan alleen bij de final modifier:
final intnumValue = 42; // this is ok// NOT OK: const int or var int.
Waarom variabelen die niet kunnen wijzigen?
het is sneller
geen side effecten. De meeste bugs in programmeren komt doordat waardes worden gewijzigd en onvoorzien ergens anders ook weer wijzigingen teweeg brengen.
2 linkjes die ze geven:
Meer over Dart en de ingebouwde type variabelen:
https://dart.dev/guides/language/language-tour
Meer aspecten over de Dart taal en hoe te gebruiken voor web en server applicaties:
https://www.packtpub.com/web-development/dart-essentials