'Art' would be a better category, but cannot be chosen here. These are the slides I used for a presentation in Dutch about the history of Digital Arts Printing, a.k.a. Giclée Print. And about why a print like that could be "art" or not. I compare it with the history of Photography as art.
Presentation & slides in Dutch. Presentation was held November 3, 2013 in Pand Paulus in Schiedam.
Presentation for LangDev 2023, 14+15 november 2023 in Utrecht. https://langdevcon.org/
The basic idea of “Projectional Forms” is very simple: use HTML form elements
instead of text in an editor to get information into an AST. Text input boxes,
dropdown select boxes, check boxes, radio buttons etc.
From the early days of the World Wide Web on, form elements were the way to
interact with an HTML page. In modern web-applications form elements are
still widely used to gather user input. Forms have evolved and many packages
and frameworks offer more elaborate possibilities out of the box, built on top of
the same old basic form tags: custom fields, (repeating) sub-forms, form
validation, easy creation, JSON output etc. The possibilities are endless. An
important advantage of the use of form elements in online applications is:
people are used to them and don't have to learn something new. It is easier to
use than a text based editor.
I will demo the use of projectional forms on the hand of the “Extension
Generator” I'm working on at the moment. First presentation was on Dutch
JoomlaDays in May (which were at the same time as the MPS Community
Meetup this year). It uses forms on the M1-level to create complete and
working online applications, like e-commerce or a booking system. It was
based on earlier work in Xtext that was later ported to MPS. In this Extension
Generator the AST is filled (online) using HTML form elements, that were
static, predefined. The applications are mainly generated from the AST using
templates.
This summer I've been working on the M2-level: making forms that
dynamically define forms. This is in fact defining DSLs! This definition of forms
is again done using HTML form elements, online. I've used LionWeb as the
basic structure on the M3-level and am now working on import and export
from and to the LionWeb Serialization Format.
Next step will be to define generators using a “forms-language” (beside the
use of templates). Main inspiration for this part are MPS' model-to-model
transformations.
Although still work in progress, I can demo the concept of Projectional Forms
with this practical Extension Generator and show the limitless possibilities of
simple HTML form elements as a medium for projectional editing and language
definition. In many cases it can be an interesting alternative for traditional
code in text format.
Slides from the presentation (in Dutch) I gave on the Dutch JoomlaDays 12+13 May 2023.
Generate Joomla extensions with Model Driven Engineering, that is: create a model to define an extension (component, module, plugin) and generate the concrete extension from the model. In that way one model can be output to multiple versions of Joomla, or to a different platform (Drupal, Symfony, Laravel) or even to a different stack (non-PHP).
Presentation about Domain Modelling (and language / philosophy) on https://kandddinsky.de/ Berlin 2019,October 18
In mister Occam's barbershop we'll have Domain Modelling in our chair to have a fresh cut and shave. We'll cut, redefine, rename and rearrange concepts like bounded contexts, ubiquitous language, context maps, aggregates and their roots, entities, value objects and event sourcing. Our modeling tools have grown, but might need some maintenance service... Language is the vehicle of modeling, it is the tool by which we understand the world. Our words are the building blocks of our models. If our language is imprecise, inconsistent or contradictory, so our models will be imprecise, inconsistent or contradictory. Although some practicioners of Domain Driven Design proudly call themselves “domain linguists”, not all DDD-jargon is very well defined. Some concepts come from different paradigms or contain logical errors. Too broad or too narrow definitions introduce unnecessary accidental complexity. This presentation aims to show some mistakes and do proposals to improve the situation. The proof of the pudding is to show how models can be made more useful by that. On our road we'll be helped by some modelers from the past, like Aristotle, Hume, Kant, Wittgenstein or Ryle. And we'll see how a 14th century razor blade can still be sharp.
Creative developer Herman Peeren likes creativity and exploring new ideas. Modelling is a way to better understand the world around us. Computer Science is Philosophy. Languages carry our thoughts, and that holds for both natural languages and computer languages.
Resources & links can be found on http://hermanpeeren.nl/
Programmeren, talen en het begrijpen van de wereldHerman Peeren
Programmeren, talen en het begrijpen van de wereld
door Herman Peeren
presentatie op 13 november 2015
Permanent Beta Dag #7 Rotterdam
http://www.meetup.com/PermanentBeta/events/222345799/
http://pb7.apitecture.nl
Bestaat Nederland eigenlijk wel? En God? Waarom betalen we geld aan Griekenland? Wat is Kunst? Dit zijn een aantal vragen die in deze presentatie ter sprake komen.
Het programmeren van een computer is veel meer dan alleen het inkloppen van een reeks instructies. Als we software bouwen, dan bouwen we een model van een stukje wereld (of van een nieuwe wereld). Om dat te doen moeten we iets begrijpen van die wereld. We gebruiken code als bouwstenen van ons model; de code is een taal waarmee we de wereld beschrijven. Tegelijkertijd is code ook gereedschap waarmee we de wereld analyseren, in hapklare brokken snijden.
De taal waarmee we programmeren is niet alleen de gebruikte programmeertaal, maar ook de ideeën die daarbij gebruikt worden. Een andere taal, in die brede zin van het woord, is als een ander sjabloon dat je over de werkelijkheid heen legt: je ziet de wereld op een andere manier, je interpreteert dingen anders. Dat kan heel spannend zijn, vooral als je inzichten daardoor veranderen. Durf jij dat aan?
Het is lastig om het verschil tussen kleuren uit te leggen aan iemand die z'n hele leven blind is geweest. In het praten over kleuren gebruik je al gauw andere woorden die iets met zien te maken hebben. Begrippen overbrengen die we niet zelf uit eigen ervaring kennen is moeilijk en al helemaal als de woorden om die begrippen te beschrijven ontbreken in een taal. Het leuke van programmeertalen is, dat je er niet alleen iets in kunt beschrijven, maar het ook bouwstenen zijn. Een begrip wordt zo niet alleen abstract aangeduid, maar je kunt er ook een model mee bouwen om het te demonstreren.
Deze presentatie gaat over taal als middel om onze gedachten te vormen en uiten en in hoeverre dat middel mede van invloed is op het resultaat. Computertalen en ideeën over modelleren in software kunnen bijdragen aan het begrijpen van de wereld om ons heen. Met behulp van dat theoretische gereedschap gaan we een aantal vragen onder de loep nemen, op zoek naar nieuwe inzichten.
Improve our PHP code with ideas from Functional ProgrammingHerman Peeren
A short intro to Functional Programming (FP) and how ideas from it could be used to improve your PHP code. These slides contain several links to others (articles, video, book) about FP and PHP.
A presentation about Data-Contect-Interaction(DCI) for the Belgium DDD community, Antwerp April 30 2015 http://www.meetup.com/dddbelgium/events/219787290/ . Slides 2-13 is a short introduction in DCI, slides 14-18 are some ideas I have about it in combination with DDD and ES.
Presentation for LangDev 2023, 14+15 november 2023 in Utrecht. https://langdevcon.org/
The basic idea of “Projectional Forms” is very simple: use HTML form elements
instead of text in an editor to get information into an AST. Text input boxes,
dropdown select boxes, check boxes, radio buttons etc.
From the early days of the World Wide Web on, form elements were the way to
interact with an HTML page. In modern web-applications form elements are
still widely used to gather user input. Forms have evolved and many packages
and frameworks offer more elaborate possibilities out of the box, built on top of
the same old basic form tags: custom fields, (repeating) sub-forms, form
validation, easy creation, JSON output etc. The possibilities are endless. An
important advantage of the use of form elements in online applications is:
people are used to them and don't have to learn something new. It is easier to
use than a text based editor.
I will demo the use of projectional forms on the hand of the “Extension
Generator” I'm working on at the moment. First presentation was on Dutch
JoomlaDays in May (which were at the same time as the MPS Community
Meetup this year). It uses forms on the M1-level to create complete and
working online applications, like e-commerce or a booking system. It was
based on earlier work in Xtext that was later ported to MPS. In this Extension
Generator the AST is filled (online) using HTML form elements, that were
static, predefined. The applications are mainly generated from the AST using
templates.
This summer I've been working on the M2-level: making forms that
dynamically define forms. This is in fact defining DSLs! This definition of forms
is again done using HTML form elements, online. I've used LionWeb as the
basic structure on the M3-level and am now working on import and export
from and to the LionWeb Serialization Format.
Next step will be to define generators using a “forms-language” (beside the
use of templates). Main inspiration for this part are MPS' model-to-model
transformations.
Although still work in progress, I can demo the concept of Projectional Forms
with this practical Extension Generator and show the limitless possibilities of
simple HTML form elements as a medium for projectional editing and language
definition. In many cases it can be an interesting alternative for traditional
code in text format.
Slides from the presentation (in Dutch) I gave on the Dutch JoomlaDays 12+13 May 2023.
Generate Joomla extensions with Model Driven Engineering, that is: create a model to define an extension (component, module, plugin) and generate the concrete extension from the model. In that way one model can be output to multiple versions of Joomla, or to a different platform (Drupal, Symfony, Laravel) or even to a different stack (non-PHP).
Presentation about Domain Modelling (and language / philosophy) on https://kandddinsky.de/ Berlin 2019,October 18
In mister Occam's barbershop we'll have Domain Modelling in our chair to have a fresh cut and shave. We'll cut, redefine, rename and rearrange concepts like bounded contexts, ubiquitous language, context maps, aggregates and their roots, entities, value objects and event sourcing. Our modeling tools have grown, but might need some maintenance service... Language is the vehicle of modeling, it is the tool by which we understand the world. Our words are the building blocks of our models. If our language is imprecise, inconsistent or contradictory, so our models will be imprecise, inconsistent or contradictory. Although some practicioners of Domain Driven Design proudly call themselves “domain linguists”, not all DDD-jargon is very well defined. Some concepts come from different paradigms or contain logical errors. Too broad or too narrow definitions introduce unnecessary accidental complexity. This presentation aims to show some mistakes and do proposals to improve the situation. The proof of the pudding is to show how models can be made more useful by that. On our road we'll be helped by some modelers from the past, like Aristotle, Hume, Kant, Wittgenstein or Ryle. And we'll see how a 14th century razor blade can still be sharp.
Creative developer Herman Peeren likes creativity and exploring new ideas. Modelling is a way to better understand the world around us. Computer Science is Philosophy. Languages carry our thoughts, and that holds for both natural languages and computer languages.
Resources & links can be found on http://hermanpeeren.nl/
Programmeren, talen en het begrijpen van de wereldHerman Peeren
Programmeren, talen en het begrijpen van de wereld
door Herman Peeren
presentatie op 13 november 2015
Permanent Beta Dag #7 Rotterdam
http://www.meetup.com/PermanentBeta/events/222345799/
http://pb7.apitecture.nl
Bestaat Nederland eigenlijk wel? En God? Waarom betalen we geld aan Griekenland? Wat is Kunst? Dit zijn een aantal vragen die in deze presentatie ter sprake komen.
Het programmeren van een computer is veel meer dan alleen het inkloppen van een reeks instructies. Als we software bouwen, dan bouwen we een model van een stukje wereld (of van een nieuwe wereld). Om dat te doen moeten we iets begrijpen van die wereld. We gebruiken code als bouwstenen van ons model; de code is een taal waarmee we de wereld beschrijven. Tegelijkertijd is code ook gereedschap waarmee we de wereld analyseren, in hapklare brokken snijden.
De taal waarmee we programmeren is niet alleen de gebruikte programmeertaal, maar ook de ideeën die daarbij gebruikt worden. Een andere taal, in die brede zin van het woord, is als een ander sjabloon dat je over de werkelijkheid heen legt: je ziet de wereld op een andere manier, je interpreteert dingen anders. Dat kan heel spannend zijn, vooral als je inzichten daardoor veranderen. Durf jij dat aan?
Het is lastig om het verschil tussen kleuren uit te leggen aan iemand die z'n hele leven blind is geweest. In het praten over kleuren gebruik je al gauw andere woorden die iets met zien te maken hebben. Begrippen overbrengen die we niet zelf uit eigen ervaring kennen is moeilijk en al helemaal als de woorden om die begrippen te beschrijven ontbreken in een taal. Het leuke van programmeertalen is, dat je er niet alleen iets in kunt beschrijven, maar het ook bouwstenen zijn. Een begrip wordt zo niet alleen abstract aangeduid, maar je kunt er ook een model mee bouwen om het te demonstreren.
Deze presentatie gaat over taal als middel om onze gedachten te vormen en uiten en in hoeverre dat middel mede van invloed is op het resultaat. Computertalen en ideeën over modelleren in software kunnen bijdragen aan het begrijpen van de wereld om ons heen. Met behulp van dat theoretische gereedschap gaan we een aantal vragen onder de loep nemen, op zoek naar nieuwe inzichten.
Improve our PHP code with ideas from Functional ProgrammingHerman Peeren
A short intro to Functional Programming (FP) and how ideas from it could be used to improve your PHP code. These slides contain several links to others (articles, video, book) about FP and PHP.
A presentation about Data-Contect-Interaction(DCI) for the Belgium DDD community, Antwerp April 30 2015 http://www.meetup.com/dddbelgium/events/219787290/ . Slides 2-13 is a short introduction in DCI, slides 14-18 are some ideas I have about it in combination with DDD and ES.
All 23 classical GOF Design Patterns with illustrations that try to catch some essence of them.
Used in a presentation for Eindhoven Developers, March 17, 2015 http://www.meetup.com/Eindhoven-Developers-Meetup/events/220477660/
Presentation November 13, 2014 at 010PHP, Rotterdam,
http://www.meetup.com/010PHP/events/212147112/
about Event Sourcing:
In many applications the current state is constantly updated, overwriting previous states. Information about the history is lost then. With Event Sourcing you store all events that have led to a change in application state. The current and previous states can always be reconstituted from the series of events that has been stored. That gives lots of possibilities.
I gave an overview of the background of Event Sourcing, with a sidestep to some thoughts about 'identity'. Related concepts, like CQRS and other DDD-jargon, were explained and I briefly mentioned Functional Programming.
After my talk we looked at Broadway, the open sourced project from Qandidate, that provides a PHP infrastructure for Event Sourcing and CQRS. FritsJan Bakker, one of the builders of Broadway, told something more about it and how they used Event Sourcing at Qandidate.
-----
Summary of slides:
* 2-3: while updating, history is lost
* 4: an n:m relationship where info of the past was stored
* 5-7: DDD-jargon: Aggregate and Aggregate Root
* 8-10: Demeter's Law as applied to the Aggregate Root
* 11-17: Event Sourcing, storing past events, like in accounting
* 18-25: about identity (you are the realisation of changes)
* 26: Functional Programming (same paradigm as ES)
* 27-30: CQRS and the bigger picture
* 31-33: Broadway
* 34: Pool Request
Presentation at J & Beyond conference, May 30 2014. Looking outside the Joomlasphere to get some inspiration about techniques to build better software, including Agile, DDD, TDD, BDD, Behat, Doctrine ORM, DCI, CQRS, Client-side MVC etc.
Video of presentation on https://www.youtube.com/watch?v=-6u4aUvCTx4
Behat, Behavioral Driven Development (BDD) in PHPHerman Peeren
In order to improve the software development process you should use the language of the domain you are modeling. Behat, a tool for Behavior Driven Development in PHP, can help in the communication with the domain-expert / product-owner.
All 'classic' 23 GOF Design Patterns, illustrated by Nelleke Verhoeff (Red Cheeks Factory). Trying to show the essence of each Design Pattern, with some examples from PHP.
Second version of my Design Patterns presentation. This presentation was held February 13, 2014 at the 010PHP meeting in Rotterdam. Presentation was in Dutch.
Easier building complex applications in Joomla! by adding a mapping layer between the domain model and the database. Some of this might be useful to improve Joomla!'s core.
While building custom Joomla!-extensions I often encountered difficulties implementing one-to-many and many-to-many relations.
Joomla! uses lists and items, where a list relates to a database table and an item to a record in that table. Because the underlying relational database is normalised, fields are atomic: contain only one value. In reality (in the domain) a person can have multiple addresses, an order can have multiple orderlines, a posting can have several comments, a product can have several images etc. Often, fields in our entities are not atomic, but can have collections of values. If we stay close to the one-to-one mapping of lists/items and database tables, as Joomla! natively does, it soon becomes messy when modelling more complex relationships. But if we use a mapping between the objects in our domain model and the database, we can easily use non-atomic fields. The same holds for inheritance mapping: a parent class and child classes can be mapped to a relational database in several ways. The Unified Content Model (UCM) is an example of class table inheritance mapping, where the superclass (core_content) has its own table, as do the subclasses. This opposed to the currently used concrete table inheritance, where every content-type maps to one table.
Fortunately this Object Relational Mapping has allready been extensively elaborated. No need to reinvent this wheel. In this presentation I'll show how I used Doctrine ORM for it. And I'll show how this could be used to improve Joomla!'s core.
If we would start from scratch with what we know now, how would Joomla! look like. From a developers/architectural point of view. Focus on Domain Driven Design.
Presentation on Dutch Joomla!Days 2009. Index of possibilities to exchange data between Joomla! and Flash. A plea to use more general interfaces and standards, like XML.
All 23 classical GOF Design Patterns with illustrations that try to catch some essence of them.
Used in a presentation for Eindhoven Developers, March 17, 2015 http://www.meetup.com/Eindhoven-Developers-Meetup/events/220477660/
Presentation November 13, 2014 at 010PHP, Rotterdam,
http://www.meetup.com/010PHP/events/212147112/
about Event Sourcing:
In many applications the current state is constantly updated, overwriting previous states. Information about the history is lost then. With Event Sourcing you store all events that have led to a change in application state. The current and previous states can always be reconstituted from the series of events that has been stored. That gives lots of possibilities.
I gave an overview of the background of Event Sourcing, with a sidestep to some thoughts about 'identity'. Related concepts, like CQRS and other DDD-jargon, were explained and I briefly mentioned Functional Programming.
After my talk we looked at Broadway, the open sourced project from Qandidate, that provides a PHP infrastructure for Event Sourcing and CQRS. FritsJan Bakker, one of the builders of Broadway, told something more about it and how they used Event Sourcing at Qandidate.
-----
Summary of slides:
* 2-3: while updating, history is lost
* 4: an n:m relationship where info of the past was stored
* 5-7: DDD-jargon: Aggregate and Aggregate Root
* 8-10: Demeter's Law as applied to the Aggregate Root
* 11-17: Event Sourcing, storing past events, like in accounting
* 18-25: about identity (you are the realisation of changes)
* 26: Functional Programming (same paradigm as ES)
* 27-30: CQRS and the bigger picture
* 31-33: Broadway
* 34: Pool Request
Presentation at J & Beyond conference, May 30 2014. Looking outside the Joomlasphere to get some inspiration about techniques to build better software, including Agile, DDD, TDD, BDD, Behat, Doctrine ORM, DCI, CQRS, Client-side MVC etc.
Video of presentation on https://www.youtube.com/watch?v=-6u4aUvCTx4
Behat, Behavioral Driven Development (BDD) in PHPHerman Peeren
In order to improve the software development process you should use the language of the domain you are modeling. Behat, a tool for Behavior Driven Development in PHP, can help in the communication with the domain-expert / product-owner.
All 'classic' 23 GOF Design Patterns, illustrated by Nelleke Verhoeff (Red Cheeks Factory). Trying to show the essence of each Design Pattern, with some examples from PHP.
Second version of my Design Patterns presentation. This presentation was held February 13, 2014 at the 010PHP meeting in Rotterdam. Presentation was in Dutch.
Easier building complex applications in Joomla! by adding a mapping layer between the domain model and the database. Some of this might be useful to improve Joomla!'s core.
While building custom Joomla!-extensions I often encountered difficulties implementing one-to-many and many-to-many relations.
Joomla! uses lists and items, where a list relates to a database table and an item to a record in that table. Because the underlying relational database is normalised, fields are atomic: contain only one value. In reality (in the domain) a person can have multiple addresses, an order can have multiple orderlines, a posting can have several comments, a product can have several images etc. Often, fields in our entities are not atomic, but can have collections of values. If we stay close to the one-to-one mapping of lists/items and database tables, as Joomla! natively does, it soon becomes messy when modelling more complex relationships. But if we use a mapping between the objects in our domain model and the database, we can easily use non-atomic fields. The same holds for inheritance mapping: a parent class and child classes can be mapped to a relational database in several ways. The Unified Content Model (UCM) is an example of class table inheritance mapping, where the superclass (core_content) has its own table, as do the subclasses. This opposed to the currently used concrete table inheritance, where every content-type maps to one table.
Fortunately this Object Relational Mapping has allready been extensively elaborated. No need to reinvent this wheel. In this presentation I'll show how I used Doctrine ORM for it. And I'll show how this could be used to improve Joomla!'s core.
If we would start from scratch with what we know now, how would Joomla! look like. From a developers/architectural point of view. Focus on Domain Driven Design.
Presentation on Dutch Joomla!Days 2009. Index of possibilities to exchange data between Joomla! and Flash. A plea to use more general interfaces and standards, like XML.
2. ‘Onder originele grafiek wordt verstaan
grafiek die tot stand is gekomen overeenkomstig een door een kunstenaar speciaal
ontworpen concept, waarbij met behulp
van een of meer drukvormen het door de
kunstenaar beoogde beeld herhaalbaar
wordt aangebracht op een door hem gekozen beelddrager’
‘Mechanisch vervaardigde reproducties
alsmede kopieën en facsimiles van reeds
bestaande schilderijen, prenten, tekeningen
en andere reeds bestaande beelddragers
worden niet als originele grafiek aangemerkt’
[ bron VOG ] Vereniging voor Originele Grafiek
3. Een aantal andere drukmethoden
• Giclée en piëzo-print: inktjet
• Elektrografie = C-print, lambda-print: op fotopapier
• Risografie = stencil
4.
5. Giclée, piezo, Iris, pigment, fine art print
• Graham Nash, Jack Duganne, 1991
David Crosby
& Gaham Nash
bij Occupy Wallstreet 201
1