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
Na een bezoekje aan mijn zwager en zwagerin, werd ik er weer eens op gewezen dat ik niet meer bij de tijd was met mijn ouderwetse iOS en Android ontwikkelkennis. Nu was er een multi platform ding, wel van Google, wat veel meer kon dan de cross platform zaken die we van vroeger kenden. Blijkbaar omdat er libraries gebruikt werden die dan weer platform specifiek waren.
Dus bij mij kwam snel de vraag naar boven: “wat is dat dan??” en we zijn goed en wel een aantal maanden verder, voordat ik er aan toe kom om er eens naar te kijken. Dus snel een clone gemaakt van de Flutter git repo, zodat je Flutter met alle tools en de Dart SDK ontvangt.
rub
Dat verliep een keertje foutloos 😉
Mocht je het niet op deze wijze willen downloaden, dan kun je het ook via deze link regelen.
Flutter is blijkbaar niet zo fancy pancy als wat ik gewend ben, dus het is voor het meest command based! Dus lekker rammelen in de terminal. Voelt net zoals als het ouderwetse programmeren. Begreep er nooit wat van dat er mensen waren die dat in de DOS edit boxje deden, terwijl je goede IDE’s ervoor kon gebruiken. Maar goed, elke nerd zijn eigen tik, zullen we maar denken.
Het goed zetten en ervoor zorgen dat je PATH ook de flutter commando’s kent door de bijbehorende bin directory kenbaar te maken.
dit doe je in je .bash_profile als je met een Mac werkt. Blijkbaar is dat weer iets anders voor de nieuwere mac users (.zshrc):
vi .bash_profile
helemaal onderaan voeg je het onderstaande toe:
export PATH="$PATH:$HOME/flutter/bin"
Daarna moet je het bestand opslaan. Bij vi is dat natuurlijk “:wq” … daarna de terminal sessie opnieuw laden met de nieuwe instellingen:
source .bash_profile
Dan checken of het goed is gegaan, door which flutter uit te voeren.
Controleren of het allemaal goed is geinstalleerd: flutter docter
Oh wat grappig. Want het commando is natuurlijk om te kijken of alles aanwezig is en alle verschillende dependencies voldaan zijn. Of dat patient nog onderzocht moet worden 🙂
Nou bij mij miste er blijkbaar nog wel wat. oh oeps .. typo: docter moest doctor zijn 😉
En opeens:
Dat was raar. Een tijdje staan staren naar het scherm, maar er kwam niets. Geen foutmelding, maar ik kwam ook niet meer in mijn Terminal terug. Dus maar CTRL-C gedaan en nogmaals hetzelfde commando, maar nu met -v om wat meer meldingen (verbose) terug te krijgen. Daarin was te zien dat er 3 onderdelen niet goed waren:
Dus weer snel overstappen om CocoaPods te installeren:
sudo gem install cocoapods
whoepsie … een dikke vette fout:
ERROR: Failed to build gem native extension
SO post: https://stackoverflow.com/questions/20939568/error-error-installing-cocoapods-error-failed-to-build-gem-native-extension
Dus weer aan het zoeken geslagen en blijkt dat de versie niet goed installeert met de bovenstaande instructie. Je kunt een oude versie installeren, zoals 1.8.4 ipv de in het artikel gevonden versie 1.10.0
met het commando brew install cocoapods moest het ook kunnen. Daar wordt geklaagd dat het bijna prehistorisch is en er toch echt wel eerst een update uitgevoerd moet worden:
brew update
met sudo ervoor krijg ik weer een andere foutmelding. Aargh .. command not found.
Dan maar kijken of ik een oudere versie kan installeren …
Dus nu nog zaken installeren. Dus eerst maar even de AndroidStudio IDE geinstalleerd. Had blijkbaar al een keer eerder wat geinstalleerd, maar daar had ik blijkbaar 50 maand geleden wat mee gedaan. Jemig.
Daarna heb ik via configuratie nog de commandline tools geinstalleerd en daarmee was de fout die eerder getoond werd verdwenen.
Dus ik moet de Android SDK updaten. Dacht al dat de huidige geinstaleerde versie van 50 maand geleden misschien wel wat gedateerd kon zijn 🙂
Dit doe ik dus niet via de commando’s die getoond worden, maar gewoon lekker via de studio:
Vinkje gezet bij Show Package Details, omdat de 29 versie er niet tussen stond. Dus ik heb gewoon de 29 en de latest geselecteerd.
de SDK werd niet geupdate, dus dat heb ik met een standaard check for updates gedaan.
Bleek nog niet genoeg te zijn, dus daarna nog een keertje gevogeld en dan ook weer het vinkje aangevinkt, zodat je ook de andere onderdelen te zien kreeg
Daarna nogmaals flutter doctor gedaan en alles was goed. Melding over de oude cocoapods, maar hopelijk gaat mij dat niet in de weg zitten.
Het commando “pod setup” dat de cocoapods repo moet opzetten en nogal wat tijd kon kosten, was binnen een seconde klaar. Zonder enige tekst of foutmelding of what-so-ever.
Deze gingen weer net zo snel als de eerdere pod setup commando. Dat vertrouw ik natuurlijk niet helemaal. Maar dit is wel weer nacht nummer 2, dat ik er mee bezig ben. Heb wel stappen gemaakt, maar heb het geheel nog niet werkend. Zucht.
Homebrew gebruik je als een package manager voor het systeem. Cocoapods is blijkbaar hetzelfde, maar dan specifiek voor je projecten.
Dan ratelt het wat, maar komt er opeens een done in beeld. Gelukkig had ik ook een terminal met een top erin staan en daar zag ik dat het git commando heel wat resources vrat van mijn zeer verouderde iMac. Dus even geduldig gewacht en ja hoor .. warempel. Hij is zowaar klaar.
Daarna heb ik voor de grap het eerder mislukte brew update uitgevoerd en dat lukte nu ook met de melding dat alles already up-to-date was.
Dan nogmaals de gok voor brew install cocoapods!
Ging goed, behalve symlink aanmaken kon niet, omdat er reeds eentje aanwezig was. De melding was dat je deze ook handmatig kon verwijderen. Dat heb ik gedaan en daarmee ben ik direct benieuwd naar wat er meer achter weg komt.
Dat was snel, want er kwamen nog een melding naar voren over een symlink. Dus daarna het volgende commando dat in de help stond uitgevoerd:
brew link --overwrite cocoapods
Nogmaals het commando flutter doctor, want nu heb ik dus ook de nieuwste cocoapods versie. Echter krijg ik nu een error over XCode:
Moest nog wat commando’s plakken en tadaa:
AVD Manager
Hahaa .. nu het echte werk. Een emulator nodig, zodat je niet steeds een telefoon moet koppelen om je code te checken!
Kies via AVD Manager een telefoon of watch, of waar je ook maar een emulator voor wilt hebben. Klik op Next en kies de Android versie die je wilt gebruiken. Ik had alleen hele oude, dus die heb ik eerst via de Download link opgehaald. Ze zijn enorm groot, dus let op dat je niet teveel download … daarna op Next
voor de zekerheid kun je het beste nog een check doen met het commando
flutter doctor
Ze geven aan dat je misschien nog de licenties moet accepteren, maar nadat ik bovenstaand commando had uitgevoerd, waren er geen issues. Uiteraard had ik het bijbehorende commando eerder ook al uitgevoerd.
IDE
Het is belangrijk dat je een IDE gebruikt die lekker bij je past. Het grappige is dat ik verwachte dat er ook een plugin zou zijn voor XCode 😉 Oh nee, dat is natuurlijk niet wenselijk vanuit het MacIntosh oogpunt.
Android Studio
Visual Studio Code
IntelliJ IDEA
Android Studio
Installeer de Plugin
Blijkbaar hebben we Dart nodig 😉 ..
stable Channel switch
Flutter App
woohoo .. we gaan een appje bouwen!
Dit is zo’n ding dat je via 2 routes kunt bewandelen. Je kunt het via de command prompt of in je IDE doen.
Deze eerste keer gaan we het via de command line doen, omdat nerdies altijd even moeten laten zien wat er allemaal gebeurd enzo. Daarna mag je van de grote bazen het gewoon in de IDE doen. Denk dat er genoeg mensen zullen zijn die dat hele command prompt gedoe, hopeloos vinden.
Ze geven aan dat het handig is om je projecten in een consistente plek op te slaan. Denk dat dit maar gewoon in mijn home dir moet zijn. Ik heb een directory aangemaakt: flutter-projects
/Users/dwightlooye/flutter-projects
Om een project te maken heeft flutter het volgende commando:
flutter create
Dit kan met een heleboel vlaggen, waarmee je je project kan configureren, maar voor de eenvoud houden we het hier bij de basis:
flutter create hello_flutter
Dit commando kan alleen uitgevoerd worden, indien je een internet verbinding hebt. Er wordt een zooi van project afhankelijkheden gedownload.
Dit kan ook door de vlag –offline toe te voegen:
flutter create --offline hello_flutter
Maar je moet uiteindelijk toch packages synchroniseren, dus een internet verbinding is onontbeerlijk! Voor degene die dat niet heeft, die zal deze blog ook niet zo snel gaan zitten lezen…vermoed ik 😉
Nu het project gemaakt is, moet je deze kunnen runnen. Daarvoor heb je een aparaat nodig dat aangesloten is, of een emulator. Hee, dat is handig. Dat was dat dingetje die we eerder hadden gemaakt.
Om te zien welke emulatoren er op je pc zitten, voer het volgende commando uit:
flutter emulators
Dit geeft het volgend lijstje:
Het rare is dat ik in het voorbeeld de Pixel 3 had geconfigureerd, maar de Flutter Cookbook die ik aan het volgen ben zegt dat je dan op de Mac alleen de iOS Simulator moet kiezen. Ben benieuwd of dit goed gaat werken, maar ik wil natuurlijk ook de Android variant eens in actie zien.
flutter emulators --launch apple_ios_simulator
Daar zag ik opeens een big mother iPhone 12 Pro op mijn scherm.
Na het commando om het project te draaien:
flutter run
Zie je een tijdje niets. Echter na een tijdje krijg je het Apple logo te zien en in de Terminal zie je ook dat er van alles wordt gedownload:
En in al die tijd, zit ik naar dat scherm te staren… we moeten misschien voorzichtig aan concluderen dat deze ooit eens super rappe iMac ook zijn beste tijd heeft gehad. Na een paar nummers geluisterd te hebben en op mijn telefoon wat verbaasd te zijn over tweets die worden gestuurd over een ministerie die zijn eigen werkwijze hanteert in de WOB en dan 50 extra juristen opzoekt om het sneller te kunnen gaan doen?
Dan eindelijk na minuten zie ik een scherm met daarin de Flutter app icon. Deze aangeklikt en weer langzaam aan zie ik een scherm opbouwen:
Daarna probeerde ik hetzelfde als met de Android versie, maar die knalde er mooi uit:
Dat moeten we dan later maar een keertje tegen het licht aan houden, toch? *bedoeld –> daar zien we nooit meer iets van terug*
Plaftorm taal keuze voor je app
Er zijn veel veranderingen geweest sinds ik een cursus Apps bouwen heb mogen volgen. Daar zijn de Swift- en Kotlin talen bijgekomen, respectievelijk voor iOS en Android. Dus je bent niet meer gebonden aan Objective-C en Java.
flutter create --ios-language swift --android-language kotlin hello_modern_languages
Dit zorgt ervoor dat Swift en Kotlin worden gebruikt. Maar dat is niet een definitieve keuze. Dat kan aangepast worden per project. Echter is het van belang om je te realiseren dat je voor het overgrote deel alleen maar Dart code gaat schrijven. Maakt dus niet echt uit welke keuze je in Flutter maakt.
Onder water wordt er een complete folder structuur opgezet:
Het mooie hiervan is dat je de Android folder in Android Studio kunt openen en de Runner.xcworkspace in de ios folder kun je openen in Xcode. Als je Native code of configuratie toevoegt, dan moet het dus in deze folders komen!
De lib folder is je hart en ziel van je Flutter App. Je moet er dus niets van vernaggelen, anders is het opeens een Flut App … sorry, die zat er al zo lang aan te komen. Hierin komt dus alle Dart code. Na aanmaken project, is er slechts 1 bestand:
main.dart
Dit is de main folder van je project, je moet het wel enigszins georganiseerd houden. Er komen voldoende subfolders hierin terecht en in het boek zullen een aantal verschillende architectuur stijlen aanbevolen worden.
In de root folder staat de pubspec.yaml. Hierin staan de zaken, zoals de app naam, versie etc. Er zit ook een pubspec.lock bestand in. Dit is een gegenereerd bestand dat gebruikt kan worden. Dit moet je dus ook niet aanpassen, maar laten staan. Dit is geen kopie, hij is namelijk anders opgemaakt, zoals hieronder te zien is:
pubspec.yamlpubspec.lock
Als laatste is er ook nog een test folder die groot kan worden, naarmate je project groter wordt. De testen die erin komen te staan, zijn ook Dart code zaken. Unit testing wordt hier niet verder behandelt. Testen in Flutter kun je hier wat meer info vinden
Hot reload
In het cookbook staat beschreven dat stateful hot reload toch wel 1 van de belangrijkste mogelijkheden zijn dat Flutter te bieden heeft. Er staat in vermeld hoe dit in te stellen is, maar uiteraard is dat weer anders als je een aantal versies verder bent:
Cookbook exampleMy Android Studio example
Zo vervelend dit, maar ik heb de moeite genomen om te proberen of het hot reload werkt. Wat houdt het in?
Je start normaal gesproken een virtuele telefoon op, waar je de App op gaat uitvoeren. Als je dan wijzigingen doorvoert, dan is het meestal een nieuwe installatie van de App op het virtuele device en dat duurt natuurlijk behoorlijk lang.
In mijn geval heb ik in Android Studio de Open Project geselecteerd en daar heb ik de hello_flutter folder geselecteerd om te openen. Dan zie je een groen play knopje:
Dat zorgt ervoor dat de hello_flutter demo app op het virtuele device wordt geplaatst.
Als je dan nu code wijzigt in het main.dart bestand, dan zou je dat on the fly terug moeten zien in het device, zonder dat je daar zelf wat voor hoeft te doen. (In het cookbook staat dat je wat vinkjes moet zetten bij Flutter in Languages & Frameworks, maar zoals het plaatje al liet zien was er niet een optie in mijn versie!) Dus dit is een test om te zien of de functie Hot Reload nu standaard geactiveerd is.
Als je de kleur wijzigt (was blue en is nu green) en bijvoorbeeld de title (FlutApp Demo Home Page) van MyHomePage wijzigt. Op het moment dat je dit opslaat, dan zou het naar het device gepushed moeten worden en zonder dat je een refresh of reload actie hoeft uit te voeren is het direct zichtbaar.
En dit is zonder minuten wachten op een nieuwe reload. Dit ken ik nog wel van mijn spastische pogingen om een app te bouwen vroeger met XCode of met Android Studio en Java.
in minder dan een halve seconde was het resultaat dus zichtbaar en dat vind ik best wel een behoorlijke wow !
De samenvatting laat nog even weten dat Flutter een behoorlijk dynamisch iets is, gezien het feit dat het nog niet uitontwikkeld is. Daardoor zal via het doctor commando vaak een nieuwe versie gedownload moeten worden. Daarnaast worden de command line skills in een Terminal nog eens benadrukt en geven ze verschillende boeken als voorbeeld:
Janet werkt samen om met verschillende mensen en teams om blueprints en proces afspraken etc te maken
ACF zorgt ervoor dat iedereen dezelfde taal spreekt of iig snapt en kan vertalen
building block kan in het begin bijv. alleen een naam zijn en later in het proces een bouwblok dat volledig uitgewerkt en herbruikbaar is voor andere projecten.
Dit vergeet ik nog wel eens. Een ABB zorgt voor een beschrijving van een capability … en later een specificatie voor een Solution Building Block.
SBB die componenten die gebruikt worden om de vereiste capability mee te realiseren.
Consistent is een onderdeel dat van belang is, zodat een organisatie met meerdere afdelingen dit vastgelegd hebben en dan ook op terug kunnen grijpen.
Actors kunnen mensen zijn, maar ook bedrijf of een systeem dat interacteert
Roles is een rol die een actor heeft
Organizations eenheid met eigen goals etc. business partners etc
Functions levert business unit capabilities.
Business Service ondersteund business capabilities en wordt door de organization beheerd
Process set van gelateerde activiteiten
Application Component is een encapsulation van application functionlaitei dat met application structure aligned is
Data entities: encapsulatie van data.
Technology service: technische capability vereist om een technische infrastructuur te leveren om applicaties te kunnen aanbieden. Dat kan cloud services zijn of interne infra netwerk structuur
Value stream is representatie van een end to end collectie value adding activities dat een overall result maakt
Dit is wat TOGAF zegt
TOGAF 9.2 Framework kun je het lezen !
Veel output in de iteraties!
taal tussen architecten
levert methodes
Enterprise Continuumis een overview
Continuum is meestal als een virtual repository dat over de architecture repository wordt gelegd.
examen kan over alle bovenstaande 6 onderdelen gaan!!