<div dir="ltr"><div><div>'...This of course does not mean another project in the same ALM can't support a more UI driven approach...'<br><br></div>Why couldn't the UI persist the config data in a form (ascii) that can be read by humans and tracked under source control?<br><br><br></div>-- Len<br><br><br><div><div><span class="im"></span></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 28, 2016 at 7:30 AM, Max Rydahl Andersen <span dir="ltr"><<a href="mailto:manderse@redhat.com" target="_blank">manderse@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 28 Jul 2016, at 13:07, Pete Muir wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The other thing to think about here is "infrastructure as code",<br>
particularly in relation to continuous delivery.<br>
<br>
How would someone be able to store the ALM configuration in a source<br>
control repo, and make changes to the running instance using<br>
continuous delivery and at the same time support non-technical users<br>
in making changes (such as the UIs that Miroslav discussed).<br>
</blockquote>
<br></span>
Just to make sure we are talking about the same things here.<br>
<br>
What ALM configuration are you thinking about specifically ?<br>
<br>
I'm currently of the mindset that if you are going for the SCM based<br>
approach then you are on your own and thus non-technical users cannot make users via<br>
a controlled UI. What the ALM will then do is more about being a destination<br>
for the build to publish results to rather than be automagically configured.<br>
<br>
This of course does not mean another project in the same ALM can't support<br>
a more UI driven approach.<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I think this is definitely a scenario we should support, given our<br>
focus on supporting companies wanting to use CD/pipelines.<br>
</blockquote>
<br></span>
+1<br>
<br>
/max<div><div class="h5"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
On 27 July 2016 at 08:48, Konrad Kleine <<a href="mailto:kkleine@redhat.com" target="_blank">kkleine@redhat.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Miroslav,<br>
<br>
thank you for sharing your thoughts on these three ways to customize an<br>
application:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
1. Via dedicated UI forms, wizards and DSL<br>
2. Using configuration files<br>
3. Customizing it in application code<br>
</blockquote>
<br>
<br>
I believe that 1. and 2. have a somewhat symbiotic effect. Let me try to<br>
explain what I mean by this:<br>
<br>
I think there's the act of customizing and then there is storing of this<br>
customization. The later can be a configuration file format (e.g. JSON) with<br>
DSL inside. We use PostgreSQL as our database and this can store JSON as<br>
native objects. The pure act of customization on the other side can be<br>
either writing these JSON files by hand or manipulating them using a UI.<br>
<br>
I may be naive but I think the benefit of having a configuration file format<br>
allows for customization right from the start. A UI can be added later (that<br>
is probably the naive part).<br>
<br>
Regards,<br>
Konrad Kleine<br>
<br>
Software Engineer<br>
Red Hat GmbH<br>
Werner-von-Siemens-Ring 15<br>
85630 Grasbrunn, Germany<br>
<br>
<br>
On Tue, Jul 26, 2016 at 7:00 PM, Miroslav Hradilek <<a href="mailto:mhradile@redhat.com" target="_blank">mhradile@redhat.com</a>><br>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Hello,<br>
<br>
this is the first of my emails where I will be sharing my thoughts on some<br>
design decisions that, in my opinion, are worth considering when designing<br>
ALM architecture.<br>
<br>
<br>
# User Based Setup<br>
<br>
So in most applications, and especially ones like ALM, there is a big need<br>
for customizing everything like objects, behavior etc.<br>
<br>
It is mostly done in three ways:<br>
<br>
1. Via dedicated UI forms, wizards and DSL<br>
2. Using configuration files<br>
3. Customizing it in application code<br>
<br>
<br>
I've personally had a chance to use all three ways throughout my life and<br>
I'm sure the readers are the same. All the methods have pros and cons. Some<br>
depend on licensing and their application depends on the skill set of the<br>
user.<br>
<br>
# Approaches<br>
<br>
1) UI etc<br>
This is by far the most consumable method for not very technically skilled<br>
people or people not willing to invest in learning the application. The sole<br>
configuration form is like reference documentation and configuration files<br>
combined. Even higher level of contextual configuration can be achieved by<br>
employing wizards which interact with the user until the configuration is<br>
finished.<br>
<br>
The downside to this is that it requires the application developers to<br>
burn time to code often quite complex forms. Sometimes the expression of<br>
such form is quite limited and Domain Specific Language must be defined to<br>
overcome this lack of expression. Example being the languages describing<br>
mail filters, query languages etc.<br>
<br>
After some time the user learns a lot about the application and these<br>
interfaces start to limit his/her efficiency.<br>
<br>
2) Configuration files<br>
Somewhere in between. You do not have to be a coder to configure<br>
application this way.<br>
<br>
What you have to do though, is to read quite a bit about the application<br>
and have a reference documentation at hand. This can be minimized by<br>
including the documentation inside template configuration files in form of<br>
comments. The expression is quite limited. Difficult data structures and<br>
Domain Specific Languages must be used to overcome this problem.<br>
<br>
3) Hacking the code<br>
You need to be involved a lot in the application and you have to<br>
understand it's code in order to modify it.<br>
<br>
The expression is virtually unlimited though with little effort on<br>
developers side. No config interpretation code and DSLs are necessary. This<br>
can be improved a lot by splitting the configuration part of the code from<br>
the system implementation structuring the code as a configuration file. If<br>
you include documentation in comments you have a nearly commented config<br>
file experience but you still require the user to be quite involved in the<br>
app and know at least basic data structures used in the language.<br>
<br>
The biggest downside is that the app often (not necessarily) needs to be<br>
rebuilt to perform a change. Second most severe limitation is that closed<br>
source applications would be difficult if not impossible to configure this<br>
way.<br>
<br>
# How to choose<br>
<br>
There is one important consideration, sometimes overlooked when deciding<br>
which style of configuration to employ. Apart from time money and developers<br>
personal engagement. It is the TARGET AUDIENCE.<br>
<br>
Who will be configuring which part in reality? How involved are they going<br>
to be in the application when in production? What are their use cases? Are<br>
there any security implications if I choose this over that?<br>
<br>
These are some of the questions you should consider. And please do expand<br>
on this. I'm sure you will have some more options to consider.<br>
<br>
--<br>
Miroslav Hradilek<br>
Quality Assurance Engineer<br>
Base OS Quality Engineering<br>
<br>
Red Hat Czech, s. r. o.<br>
Purkynova 99<br>
612 45 Brno, Czech Republic<br>
<br>
_______________________________________________<br>
almighty-public mailing list<br>
<a href="mailto:almighty-public@redhat.com" target="_blank">almighty-public@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/almighty-public" rel="noreferrer" target="_blank">https://www.redhat.com/mailman/listinfo/almighty-public</a><br>
</blockquote>
<br>
<br>
<br>
_______________________________________________<br>
almighty-public mailing list<br>
<a href="mailto:almighty-public@redhat.com" target="_blank">almighty-public@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/almighty-public" rel="noreferrer" target="_blank">https://www.redhat.com/mailman/listinfo/almighty-public</a><br>
<br>
</blockquote>
<br>
_______________________________________________<br>
almighty-public mailing list<br>
<a href="mailto:almighty-public@redhat.com" target="_blank">almighty-public@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/almighty-public" rel="noreferrer" target="_blank">https://www.redhat.com/mailman/listinfo/almighty-public</a><br>
</blockquote>
<br>
<br></div></div>
/max<br>
<a href="http://about.me/maxandersen" rel="noreferrer" target="_blank">http://about.me/maxandersen</a><div class="HOEnZb"><div class="h5"><br>
<br>
_______________________________________________<br>
almighty-public mailing list<br>
<a href="mailto:almighty-public@redhat.com" target="_blank">almighty-public@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/almighty-public" rel="noreferrer" target="_blank">https://www.redhat.com/mailman/listinfo/almighty-public</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr">Len DiMaggio (<a href="mailto:ldimaggi@redhat.com" target="_blank">ldimaggi@redhat.com</a>)<br>JBoss by Red Hat<br>314 Littleton Road<br>Westford, MA 01886  USA<br>tel:  978.392.3179<br>cell: 781.472.9912<br><a href="http://www.redhat.com" target="_blank">http://www.redhat.com</a><br><a href="http://community.jboss.org/people/ldimaggio" target="_blank">http://community.jboss.org/people/ldimaggio</a><br><br><img src="http://www.redhat.com/g/logos/RedHat_JBoss_logo.png"><br></div></div></div></div>
</div>