<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CONTENTREICH</title>
	<atom:link href="https://www.contentreich.de/feed" rel="self" type="application/rss+xml" />
	<link>https://www.contentreich.de/</link>
	<description>DevOps, Cloud, Kubernetes, Java, Clojure und Alfresco Content Plattform: Entwicklung und Support</description>
	<lastBuildDate>Thu, 11 Nov 2021 06:54:28 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
<site xmlns="com-wordpress:feed-additions:1">55759028</site>	<item>
		<title>Microservices, Cloud, Software und DevOps sind Implementierungsdetails</title>
		<link>https://www.contentreich.de/microservices-cloud-software-und-devops-sind-implementierungsdetails</link>
					<comments>https://www.contentreich.de/microservices-cloud-software-und-devops-sind-implementierungsdetails#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Thu, 04 Feb 2021 19:38:23 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Digital Transformation]]></category>
		<category><![CDATA[New Work]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6861</guid>

					<description><![CDATA[<p><img width="871" height="490" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2021/01/teal-brain-scaled.jpg?fit=871%2C490&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Microservices, Cloud, Software und DevOps sind Implementierungsdetails" title="Microservices, Cloud, Software und DevOps sind Implementierungsdetails" decoding="async" fetchpriority="high" srcset="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2021/01/teal-brain-scaled.jpg?w=2560&amp;ssl=1 2560w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2021/01/teal-brain-scaled.jpg?resize=1440%2C810&amp;ssl=1 1440w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2021/01/teal-brain-scaled.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2021/01/teal-brain-scaled.jpg?resize=1536%2C864&amp;ssl=1 1536w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2021/01/teal-brain-scaled.jpg?resize=2048%2C1152&amp;ssl=1 2048w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2021/01/teal-brain-scaled.jpg?resize=1070%2C602&amp;ssl=1 1070w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2021/01/teal-brain-scaled.jpg?w=1742&amp;ssl=1 1742w" sizes="(max-width: 871px) 100vw, 871px" data-attachment-id="6946" data-permalink="https://www.contentreich.de/microservices-cloud-software-und-devops-sind-implementierungsdetails/teal-brain" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2021/01/teal-brain-scaled.jpg?fit=2560%2C1440&amp;ssl=1" data-orig-size="2560,1440" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="teal-brain" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2021/01/teal-brain-scaled.jpg?fit=1440%2C810&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2021/01/teal-brain-scaled.jpg?fit=871%2C490&amp;ssl=1" />DevOps &#8211; der Ansatz Entwicklung und Betrieb zusammen zu führen wurde geboren im Umfeld der Informations-Technologie. Er geht in der Regel einher mit Automatisierung, Cloud und Microservices. Insofern also nicht verwunderlich, dass DevOps vorwiegend technisch anmutet. Bei der Implementierung in einer Organisation lohnt sich ein Blick unter die Haube. Was steckt drunter? Expedition eines neugierigen&#160;...<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/microservices-cloud-software-und-devops-sind-implementierungsdetails">Microservices, Cloud, Software und DevOps sind Implementierungsdetails</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>DevOps &#8211; der Ansatz Entwicklung und Betrieb zusammen zu führen wurde geboren im Umfeld der Informations-Technologie. Er geht in der Regel einher mit Automatisierung, Cloud und Microservices. Insofern also nicht verwunderlich, dass DevOps vorwiegend technisch anmutet. Bei der Implementierung in einer Organisation lohnt sich ein Blick unter die Haube. Was steckt drunter? Expedition eines neugierigen Laien.</p>



<h2 class="wp-block-heading">DevOps Einstieg Microservices</h2>



<p>Den Gipfel des <a href="https://de.wikipedia.org/wiki/Hype-Zyklus">Hype-Zyklus</a> lassen sie so langsam hinter sich. Cool, am Markt gefragt, und grundsätzlich relevant sind Microservices aber allemal noch. Sie als Ursache für das Öffnen der Büchse der Pandora auszumachen greift allgemein sicher zu kurz. Im Folgenden sollen sie exemplarisch zu Illustrationszwecken dienen.</p>



<p>Das Streben nach Agilität und Skalierbarkeit sollten wesentliche Motivation für den Einsatz von Microservices sein. Aber warum ist diese Architektur so disruptiv und oft auch so unerwartet teuer?</p>



<p>Ein kleiner Teil der Antwort auf diese Frage ist einfach: Microservices sind eine Software Architektur. Diese zu ändern ist <a href="https://de.wikipedia.org/wiki/Softwarearchitektur">&#8220;per Definition&#8221;</a> schon aufwendig ?. Vermutlich wird aber auch niemand ernsthaft behaupten das eine Migration hin zu Microservices oder weg zum Monolithen günstig ist. </p>



<p>Microservices bringen ein erhebliches Maß an neuer Komplexität mit sich. </p>



<h2 class="wp-block-heading">Obacht : Komplexität!</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove&nbsp;it.</p><cite>Alan Perls</cite></blockquote>



<p>Komplexität ist allgemein maßgeblicher Treiber für viele Dinge, die wir heute tun.  Unter anderem löst sie Kontrollverlust aus &#8211; und Angst davor.</p>



<p>Aber was ist Komplexität eigentlich?</p>



<p>Nicht-Linearität ist eine äußerst unangenehme Eigenschaft von komplexen Systemen. Kleine Änderungen können unvorhersehbar große Wirkung bedingen. Oft sind auch kausale Feedback Schleifen im Spiel. Wir beobachten Verhalten welche wir mit Paradigmen wie Reduktion und Analyse nicht erklären können.</p>



<p>Im Kontext von Software Systemen betrachtet Brooks in <a href="http://faculty.salisbury.edu/~xswang/Research/Papers/SERelated/no-silver-bullet.pdf">No Silver Bullet</a> Komplexität. Er unterscheidet zwischen Essentieller (Inhärenter) und Versehentlicher. Moseley und Marks folgen Brooks bei dieser Unterscheidung in <a href="http://curtclifton.net/papers/MoseleyMarks06a.pdf">Out of the tarpit</a>. Sie widersprechen ihm aber in der Aussage das die meiste Komplexität in heutigen Systemen essentieller Natur ist. Sie definieren den Begriff nicht, sagen aber dass es Komplexität ist was Software Systeme schwer verständlich macht &#8211; insbesondere Zustand und Kontroll-Fluss. Ferner stellen sie fest, dass Abhängigkeit vom Code Volumen nicht linear ist. Helfen uns diese Sichtweisen Microservices besser zu verstehen? Betrachtet man das <a href="https://www.martinfowler.com/articles/distributed-objects-microservices.html">erste Gesetz &#8220;Don&#8217;t!&#8221; von verteilten Objekten</a>, so erscheinen sie als versehentliche Komplexität (weil fachlich in der Regel irrelevant) die wir vermeiden sollten. Sind es lediglich die technischen Prozess Grenzen welche uns Schwierigkeiten bereiten?</p>



<p>Container als Wirt dieser technischen Prozesse sind zweifellos elementarer Baustein von Microservices der sehr viele Konsequenzen mit sich bringt. Container ändern technisch &#8230; alles. Es sind flüchtige Entitäten welche über traditioneller Infrastruktur mit einem hochdynamischen Overlay Netzwerk kommunizieren. Der Vergleich mit dem menschlichen Organismus ist durchaus angemessen (Video einmal starten und eine Minute schauen!):</p>


<iframe class="youtube-player" width="871" height="490" src="https://www.youtube.com/embed/CZ3wIuvmHeM?version=3&#038;rel=0&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=de-DE&#038;autohide=2&#038;start=110&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe>



<p>Wie weitreichend die Folgen sind wird deutlich, wenn man einen Blick auf die <a href="https://landscape.cncf.io/">Cloud Native Landschaft</a> wirft und sich dabei vergegenwärtigt, dass Kubernetes erst vor gut fünf Jahren freigegeben wurde. Und die Entwicklungen im Epizentrum der digitalen Transformation sind ungebremst rasend schnell.</p>



<p>Man sollte reflektieren, ob eine Einführung im konkreten Fall die Organisation ihrem Ziel überhaupt einen Schritt näher bringt, oder ob es womöglich sogar eine Regression werden könnte. Der Artikel <a href="https://mcfunley.com/choose-boring-technology">Choose Boring Technology</a> bietet viele Denkanstöße aus einer holistischen Perspektive.</p>



<h2 class="wp-block-heading">Agile zur Rettung!</h2>



<p>Warum nochmal tun wir uns Microservices an? Agilität, stimmt ja. Wir wollen schließlich schneller als der Wettbewerb am Markt sein. Helfen Container da wirklich? Für den Moment sieht es so aus, als ob sie vor allem versehentliche Komplexität bringen.  Die Antwort  auf Komplexität kennen wir inzwischen ja auch &#8211; Agile Methoden. Hä? Müssen wir agil sein, um mit komplexen Microservices klar zu kommen? Ja. Mag seltsam klingen aber <a href="https://martinfowler.com/articles/accelerate-foreword.html">Geschwindigkeit und Stabilität schließen sich eben nicht aus sondern bedingen einander</a>. Die Schere zwischen Low- und High Performern geht auseinander. Agiles Vorgehen war was nochmal? Im Allgemeinen <a href="https://de.wikipedia.org/wiki/Cynefin-Framework">Probe, Sense, Respond</a>. Konkret im IT-Umfeld manifestiert es sich seit 20 Jahren(!) im <a href="http://agilemanifesto.org/">Agile Manifesto</a> oder den <a href="https://itrevolution.com/the-three-ways-principles-underpinning-devops/">drei DevOps Prinzipien</a>. Setzen wir diese Werte um? Experimentieren wir? Können wir mit Scheitern umgehen? Praktizieren wir Retrospektiven? Gibt es (ehrliches) Feedback? Gehen wir wertschätzend miteinander um? &#8230; Optimieren wir mit Blick auf das große Ganze? Sind unsere Teams &#8230; selbstorganisiert? Warum tun wir uns mit diesen Dingen so schwer?</p>



<h2 class="wp-block-heading">Kultur</h2>



<p>Unser ökonomisches und gesellschaftliches Umfeld wird getrieben durch Dinge wie Digitalisierung zunehmend komplexer, Dinge ändern sich immer schneller. Agilität wird folglich existentieller. Agilität und Organisationskultur bedingen einander. Kultur (=Wertesystem) entwickelt sich aber mit der Dynamik einer Wanderdüne.</p>



<p>Welche Werte sollten eine agile Organisation prägen? </p>



<p>In enger Anlehnung an <a href="https://de.wikipedia.org/wiki/Spiral_Dynamics">Spiral Dynamics</a> betrachtet Frederic Laloux in <a href="https://www.reinventingorganizations.com/">Reinventing Organizations</a> die Entwicklung von Organisationen mit ihrem Wertesystemen.  Komplexität ist entscheidender Treiber bei diesen Entwicklungen. Die am höchsten entwickelte Stufe (Türkis / Evolutionär) ist gekennzeichnet durch Selbstorganisation, Holismus (in den DevOps Prinzipien reflektiert durch den ersten Weg &#8211; Systems Thinking) und verteilter Führung. Laloux nutzt hier die Metapher Organismus. In türkisen Organisationen finden wir Systemverhalten wie beim Atmen oder bei &#8230; Microservices. Natürlich ist Spiral Dynamics nur ein Modell. Insofern ist eine Organisation auch nicht genau an einer Stelle. Man versteht die Verortung einer Organisation besser als den Schwerpunkt ihrer Entwicklung.</p>



<p>Fun fact: Kollektive wie Teams und auch ganze Organisationen selbst sind außerordentlich komplexe Systeme. Genau deswegen bieten sich auch hier agile Methoden für die Entwicklung an. Die Spielregeln sind natürlich ein wenig anders, weil man nur eine Instanz hat (In der Regel also z.B. kein Test-System). ?</p>



<p>Besonders bemerkenswert erscheint, dass <a href="http://donellameadows.org/archives/leverage-points-places-to-intervene-in-a-system/">die stärksten Hebel für Veränderung</a> in System-Thinking sich aus elementaren Eigenschaften von Systemen ableiten lassen. Kultur hat signifikant stärkeren Einfluss als  Kommunikation von Menschen und/oder Maschinen (Automatisierung). Außerdem besteht offensichtlich eine enge Beziehung zwischen dem &#8220;speziellen&#8221; <a href="https://de.wikipedia.org/wiki/Gesetz_von_Conway">Gesetz von Conway</a> mit dem &#8220;allgemeinen&#8221; <a href="http://donellameadows.org/systems-thinking-resources/">Eisberg Modell</a> aus System Thinking: (Kommunikations-)Strukturen generieren Ereignis-Muster und so auch konkrete von einer Organisation produzierte Software. </p>



<h2 class="wp-block-heading">Resilience</h2>



<p>COVID-19, Klimawandel oder die Ausfälle bei <a href="https://aws.amazon.com/de/message/11201/">AWS</a> oder <a href="https://status.cloud.google.com/incident/zall/20013">Google</a> in den letzten zwei Monaten. Eine Tatsache, der man sich stellen sollte &#8211; &#8220;Organismen erkranken&#8221;.  Entscheidend ist ein möglichst milder Verlauf (Resilience).</p>



<p>Manche Krankheiten wie z.B. der <a href="https://www.spiegel.de/netzwelt/netzpolitik/solarwinds-hack-der-spionagefall-des-jahres-a-0b728cc4-d375-4cb9-9450-3635ca8172a0">Solarwinds-Hack</a> werden mit böswilliger Absicht herbeigeführt. Kubernetes wurde in der Vergangenheit mehrfach mit einem <a href="https://gigaom.com/2014/07/10/with-microsoft-ibm-and-red-hat-backing-it-googles-kubernetes-is-a-peace-pipe-and-trojan-horse/">trojanischen Pferd der großen Tech Firmen</a> verglichen. Ob man die Analogie hier bis zur beabsichtigten Infektion und Erkrankung des Wettbewerbs durch einen Virus treiben möchte bleibt der Fantasie des Lesers überlassen ?.</p>



<p>Ist DevOps also eine technische Herausforderung? Zweifellos, aber Einschränkung auf Entwicklung und Betrieb von Software ist sicherlich viel zu kurz gedacht. Und der technische Aspekt ist vermutlich der einfachere Teil.</p>



<p>Update 11.11.2021: Der aktuelle Artikel <a href="https://www.infoworld.com/article/3639050/complexity-is-killing-software-developers.html">Complexity is killing software developers</a> ist in diesem Kontext auf jeden Fall lesenswert (&#8220;modern software development is a study in entropy, and it is not getting any more simple.&#8221; &#8211; 2. Hauptsatz der Thermodynamik &#8211; Physik ist keine Verhandlungssache ?)</p>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/microservices-cloud-software-und-devops-sind-implementierungsdetails">Microservices, Cloud, Software und DevOps sind Implementierungsdetails</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/microservices-cloud-software-und-devops-sind-implementierungsdetails/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6861</post-id>	</item>
		<item>
		<title>Was ist eine Kubernetes Platform?</title>
		<link>https://www.contentreich.de/was-ist-eine-kuberntes-platform</link>
					<comments>https://www.contentreich.de/was-ist-eine-kuberntes-platform#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Thu, 13 Aug 2020 04:12:45 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Digital Transformation]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6785</guid>

					<description><![CDATA[<p><img width="871" height="490" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2020/07/joust.jpg?fit=871%2C490&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Was ist eine Kubernetes Platform?" title="Was ist eine Kubernetes Platform?" decoding="async" srcset="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2020/07/joust.jpg?w=1920&amp;ssl=1 1920w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2020/07/joust.jpg?resize=1440%2C810&amp;ssl=1 1440w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2020/07/joust.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2020/07/joust.jpg?resize=1536%2C864&amp;ssl=1 1536w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2020/07/joust.jpg?resize=1070%2C602&amp;ssl=1 1070w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2020/07/joust.jpg?w=1742&amp;ssl=1 1742w" sizes="(max-width: 871px) 100vw, 871px" data-attachment-id="6786" data-permalink="https://www.contentreich.de/was-ist-eine-kuberntes-platform/joust" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2020/07/joust.jpg?fit=1920%2C1080&amp;ssl=1" data-orig-size="1920,1080" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Joust Arcade" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2020/07/joust.jpg?fit=1440%2C810&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2020/07/joust.jpg?fit=871%2C490&amp;ssl=1" />Technologie ist einfach. Der menschliche Teil ist der Schwierige. Kommunikation und Terminologie wiederum sind Elemente dieses schwierigen Teils. Dieser Post betrachtet den Begriff Platform im Kontext von Kubernetes.<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/was-ist-eine-kuberntes-platform">Was ist eine Kubernetes Platform?</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Technologie ist einfach. Der menschliche Teil ist der Schwierige. Kommunikation und Terminologie wiederum sind Elemente dieses schwierigen Teils. In diesem Post soll es um den Begriff Platform im Kontext von Kubernetes gehen.</p>



<p>Wir reden von Agile, DevOps, Komplexität. Im Großen sicher nicht, aber haben wir im Kleinen, also innerhalb einer Organisation oder eines Teams ein gemeinsames Verständnis von den Begriffen welche wir täglich nutzen?</p>



<p>Platform: Wir kennen den Begriff aus dem Umfeld von  Betriebssystemen (Cross-Plattform) und (Enterprise-)Laufzeitumgebungen (Java Platform, Java Enterprise Edition). Wir verstehen eine Platform als etwas Horizontales &#8220;Nicht-Funktionales&#8221;. Was ist es im Kontext von Kubernetes? </p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">So you want to roll your own application platform. All you need is:<br><br>Linux<br>Docker<br>Kubernetes<br>Istio<br>Prometheus<br>Fluentd<br>Grafana<br>Jaeger<br>Harbor<br>Open Policy Agent<br>Vault<br>Spinnaker and Jenkins<br><br>Oh, almost forgot, you&#39;re also going to need servers, people, and glue. Bring lots of glue.</p>&mdash; Kelsey Hightower (@kelseyhightower) <a href="https://twitter.com/kelseyhightower/status/1245886920443363329?ref_src=twsrc%5Etfw">April 3, 2020</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p>Eine Kubernetes Application Platform sollte Container basierte Anwendungen/Microservices also unterstützen in den Disziplinen </p>



<ul class="wp-block-list"><li>Observability</li><li> Authentication / Authorization</li><li>Networking</li><li> Key Management</li><li>Storage (Block, Object, File)</li><li>Databases (Relational, Key-Value, Document, Graph)</li><li>Continuous Integration/-Delivery</li><li>Backup/Recovery</li><li>Messaging</li></ul>



<p>Konzeptionell ist vieles nicht neu. Container bedingen allerdings viele neue Implementierungen:</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">&#8211; Enterprise Edition 2.0 &#8211;<br>App Server -&gt; Kubernetes<br>EAR/WAR -&gt; Docker Container<br>EJB -&gt; Istio<br>JNDI -&gt; Kubernetes Services<br>JMS -&gt; Kafka<br>JAAS -&gt; IAM / JWT<br>RMI -&gt; gRPC<br>JAXP -&gt; Cloud Events<br>Servlets / JSP -&gt; NodeJS<br>JDBC -&gt; So many data access things<br>JTA -&gt; (nothing, because reasons)</p>&mdash; James Ward (@_JamesWard) <a href="https://twitter.com/_JamesWard/status/1151250878218850305?ref_src=twsrc%5Etfw">July 16, 2019</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p>Die Open Source Upstream Basis Komponenten lassen aus Sicht von Anwendungs-Entwicklern, im Folgenden kurz Entwickler (!= Infrastruktur- / Platform Entwickler) offensichtlich noch sehr zu wünschen übrig. Aus Sicht von Entwicklern ist es schlicht eine zu niedrige Abstraktion. Man merkt es spätestens wenn man versucht mit <code>kubectl</code> zu arbeiten. </p>



<ul class="wp-block-list"><li>Muss jeder Entwickler wirklich wissen was ein Deployment, StatefulSet, DeamonSet, Pod, Service, ConfigMap, Secret, PersistentVolume(Claim) etc. sind und wie man damit umgeht?</li><li>Muss man wissen was ein Controller, eine CustomResourceDefinition oder ein Operator ist und wie diese Dinge arbeiten?</li><li>Muss man sich den Kopf darüber zerbrechen ob man imperativ oder deklarativ mit <code>kubectl</code> arbeiten sollte?</li></ul>



<p>Ich denke nein. Ich würde sogar soweit gehen zu sagen man sollte Anwendungsentwicklern Kubernetes komplett ersparen können.</p>



<p>Was will ein Anwendungsentwickler eigentlich wirklich von einer Platform? PaaS Anbieter haben sich ausgiebig mit dieser Frage beschäftigt. Zwar nicht Kubernetes, aber schauen wir exemplarisch einfach einmal auf die CLI Hilfe von <code>heroku</code>:</p>



<pre class="wp-block-preformatted crayon:false">USAGE
  $ heroku [COMMAND]

COMMANDS
  access          manage user access to apps
  addons          tools and services for developing, extending, and operating your app
  apps            manage apps on Heroku
  auth            check 2fa status
  authorizations  OAuth authorizations
  autocomplete    display autocomplete installation instructions
  buildpacks      scripts used to compile apps
  certs           a topic for the ssl plugin
  ci              run an application test suite on Heroku
  clients         OAuth clients on the platform
  config          environment variables of apps
  container       Use containers to build and deploy Heroku apps
  domains         custom domains for apps
  drains          forward logs to syslog or HTTPS
  features        add/remove app features
  git             manage local git repository for app
  help            display help for heroku
  keys            add/remove account ssh keys
  labs            add/remove experimental features
  local           run Heroku app locally
  logs            display recent log output
  maintenance     enable/disable access to app
  members         manage organization members
  notifications   display notifications
  orgs            manage organizations
  pg              manage postgresql databases
  pipelines       manage pipelines
  plugins         list installed plugins
  ps              Client tools for Heroku Exec
  psql            open a psql shell to the database
  redis           manage heroku redis instances
  regions         list available regions for deployment
  releases        display the releases for an app
  reviewapps      manage reviewapps in pipelines
  run             run a one-off process inside a Heroku dyno
  sessions        OAuth sessions
  spaces          manage heroku private spaces
  status          status of the Heroku platform
  teams           manage teams
  update          update the Heroku CLI
  webhooks        list webhooks on an app

</pre>



<p>Openshift, Garden, Rio, Tilt und Jenkins X sind in diesem Sinne vergleichbare Produkte für Kubernetes. Sie alle sind deutlich näher an den Bedürfnissen von Entwicklern und versuchen Kubernetes mehr oder weniger &#8220;verschwinden&#8221; zu lassen. Jenkins X gefällt mir persönlich sehr gut weil sehr ausgereifte Kubernetes CI/CD Workflows für nahezu alle Laufzeitumgebungen git gesteuert out of the Box zur Verfügung stehen. Wer nicht mag sollte sich nicht mehr mit Kubernetes rumschlagen müssen. Zugegeben: On-Prem oder in Nischen Clouds ist Jenkins X heute kein Selbstgänger.</p>



<h2 class="wp-block-heading">Was macht ein Platform Team?</h2>



<p>Grundsätzlich wird ein dediziertes Platform Team erst ab einer gewissen  Größe einer Organisation und Menge von Anwendungen Sinn machen. Primäre Aufgabe dieses Teams sollte es sein Entwicklern das Arbeiten mit der Platform so einfach wie möglich zu gestalten &#8211; sie sollten sich schließlich auf die Umsetzung der Anforderungen ihrer Kunden (der Business-Units) fokussieren.</p>



<p>In einer reifen Cloud-Umgebung &#8220;verschwinden&#8221; viele Aspekte der Platform-Komplexität (&#8220;Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it.&#8221;). Man selbst hat nur noch wenig Arbeit mit diesen Dingen weil der Cloud (<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/261d.png" alt="☝" class="wp-smiley" style="height: 1em; max-height: 1em;" />Platform) Provider gut genug war sie verschwinden zu lassen ??. Otto beschreibt seinen Weg auf AWS und Erfahrungen im Kontext Platform im Post <a href="https://www.otto.de/jobs/technology/techblog/artikel/otto-goes-aws-teil-2_2018-12-03.php">OTTO goes AWS &#8211; Teil 2</a>.</p>



<p>Wie geht man mit einer Situation um wo man es mit einer weniger ausgereiften Umgebung zu tun hat? Wo gewisse essentielle Dienste womöglich fehlen? Sollte man selbst implementieren? (Und betreiben? Und langfristig warten?)</p>



<p>Pauschal kann man diese Fragen natürlich nicht beantworten. Ich denke man sollte vor allem ehrlich mit sich selbst sein und eigene Fähigkeiten nicht überschätzen bzw. Komplexität unterschätzen (Nerds neigen dazu). Ein guter Anwendungs-Entwickler ist noch lange kein guter Infrastruktur- oder Platform-Entwickler (Was ist eigentlich ein DevOps Engineer?)</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">The goal was to abstract away the infrastructure. We instead converted every application developer into an infrastructure developer.</p>&mdash; Jaana Dogan (@rakyll) <a href="https://twitter.com/rakyll/status/1254488061636866048?ref_src=twsrc%5Etfw">April 26, 2020</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p>In jeden Fall sollte man sich Zeit für ein gemeinsames Verständnis der Begriffe und Klarheit in Bezug auf Verantwortung nehmen.</p>



<p>Von autonomen Vertikalen haben wir inzwischen ein relativ gutes Verständnis. Wie in so einem Umfeld horizontale Plattform Dinge langfristig funktionieren scheint deutlich unklarer &#8211; insbesondere in Bezug auf die erforderlichen Strukturen in der Organisation und Planung. <a href="https://skamille.medium.com/make-boring-plans-9438ce5cb053">Make Boring Plans</a> bietet viele wertvolle Anregungen Kontext Plattform.</p>



<p></p>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/was-ist-eine-kuberntes-platform">Was ist eine Kubernetes Platform?</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/was-ist-eine-kuberntes-platform/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6785</post-id>	</item>
		<item>
		<title>Eine etwas andere DevOps Transformation</title>
		<link>https://www.contentreich.de/eine-etwas-andere-devops-transformation</link>
					<comments>https://www.contentreich.de/eine-etwas-andere-devops-transformation#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Tue, 06 Aug 2019 09:40:25 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Digital Transformation]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[New Work]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Softwarequalität]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6598</guid>

					<description><![CDATA[<p><img width="871" height="436" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/this-is-fine.png?fit=871%2C436&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Eine etwas andere DevOps Transformation" title="Eine etwas andere DevOps Transformation" decoding="async" loading="lazy" srcset="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/this-is-fine.png?w=1200&amp;ssl=1 1200w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/this-is-fine.png?resize=768%2C384&amp;ssl=1 768w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/this-is-fine.png?resize=1070%2C535&amp;ssl=1 1070w" sizes="auto, (max-width: 871px) 100vw, 871px" data-attachment-id="6602" data-permalink="https://www.contentreich.de/eine-etwas-andere-devops-transformation/this-is-fine" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/this-is-fine.png?fit=1200%2C600&amp;ssl=1" data-orig-size="1200,600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="This is fine dog" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/this-is-fine.png?fit=1200%2C600&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/this-is-fine.png?fit=871%2C436&amp;ssl=1" />DevOps verspricht Organisationen aller Art performant zu machen. Mit Recht! Unternehmen transformieren. Mit und ohne Unterstützung der Führung. Nicht immer laufen Dinge wie erwartet. Eine Geschichte.<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/eine-etwas-andere-devops-transformation">Eine etwas andere DevOps Transformation</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Neuland</h2>
<p>Es war einmal eine Software Schmiede. Sie hat immer alles selbst gemacht. Eines Tages stellte sich eine neue Herausforderung. Ein Projekt. Umfangreiche Funktionalität war gefordert. Der Rat der Weisen beschloss es dieses mal anders zu machen und sich im Internet nach einem Open Sauce Produkt umzuschauen. Das Gröbste sollte es doch fertig irgendwo zum Download im Internet geben.  Es dauerte nicht lang, da wurde man fündig. Die Würfel waren gefallen. Aber wer kennt sich damit aus? Man schaute sich weiter um. Dieses mal nach einem Dienstleister. Man wurde fündig. Der Plan war einfach. Der Dienstleister gibt Starthilfe, übergibt und verabschiedet sich dann. Dieses Vorgehen hatte sich in der Vergangenheit bewährt. Die Erben aus den Disziplinen Dev und Op wurden auserkoren.</p>
<p>Die Stimmung war sehr gut. Man freute sich auf ein neues Abenteuer. In der Startformation schien es als würde man die wichtigsten Werte Transparenz und Vertrauen teilen. Funktional schien alles überschaubar und klar. Die Herausforderung würde Skalierbarkeit und Verfügbarkeit werden. Das war auch klar. Zum Glück war da dieses Wundermittel am Horizont &#8211; Container. Alle machen das so. Die Funktionalität hatte der Dienstleister ruck zuck umgesetzt und man tütete den Code in diese Container ein. Proof of concept &#8230; ?.</p>
<p>Die Komponente des Dienstleister offerierte eine API welche auch von den ernannten Erben beim Kunden genutzt werden sollte. Bei der Abstimmung gab es Groll. Unter anderem weil man sich beim Format nicht so richtig entscheiden konnte zwischen XML und JSON. Da das Open Source Produkt und Tools wie Open API REST und JSON präferieren beugte man sich, bestand aber aus Legacy Gründen darauf XML zu nutzen. Wenn man XML Base64 kodiert bekommt man es schließlich auch in JSON verpackt. Eine Diskussion um die Relevanz von Zeichensätzen im Zusammenhang mit der API schließlich erzeugte eine merkliche Abkühlung der Stimmung zwischen Dienstleister und Dev Erben &#8211; vielleicht ein Schlüsselmoment.</p>
<h2>Akzeptanz</h2>
<p>Allen Bemühungen des Projekt Owner zum trotz distanzierten sie die Dev-Erben. Kommunikation war nur noch sehr schwer möglich. Die Anwendung reflektierte dies und belegte das <a href="https://de.wikipedia.org/wiki/Gesetz_von_Conway">Gesetz von Conway</a> auf eindrucksvolle Art und Weise. State Management und Hochverfügbarkeit wurden in einer Facade Schicht über der vom Dienstleister implementierten Komponente noch einmal implementiert. Richtung Geschäftsführung wurde kommuniziert das es läuft und das die Arbeit des Dienstleisters sich an einem Wochenende erschließen werde. Java programmieren kann ja auch nicht anders sein wie C#, Linux ist wie Windows und dieses Produkt kann ja auch kein Hexenwerk sein. Von nun an betrachteten die Dev-Erben das Treiben des Dienstleisters aus sicherer Entfernung und forderten regelmäßig Dokumentation. Diese Forderung nach Dokumentation sollte zum Running Gag werden. Beim Dienstleister machte sich der Verdacht breit das die Erben nicht so ganz hinter den Grundsatzentscheidungen des Projektes standen&#8230;</p>
<p>Unbeirrt implementierte der Dienstleister wie abgestimmt &#8220;Standard nach Gebrauchsanweisung aus dem Internet&#8221;. Insofern schien es konsequent und angebracht auf die hervorragende Dokumentation der jeweiligen Projekt-Maintainer zu verweisen und im Detail nur auf das einzugehen was man selbst Implementierte. Weil zwischenzeitig von Formaten wie Word die Rede war, und weil das bis dato gelieferte Markdown offensichtlich nicht auf Gegenliebe stieß ergänzte man mit gedruckter Literatur &#8211; offensichtlich aber auch vergebens.</p>
<h2>Noch eine Kleinigkeit</h2>
<p>Funktional war alles im grünen Bereich. Da war nur noch diese Geschichte mit der Skalierbarkeit und der Verfügbarkeit. Der Hersteller des Fundamentes signalisierte volles Commitment zu diesem Kubernetes. Man konnte den Elefanten im Raum nicht ignorieren. Der eine oder andere witterte &#8230; Komplexität &#8211; und Mangel an Ressourcen dieser Komplexität Herr zu werden. Glücklicherweise signalisierte der Kunde, dass Kubernetes längst beschlossene Unternehmensstrategie ist und das man damit schon rund zehn Projekte am Start hat. Dem Ersuchen von Kooperation und der Gründung eine Selbsthilfegruppe wurde vom Management eine Absage erteilt. Dem Dienstleister stelle man ein paar mit kubeadm bestückte On Prem Linux VMs und den Rest solle er dann alleine machen und dokumentieren. Den Dienstleister beschlich das Gefühl er werde ein Weilchen aus dem Feuerwehrschlauch trinken müssen. Weil er durstig war willigte er ein, beschloss aber auch ein unmissverständliches Signal zu senden was Kubernetes aus seiner Sicht bedeutete: DevOps!</p>
<p>Der Cloud Markt ging durch die Decke. Kubernetes stand als &#8220;Fastest moving project in Open Source history&#8221; mit DevOps DNA im Epizentrum. Ein gewisses Mindset erschien sachdienlich.  Alle Beteiligten wurden zu einer Präsentation zusammengetrommelt ?. Auf der ersten Folie stand da nun eben dieses Wort: DevOps. Und dessen Essenz von Wikipedia. Eigentlich sollte es ja nicht der Rede wert gewesen sein. Machten ja auch alle &#8211; wie Agile. Vielleicht wäre es besser gewesen der Dienstleister hätte es <a href="https://dev.to/bigzoo/explain-devops-like-im-five-1l0n">anders illustriert</a>.  Die Erben jedenfalls schienen unbeeindruckt und tiefenentspannt. Das Feedback unmittelbar nach dem Vortrag bestand im Wesentlichen aus Schweigen. Was am Tag drauf schriftlich kam erschien wie eine Lücke. Dem einen erschien sie als Spalt, dem anderen als Schlucht. Der Dienstleister begann sich Sorgen zu machen was an Kommunikation mit den Dev-Erben überhaupt möglich ist solange offensichtlich komplett unterschiedliches Verständnis bei grundlegenden Begriffen besteht.</p>
<p>Mit Projektleitung und Ops immerhin schien man zu einem gemeinsamen Verständnis zu kommen. Man orientierte sich an einschlägiger Literatur wie Projekt Phoenix, Accelerate oder Reinventing Organisations. Dev und Management sahen keine Notwendigkeit zu Begriffsklärung.</p>
<h2>Alternative Fakten</h2>
<p>Sobald das Wort DevOps in einem gewissen Personenkreis ausgesprochen war wurde versichert das es bereits implementiert ist. Werkzeuge waren ja gekauft. Und dieses Wort war ja auch in Namen eines Produktes! Alle Symptome jedoch deuteten auf das Gegenteil hin. Misstrauen war allgegenwärtig.</p>
<p>Im Bestreben Werte und Kultur des Kunden zu verstehen studierte er was das Unternehmen im Internet publizierte. &#8220;Mitarbeiter Zentrum des Erfolges &#8230; modernste Technik &#8230; stetig fördern &#8230; Innovation &#8230; Cloud &#8230; aktuelle Methoden &#8230; agile  &#8230; Scrum &#8230; familiär &#8230;&#8221; &#8211; das klang alles vernünftig, reflektierte aber in keinster Weise die Beobachtungen. Es fing schon bei Agile an:</p>
<blockquote><p>Wir erschließen bessere Wege, Software zu entwickeln,indem wir es selbst tun und anderen dabei helfen. Durch diese Tätigkeit haben wir diese Werte zu schätzen gelernt:</p></blockquote>
<ul>
<li>
<blockquote><p>Individuen und Interaktionen mehr als Prozesse und Werkzeuge</p></blockquote>
</li>
<li>
<blockquote><p>Funktionierende Software mehr als umfassende Dokumentation</p></blockquote>
</li>
<li>
<blockquote><p>Zusammenarbeit mit dem Kunden mehr als Vertragsverhandlung</p></blockquote>
</li>
<li>
<blockquote><p>Reagieren auf Veränderung mehr als das Befolgen eines Plans</p></blockquote>
</li>
</ul>
<p>Die Gestalt der Organisation erschien wie Modell Wolfsrudel mit Ambitionen auf Maschine. Was ging hier vor sich? Vor dem Hintergrund das man gewohnt war alles selbst zu machen hatte man vielleicht auch den Begriff DevOps selbst neu definiert, passend zum Unternehmen transformiert, und so alternative Fakten geschaffen? In jeden Fall entstand der Eindruck das die Leute zutiefst überzeugt von dem waren was sie sagten. Der Dienstleister malte sich Szenario Vorstellungsgespräch mit einem Bewerber aus der fragt ob im Unternehmen DevOps praktiziert wird &#8230;</p>
<h2>Infrastruktur und Plattform</h2>
<p>Was soll&#8217;s, das Ergebnis würde am Ende hoffentlich überzeugen. Abstimmung mit Op im Kontext Platform und Infrastruktur gestalteten sich glücklicherweise unkomplizierter. Es gab hier sehr viele Aufgaben die zwingend vor Launch angegangen werden mussten: Observability, Logging, Monitoring, Alerting, Storage, CI/CD, Lifecycle/Auditing of all things &#8211; und so. Man beschloss die Disziplinen Chaos Engineering und Sec zu vertagen. Es erschien sinnvoll diese Dinge selbst &#8220;from Scratch&#8221; bottom up zu durchleiden &#8211; zumindest wenn man die Absicht hat sie diese Themen selbst langfristig umzuhängen statt eine schlüsselfertige Kubernetes Lösung zu nutzen. Nach etwa einem Jahr hatte der Dienstleister all die Dinge in Abstimmung mit Projekt Owner und Op-Erben in Open Source On Prem umgesetzt.</p>
<p>Dev implementierte Last-Tests. Wenn der Begriff Chaos Engineering noch frei gewesen wäre hätte man die Durchführung dieser Tests durchaus so bezeichnen können &#8230;</p>
<p>Dem dringenden Ersuchen des Projekt Owners jemand Erfahrenes aus der Belegschaft im Projekt einzubinden wurde von der Geschäftsführung stattgegeben. Erfahrung ist aber relativ. Auf den einen oder anderen wirkte diese Maßnahme wie ein Placebo. Zumal der neue Kubernetes erfahrene Mann des Kunden sich für Historie und Quellcode der Projektes, Präsentation und auch Kubernetes selbst augenscheinlich nicht die Bohne interessierte.</p>
<h2>Plattform Battle</h2>
<p>Technisch war nicht alles perfekt aber es gab Fälle die liefen. Wegen &#8220;Not invented here&#8221; und der nach wie vor schwierigen Kommunikation mit den Dev-Erben entschloss sich das Management für ein Battle. Die eigene Mannschaft sollte selbst auch nochmal ihre Kubernetes Plattform bauen. Entwickler sind ja schließlich Entwickler. Anwendung, Infrastruktur oder Plattform &#8211; spielt doch keine Rolle &#8211; same same. Die bessere Lösung würde dann produktiv gehen. Management setzte Doomsday. Formal sollte Doomsday &#8220;alles&#8221; an den Kunden übergeben werden. Abgesehen von der Kubernetes-Plattform Implementierung waren die Gewerke des Dienstleisters zu diesem Zeitpunkt bereits seit etwa einem Jahr dokumentiert, der Quellcode stand stets offen. Infrastruktur und Plattform wurde wie in der Präsentation skizziert umgesetzt.</p>
<p>Team Kunde legte mit der Präsentation seiner Lösung vor. Für die Pipelines wählte man anders als der Dienstleister natürlich das Produkt was man schon seit Jahren lizenziert im Haus hatte. Man demonstrierte einen CI Build und zeigte ein System-Diagramm. Das CI System schien abgesehen von der Erzeugung eines Images nicht besonders auf das Kubernetes Umfeld einzugehen.</p>
<p>Die Präsentation des Dienstleisters zeigte ebenfalls ein System-Diagramm und durch Commits ausgelöste Builds und Deployments mit dem auf Kubernetes spezialisierten System aus der Präsentation. Er bemühte sich abermals auf fundamentale Dinge wie deklarativen Infrastruktur Code einzugehen &#8211; Reconciliation, GitOps, Pets und Cattle, Automatisierung und so. Das Szenario Pizza selbst backen bzw. von Kubernetes backen lassen illustrierte den Unterschied zwischen imperativ und deklarativ. Von Bedeutung schienen der Entwicklungsabteilung diese Dinge nicht. Wenn alle mit Admin Rechten und Tool der Wahl imperativ deklarativ arbeiten würde das wohl gut gehen.</p>
<p>Der Projekt Owner wählte das System des Dienstleisters für den Livegang.  Nennenswerte Zwischenfälle gab es in Produktion bis auf weiteres erst einmal keine. Für die Entwicklungsabteilung stand dennoch fest: Die eigene Implementierung muss die des Dienstleisters ablösen weil &#8220;Not invented here&#8221; und auch eine Frage der Ehre. Befindlichkeiten bestimmten schon lange das Handeln.</p>
<h2>Erwachet!</h2>
<p>In Bezug auf den Begriff DevOps erhielt der Dienstleister unerwartet eine Mail eines Managers. Im Anhang war ein Zeitungsartikel welcher &#8220;Aspekte von DevOps im C# Umfeld&#8221; beleuchten sollte mit einem &#8220;spannenden Abschnitt zur Reduktion von Komplexität&#8221;. Der Dienstleister nahm Stellung. Inbesondere brachte er zum Ausdruck, das es nach seinem Verständnis sehr viel bedeutendere Themen an der Basis gebe über die man sich verständigen sollte &#8211; Dinge die auch in dem Artikel angesprochen wurden: &#8220;Kultur der Zusammenarbeit&#8221; und &#8220;Digitale Transformation&#8221;.</p>
<p>Der Dienstleister entschied sich einen letzten Versuch zu unternehmen dem Unternehmen die Bedeutung von DevOps näher zu bringen. Er schickte dem Kunden eine handvoll T-Shirts &#8220;DevOps &#8211; Deploying Services since 2000&#8221;. Anschließend verfasste er eine vertrauliche Mail an die Geschäftsführung. Er wies insbesondere darauf hin, dass essentielle Dinge wie Kubernetes und dessen Grundlage DevOps in akuter Gefahr schienen nachhaltig im Unternehmen zu scheitern. Er untermauerte mit Fakten.</p>
<p>Die Reaktion der Geschäftsführung ließ nur den Schluss zu das bis auf weiteres alles bleiben wird wie es ist ???. Das Haus brennt aber man sah keine Notwendigkeit etwas zu unternehmen. Es blieb unklar blieb ob man das Issue nicht sah oder nicht sehen wollte. Immerhin birgt &#8220;Raus aus Komfortzone und alles anders&#8221; ja auch das eine oder andere Risiko und die Zahlen in Excel waren zu diesem Zeitpunkt vielleicht noch nicht rot genug. Game over?</p>
<p>PS: Im Kontext Kubernetes gibt es eine wundervolle <a href="https://github.com/hjacobs/kubernetes-failure-stories">Failure Story Sammlung</a>. Gibt es eine vergleichbare Sammlung im Kontext &#8220;Digitale Transformation&#8221;? Mit so Geschichten wie <a href="https://www.handelsblatt.com/unternehmen/handel-konsumgueter/luftfahrt-die-lufthansa-steckt-in-der-digitalfalle/24386562.html">Die Lufthansa steckt in der Digitalfalle</a>?</p>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/eine-etwas-andere-devops-transformation">Eine etwas andere DevOps Transformation</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/eine-etwas-andere-devops-transformation/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6598</post-id>	</item>
		<item>
		<title>Kubernetes: Widerstand ist zwecklos</title>
		<link>https://www.contentreich.de/kubernetes-widerstand-ist-zwecklos</link>
					<comments>https://www.contentreich.de/kubernetes-widerstand-ist-zwecklos#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Tue, 28 May 2019 08:25:29 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Digital Transformation]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6501</guid>

					<description><![CDATA[<p><img width="871" height="490" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/picard-and-borg.jpg?fit=871%2C490&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Kubernetes: Widerstand ist zwecklos" title="Kubernetes: Widerstand ist zwecklos" decoding="async" loading="lazy" srcset="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/picard-and-borg.jpg?w=1180&amp;ssl=1 1180w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/picard-and-borg.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/picard-and-borg.jpg?resize=1070%2C602&amp;ssl=1 1070w" sizes="auto, (max-width: 871px) 100vw, 871px" data-attachment-id="6514" data-permalink="https://www.contentreich.de/picard-and-borg" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/picard-and-borg.jpg?fit=1180%2C664&amp;ssl=1" data-orig-size="1180,664" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="picard-and-borg" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/picard-and-borg.jpg?fit=1180%2C664&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/picard-and-borg.jpg?fit=871%2C490&amp;ssl=1" />Time to Market, Skalierbarkeit und Kosteneffizienz sind die Merkmale der Cloud. Wer wettbewerbsfähig bleiben will braucht eine Cloud Strategie. Sonnenklar? Kubernetes? Läuft? Dieser Post versucht zu erklären warum heute kein Weg an Kubernetes vorbei geht.<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/kubernetes-widerstand-ist-zwecklos">Kubernetes: Widerstand ist zwecklos</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Time to Market, Skalierbarkeit und Kosteneffizienz sind die Merkmale der Cloud. Wer wettbewerbsfähig bleiben will braucht eine Cloud Strategie. Sonnenklar? Kubernetes? Läuft? Dieser Post versucht zu erklären warum heute kein Weg an Kubernetes vorbei geht.</p>
<p>tl;dr: <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/261d.png" alt="☝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Check yourself before you wreck yourself!</p>
<h2>Cloud Computing</h2>
<p>Public Cloud Computing war 2018 ein USD 182 Mrd. USD Markt. <a href="https://www.gartner.com/en/newsroom/press-releases/2019-04-02-gartner-forecasts-worldwide-public-cloud-revenue-to-g">Gartener erwartet bis 2022 weiter starkes Wachstum</a>. Vor diesem Hintergrund also kein Wunder das man heute beim <a href="https://www.zdnet.com/article/top-cloud-providers-2019-aws-microsoft-azure-google-cloud-ibm-makes-hybrid-move-salesforce-dominates-saas/">Wettbewerb der Giganten Amazon, Microsoft Google und IBM von Cloud Wars spricht</a> &#8211; aktuelles Schlachtfeld unter anderen On-Premise/Hybrid. Trends der einzelnen Segmente findet man u.a. im <a href="https://www.gartner.com/en/documents/3884671">Gartner Hype Cycle for Cloud Computing, 2018</a>. Weiterhin prognostiziert Gartner, dass viele Softwarehersteller bis zum Jahr 2020 &#8220;Cloud-first&#8221;-Strategien durch &#8220;Cloud-only“ ersetzen</p>
<p>Konkret heißt das für Anwender:</p>
<blockquote><p>Organizations that do not have a high-level cloud strategy driven by their business strategy will significantly increase their risk of failure and wasted investment. (David W. Cearley, Vice President and Gartner Fellow, Gartner Research)</p></blockquote>
<p>Traditionell dient Datenschutz in Europa oft als Totschlag-Argument gegen die Public Cloud. Ich bin kein europäischer Datenschützer und ich möchte hier auch nicht auf das Thema eingehen. Denjenigen welchen das Thema am Herz liegt finden vielleicht Antworten in den Success Stories <a href="https://dev.otto.de/2018/10/04/otto-goes-aws/">OTTO goes AWS – Teil 1</a> , <a href="https://dev.otto.de/2018/12/03/otto-goes-aws-teil-2/">OTTO goes AWS – Teil 2</a> oder der Keynote &#8220;From COBOL to Kubernetes: A 250 Year Old Bank&#8217;s Cloud-Native Journey&#8221;.</p>
<p><iframe loading="lazy" class="youtube-player" width="871" height="490" src="https://www.youtube.com/embed/uRvKGZ_fDPU?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=de-DE&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe></p>
<p>&nbsp;</p>
<p>Um schnell ein grobes Gefühl für das aktuelle High-End im Cloud Computing zu bekommen kann man einen Blick auf das obere Ende der Skala &#8211; also auf die <a href="https://aws.amazon.com/de/products/">Produkte</a> des Marktführers <a href="https://aws.amazon.com/de/products/compute/">Amazon Cloud</a> werfen.</p>
<h2>Cloud Native</h2>
<p>Cloud Native ein essentieller Begriff im Kubernetes Kontext:</p>
<blockquote><p>Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.</p>
<p>These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.</p>
<p>The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone. (Definition 1.0)</p></blockquote>
<p>In diesem wenigen Worten steckt so unglaublich viel, dass an dieser Stelle nur ganz kurz darauf eingegangen werden soll. Es ändert alles. Wirklich <strong>ALLES</strong>. Durch und durch. Das jedenfalls ist mein Empfinden als jemand der Linux seit 1995 nutzt.</p>
<p>Die neuen Building Blocks sind Container die &#8220;überall&#8221; laufen können und die hochdynamisch vernetzt werden. Technisch hilft die <a href="https://landscape.cncf.io/">CNCF Cloud Native Interactive Landscape</a> hilft bei der Orientierung aus der Vogelperspektive. Datenbanken, Storage, Security, Networking, Workload Scheduling, Observability, Packaging, Automation &#8211; alles ist anders. <strong>Ganz anders</strong>. <a href="https://microservices.io/patterns/microservices.html">Microservices Pattern</a> reflektieren das auf Architektur-Ebene. Neue Richtlinien wie <a href="https://12factor.net/">Twelve-Factor App</a> oder das <a href="https://www.reactivemanifesto.org/">Reactive Manifesto</a> sind entstanden. Techniker die bisher nur mit klassischen Monolithen und SOA gearbeitet haben sind gut beraten sich <strong>frühzeitig</strong> mit diesen Dingen vertraut zu machen. In Kubernetes begegnen sie einem ununterbrochen und es hilft ungemein wenn man die DNA der Dinge versteht.</p>
<p>Dinge die man bis dato gut verstanden zu haben schien werden plötzlich Neuland &#8211;  z.B. Storage. Die größten Erdbeben scheinen aktuell im Netzwerk Umfeld zu liegen. Auf der KubeCon / Cloud Native Con 2019 in Barcelona schien es mir so als ob die Hälfte der Talks im Umfeld Service Mesh, API Gateway und Service Proxy waren.  Man traut sich da kaum über den Tellerrand zu blicken und sich zu fragen wann und wie Änderungen an den Building Blocks des Networking wie <a href="https://blog.cloudflare.com/cloudflare-architecture-and-how-bpf-eats-the-world/">EBPF</a> durchschlagen. Die Tatsache, dass man inzwischen oft schon von DevSecOps spricht lässt erahnen wie gigantisch das Thema Sicherheit ist. Und wie es darum steht. ?</p>
<p>Stichwort DNA:  Die Cloud Native Definition signalisiert bereits die DevOps DNA der Dinge (s. <a href="https://www.contentreich.de/devops-or-die">DevOps or die!</a>). Ich würde behaupten, wertschöpfende Nutzung von Kubernetes ist ohne DevOps Kultur nicht möglich und man sollte es besser sein lassen wenn man nicht bereit ist DevOps zu leben.</p>
<h2>Kubernetes</h2>
<p>Das mit der Dynamik trifft im Übrigen auch auf die Entwicklung von Kubernetes zu. Es ist zusammen mit Linux &#8220;fastest moving project in Open Source history&#8221; (Dan Kohn, CNCF executive director).</p>
<p>Aber was genau ist eigentlich Kubernetes und warum genau geht es so <a href="https://insights.dice.com/2019/01/02/top-tech-skills-2018-kotlin-kubernetes/">durch die Decke</a>?</p>
<blockquote><p>Kubernetes ist ein Open-Source-System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen.</p></blockquote>
<p>Es ist entstanden aus &#8220;Borg&#8221; &#8211; einem Google internen Projekt zur Verwaltung von Containern. Es wurde 2014 von Google als Open Source freigegeben. In diesem Zuge wurde die Cloud Native Computing Foundation unter dem Dach der Linux Foundation gegründet. Zu diesem Zeitpunkt gab es bereits viele verschiedene Lösungen für vergleichbare Probleme. Die Ursache für den kometenhaften Aufstieg liegen in Open Source und der Demokratisierung &#8211; Niemand macht sich gerne abhängig von einem Anbieter (Vendor Lock-In), alle lieben Open Source.</p>
<h2>Wo anfangen? Was gibt es zu tun?</h2>
<p>Um das zu beantworten sollte man sich Zeit nehmen ein paar Fragen beantworten:</p>
<ul>
<li>Welche Kubernetes-/DevOps-/Linux-/Go Skills habe ich im Unternehmen?</li>
<li>Welche Dinge möchte ich bis wann erledigen und welche Kapazitäten habe ich?</li>
<li>Welche Themen (Infrastruktur, Plattform, Entwicklung, Betrieb) möchte ich langfristig in House behalten? Bin ich damit wettbewerbsfähig?</li>
<li>Überblicke ich den <a href="https://github.com/hjacobs/kubernetes-failure-stories">Blast-Radius</a> der Dinge und habe ich Backup &amp; Recovery im Griff?</li>
<li>Wie sieht der Markt für Produkte und Dienstleitungen aus?</li>
<li>Wo gehe ich Top Down, wo Bottom Up vor?</li>
<li>Was erwarte ich an Total Cost of Ownership?</li>
</ul>
<p><strong>Man sollte unbedingt wissen wo man steht, was die erste Station der Reise sein soll, wie weit der zur ersten Station und wie der initiale Kurs ist. &#8220;Kubernetes is a Journey, not a destination&#8221;.</strong></p>
<p>Auch hier schadet der eine oder andere Blick an das obere Ende der Skala nicht. In Sachen Betrieb ist das aktuell zum Beispiel <a href="https://dev.to/kmaschta/site-reliability-engineering-googles-secret-sauce-for-high-availability-and-happy-ops-34li">Site Reliability Engineering </a>:</p>
<p>Wie viel Infrastruktur und Betrieb kann ich mir selbst zumuten?</p>
<p>Management Protip: Man macht den Bock nicht über Nacht zum Gärtner. Anwendungs-Entwickler sind in der Regel keine guten Infrastruktur Entwickler. Im Gegenteil: Anwendungs-Entwickler sollten möglichst <strong>wenig</strong> von Infrastruktur sehen. Dieser Anspruch ist insbesondere auch Gegenstand von Serverless &#8230; das gerade auch deswegen (und wegen der Kosten) ebenfalls durch die Decke geht &#8211; und zwar so, dass die CNCF diesem Segment eine <a href="https://landscape.cncf.io/format=serverless">dedizierte Karte</a> spendiert hat.</p>
<p>Fazit: Kubernetes erobert die Cloud im Sturm. Widerstand ist zwecklos. Man sollte sich frühzeitig Zeit nehmen ein wenig Verständnis für die  Dinge im Großen und Ganzen zu bekommen und eine Cloud Strategie zu erarbeiten. <a href="https://www.contentreich.de/kontakt">Dienstleister können helfen</a>. ?</p>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/kubernetes-widerstand-ist-zwecklos">Kubernetes: Widerstand ist zwecklos</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/kubernetes-widerstand-ist-zwecklos/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6501</post-id>	</item>
		<item>
		<title>DevOps &#8230; or die! ?</title>
		<link>https://www.contentreich.de/devops-or-die</link>
					<comments>https://www.contentreich.de/devops-or-die#comments</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Tue, 28 May 2019 08:23:22 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Digital Transformation]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6519</guid>

					<description><![CDATA[<p><img width="871" height="490" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/loney-tunes-dash.jpg?fit=871%2C490&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="DevOps &#8230; or die! ?" title="DevOps &#8230; or die! ?" decoding="async" loading="lazy" srcset="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/loney-tunes-dash.jpg?w=1280&amp;ssl=1 1280w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/loney-tunes-dash.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/loney-tunes-dash.jpg?resize=1070%2C602&amp;ssl=1 1070w" sizes="auto, (max-width: 871px) 100vw, 871px" data-attachment-id="6521" data-permalink="https://www.contentreich.de/devops-or-die/loney-tunes-dash" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/loney-tunes-dash.jpg?fit=1280%2C720&amp;ssl=1" data-orig-size="1280,720" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="loney-tunes-dash" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/loney-tunes-dash.jpg?fit=1280%2C720&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2019/05/loney-tunes-dash.jpg?fit=871%2C490&amp;ssl=1" />DevOps trendet, daran besteht kein Zweifel - Unternehmen implementieren - wie damals bei Agile. DevOps ist gigantisch - sehr viel größer als Agile weil es kein reines Entwicklungs-Thema ist. Da ist dieser Hype wo man mit muss.  Dieser Post versucht die Essenz von DevOps wiederzugeben.<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/devops-or-die">DevOps &#8230; or die! ?</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>DevOps trendet, daran besteht kein Zweifel &#8211; Unternehmen implementieren &#8211; wie damals bei <a href="https://agilemanifesto.org/">Agile</a>. DevOps ist gigantisch. Es ist sehr viel größer als Agile weil es kein reines Entwicklungs-Thema ist. Nun ist da dieser Hype wo man mit muss. Wie bei jedem Hype ist es auch bei DevOps inzwischen so das viele nicht mehr wissen was eigentlich dahinter steht. Im Kontext Agile spricht Martin Fowler in <a href="https://martinfowler.com/articles/agile-aus-2018.html">The State of Agile Software in 2018</a> von &#8220;faux agile&#8221;. Das Zusammenspiel der Dinge bei DevOps erschließt sich einem nicht über Nacht. Dieser Post versucht trotzdem die Essenz von DevOps wiederzugeben. ?</p>
<p>Zur Erinnerung aus <a href="https://de.wikipedia.org/wiki/DevOps">DevOps &#8211; Wikipedia</a>:</p>
<blockquote><p>DevOps is agile IT (operations) delivery, required to match the cadence of agile IT development. DevOps is a philosophy, not a method, or framework, or body of knowledge, or *shudder* vendor’s tool. DevOps is the philosophy of unifying Development and Operations at the culture, practice, and tool levels, to achieve accelerated and more frequent deployment of changes to Production.</p></blockquote>
<p>Im State of DevOps Report 2014 schrieb Jez Humble:</p>
<blockquote><p>We can now assert with confidence that high IT performance correlates with strong business performance, helping to boost productivity, profitability and market share.</p></blockquote>
<p>Es geht also im Kern drum dem Kunden so schnell wie möglich Mehrwert zu liefern.</p>
<p>Martin Fowler schreibt dazu im Vorwort von <a href="https://www.amazon.de/Accelerate-Software-Performing-Technology-Organizations/dp/1942788339">Accelerate: The Science of Lean Software and Devops: Building and Scaling High Performing Technology Organizations</a></p>
<blockquote><p>Their evidence refutes the Bimodal IT notion that you have to choose between speed and stability, instead speed depends on stability, so good IT practices give you both.</p></blockquote>
<p>Geschwindigkeit und Stabilität gehen also Hand in Hand! ? Er spricht von &#8220;Beweis&#8221; weil das in diesem Buch präsentierte Ergebnis auf<strong> vier Jahren wissenschaftlicher Forschung über alle Größen von Unternehmen und alle Branchen basiert</strong>.</p>
<p>Die ultimative Zusammenfassung der Ergebnisse ist dieses Diagramm zum Buch Accelerate:</p>
<p><blockquote class="twitter-tweet" data-width="550" data-lang="en" data-dnt="true" data-partner="jetpack"><p lang="en" dir="ltr">Overlapping arrows! Here&#39;s a cleaner version. <a href="https://t.co/PYu08Y3rN4">pic.twitter.com/PYu08Y3rN4</a></p>&mdash; nicole forsgren PHD IN COMPUTERING THINGS (@nicolefv) <a href="https://twitter.com/nicolefv/status/1056983435783299074?ref_src=twsrc%5Etfw">October 29, 2018</a></blockquote></p>
<p>&nbsp;</p>
<p>Und weil der Ausdruck &#8220;Performance&#8221; so omnipräsent ist auch nochmal zur Erinnerung: Software Delivery Performance wird gemessen in Lead Time, Deployment Frequency, Meant Time to Restore und Change Fail Percentage.</p>
<p>Weil man es gar nicht deutlich genug sagen kann:  DevOps startet mit <strong>Kultur</strong>! Und diese Kultur ist <strong>essentiell</strong>. DevOps ist sehr viel mehr als ein paar CI Pipelines. Genau diese Tatsache kann Implementierung sehr schwierig machen, denn Kulturwandel ist nicht jedes Mitarbeiters Sache:</p>
<p><blockquote class="twitter-tweet" data-width="550" data-lang="en" data-dnt="true" data-partner="jetpack"><p lang="de" dir="ltr">Auf vielfachen Wunsch Bild mit CC Lizenz: „ALLE mitnehmen wollen in Veränderungsprozessen?“ <a href="https://t.co/8wn6565ZwW">pic.twitter.com/8wn6565ZwW</a></p>&mdash; Tanja Föhr (@tanjafoehr) <a href="https://twitter.com/tanjafoehr/status/1040485271010193408?ref_src=twsrc%5Etfw">September 14, 2018</a></blockquote></p>
<p>&nbsp;</p>
<p>Ganz besonders schwierig gestalten sich Versuche kopfloser DevOps Transformationen von pathologischen (power-orientierten) Organisationen. In Bezug auf Kultur schadet es da sicher nicht die Führung einer Organisation zu reflektieren. Der Post <a href="https://daviddewolf.com/what-does-a-modern-cto-look-like-cto-job-description/">What Does a Modern CTO Look Like? </a>aus 2014 scheint mir heute so aktuell wie damals.</p>
<p>Hat man eine Wahl?</p>
<p>Die Lücke zwischen High- und Low-Performern jedenfalls wird größer (aus <a href="https://www.zdnet.com/article/gap-between-devops-savvy-and-non-savvy-companies-is-huge-survey-finds/">Gap between DevOps-savvy and non-savvy companies is huge, survey finds</a>)</p>
<blockquote><p>The survey shows that high-performing organizations are widening their lead against lower-performing organizations. Compared to low performers, high-performing organizations deploy 200 times more frequently, have 2,555 times faster lead times, and recover 24 times faster from failed changes, with three times lower change fail rates.</p></blockquote>
<p>Der größere Kontext zu DevOps ist natürlich ? New Work und Digitale Transformation ?. Ich persönlich war hier schwer beeindruckt von den Aussagen des Otto Group CEO Alexander Birken:</p>
<p><iframe loading="lazy" class="youtube-player" width="871" height="490" src="https://www.youtube.com/embed/jut_YdVSh90?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=de-DE&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe></p>
<p>&nbsp;</p>
<p>Interessierten denen wissenschaftliche Lektüre nicht liegt empfehle ich <a href="https://www.amazon.de/Projekt-Phoenix-Roman-DevOps-Erfolgsstrategien/dp/395875175X">Project Phoenix</a>. Ein wirklich fesselnder Roman der leicht verdaulich einleuchtend vermittelt wie die einzelnen Dinge in DevOps zusammenspielen.</p>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/devops-or-die">DevOps &#8230; or die! ?</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/devops-or-die/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6519</post-id>	</item>
		<item>
		<title>Pure Gold of Advice for Developers</title>
		<link>https://www.contentreich.de/pure-gold-of-advice-for-developers</link>
					<comments>https://www.contentreich.de/pure-gold-of-advice-for-developers#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Fri, 22 Feb 2019 07:46:21 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6473</guid>

					<description><![CDATA[<p><img alt='' src='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=96&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=192&#038;d=mm&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'/>✨✨✨<!-- Format : aside --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/pure-gold-of-advice-for-developers">Pure Gold of Advice for Developers</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img alt='' src='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=96&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=192&#038;d=mm&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'/><p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><blockquote class="twitter-tweet" data-width="550" data-lang="en" data-dnt="true" data-partner="jetpack"><p lang="en" dir="ltr">A young developer wrote me an email asking for career advice. This was my response: <a href="https://t.co/HQ58A1I8ht">pic.twitter.com/HQ58A1I8ht</a></p>&mdash; Henrik Joreteg (@HenrikJoreteg) <a href="https://twitter.com/HenrikJoreteg/status/1097417624990830592?ref_src=twsrc%5Etfw">February 18, 2019</a></blockquote></p>
<!-- Format : aside --><p>Der Beitrag <a href="https://www.contentreich.de/pure-gold-of-advice-for-developers">Pure Gold of Advice for Developers</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/pure-gold-of-advice-for-developers/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6473</post-id>	</item>
		<item>
		<title>Deploy to Production</title>
		<link>https://www.contentreich.de/deploy-to-production</link>
					<comments>https://www.contentreich.de/deploy-to-production#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Sun, 27 Jan 2019 11:16:22 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6464</guid>

					<description><![CDATA[<p><img alt='' src='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=96&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=192&#038;d=mm&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'/>I. Can&#8217;t. Stop. Laughing! ?<!-- Format : video --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/deploy-to-production">Deploy to Production</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>I. Can&#8217;t. Stop. Laughing! ? </p>
<p><iframe loading="lazy" class="youtube-player" width="871" height="490" src="https://www.youtube.com/embed/5p8wTOr8AbU?version=3&#038;rel=0&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=de-DE&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe></p>
<!-- Format : video --><p>Der Beitrag <a href="https://www.contentreich.de/deploy-to-production">Deploy to Production</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/deploy-to-production/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6464</post-id>	</item>
		<item>
		<title>Innovation, Spätzünder und Verweigerer</title>
		<link>https://www.contentreich.de/innovation-spaetzuender-und-verweigerer</link>
					<comments>https://www.contentreich.de/innovation-spaetzuender-und-verweigerer#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Fri, 14 Sep 2018 14:02:26 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Productivity]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6448</guid>

					<description><![CDATA[<p><img alt='' src='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=96&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=192&#038;d=mm&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'/>Ihr kennt das :) Nicht das &#8220;Gleiche&#8221;, aber mir kam das Muster grundsätzlich auch irgendwie vertraut vor : Technology adoption life cycle<!-- Format : aside --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/innovation-spaetzuender-und-verweigerer">Innovation, Spätzünder und Verweigerer</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img alt='' src='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=96&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=192&#038;d=mm&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'/><p>Ihr kennt das :)</p>
<p><blockquote class="twitter-tweet" data-width="550" data-lang="en" data-dnt="true" data-partner="jetpack"><p lang="de" dir="ltr">Auf vielfachen Wunsch Bild mit CC Lizenz: „ALLE mitnehmen wollen in Veränderungsprozessen?“ <a href="https://t.co/8wn6565ZwW">pic.twitter.com/8wn6565ZwW</a></p>&mdash; Tanja Föhr (@tanjafoehr) <a href="https://twitter.com/tanjafoehr/status/1040485271010193408?ref_src=twsrc%5Etfw">September 14, 2018</a></blockquote></p>
<p>Nicht das &#8220;Gleiche&#8221;, aber mir kam das Muster grundsätzlich auch irgendwie vertraut vor : <a href="https://en.wikipedia.org/wiki/Technology_adoption_life_cycle">Technology adoption life cycle</a></p>
<!-- Format : aside --><p>Der Beitrag <a href="https://www.contentreich.de/innovation-spaetzuender-und-verweigerer">Innovation, Spätzünder und Verweigerer</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/innovation-spaetzuender-und-verweigerer/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6448</post-id>	</item>
		<item>
		<title>Alfresco Bulk Import : Version 6, cm:content support and beyond</title>
		<link>https://www.contentreich.de/alfresco-bulk-import-alfresco-6-and-cm-content-support-and-beyond</link>
					<comments>https://www.contentreich.de/alfresco-bulk-import-alfresco-6-and-cm-content-support-and-beyond#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Tue, 03 Jul 2018 06:56:41 +0000</pubDate>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6412</guid>

					<description><![CDATA[<p><img width="748" height="318" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/07/windows-loading-748.gif?fit=748%2C318&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Alfresco Bulk Import : Version 6, cm:content support and beyond" title="Alfresco Bulk Import : Version 6, cm:content support and beyond" decoding="async" loading="lazy" data-attachment-id="6409" data-permalink="https://www.contentreich.de/windows-loading-748" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/07/windows-loading-748.gif?fit=748%2C318&amp;ssl=1" data-orig-size="748,318" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="windows-loading-748" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/07/windows-loading-748.gif?fit=748%2C318&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/07/windows-loading-748.gif?fit=748%2C318&amp;ssl=1" />I extended the excellent Alfresco Bulk Import tool to play with Alfresco 6 and support cm:content properties. More wishes came up along the way. I'd like to know where the community wants things headed.<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/alfresco-bulk-import-alfresco-6-and-cm-content-support-and-beyond">Alfresco Bulk Import : Version 6, cm:content support and beyond</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>tldr;</strong> I extended the excellent Alfresco Bulk Import tool to play with Alfresco 6 and support <code>cm:content</code> properties. More wishes came up along the way. I&#8217;d like to know where the community wants things headed.</p>
<p>I am currently assisting on a greenfield project which just switched to Alfresco 6. At this time, the project only uses core functionality of the repository so we considered the choice reasonable even though the new major release is not quite GA yet. Things showing up on the horizon were just too tempting. More on Kubernetes likely to follow soon. We expected to be faced with regressions but at the same time expected them not to be red flags holding us back. Those expectations haven been proven true so far. Our application required very little changing &#8211; mostly due to library updates. Getting SDK 3 to play was a slightly &#8220;bigger&#8221; issue.</p>
<h2>Current State of Affairs</h2>
<p>Long story short: The primary motivation was getting Alfresco Bulk Import to play with Alfresco 6. Hence, I implemented that bare bones and opened up an issue <a href="https://github.com/pmonks/alfresco-bulk-import/issues/78">Alfresco 6 Support</a> on Peters repo. Had to drop the old SDK 2 dependency to get proper deps in. I never liked amp to I switched it to build a plain jar instead. It seemed desirable to have one artifact supporting all versions of Alfresco so I changed a few Jackson calls to use reflection. I did not yet try it on Alfresco 4 or 5 but I am pretty confident it will be working as well. Furthermore, we found it was lacking a feature we needed &#8211; <code>cm:content</code>property type support. Time is always tight and getting things to play is always highest priority. I tried my best keeping all those existing abstractions clean while adding the new functionality.</p>
<p>With the filesystem based implementation and XML metadata reader, <code>cm:content</code> properties appear just as all other other metadata in <code>foo.metadata.properties.xml</code>:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="x">&lt;entry key="yns:contentProp"&gt;../../path/to/file.xml&lt;/entry&gt;
</pre>
<p>We reference a file and distinguish by checking the dictionary with the type. If we find it to be <code>cm:content</code> and if the referenced file exists, we deal with it accordingly.</p>
<p>That&#8217;s what we got today. My fork is <a href="https://github.com/deas/alfresco-bulk-import/tree/alfresco-6-jar">on Github</a>. For convenience, there is also a download below in case you just want to give it a spin. Please let me know if you encounter a regression.</p>
<h2>Future Directions</h2>
<p>Personally, I&#8217;d like to see more automated testing &#8211; specifically integration testing. Testing is covered by SDK 3 which &#8211; you name it &#8211; does not work as is with Alfresco 6. In fact, I tweaked the SDK 3 as well. It is just a few lines which already make it usable for me. However, at this time, I don&#8217;t want the bulk import to depend on it. Actually, I&#8217;d like to see that or a similar quick fix applied to the SDK soon. I may be wrong, but it seems to me that the SDK will change direction driving towards Docker in one regard or another. That&#8217;s why I hesitated offering a PR.</p>
<p>I am not aiming to take maintainance for a fork of the bulk import or the SDK. I&#8217;d like to see things converge.  Motivation is still stemming from requirements of a real project. I&#8217;d be interested to get feedback in case you consider the issues mentioned valuable in order to push things into the proper direction.</p>
<p><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://www.contentreich.de/download/6423/?tmstv=1780456407" rel="nofollow" id="download-link-6423" data-redirect="false" >
	Download Alfresco Bulk Import</a>
</p>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/alfresco-bulk-import-alfresco-6-and-cm-content-support-and-beyond">Alfresco Bulk Import : Version 6, cm:content support and beyond</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/alfresco-bulk-import-alfresco-6-and-cm-content-support-and-beyond/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6412</post-id>	</item>
		<item>
		<title>So Nobody is selling WordPress Themes with Sources?</title>
		<link>https://www.contentreich.de/so-nobody-is-selling-wordpress-themes-with-sources</link>
					<comments>https://www.contentreich.de/so-nobody-is-selling-wordpress-themes-with-sources#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Wed, 21 Mar 2018 08:43:09 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Softwarequalität]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6330</guid>

					<description><![CDATA[<p><img width="871" height="544" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/03/y-u-no.png?fit=871%2C544&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="So Nobody is selling WordPress Themes with Sources?" title="So Nobody is selling WordPress Themes with Sources?" decoding="async" loading="lazy" srcset="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/03/y-u-no.png?w=1600&amp;ssl=1 1600w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/03/y-u-no.png?resize=1440%2C899&amp;ssl=1 1440w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/03/y-u-no.png?resize=768%2C480&amp;ssl=1 768w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/03/y-u-no.png?resize=1070%2C668&amp;ssl=1 1070w" sizes="auto, (max-width: 871px) 100vw, 871px" data-attachment-id="6327" data-permalink="https://www.contentreich.de/so-nobody-is-selling-wordpress-themes-with-sources/y-u-no" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/03/y-u-no.png?fit=1600%2C999&amp;ssl=1" data-orig-size="1600,999" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/03/y-u-no.png?fit=1440%2C899&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/03/y-u-no.png?fit=871%2C544&amp;ssl=1" />WordPress theme choice is endless. There are offerings addressing people who don&#8217;t care about code and just want a beautiful site out quickly, and there are frameworks like Genesis and starter kits like Sage aiming at developers. There appears to be a match for everybody &#8211; except us. How we used to look for a Theme From time to time,&#160;...<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/so-nobody-is-selling-wordpress-themes-with-sources">So Nobody is selling WordPress Themes with Sources?</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>WordPress theme choice is endless. There are offerings addressing people who don&#8217;t care about code and just want a beautiful site out quickly, and there are frameworks like <a href="https://my.studiopress.com/themes/genesis/">Genesis</a> and starter kits like <a href="https://roots.io/sage/">Sage</a> aiming at developers. There appears to be a match for everybody &#8211; except us.</p>
<h2>How we used to look for a Theme</h2>
<p>From time to time, we build a WordPress website. We start digging for a ready to use theme visually and functionally appealing. The reason we usually buy(!) a theme is that we want something more unique and polished. We have not yet taken the time to invest in a framework or starter kit because that only pays off when you are using it frequently. Besides, getting the site out quickly is common high priority.</p>
<p>Once we find a candidate, we take a closer look at the technical side of things. We inspect code exposed by demo sites using tools such as <a href="https://www.webpagetest.org/">Webpagetest</a>, <a href="https://developers.google.com/web/tools/lighthouse/">Lighthouse</a> and <a href="https://developers.google.com/speed/pagespeed/insights/">PageSpeed Insights</a>. With regards to covering our requirements, we prefer themes as minimal as possible, because code has issues and we don&#8217;t want issues with things we don&#8217;t even care about. Large code bases scare the hell out of us ?.</p>
<h2>Implementing Theme Customizations &#8211; Theory and Practice</h2>
<p>Once you start working with your theme of choice, sooner or later you may find yourself having to make tweaks. Assuming theme authors take care of their product by providing long term support, it is considered best practice to put your customizations in a child. The idea is that updates to the parent apply cleanly without breaking your code.</p>
<p>So far, we have always put our tweaks in a child. However, we learned from experience that you should be careful relying on theme updates &#8211; no matter whether the theme is for free or a paid premium product.  We understand there are many scenarios where vendor support is critical. If this is applying to your project, you should be double checking whether you are willing to trust.</p>
<p>Following best practices is more effort than doing changes directly in place &#8211; effort which only pays off if you actually benefit from parent updates. Hence, in cases where we feel theme code is maintainable, we started assuming that we will end up doing it. Other than that, starting with a blank child theme directory is not what we consider state of the art development experience.</p>
<h2>Our holy Grail: Production ready Theme with modern Dev Experience</h2>
<p>Recently, we considered revamping contentreich.de. This time, we chose not to go with the traditional empty child theme based approach and instead look for a modern Node based tooling (npm, webpack, browser-sync, etc.) environment to start from. Sage appears to be targeting these developer requirements pretty nicely, but there is still quite a bit work ahead of you before arriving at a unique truly production ready site.</p>
<p>We were wondering:</p>
<p>Premium theme vendors surely use the kind of tooling and enjoy the kind of development experience we were after. Are people willing to sell production ready themes along with full source code and modern dev experience? They won&#8217;t be offering support if you fork from their code base, but this time we don&#8217;t care about it anyways. And sure, they won&#8217;t appreciate you selling products based on the code you bought unless you get an explicit license. Should not be too hard to get it straight that our case is just about one site. After all, even Microsoft has an <a href="https://www.microsoft.com/en-us/sharedsource/enterprise-source-licensing-program.aspx">Enterprise Source Licensing Program</a>, although aimed at a slightly different audience.</p>
<p>I wrote a <a href="https://www.facebook.com/groups/advancedwp/permalink/1796279280434278/">post in a Facebook group asking about what I was looking for</a>, and we were surprised this seems to be very unusual. Most people were either pointing to starter kits or telling &#8220;developer friendly and premade don&#8217;t go well together&#8221;. I am sorry, but I strongly disagree with that statement.</p>
<p>I ended up asking the guy from whom we bought the theme serving our current site as a parent. He was kind enough sending me the source of one of his current premium themes &#8211; for free. We are now looking into it and we promised getting back to him. I&#8217;d happily send him a few Euros in case things go well and we build the revamped site on top of it.</p>
<p>Finally, we think there is nothing wrong with what we were asking for and given the sheer size of the WordPress ecosystem, we am sure there are other people who would be comfortable selling their themes with full source  and modern workflow included.</p>
<p>Next time faced with a similar situation and considering to buy a theme, we won&#8217;t hesitate to ask the vendor about it. Maybe one day vendors would directly advertise this option on market places like theme forest.</p>
<p>&nbsp;</p>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/so-nobody-is-selling-wordpress-themes-with-sources">So Nobody is selling WordPress Themes with Sources?</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/so-nobody-is-selling-wordpress-themes-with-sources/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6330</post-id>	</item>
		<item>
		<title>Cloud first Uneasiness in Contentland</title>
		<link>https://www.contentreich.de/cloud-first-uneasiness-in-contentland</link>
					<comments>https://www.contentreich.de/cloud-first-uneasiness-in-contentland#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Mon, 19 Feb 2018 09:26:32 +0000</pubDate>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Nuxeo]]></category>
		<category><![CDATA[Blockchain]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6277</guid>

					<description><![CDATA[<p><img width="871" height="490" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/02/surprised-cat.jpg?fit=871%2C490&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Cloud first Uneasiness in Contentland" title="Cloud first Uneasiness in Contentland" decoding="async" loading="lazy" srcset="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/02/surprised-cat.jpg?w=1920&amp;ssl=1 1920w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/02/surprised-cat.jpg?resize=1440%2C810&amp;ssl=1 1440w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/02/surprised-cat.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/02/surprised-cat.jpg?resize=1070%2C602&amp;ssl=1 1070w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/02/surprised-cat.jpg?w=1742&amp;ssl=1 1742w" sizes="auto, (max-width: 871px) 100vw, 871px" data-attachment-id="6287" data-permalink="https://www.contentreich.de/cloud-first-uneasiness-in-contentland/surprised-cat" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/02/surprised-cat.jpg?fit=1920%2C1080&amp;ssl=1" data-orig-size="1920,1080" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="OMG cat" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/02/surprised-cat.jpg?fit=1440%2C810&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/02/surprised-cat.jpg?fit=871%2C490&amp;ssl=1" />All the services are going Cloud first. For good reason. The Cloud can scale things - revenue included. But Cloud first has various  consequences downstream. This post is about consequences making people feel uneasy and what can be done about it.<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/cloud-first-uneasiness-in-contentland">Cloud first Uneasiness in Contentland</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>All the services are going Cloud first. For good reason. The Cloud can scale things &#8211; revenue included. But Cloud first has various  consequences downstream. This post is about consequences making people feel uneasy and what can be done about it. Most of the Cloud uneasiness is likely not at all specific to Contentland and applies generally. Our business is in Contenland so that is what I will be focusing on.</p>
<h2>Uneasiness X as a Service</h2>
<p>Software-/Function-/Platform-/Infrastructure as a Service providers have to get operations right to stay in the business and you can be sure Amazon, Google and Microsoft do. Scaling up high enables tempting price tags &#8211; price tags giving those less focused a hard time competing. Still, many CEOs bite the bullet and pay the extra fee to keep sensitive operations in house &#8211; due to a basic lack of trust. Even if overall, they get way less out of it. Much of the justification stems from the Snowden revelations. It may not be much of an issue in the US, but it surely is in the EU and Germany.</p>
<p>In Open Source Contentland (Alfresco/Nuxeo), there is a strong current towards the Content Services Platforms and hence the Cloud these days. Don&#8217;t know much about the feelings of Nuxeo users operating on premise, but I know for sure Alfresco users do feel uneasy in the light of <a href="https://community.alfresco.com/community/ecm/blog/2018/01/03/architecture-changes-for-alfresco-content-services-version-60">recent announcements</a>, <a href="https://www.alfresco.com/news/press-releases/thomas-h-lee-partners-acquire-alfresco-software">the aquisition</a> and <a href="http://www.cms-connected.com/News-Archive/February-2018/Alfresco-Acquired-by-a-Private-Equity-Firm-THL">insights</a>. It almost reads like AWS will be forced on us. Does that matter to you? Do you care about it? With regards to Alfresco, lets see whether we will see successor of Alfresco in the Cloud successor being announced.</p>
<p>Software as a Service usually comes with strong restrictions and this is not surprising: The provider is responsible for the application. Hence, they don&#8217;t want your buggy code executing in their house. Keep it where it is now and use their REST API endpoints.</p>
<h2>Uneasiness Extensibility and Apps</h2>
<p>Focusing on Contentland, Alfresco understands some aspects of extensibily should be living in their house &#8211; likely things that can be expressed declaratively (e.g. models) so the dangerous bits in terms of operations remain in their hands.  Beyond, they discourage  (platform-) in-process extensibility and do not seem to care about it. The <a href="https://www.contentreich.de/alfresco-extension-module-fundamentals">runtime modules system has issues</a> which may never be addressed, and they are slicing and dicing all things microservices. Nuxeo is way ahead in terms of runtime modules providing a clean OSGI based implementation. At the end of the day, there is no way around modularity. You can discourage 3rd parties from using it, but vendors need it themselves.</p>
<p>Alfresco still ships its Share collaboration app which already gets the job done for many people. It also features a lot of runtime extension capabilities so what you need may only be a few lines of code away &#8211; with no build step required. Unfortunately it is/will be deprecated soon. ?</p>
<p>Today, Alfresco and Nuxeo are both offering JavaScript component UI libraries and tooling designed to build browser based applications using their platforms. There are also basic example apps buiding on top of those libraries, but that is pretty much it. There is no &#8220;modern&#8221; browser based application providing runtime extensibility. However, Alfresco is currently revisiting (client) runtime extensibility (in process!;).</p>
<p>There is also tooling and libraries aimed exclusively at mobile, but I doubt many people care about that.</p>
<p>If you don&#8217;t already have a UI, where are you supposed to start and how far do you have to go to get something actually useable in production?</p>
<h2>Now what?</h2>
<p>Assuming you have content-driven itches that a Content Service Platform can scratch/already scratches and Open Source matters: Is it still possible to ?-pick what you need?</p>
<p>Vendors are raving more than ever about Open Source. And in fact they are getting more serious about it. Alfresco recently dropped a lot of code on github. Nuxeo code has been there for years. They want your eyes on it. If you build an application for one of those platforms, you should make use of it. It helps a lot with understanding how things work and get <del>support-tickets</del> issues out of the way. Contributing changes is a whole different story, though. :) Try to stay close to the vendor path, use things as designed and it will be a smooth ride.</p>
<p>If you want to remain on premise, you should make sure to be comfortable with containers at <strong>your</strong> scale. If you are typically operating at more than one instance per application, you may already be fine and should likely be good to go. Either way, you might not want to deal with the complexity Kubernetes or other tools at Google scale. Scalabily introduces complexity and you surely don&#8217;t want more than the minimum. Still, containers will rule the foreseeable future of software deployment and using them on premise does not require a ?-science degree.</p>
<p>I also recommend to &#8220;Take the minimum&#8221; to get the job done when it comes to the UI. Alfresco Share will remain around for a while. Use it by all means if it works today. Be careful with regards to bigger investments and keep an eye on the the UI libraries evolution. It is JavaScript, but Enterprise at the same time. Things won&#8217;t change on a daily basis. ?</p>
<h2>What&#8217;s next?</h2>
<p>People are getting sick and tired of Silicon Valley essentially capturing and selling each and every move we make. Blockchain, decentralization- and  cryptonetwork technology is here to disrupt centralization (and hence the Cloud as we know it today) bringing us Web 3.0 along with decentralization &#8211; and without single organizations in control. We prefer trust in math instead of people. Dispite issues like performance,  solutions such as Bitcoin can already be considered mature. IPFS or Storj may prove to be storage pieces of the puzzle in Contentland. But again, it will take trust &#8211; and time. Other than that, I think it is very remarkable that given the current excitement around Blockchain, traditional Cloud giants such as Amazon, Google and Facebook usually innovating early don&#8217;t seem to care about it all. ? (Oh wait! Microsoft just started looking at decentralized identity!) However, until then, you may want to keep you stuff on premise.</p>
<h2>References</h2>
<ul>
<li><a href="https://www.contentreich.de/alfresco-for-smbs-fresh-challenges">Alfresco for SMBs: Fresh Challenges</a></li>
<li><a href="https://medium.com/@matteozago/why-the-web-3-0-matters-and-you-should-know-about-it-a5851d63c949">Why the Web 3.0 Matters and you should know about it</a></li>
<li><a href="http://www.cms-connected.com/News-Archive/February-2018/Alfresco-Acquired-by-a-Private-Equity-Firm-THL">Alfresco Acquired by a Private Equity Firm THL</a></li>
</ul>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/cloud-first-uneasiness-in-contentland">Cloud first Uneasiness in Contentland</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/cloud-first-uneasiness-in-contentland/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6277</post-id>	</item>
		<item>
		<title>Alfresco for SMBs: Fresh Challenges</title>
		<link>https://www.contentreich.de/alfresco-for-smbs-fresh-challenges</link>
					<comments>https://www.contentreich.de/alfresco-for-smbs-fresh-challenges#comments</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Mon, 05 Feb 2018 07:52:33 +0000</pubDate>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6183</guid>

					<description><![CDATA[<p><img width="748" height="460" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/02/challenge-accepted.png?fit=748%2C460&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Alfresco for SMBs: Fresh Challenges" title="Alfresco for SMBs: Fresh Challenges" decoding="async" loading="lazy" data-attachment-id="6189" data-permalink="https://www.contentreich.de/alfresco-for-smbs-fresh-challenges/challenge-accepted" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/02/challenge-accepted.png?fit=748%2C460&amp;ssl=1" data-orig-size="748,460" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="challenge-accepted" data-image-description="&lt;p&gt;Challenge Accepted&lt;/p&gt;
" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/02/challenge-accepted.png?fit=748%2C460&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2018/02/challenge-accepted.png?fit=748%2C460&amp;ssl=1" />Alfresco recently announced a lot of big changes coming in our way. In this post, I'd like to focus and add my two cents to those which are likely relevant and "not so great" if you fall into the category of small and medium sized businesses operating Alfresco on premise. <!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/alfresco-for-smbs-fresh-challenges">Alfresco for SMBs: Fresh Challenges</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Alfresco recently announced <a href="https://community.alfresco.com/community/ecm/blog/2018/01/03/architecture-changes-for-alfresco-content-services-version-60">a lot of big changes</a> coming our way. In this post, I&#8217;d like to focus and add my two cents to those which are likely relevant and &#8220;not so great&#8221; if you fall into the category of small and medium sized businesses developing and operating on premise. <a href="https://blogs.gartner.com/michael-woodbridge/the-death-of-ecm-and-birth-of-content-services/">Content Services are becoming the new ECM</a> all over the industry. Services are mostly built cloud first everywhere. Resistance is futile. This trend does not come for free.</p>
<p>Focusing back on Alfresco, I appreciate the majority of changes approaching. Cloud aside, it is for sure time to revisit things and clean up the house as well. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h2>The ACS installers will be replaced with Docker containers</h2>
<p>The current executable binary based installation is very convenient if you want to get started really fast. I am sure a lot of SMB production installations have been using it, a lot of people are happy with the results and don&#8217;t care about the database and whether or not it is PostgreSQL. The sheer simplicity can be a blessing. The flipside of the coin is that it does not scale and Alfresco has to serve the upper end of the spectrum up to the <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2601.png" alt="☁" class="wp-smiley" style="height: 1em; max-height: 1em;" />.  After all, that&#8217;s where they make a living. And containers are the way. Containers also work fine at small scale, but many businesses (big and small) are just not ready to operate them. In Alfrescoland, things are still a bit rough around the edges at this time.</p>
<p>Hence, the new continous-delivery-pipeline <a href="https://github.com/Alfresco/alfresco-anaxes-shipyard/blob/master/docs/guidelines/README.md">guideline</a> building on top of containers is likely not a good fit for SMBs either &#8211; even if you forget about the parts involving containers.</p>
<p>I have seen no mention of Windows here. They may have chosen to go &#8220;all in Linux&#8221; and drop support for native Windows installations. ?</p>
<h2>REST APIs all the way</h2>
<p>REST APIs are mainstream nowadays. This is what all the microservices are using, right? Most people feel RPC is old-fashioned and outdated even though that&#8217;s not the case at all. GraphQL is too bleeding edge. Everybody builds upon REST no matter whether its model makes sense or not. Please note that I am not at all saying that Alfresco REST APIs are bad. In fact I think the new REST endpoints are pretty good. And you are still free to build upon the RPC based ones they are shipping or embed your own.</p>
<p>I understand Alfresco does not want our buggy code executing in their process. However, I feel they are pushing REST a bit too far. They already recommend making process-engine calls over the network. Given that these calls usually run within transactional context, I have doubts it&#8217;s generally a good rule to follow unless you really understand what you are doing. No, the good old monolith is not quite dead yet. It will remain the perfect simple solution for &#8220;small&#8221; applications.</p>
<p>If you choose to put your bit of logic in its own process, you will at least have to start thinking more carefully about transactions and whether the things you need are actually covered by the REST API.  Your-own-process approaches provide their own set of benefits, but I don&#8217;t think those are the ones most SMBs are after.</p>
<p>I am building REST services at this time and the repo proves to be the perfect host. I was curious about implementation details with regards to their new REST API. Ironically, Alfresco uses package names <code>org.alfresco.rest.framework</code>, which made me feel invited, so I started using these packages in custom code. Asking about them on twitter, I learned they are not really meant to be used for others so usage is not supported. Again, this also underpins them prefering us to stay outside.</p>
<p>How is Alfresco actually suggesting to implement REST services in-process today?</p>
<p>Building on raw <code>AbstractWebscript</code>/<code>DeclarativeWebScript</code>?</p>
<p>Come on, it&#8217;s 2018! (&#8220;How to hijack org.alfresco.rest.framework&#8221; may be another post).</p>
<h2>Abandoning Share</h2>
<p>Some consider its <a href="https://ecmarchitect.com/archives/2018/01/20/4314">future foggy</a>. I think it&#8217;s finally time to realize that Share will not be saved (long term). I consider it  &#8220;abandoned&#8221; and I am confident it will likely only see very basic maintainance. It&#8217;s a shame, because it is a highly flexible production grade application which could be tweaked in various ways. Share/Surf/Aikau were built with all kinds of extensibility in mind early on. Runtime extension points are pretty much in all places you could hope for. The &#8220;Wordpress way&#8221; of just dropping a few lines of code often gets the problem at hand solved &#8211; without a build step and within mintues. Those days seem to be fading away.</p>
<p>Unfortunately, web technology used in Share is exotic and outdated today and the pool of skilled people is small.  The time where it might have been possible to migrate to a modern Java Web-Stack such as JHipster are over. JHipster? Oh, wait &#8230; ?</p>
<p>The overall situation is very different with the new <a href="https://community.alfresco.com/community/application-development-framework">Application Development Framework</a>/<a href="https://github.com/Alfresco/alfresco-content-app">Alfresco Content App</a>. Today, Alfresco recommends to build on top of the ADF. This may be feasible if effort does not matter. For SMBs, it often does. And the difference may very well be critical. There is virtually no runtime exensibility on ADF/ACA ground. But the pool of skilled people (read Angular Devs) is huge.</p>
<p>Looks like the people unhappy with the fact that there is no general purpose replacement application with runtime extension cababilities on the horizon got noticed and Alfresco starts thinking about possible solutions to this problem. Bindu kicked it off and summarized most of the shortcomings on <a href="https://github.com/Alfresco/alfresco-content-app/issues/179#issuecomment-360762233">Github </a>and on the <a href="https://community.alfresco.com/message/827340-alfresco-contentprocess-app-moduleextension-mechanism">Community Platform</a>.</p>
<p>Personally, I consider implementing runtime extension capabilities very challenging. And retrofitting them even more so. I am sure it won&#8217;t happen in the ADF/ACA unless Alfresco is willing to assign significant resources. Way more than what the community of volunteers has to offer.</p>
<p>Finally, I don&#8217;t think the SDK plays well in an &#8220;out of process preferred&#8221;-/Cloud strategy as it is pretty much all about in-process extension. I guess it will remain being a second class citizen.</p>
<p>The deprecation of &#8220;Alfresco in the Cloud&#8221; seems very strange. I am curios what we will see following up. A reincarnation?</p>
<p>So to wrap up: Alfresco is still a great platform. Maybe it is at its best ever. It is just got a little more complicated &#8211; thank you Cloud! But that&#8217;s also fine because that is where we make a living. ?</p>
<p>Got something to add? Feel free to drop your two cents in the comments.</p>
<h2>References</h2>
<ul>
<li><a href="https://ecmarchitect.com/archives/2017/12/02/4305">Alfresco announces major changes coming in the 6.0 release (Jeff Potts)</a></li>
<li><a href="https://ecmarchitect.com/archives/2018/01/20/4314">Future of Alfresco Share Remains Foggy After DevCon</a></li>
<li><a href="https://www.contentreich.de/alfresco-share-needs-love-lets-save-it">Alfresco Share needs Love: Let’s save it!</a></li>
</ul>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/alfresco-for-smbs-fresh-challenges">Alfresco for SMBs: Fresh Challenges</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/alfresco-for-smbs-fresh-challenges/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6183</post-id>	</item>
		<item>
		<title>Clojure nailed in Sketchnotes</title>
		<link>https://www.contentreich.de/clojure-nailed-in-sketchnotes</link>
					<comments>https://www.contentreich.de/clojure-nailed-in-sketchnotes#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Wed, 19 Jul 2017 12:01:59 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6169</guid>

					<description><![CDATA[<p><img alt='' src='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=96&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=192&#038;d=mm&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'/>? Nailed! ? &#160;<!-- Format : status --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/clojure-nailed-in-sketchnotes">Clojure nailed in Sketchnotes</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img alt='' src='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=96&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=192&#038;d=mm&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'/><p>? Nailed! ?</p>
<p><blockquote class="twitter-tweet" data-width="550" data-lang="en" data-dnt="true" data-partner="jetpack"><p lang="en" dir="ltr">I made a comic introducing clojure :D <br><br>was this a good way to spend my time? debatable.<br>did I draw mushrooms? yes.<a href="https://t.co/wicR9kgjKd">https://t.co/wicR9kgjKd</a> <a href="https://t.co/GFAjJhcGh6">pic.twitter.com/GFAjJhcGh6</a></p>&mdash; daiyi! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (chris) (@daiyitastic) <a href="https://twitter.com/daiyitastic/status/887434923061149696?ref_src=twsrc%5Etfw">July 18, 2017</a></blockquote></p>
<p>&nbsp;</p>
<!-- Format : status --><p>Der Beitrag <a href="https://www.contentreich.de/clojure-nailed-in-sketchnotes">Clojure nailed in Sketchnotes</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/clojure-nailed-in-sketchnotes/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6169</post-id>	</item>
		<item>
		<title>How I became sceptical about Enterprise Open Source</title>
		<link>https://www.contentreich.de/how-i-became-sceptical-about-enterprise-open-source</link>
					<comments>https://www.contentreich.de/how-i-became-sceptical-about-enterprise-open-source#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Mon, 03 Jul 2017 07:14:27 +0000</pubDate>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6122</guid>

					<description><![CDATA[<p><img width="871" height="543" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/skeptical_third_world_kid.jpg?fit=871%2C543&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="How I became sceptical about Enterprise Open Source" title="How I became sceptical about Enterprise Open Source" decoding="async" loading="lazy" srcset="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/skeptical_third_world_kid.jpg?w=1606&amp;ssl=1 1606w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/skeptical_third_world_kid.jpg?resize=1440%2C898&amp;ssl=1 1440w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/skeptical_third_world_kid.jpg?resize=768%2C479&amp;ssl=1 768w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/skeptical_third_world_kid.jpg?resize=1070%2C668&amp;ssl=1 1070w" sizes="auto, (max-width: 871px) 100vw, 871px" data-attachment-id="6138" data-permalink="https://www.contentreich.de/how-i-became-sceptical-about-enterprise-open-source/skeptical_third_world_kid" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/skeptical_third_world_kid.jpg?fit=1606%2C1002&amp;ssl=1" data-orig-size="1606,1002" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="skeptical_third_world_kid" data-image-description="" data-image-caption="&lt;p&gt;Skeptical third world kid&lt;/p&gt;
" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/skeptical_third_world_kid.jpg?fit=1440%2C898&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/skeptical_third_world_kid.jpg?fit=871%2C543&amp;ssl=1" />Does Enterprise Open Source actually work? It really depends on what you expect to get out of it. Some of my expectations have been wrong - for a long time. I have been disappointed. ?<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/how-i-became-sceptical-about-enterprise-open-source">How I became sceptical about Enterprise Open Source</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>I will be using the term Enterprise Open Source to denote &#8220;OSI approved&#8221; software with a strong focus on the enterprise market segment. Hence, this is not about Linux, Emacs, Python, Docker, PostgreSQL and the like.</p>
<p>I have been working with Alfresco (mostly Community) since 2007 and that is where the bulk of my experience in stems from. The recent post <a href="https://www.realstorygroup.com/Blog/3205-Whither-Open-Source-ECM">Whither Open Source ECM?</a> got me rethinking.</p>
<ul>
<li>Does Enterprise Open Source actually work?</li>
<li>What do I want from it?</li>
</ul>
<p>As a developer, I would like to participate in a vibrant community using latest bleeding edge technology.</p>
<p>This is most likely not what you will get. Especially when it is about code. Enterprise tends to be very conservative and <a href="http://boingboing.net/2012/08/14/corporate-it-adoption-visualiz.html">leaping behind</a> the rest of the world. Besides, there is a reputation issue ?</p>
<p><blockquote class="twitter-tweet" data-width="550" data-lang="en" data-dnt="true" data-partner="jetpack"><p lang="en" dir="ltr">When you say &quot;I write enterprise software&quot;, all I hear is &quot;I write bad software&quot;.</p>&mdash; Hipster Hacker (@hipsterhacker) <a href="https://twitter.com/hipsterhacker/status/77716476873801728?ref_src=twsrc%5Etfw">June 6, 2011</a></blockquote></p>
<p>So don&#8217;t expect alpha nerds to be around.</p>
<p>However, you might still find a product capable of making people happy. And that still matters a lot.</p>
<h2>Alfresco</h2>
<p>The issues mentioned are just here for the sake of example. I really don&#8217;t want to pick on Alfresco.</p>
<p>Spoiler: Alfresco Community is still a nice product which may serve you well.</p>
<p>So what&#8217;s wrong?</p>
<p>It depends. There is absolutely nothing wrong if you just use it as is and get around the rough edges.</p>
<p>Which rough edges I am talking about? Well, there are quite a few unresolved issues with <a href="https://issues.alfresco.com/jira/issues/?jql=component%20%3D%20%22IMAP%22%20AND%20resolution%3D%22Unresolved%22">CIFS</a> and <a href="https://issues.alfresco.com/jira/issues/?jql=component%20%3D%20%22IMAP%22%20AND%20resolution%3D%22Unresolved%22">IMAP</a> (those don&#8217;t even include the ones which got batch-closed) to get started. Ironically, I usually warn prospects right upfront about those and others. Still, people frequently want to pray and hope for the best. Sometimes we are lucky, sometimes not.</p>
<p>So yeah, it is Open Source, so what about contributing fixes?</p>
<p>There is no maintained git repo so you may have to deal with svn which does not feel very inviting. Other than that, the JIRA process is not working for me. I think the filed issues are speaking for themselves.</p>
<p>Looking at IMAP and CIFS specifically, it also seems Alfresco simply does not care. Things are really swamped. But that&#8217;s actually ok. After all, they wrote the code and give it away for free! And it comes with no warranty and support and that&#8217;s clearly stated &#8211; for the Community Edition at least.</p>
<p>Now even if you manage to get one of those issues fixed: Will it get into core and ship with future updates? I guess that depends on the component affected and whether the issue hurts enterprise customers. It surely is hard to get contributions into core. In case you fail, you licked it and it is all yours. :)</p>
<p>There are other components which are going south. The <a href="https://www.contentreich.de/alfresco-share-needs-love-lets-save-it">Share application</a> is another example. Be very careful what you are building upon. You won&#8217;t be able to maintain a fork of core components.</p>
<p>Some components are in fact are no longer Open Source. You still get AOS &#8220;for free&#8221;, but issues may get worse to deal with.</p>
<p>On the contrary, Cloud, the REST-API, Search, Activiti and the ADF are getting a lot of attention these days. If this happens to be your area of interest, you are in good company. Again, that&#8217;s all fair. They can do whatever they want and they likely have good reason.</p>
<h2>Beyond Alfresco</h2>
<p>Recently, I started looking more and more into Nuxeo. To be honest, parts of its foundation feel better. Other people went further and even <a href="https://medium.com/mathias-conradt/dumping-alfresco-for-nuxeo-as-my-preferred-document-management-system-2116cf421d36">Dump Alfresco for Nuxeo as their preferred Document Management System</a>. Furthermore, looks like I will get in touch with Odoo in the near future.</p>
<p>From what I have seen so far, there simply are no raving communities contributing code anywhere (Projects with less than a week lifecycle don&#8217;t count ;). Not in Alfrescoland and not on entire Planet Enterprise.</p>
<p>If Open Sourcing is not about code contributions, what is it that drives companies giving away their code for &#8220;free&#8221;?</p>
<p>Things that come to mind:</p>
<ul>
<li>Dispite the fact that a lot of managers have no clue about it, management won&#8217;t even look at products which are not Open Source.</li>
<li>It trims support and documenting efforts because people can help themselves.</li>
<li>They want people to get their feet wet and build a community spreading good vibes.</li>
</ul>
<p>To wrap up: Look close and make sure to get what you expect before diving in.</p>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/how-i-became-sceptical-about-enterprise-open-source">How I became sceptical about Enterprise Open Source</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/how-i-became-sceptical-about-enterprise-open-source/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6122</post-id>	</item>
		<item>
		<title>IT-Services Price List</title>
		<link>https://www.contentreich.de/it-services-price-list</link>
					<comments>https://www.contentreich.de/it-services-price-list#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Sat, 01 Jul 2017 08:21:04 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6157</guid>

					<description><![CDATA[<p><img alt='' src='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=96&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=192&#038;d=mm&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'/>Applies somewhat similar to IT-Services ☝️: Design Services Price List<!-- Format : link --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/it-services-price-list">IT-Services Price List</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img alt='' src='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=96&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/b226a0d247f7164e3706f72b7c0371e35b266d64d057bbc62a7833b0c3300373?s=192&#038;d=mm&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'/><p>Applies somewhat similar to IT-Services <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/261d.png" alt="☝" class="wp-smiley" style="height: 1em; max-height: 1em;" />: <a href="http://www.boredpanda.com/designer-price-list-client-helps-digital-synopsis/">Design Services Price List</a></p>
<!-- Format : link --><p>Der Beitrag <a href="https://www.contentreich.de/it-services-price-list">IT-Services Price List</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/it-services-price-list/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6157</post-id>	</item>
		<item>
		<title>Webpack meets the JVM</title>
		<link>https://www.contentreich.de/webpack-meets-the-jvm</link>
					<comments>https://www.contentreich.de/webpack-meets-the-jvm#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Mon, 12 Jun 2017 08:10:02 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Clojure]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[ClojureScript]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[Webpack]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6082</guid>

					<description><![CDATA[<p><img width="871" height="653" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/jvm-embrace-node.jpg?fit=871%2C653&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Webpack meets the JVM" title="Webpack meets the JVM" decoding="async" loading="lazy" srcset="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/jvm-embrace-node.jpg?w=2732&amp;ssl=1 2732w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/jvm-embrace-node.jpg?resize=1440%2C1079&amp;ssl=1 1440w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/jvm-embrace-node.jpg?resize=768%2C576&amp;ssl=1 768w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/jvm-embrace-node.jpg?resize=1070%2C802&amp;ssl=1 1070w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/jvm-embrace-node.jpg?w=1742&amp;ssl=1 1742w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/jvm-embrace-node.jpg?w=2613&amp;ssl=1 2613w" sizes="auto, (max-width: 871px) 100vw, 871px" data-attachment-id="6100" data-permalink="https://www.contentreich.de/webpack-meets-the-jvm/jvm-embrace-node" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/jvm-embrace-node.jpg?fit=2732%2C2048&amp;ssl=1" data-orig-size="2732,2048" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="jvm embraces node" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/jvm-embrace-node.jpg?fit=1440%2C1079&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/06/jvm-embrace-node.jpg?fit=871%2C653&amp;ssl=1" />Some aspects of web-development are only covered by Node/Webpack based tooling because there simply is no decent tooling on other runtimes. Do those who want to keep the JVM runtime need a separate Node process? What are the tradeoffs? This post looks at Webpack from the JVM side of things, but similar concerns may arise elsewhere.<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/webpack-meets-the-jvm">Webpack meets the JVM</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Until recently, I have mostly been working with the JVM and I enjoy Clojure and ClojureScript a lot. With regards to the browser target, we have ClojureScript tooling and libraries which I consider even superior to what there is on Node/Webpack today (Figwheel, Google Closure, reagent/re-frame).  Linking an npm package in your application generally works well these days and things are improving quickly. However, there are times when you are tempted to pick something from the Node ecosystem which also requires a Node runtime &#8211; simply because there is no alternative available on the JVM.  Compilation tooling is an example domain.</p>
<p>Besides, Node native tooling such as create-react-app generally delivers a pretty pleasant experience which could be considered &#8220;mainstream&#8221; these days. And as a developer you should make sure to not be significantly less productive than mainstream. You might run into trouble finding a job otherwise. :)</p>
<p>In this post I am looking at Webpack, but the story is really about the JVM and Node (and not just plain JavaScript) in one process. Webpack just happened to be the detail itching me.</p>
<h2>Briding the Gap to Webpack</h2>
<p>People approaching from the JavaScript side of things might be wondering: Why bother bridging a gap from the JVM to Node and not rewrite all the things for Node? I assume this will be happening, but it takes time even though we already have tooling like <a href="https://github.com/anmonteiro/lumo">lumo</a> &#8211; a Node based environment leveraging <a href="https://github.com/clojure/clojurescript/wiki/Bootstrapped-ClojureScript-FAQ">bootstrapped ClojureScript</a>. The other way (bringing all the things to the JVM natively) may never happen.</p>
<p>Why bother with ClojureScript anyways? Derek Slanger has some <a href="https://www.youtube.com/watch?v=gsffg5xxFQI">answers</a>.</p>
<h2>Ways to leverage Webpack</h2>
<p>Basic Webpack usage starts by introducing a <code>package.json</code> with dependencies sufficient to generate a bundle and launching the compilation from the command line. Automatically rebuilding things on change is not a big deal either. Aspects such as hot reloading get tricky in case you already have something alien to Node (such as Figwheel) dealing with it.</p>
<p>In ClojureScript land, there are tools trying to bridge the JVM to Node gap already. <a href="https://github.com/cljs/tool">ClojureScript starter tool</a> and <a href="https://github.com/thheller/shadow-cljs">shadow-cljs</a> are two examples. Today, they are both based on separate (Node/JVM) processes. A multi-process setup can already be helpful, but it gets hairy once you need a lot of fine-grained interaction between Node and the JVM.</p>
<p>I was sure it is not possible to use the JVM as a library in Node, but I was aware of solutions going the other way. Oracle has abandoned  <a href="https://jaxenter.com/oracle-stop-development-avatar-114600.html">Avatar</a>, but Ian Bull stepped in and came up with <a href="https://github.com/eclipsesource/J2V8">J2V8</a>. I decided to give it a spin.</p>
<h2>A Proof of Concept</h2>
<p>First I was wondering about the system boundary. Should cljsbuild call into Node or vice versa?</p>
<p>Since there already are Webpack loaders for various other languages, I chose to try implementing a skeleton of a cljs-loader. The code for my experiment <a href="https://github.com/deas/webpack-jvm">webpack-jvm</a> is on Github. At the time of  writing, it consists of a loader implemented in Clojure (just a function consuming the source and emitting static JavaScript code) along with a demo. Feel free to try it out.</p>
<p>I have not tried it on Mac or Windows, but I think it should be working on those OSs as well. At least the artifacts are on maven central. That&#8217;s also the reason I went down to 4.6.0 of j2v8. I was surprised to see Node 5.9 running under the hood. I don&#8217;t consider it an issue for now as it is good enough to run current Webpack 2.6, 4.7.0 on Linux comes with Node 7, the project is alive and from what I can tell so far, Node 8 does not introduce serious issues either. However, compiling the native code is still painful &#8211; especially if you want to support all those platforms &#8211; including even Android.</p>
<h2>Where to go next</h2>
<p>The loader should be able to kick off a ClojureScript compiler &#8211;  JVM native or bootstrapped and there are still various details to worry about and sacrifices (Closure/tree-shaking) to expect.</p>
<p>Entering Node land from the ClojureScript compiler (JVM Version) &#8211; <code>:npm-deps</code> or the ns-form may be an alternative. Especially if we allow strings instead of symbols as suggested by Thomas Heller <a href="https://dev.clojure.org/jira/browse/CLJS-2061">CLJS-2061</a> .</p>
<p>Thats all I got for now. Feel free to comment or jump in.</p>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/webpack-meets-the-jvm">Webpack meets the JVM</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/webpack-meets-the-jvm/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6082</post-id>	</item>
		<item>
		<title>Protonet insolvent: Was wird mit Box und Daten?</title>
		<link>https://www.contentreich.de/protonet-insolvent-was-wird-mit-box-und-daten</link>
					<comments>https://www.contentreich.de/protonet-insolvent-was-wird-mit-box-und-daten#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Fri, 10 Feb 2017 08:36:24 +0000</pubDate>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Support]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6063</guid>

					<description><![CDATA[<p><img width="500" height="275" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/02/rain-loop.gif?fit=500%2C275&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Protonet insolvent: Was wird mit Box und Daten?" title="Protonet insolvent: Was wird mit Box und Daten?" decoding="async" loading="lazy" data-attachment-id="6068" data-permalink="https://www.contentreich.de/protonet-insolvent-was-wird-mit-box-und-daten/rain-loop" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/02/rain-loop.gif?fit=500%2C275&amp;ssl=1" data-orig-size="500,275" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Rain" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/02/rain-loop.gif?fit=500%2C275&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/02/rain-loop.gif?fit=500%2C275&amp;ssl=1" />Protonet ist insolvent. Was wird aus meiner Box und meinen Daten? Welche Wege gibt es? Wir sagen es euch! :)<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/protonet-insolvent-was-wird-mit-box-und-daten">Protonet insolvent: Was wird mit Box und Daten?</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" loading="lazy" decoding="async" data-attachment-id="6068" data-permalink="https://www.contentreich.de/protonet-insolvent-was-wird-mit-box-und-daten/rain-loop" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/02/rain-loop.gif?fit=500%2C275&amp;ssl=1" data-orig-size="500,275" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Rain" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/02/rain-loop.gif?fit=500%2C275&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/02/rain-loop.gif?fit=500%2C275&amp;ssl=1" class="aligncenter wp-image-6068" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/02/rain-loop.gif?resize=747%2C411&#038;ssl=1" width="747" height="411" /></p>
<p>Die &#8220;Fix und fertig sorglos Kollaboration mit voller Hoheit über die eigenen Daten&#8221; klang schlüssig. Insbesondere auch vor dem Hintergrund der Snowden-Enthüllungen muss das laufen. Das habe ich wie wohl viele andere auch gedacht und beim Crowdfunding damals beherzt zugegriffen. Nun kam die Hiobsbotschaft: Protonet ist insolvent.</p>
<p>Die Boxen funktionieren grundsätzlich autark. Allerdings bietet Protonet auch Dienste in Zusammenhang mit Namensauflösung (DNS) und Nachrichtenversand die wohl in sehr naher Zukunft eingestellt werden. Protonet hat Anleitungen bereit gestellt wie man diese Funktionalität selbst aufrecht erhält. Dennoch &#8211; die Sorgen die man ja eigentlich nicht haben wollte fangen an. In Bezuf auf die Zukunft ist vieles unklar:</p>
<ul>
<li>Wer supported Hard- und Software?</li>
<li>Wie steht es mit der Weiterentwicklung von SOUL?</li>
</ul>
<p>Protonet selbst hat es nicht geschafft das Geschäft profitabel zu machen. Ich persönlich bezweifle, dass andere es mit dem Erbe hinbekommen werden.</p>
<p>Wenn ich abhängig von einer Protonet Box wäre würde ich mich nach einer Alternative mit besseren Zukunftsaussichten umschauen. In Betracht könnten kommen&#8230;</p>
<h2>SaaS Collaboration Lösungen</h2>
<p>Google Drive/-Apps, Slack, Wrike, Basecamp, Office 365 uvm. sind günstige, schlüsselfertige und mehr oder weniger anpassbare Anwendungen(!) mit Sorglosfaktor in Bezug auf den Betrieb und Entwicklung. Die Herausforderung besteht hier vor allem darin in der großen Menge der Angebote die Anwendung zu finden welche die eigenen Anforderungen möglichst gut abdeckt. Änderungswünsche umzusetzen ist schwierig. Außerdem lehnen viele Kunden Public Cloud kategorisch mit dem Argument der Datenhoheit-/sicherheit ab. Das mag im einen oder anderen Fall gerechtfertigt sein, die Entscheidung dagegen, sich also selbst zu kümmern, hat aber eben auch einen Aufpreis.</p>
<h2>NAS Server</h2>
<p>Systeme wie die von Nextcloud, Synology oder Qnap bedienen das Bedürfnis nach Datenhoheit, kommen aber in der Regel nicht schlüsselfertig sorglos daher. Man ist selbst verantwortlich für Hardware und Software &#8211; Installation, Updates, Konfiguration. Nextcloud ist in diesem Segment sehr beliebt. Die Software ist kostenlos und kann wahweise auch &#8220;fix und fertig&#8221; mit Hardware gekauft werden. Bei NAS Software handelt es sich zum Großteil um Open Source. Man sollte sich unbedingt vorher umschauen und klären, wie weit der Weg ist eine wirklich nutzbare Anwendung(!) langfristig stabil zum Laufen zu bringen. Meiner Einschätzung nach waren es vor allem Lösungen wie Owncloud/Nextcloud, welche Protonet das Leben schwer gemacht haben.</p>
<h2>ECM Plattformen</h2>
<p>Der eine oder andere SOUL Anwender wird im Laufe der Zeit festgestellt haben, dass gewisse Anforderungen nur sehr schwer mit dem System zu realisieren sind. Dokument-Metadaten, Transformationen, Zugriffsrechte, Auditing, Suche, Workflow, MS Office (Sharepoint) / Active Directory Integration,  Interoperabilität, Transaktionen: Diese Aspekte gewinnen in der Regel mit der Größe des Unternehmens an Bedeutung. Sie können aber auch in kleinen Unternehmen schon von Bedeutung sein. In jedem Fall sollte klar sein, dass auch diese Dinge einen Preis haben &#8211; selbst wenn die Software wie Nuxeo oder Alfresco erst einmal als Open Source zur Verfügung steht. Wer sich mit solchen Anforderungen überfordert sieht kann sich bei Bedarf beraten lassen &#8211; zum Beispiel <a href="https://www.contentreich.de/alfresco-community-adhoc-support">hier</a>. ;)</p>
<h2>Referenzen</h2>
<ul>
<li><a href="https://protonet.com/de/">Protonet</a></li>
<li><a href="http://www.gruenderszene.de/allgemein/protonet-insolvenz">Protonet ist insolvent</a></li>
<li><a href="https://www.heise.de/newsticker/meldung/Insolvenzantrag-Serverhersteller-Protonet-ist-zahlungsunfaehig-3620315.html">Insolvenzantrag: Serverhersteller Protonet ist zahlungsunfähig</a></li>
<li><a href="http://t3n.de/news/protonet-startup-insolvenz-793689/">Protonet: Das Startup mit dem Crowdfunding-Rekord ist insolvent</a></li>
<li><a href="https://nextcloud.com/box/">Nextcloud Box</a></li>
</ul>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/protonet-insolvent-was-wird-mit-box-und-daten">Protonet insolvent: Was wird mit Box und Daten?</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/protonet-insolvent-was-wird-mit-box-und-daten/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6063</post-id>	</item>
		<item>
		<title>Alfresco Extension Module Fundamentals</title>
		<link>https://www.contentreich.de/alfresco-extension-module-fundamentals</link>
					<comments>https://www.contentreich.de/alfresco-extension-module-fundamentals#comments</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Mon, 30 Jan 2017 08:24:17 +0000</pubDate>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[add-ons]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Productivity]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=6014</guid>

					<description><![CDATA[<p><img width="871" height="532" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?fit=871%2C532&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Alfresco Extension Module Fundamentals" title="Alfresco Extension Module Fundamentals" decoding="async" loading="lazy" srcset="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?w=2732&amp;ssl=1 2732w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?resize=1440%2C879&amp;ssl=1 1440w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?resize=768%2C469&amp;ssl=1 768w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?resize=1070%2C653&amp;ssl=1 1070w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?w=1742&amp;ssl=1 1742w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?w=2613&amp;ssl=1 2613w" sizes="auto, (max-width: 871px) 100vw, 871px" data-attachment-id="6022" data-permalink="https://www.contentreich.de/alfresco-extension-module-fundamentals/plugins" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?fit=2732%2C1668&amp;ssl=1" data-orig-size="2732,1668" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Plugins" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?fit=1440%2C879&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?fit=871%2C532&amp;ssl=1" />Assuming things are meant to scale, I think the Alfresco extension module infrastructure is lacking critical functionality. This post about what, why and my conclusions.<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/alfresco-extension-module-fundamentals">Alfresco Extension Module Fundamentals</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" loading="lazy" decoding="async" data-attachment-id="6022" data-permalink="https://www.contentreich.de/alfresco-extension-module-fundamentals/plugins" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?fit=2732%2C1668&amp;ssl=1" data-orig-size="2732,1668" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Plugins" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?fit=1440%2C879&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?fit=871%2C532&amp;ssl=1" class="alignleft size-large wp-image-6022" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2017/01/plugins.jpg?resize=748%2C457&#038;ssl=1" alt="" width="748" height="457" />TLDR; Assuming things are meant to scale, I think the Alfresco extension module infrastructure is lacking critical functionality. This post about what, why and  my conclusions.</p>
<h2>About runtime modules</h2>
<p>Extensible runtime environments provide you with various interfaces to plug in third party code. Those interfaces usually come at different scale and nature. You have REST-API for interactions beyond process boundaries and a programming language based API for in-process communication. Runtime discovery and wiring of lifecycle management is the bare minimum required by in-process extensions (frequently called modules or plugins).</p>
<p>As a platform vendor, you&#8217;ll likely prefer people staying out of your house (process), because misbehaving guests cause all sorts of issues. In practice, this is hardly possible.</p>
<p>Depending on quantity and volatility of modules and their respective environments, you might want a bit more. Take WordPress as an example. You could likely update themes and plugins interactively once a day &#8211; and even core, and even automatically. Surely, you want to try things out every once in a while. At scale you want to be provided with mechanisms to easily install, uninstall, upgrade, start, stop, enable and disable modules.</p>
<h2>Module functionality provided by the Alfresco runtime</h2>
<p>In Javaland, amongst other things, there is OSGI, Spring and (soon) Jigsaw at our disposal. In Alfrescoland, they decided to build upon Spring. Today, we have two types of modules to choose from, and there has been a heated debate about pros and cons of the proprietary <a href="https://community.alfresco.com/docs/DOC-5146-amp-files">AMP file</a> type promoted by Alfresco Inc. Personally I stopped using them years ago (went with plain jar) and have not missed them since. Seems Alfresco just recently changed its mind and now also favors jar modules (<a href="https://community.alfresco.com/people/lcabaceira/blog/2016/12/14/maven-best-practices-for-alfresco">The great value of Alfresco Jar Modules</a>). Some might argue it is great to have somewhat alternative approaches &#8220;addressing different use cases&#8221;. I disagree because that very fact makes matters complex.</p>
<p>With regards to lifecycle, we are supposed to hook our components into application events fired by the Spring context. Other than that, we have base module components dealing with applicability and dependencies (<a href="http://docs.alfresco.com/5.1/references/dev-extension-points-module-component.html">Module Components</a>) and support for conditional import of bootstrap content  (<a href="http://docs.alfresco.com/4.2/concepts/dev-extensions-modules-importing-module-data.html">Importing Module Data</a>). There are restartable child context based units called subsystems which do not directly relate to module extensions.</p>
<h2>Module infrastructure missing in Alfresco runtime</h2>
<p>At the end of the day, whether something is missing or not depends on demand. Assuming that we are aiming at a healthy ecosystem built to scale, I&#8217;d like to see:</p>
<ul>
<li>One single promoted module extension solution</li>
<li>Uninstall reliably working</li>
<li>Downgrade working</li>
<li>Dead easy/fool proof install/uninstall/upgrade/start/stop (interactive like what we have in WordPress would be awesome)</li>
</ul>
<p>Some might argue module code isolation (as in OSGI) is a must. Personally I disagree (again due to complexity), and I&#8217;d argue that if this is really what you need, a microservice might do as well.</p>
<p>Some of the items listed may not be critical. But still I think we are missing essential functionality and this is pretty remarkable given that the platform has been around for a while.</p>
<h2>Conclusions</h2>
<p>The current state of the module eco-system stems from what we are given. I&#8217;d love to see a flourishing extension market (as in ?), but I feel we are far far away and we are not even driving towards. In fact, I&#8217;d be interested to know whether there is a single profitable extension out there.</p>
<p>I would volunteer helping to move things forward, but again (as with Share), this is not reasonably possible without support from Alfresco. I have asked them about their opinion on modules in general. I am still waiting for a response. Please note that I am not complaining.</p>
<p>Finally, you might want to look at how things are handled over at <a href="https://doc.nuxeo.com/nxdoc/installing-a-new-package-on-your-instance/">Nuxeo</a>. I think they got this right &#8211; early on.</p>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/alfresco-extension-module-fundamentals">Alfresco Extension Module Fundamentals</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/alfresco-extension-module-fundamentals/feed</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6014</post-id>	</item>
		<item>
		<title>Pimping Gorilla REPL with React and ClojureScript. And Beyond.</title>
		<link>https://www.contentreich.de/pimping-gorilla-repl-with-react-clojurescript-and-beyond</link>
					<comments>https://www.contentreich.de/pimping-gorilla-repl-with-react-clojurescript-and-beyond#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Mon, 05 Dec 2016 08:35:58 +0000</pubDate>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Clojure]]></category>
		<category><![CDATA[add-ons]]></category>
		<category><![CDATA[Big Data]]></category>
		<category><![CDATA[ClojureScript]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Spark]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=5935</guid>

					<description><![CDATA[<p><img width="748" height="473" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/11/expanding-gorilla.png?fit=748%2C473&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Pimping Gorilla REPL with React and ClojureScript. And Beyond." title="Pimping Gorilla REPL with React and ClojureScript. And Beyond." decoding="async" loading="lazy" data-attachment-id="5957" data-permalink="https://www.contentreich.de/pimping-gorilla-repl-with-react-clojurescript-and-beyond/expanding-gorilla" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/11/expanding-gorilla.png?fit=748%2C473&amp;ssl=1" data-orig-size="748,473" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="React Gorilla REPL" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/11/expanding-gorilla.png?fit=748%2C473&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/11/expanding-gorilla.png?fit=748%2C473&amp;ssl=1" />TL;DR: I love the REPL experience. I wanted a ClojureScript ? project. I picked Gorilla REPL. Scope increased all the time. You may find the result useful now.<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/pimping-gorilla-repl-with-react-clojurescript-and-beyond">Pimping Gorilla REPL with React and ClojureScript. And Beyond.</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>Update October 2019</strong>: The project has resurrected. Current state of affairs is <a href="https://github.com/pink-gorilla/gorilla-notebook">here on Github</a>.</p>
<p>TL;DR: I love the REPL experience. I wanted a ClojureScript ? project. I picked Gorilla REPL. Scope increased all the time. You may find the result useful now.</p>
<h2>History &amp; Motivation</h2>
<p>I spent a lot of time working with the Alfresco ECM platform. Many solutions require just a few lines of code. The fast feedback provided by a REPL is invaluable. In Alfresco land, the <a href="https://github.com/share-extras/js-console">Javascript Console</a> has been a helpful companion over all the years. But it also has limitations it will most likely never overcome. My quest for an alternative brought up <a href="http://gorilla-repl.org/">Gorilla REPL</a> and I <a href="https://www.contentreich.de/why-every-app-should-have-a-clojure-repl-everywhere">played around with it</a> a while ago. Although embedding of Gorilla was working at that time, I felt things were still too messy and uneasy about releasing something.</p>
<p>A few weeks ago, the desire to play with React came up. Gorilla was my victim of choice. I started writing reagent replacements of the existing JavaScript code. The ClojureScript codebase grew, and I decided to add re-frame to the mix. As time went by, more and more ideas came up and I started experimenting around.</p>
<h2>Current State of all the Things</h2>
<p>Fast forward to today. At this time, I consider mostly working/ok:</p>
<ul>
<li>ClojureScript migration of application client code</li>
<li>Recent versions of dependency libraries</li>
<li>Parinfer (optional)</li>
<li>Separate, dedicated nREPL middleware stack</li>
<li>Figwheel/Devcards/Testing (latter bare bones)</li>
<li>Componentized (incl. Tesla-Microservice)</li>
<li>Standalone uberjar / Docker image</li>
<li>Drop in uberjar capabilities (dropping the uberjar into some WEB-INF/lib should work &#8230; sometimes)</li>
<li>Standalone uberwar</li>
<li>Roll in jar (use as a library)</li>
<li>Proxy based loading of remote worksheets (in case CORS is not in place)</li>
<li>Pomegranate dependencies for non leiningen based deployments</li>
</ul>
<p>Work in progress/experimental stage:</p>
<ul>
<li>Remote nREPL delegation</li>
<li>Client/Browser REPL (replumb)</li>
<li>Heroku</li>
<li>Clojail execution</li>
<li>Mobile/PWA capabilities</li>
<li>Clean up messy places (e.g. nREPL code /Ring handlers)</li>
<li>Error handling</li>
<li>Node.js backend</li>
</ul>
<p>On the radar:</p>
<ul>
<li>Implementing tests</li>
<li>Better extensibility</li>
<li>Interruptable eval</li>
<li>Improve composabitly of (ring) handlers</li>
<li>Code sharing UI/services</li>
<li>Revisit (Clo)Jupyter</li>
<li>Peridically save to localStorage</li>
<li>Introduce garden</li>
</ul>
<p>Other than that, some of the <a href="https://github.com/JonyEpsilon/gorilla-repl/issues">open issues</a> have been addressed.</p>
<p>I tried really hard to remain backwards compatible and preserve existing functionality. Given the nature of reagent, this did not seem reasonably possible with regards to persisted html in worksheets. I ended up introducing version 2 persistence (transit based) while still supporting version 1 persistence (shamelessly discarding output).</p>
<p>Given my limited resources and the sheer amount of changes, I am sure I introduced a bunch of new issues.</p>
<h2>Quick Demos</h2>
<p>Here are a few &#8220;new&#8221; sample use cases I have been playing around with. The standard Leiningen based usage (which is hopefully still working) is not covered.</p>
<h3>Docker</h3>
<p>There are two Docker images. A 200MB <code>0.3.6-alpine</code> version which should be fine for pretty much anything other than Spark (&#8230; all in one process that is due to native library loading issue), and a full blown 400MB <code>0.3.6</code> version.</p>
<p>Run</p>
<pre class="EnlighterJSRAW" data-enlighter-language="s">docker run --name gorilla-repl -p 9000:9000 deas/gorilla-repl:0.3.6-alpine</pre>
<p>and open a <a href="http://localhost:9000/worksheet.html" target="_blank" rel="noopener noreferrer">fresh worksheet</a>.  Shift+Enter evaluates the active code segment, Alt+Shift+Enter the whole sheet. Alternatively, if you are into Big Data, you might want to try the <a href="http://localhost:9000/worksheet.html#/edit?worksheet-filename=https://raw.githubusercontent.com/deas/gorilla-repl/feature/cljs/examples/sparkling.clj" target="_blank" rel="noopener noreferrer">sparkling</a> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> example instead. Be patient with that one &#8211; downloading and launching Spark(ling) takes a moment</p>
<h3>Standalone Uberjar</h3>
<p>Download the <a href="https://dl.dropboxusercontent.com/u/8110121/lambdalf-1.9.999-standalone.jar">standalone.jar</a>, run</p>
<pre class="EnlighterJSRAW" data-enlighter-language="s">java -jar target/gorilla-repl-ng-standalone.jar
</pre>
<p>and open a <a href="http://localhost:9000/worksheet.html" target="_blank" rel="noopener noreferrer">fresh worksheet</a>.  The sparkling link above should work just as well.</p>
<p>This file may also work as an &#8220;all-in drop in&#8221; for webapps (try putting it in <code>WEB-INF/lib</code>).</p>
<h3>Alfresco</h3>
<p>For convenience, I rolled gorilla REPL into <a href="https://github.com/deas/lambdalf">lambdalf</a>. Download the <a href="https://dl.dropboxusercontent.com/u/8110121/lambdalf-1.9.999-standalone.jar">repo extension</a>, put it in <code>/opt/alfresco/modules/platform</code>, restart the server and you should find a fresh worksheet <a href="http://localhost:8080/alfresco/gorilla-repl/worksheet.html" target="_blank" rel="noopener noreferrer">here.</a> The <a href="http://localhost:8080/alfresco/gorilla-repl/worksheet.html#/edit?worksheet-filename=https://raw.githubusercontent.com/deas/lambdalf/sandbox/examples/alfresco-mimetypes.clj" target="_blank" rel="noopener noreferrer">MIME type example</a> should work as well.</p>
<h3>JEE War File</h3>
<p>Download the <a href="https://dl.dropboxusercontent.com/u/8110121/gorilla-repl-ng.war">war file</a> and drop it into the webapps folder of your application server. Assuming the server is running on port 8080, you should be able to find the application <a href="http://localhost:8080/gorilla-repl-ng/" target="_blank" rel="noopener noreferrer">here</a>.</p>
<p>I don&#8217;t have a lot of sample worksheets to offer. You might want to look at <a href="https://github.com/JonyEpsilon/gorilla-test" target="_blank" rel="noopener noreferrer">Jony&#8217;s test repository over at github</a> for some inspiration.</p>
<h2>Future Directions</h2>
<p>I had a chat with the Jony Hudson (the original author) and Ben Bailey. At this time, Jony seems fairly busy with other things and I don&#8217;t expect him to put a lot of effort into Gorilla REPL in the near future.</p>
<p>Nothing is set in stone. Experiments will be reverted if it turns out they do more harm than good. Using a Node as a backend (working) appears awesome &#8211;  just as using Spark on top of Alfresco. Still, I personally don&#8217;t have a meaningful use case &#8230; yet. :)</p>
<p>For now, the long term goals are to expand use cases while keeping the software stable/compatible and development fun. Short term goal is cleaning things up and adding tests.</p>
<p>If you feel like jumping in, you are welcome! Source along with instructions to get started hacking on it are on <a href="https://github.com/deas/gorilla-repl">Github</a>. Don&#8217;t expect things to be perfect. There surely are traces of migration and experimentation.</p>
<p>Finally, I want to thank all the people who built the stuff my work is based on. ?</p>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/pimping-gorilla-repl-with-react-clojurescript-and-beyond">Pimping Gorilla REPL with React and ClojureScript. And Beyond.</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/pimping-gorilla-repl-with-react-clojurescript-and-beyond/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5935</post-id>	</item>
		<item>
		<title>Alfresco Workflow meets Extended Datalists</title>
		<link>https://www.contentreich.de/alfresco-workflow-meets-extended-datalists</link>
					<comments>https://www.contentreich.de/alfresco-workflow-meets-extended-datalists#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Thu, 01 Sep 2016 16:11:28 +0000</pubDate>
				<category><![CDATA[Add-ons]]></category>
		<category><![CDATA[Activiti]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Bugfixes]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[Enterprise]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=5902</guid>

					<description><![CDATA[<p><img width="748" height="450" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/09/working-with-activiti.png?fit=748%2C450&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Alfresco Workflow meets Extended Datalists" title="Alfresco Workflow meets Extended Datalists" decoding="async" loading="lazy" data-attachment-id="5901" data-permalink="https://www.contentreich.de/alfresco-workflow-meets-extended-datalists/working-with-activiti" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/09/working-with-activiti.png?fit=748%2C450&amp;ssl=1" data-orig-size="748,450" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Working with Activiti" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/09/working-with-activiti.png?fit=748%2C450&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/09/working-with-activiti.png?fit=748%2C450&amp;ssl=1" />Workflow in Alfresco is not very user friendly. The user interface is not designed to handle tasks and processes at scale. We are trying to change that. This post is about our first steps and the lessons learned along the way.<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/alfresco-workflow-meets-extended-datalists">Alfresco Workflow meets Extended Datalists</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Let&#8217;s be honest: Workflow in Alfresco is not very user friendly. Almost looks like Alfresco is pretty much exposing the raw BPM. Other than that, the user interface is not designed to handle tasks and processes at scale. As that&#8217;s what we are aiming at, we decided to address this first. We started off by trying to leverage datalists code. The good news was that the UI code fits us quite well. Bad news was that it turned out the workflow API is not designed to deal with scale either. Hence, we ended up implementing the &#8220;heavy lifting&#8221; ourselves.</p>
<p>The following screenshot (click to enlarge) shows a filtered and sorted query.</p>
<p>
<a href='https://www.contentreich.de/alfresco-datalists-tasks-filter'><img loading="lazy" decoding="async" width="871" height="518" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/09/alfresco-datalists-tasks-filter.png?fit=871%2C518&amp;ssl=1" class="attachment-large size-large" alt="" srcset="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/09/alfresco-datalists-tasks-filter.png?w=1196&amp;ssl=1 1196w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/09/alfresco-datalists-tasks-filter.png?resize=768%2C457&amp;ssl=1 768w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/09/alfresco-datalists-tasks-filter.png?resize=1070%2C636&amp;ssl=1 1070w" sizes="auto, (max-width: 871px) 100vw, 871px" data-attachment-id="5910" data-permalink="https://www.contentreich.de/alfresco-datalists-tasks-filter" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/09/alfresco-datalists-tasks-filter.png?fit=1196%2C711&amp;ssl=1" data-orig-size="1196,711" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="alfresco-datalists-tasks-filter" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/09/alfresco-datalists-tasks-filter.png?fit=1196%2C711&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/09/alfresco-datalists-tasks-filter.png?fit=871%2C518&amp;ssl=1" /></a>
</p>
<p>Yes, the edit action dialog works as well.</p>
<p>Axel pointed out that he implemented task-/workflow indexing and search &#8220;abusing&#8221; Solr. Just as with the datalists UI, we consider uniformity something to generally aim at. I think I understand where to hook in in order to enable this. Still, not quite sure whether it is not better to use raw Activiti instead. </p>
<p>If somebody reading this has experience pushing BPM in Alfresco (CE or EE) to scale: I&#8217;d love to hear about it! I&#8217;d also appreciate to learn about BPM improvements which may be underway (The new REST endpoints don&#8217;t seem helpful).</p>
<p>As a sidenote, I have resumed work on the extended datalists and I think things are coming along nicely on that front.</p>
<p>By the way: I wonder where (if anywhere at all) forms are headed. They need some ? too. ;)</p>
<h2>References</h2>
<ul>
<li><a href="https://github.com/deas/contentreich-alfresco-datalists">Alfresco Extended Datalists @ Github</a></li>
<li><a href="https://github.com/Alfresco/alfresco-js-api/tree/master/src/alfresco-activiti-rest-api">Alfresco Activiti REST API</a></li>
</ul>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/alfresco-workflow-meets-extended-datalists">Alfresco Workflow meets Extended Datalists</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/alfresco-workflow-meets-extended-datalists/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5902</post-id>	</item>
		<item>
		<title>Alfresco: Handling &#8220;LibreOffice not responding&#8221;</title>
		<link>https://www.contentreich.de/alfresco-handling-libreoffice-not-responding</link>
					<comments>https://www.contentreich.de/alfresco-handling-libreoffice-not-responding#comments</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Thu, 04 Aug 2016 07:11:36 +0000</pubDate>
				<category><![CDATA[Add-ons]]></category>
		<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Bugfixes]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=5840</guid>

					<description><![CDATA[<p><img width="360" height="200" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/08/indiana-jones-swordsman.gif?fit=360%2C200&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Alfresco: Handling &#8220;LibreOffice not responding&#8221;" title="Alfresco: Handling &#8220;LibreOffice not responding&#8221;" decoding="async" loading="lazy" data-attachment-id="5843" data-permalink="https://www.contentreich.de/alfresco-handling-libreoffice-not-responding/indiana-jones-swordsman" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/08/indiana-jones-swordsman.gif?fit=360%2C200&amp;ssl=1" data-orig-size="360,200" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="indiana-jones-swordsman" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/08/indiana-jones-swordsman.gif?fit=360%2C200&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/08/indiana-jones-swordsman.gif?fit=360%2C200&amp;ssl=1" />Alfresco Community uses LibreOffice for various content transformations. From time to time, certain transformations screw the Office server process in a way that it stops responding to requests.  The extension introduced in this post provides an automated recovery process.<br />
<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/alfresco-handling-libreoffice-not-responding">Alfresco: Handling &#8220;LibreOffice not responding&#8221;</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Alfresco Community uses LibreOffice for various content transformations. From time to time, certain transformations screw the Office server process. It stops responding to requests. There are most likely various triggers (type of transformation, actual document) for this misbehavior (endless loop, stuck, death, whatnot) of the process. There are <a href="https://www.contentreich.de/html-preview-in-alfresco-done-right">alternatives</a> preventing some of the issues, but it seems pretty hopeless to track everything down to the root cause and fix it.</p>
<p>The Community Edition uses the OODirect subsystem which also manages the lifecycle of the process. However, there is nothing in place to recover from a screwed/terminated process. The drop-in extension below provides this functionality. I have only tried it with Alfresco 5.1, but I think it should also work starting at 4.2.</p>
<p>To use it, drop it in <code>webapps/alfresco/WEB-INF/lib</code> or <code>modules/platform</code>. It won&#8217;t do anything unless you set a cron expression in <code>alfresco-global.properties</code> like shown below. </p>
<pre class="EnlighterJSRAW" data-enlighter-language="t">
contentreich.officeWatchDog.kill=true
contentreich.officeWatchDog.cronExpression=0 */10 * * * ?
contentreich.officeWatchDog.timeoutSeconds=60
</pre>
<p>The <code>timeoutSeconds</code> parameter says how long you are willing to wait before you consider the process screwed, <code>kill</code> will only work on a Unix system for now. The extension keeps track of the process, so it won&#8217;t work if you start/restart the Office process manually.</p>
<p>Enjoy! ;)</p>
<p><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://www.contentreich.de/download/5850/?tmstv=1780456408" rel="nofollow" id="download-link-5850" data-redirect="false" >
	Download Alfresco Office Watchdog</a>
</p>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/alfresco-handling-libreoffice-not-responding">Alfresco: Handling &#8220;LibreOffice not responding&#8221;</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/alfresco-handling-libreoffice-not-responding/feed</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5840</post-id>	</item>
		<item>
		<title>Docker, Clojure, Microservices, Google (and Alfresco): Introducing ECM Google Services</title>
		<link>https://www.contentreich.de/docker-clojure-microservices-google-and-alfresco-introducing-ecm-google-services</link>
					<comments>https://www.contentreich.de/docker-clojure-microservices-google-and-alfresco-introducing-ecm-google-services#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Fri, 22 Jul 2016 07:41:31 +0000</pubDate>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Clojure]]></category>
		<category><![CDATA[Nuxeo]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[Microservices]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[RESTful]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=5765</guid>

					<description><![CDATA[<p><img width="871" height="493" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/ECM_Google_Services-1.jpg?fit=871%2C493&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Docker, Clojure, Microservices, Google (and Alfresco): Introducing ECM Google Services" title="Docker, Clojure, Microservices, Google (and Alfresco): Introducing ECM Google Services" decoding="async" loading="lazy" srcset="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/ECM_Google_Services-1.jpg?w=1280&amp;ssl=1 1280w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/ECM_Google_Services-1.jpg?resize=768%2C435&amp;ssl=1 768w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/ECM_Google_Services-1.jpg?resize=1070%2C606&amp;ssl=1 1070w" sizes="auto, (max-width: 871px) 100vw, 871px" data-attachment-id="5829" data-permalink="https://www.contentreich.de/docker-clojure-microservices-google-and-alfresco-introducing-ecm-google-services/ecm_google_services-2" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/ECM_Google_Services-1.jpg?fit=1280%2C725&amp;ssl=1" data-orig-size="1280,725" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="ECM Google Services" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/ECM_Google_Services-1.jpg?fit=1280%2C725&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/ECM_Google_Services-1.jpg?fit=871%2C493&amp;ssl=1" />There are Google Vision „modules“ available for Alfresco and Nuxeo and most likely other systems as well. These modules execute Google API Java code in process. They need to ensure the API along with its tree of dependencies is right there. Dependency trees can be huge and cause all sorts of nasty issues. I decided to try a microservice approach - adding Docker and Clojure to the mix.<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/docker-clojure-microservices-google-and-alfresco-introducing-ecm-google-services">Docker, Clojure, Microservices, Google (and Alfresco): Introducing ECM Google Services</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/ECM_Google_Services-1.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" data-attachment-id="5829" data-permalink="https://www.contentreich.de/docker-clojure-microservices-google-and-alfresco-introducing-ecm-google-services/ecm_google_services-2" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/ECM_Google_Services-1.jpg?fit=1280%2C725&amp;ssl=1" data-orig-size="1280,725" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="ECM Google Services" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/ECM_Google_Services-1.jpg?fit=1280%2C725&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/ECM_Google_Services-1.jpg?fit=871%2C493&amp;ssl=1" class="aligncenter size-large wp-image-5829" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/ECM_Google_Services-1.jpg?resize=748%2C424&#038;ssl=1" alt="ECM Google Services" width="748" height="424" /></a></p>
<p>There are Google Vision &#8220;modules&#8221; available for Alfresco and Nuxeo and most likely a bunch of other systems as well. These modules execute Google API Java code in process. They need to ensure the API along with its tree of dependencies is right there. Dependency trees can be huge &#8211; especially as we are heading into machine learning and artificial intelligence domains. The Alfresco repository comes with almost 300 Java libraries. The Google Vision API also has a few dependencies. Some of those are already in the Alfresco repository. Care should be taken if you want to put it there.</p>
<p>There are various approaches how to introduce a module along with its dependencies into a server process (Alfresco or Nuxeo). Alfresco suggests to use its proprietary AMP format, Nuxeo uses an OSGI &#8220;light&#8221; approach (without lifecycle and/or isolation if I remember correctly). I don&#8217;t like either of them. Introducing more dependencies messes things up even further. And has great potential for all sorts of nasty issues.</p>
<p>I wanted to try the microservice route. It surely complicates matters as it introduces another process and network communication. On the other hand, it also has great advantages:</p>
<ul>
<li>It does not mess with ECM server dependencies</li>
<li>The microservice can potentially be used from all your systems</li>
<li>The process lifecycle is independant of the client (which happens to be the ECM server)</li>
<li>Development turnaround is super quick &#8211; at least it was with tesla</li>
</ul>
<p>I grabbed code which was there and quickly bent it towards microservices. One might consider it a hack. You have been warned. :)</p>
<h2>The Microservice</h2>
<p>I am always looking for Clojure adventures. That&#8217;s why I picked Otto&#8217;s tesla-microservice as a basis for the microservice (The Otto folks have base implementations for Java/Spring Boot, Node.js and maybe even other stacks on github). Naturally, I decided to wrap the microservice into a docker container.</p>
<p>If you want to try this out, make sure you have a Google API json key. If you don&#8217;t have one already, get yourself one. Playing around is free. And 1000 API calls/month are also free &#8211; if I remember correctly.</p>
<p>To spin up the docker container, do the following:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="s">$ mkdir conf
$ echo 'vision-credentials-json=file:///conf/google-api-key.json' &gt; conf/ecm-google.properties
$ cp /tmp/your-key.json conf/google-api-key.json
$ docker run -v `pwd`/conf:/conf \
   -e CONFIG_FILE=/conf/ecm-google.properties --rm \
   -p 9090:9090 deas/contentreich-ecm-google-ms:0.1.0
</pre>
<p>Alternatively, if you want to run the jar directly, download the ECM Google Microservice archive, extract it and exeute</p>
<pre class="EnlighterJSRAW" data-enlighter-language="s">$ cd contentreich-ecm-google-ms/
$ cp /tmp/your-key.json conf/google-api-key.json
$ CONFIG_FILE=./conf/ecm-google.properties java \
   -jar contentreich-ecm-google-ms-0.1.0-standalone.jar
</pre>
<p>The properties file supports way more values (generic microservice stuff and Google things I have introduced).</p>
<p>Either way, the service should be up and a demo form is available at <a href="http://localhost:9090/vision-form">http://localhost:9090/vision-form</a>. Submitting an image should display the data returned by Google:</p>
<p><img data-recalc-dims="1" loading="lazy" decoding="async" data-attachment-id="5776" data-permalink="https://www.contentreich.de/docker-clojure-microservices-google-and-alfresco-introducing-ecm-google-services/google-vision-demo-page" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/google-vision-demo-page.png?fit=748%2C241&amp;ssl=1" data-orig-size="748,241" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="google-vision-demo-page" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/google-vision-demo-page.png?fit=748%2C241&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/google-vision-demo-page.png?fit=748%2C241&amp;ssl=1" class="alignleft size-full wp-image-5776" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/google-vision-demo-page.png?resize=748%2C291&#038;ssl=1" alt="google-vision-demo-page" width="748" height="291" /></p>
<h2>The Alfresco &#8220;Connector&#8221;</h2>
<p>My Alfresco pieces are derived from the work of Angel Borroy. Links to sources and binaries can be found below.</p>
<p>To deploy the Alfresco extension, copy the repo-/share jar file to <code>{alfresco,share}/WEB-INF/lib</code> or <code>modules/{platform,share}</code> and (re)start the server.</p>
<p>There is a doclib action &#8220;Google Vision&#8221; which is available for images. Try it out. It should set tags on the image. It should also set landmark, logo and text values when received from Google. At least I hope I preserved this functionality. :)</p>
<p><img data-recalc-dims="1" loading="lazy" decoding="async" data-attachment-id="5811" data-permalink="https://www.contentreich.de/docker-clojure-microservices-google-and-alfresco-introducing-ecm-google-services/paulchen-doclib" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/paulchen-doclib.png?fit=748%2C113&amp;ssl=1" data-orig-size="748,113" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="paulchen-doclib" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/paulchen-doclib.png?fit=748%2C113&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/paulchen-doclib.png?fit=748%2C113&amp;ssl=1" class="alignleft size-full wp-image-5811" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/paulchen-doclib.png?resize=748%2C113&#038;ssl=1" alt="paulchen-doclib" width="748" height="113" /></p>
<p>Putting this together was an awesome experience. I am fairly sure this will continue to evolve over time. And maybe it can also serve to bring ECM nerd communities together. ;)</p>
<p><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://www.contentreich.de/download/5782/?tmstv=1780456408" rel="nofollow" id="download-link-5782" data-redirect="false" >
	Download ECM Google Microservice</a>
<br />
<a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://www.contentreich.de/download/5784/?tmstv=1780456408" rel="nofollow" id="download-link-5784" data-redirect="false" >
	Download Alfresco ECM Google Service</a>
</p>
<h2>References</h2>
<ul>
<li><a href="https://github.com/deas/alfresco-google-vision">My fork of alfresco-google-vision @ Github</a></li>
<li><a href="https://github.com/deas/contentreich-ecm-google-ms">Clojurified, Dockerized ECM Google Microservice @ Github</a></li>
<li><a href="https://github.com/otto-de/tesla-microservice">Tesla Microservice @ Github</a></li>
</ul>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/docker-clojure-microservices-google-and-alfresco-introducing-ecm-google-services">Docker, Clojure, Microservices, Google (and Alfresco): Introducing ECM Google Services</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/docker-clojure-microservices-google-and-alfresco-introducing-ecm-google-services/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5765</post-id>	</item>
		<item>
		<title>Who killed CMIS?</title>
		<link>https://www.contentreich.de/who-killed-cmis</link>
					<comments>https://www.contentreich.de/who-killed-cmis#respond</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Mon, 18 Jul 2016 12:04:21 +0000</pubDate>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[CMIS]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[Enterprise]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=5751</guid>

					<description><![CDATA[<p><img width="748" height="429" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/disaster-girl.jpg?fit=748%2C429&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Who killed CMIS?" title="Who killed CMIS?" decoding="async" loading="lazy" data-attachment-id="5749" data-permalink="https://www.contentreich.de/who-killed-cmis/disaster-girl" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/disaster-girl.jpg?fit=748%2C429&amp;ssl=1" data-orig-size="748,429" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Disaster Girl" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/disaster-girl.jpg?fit=748%2C429&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/disaster-girl.jpg?fit=748%2C429&amp;ssl=1" />CMIS came along aiming to standardize interoperability around content. I have never been a fan and always found CMIS cumbersome to work with - avoided it when I was given the choice. JavaScript folks did not  care about it and the JSON bindings introduced at v1.1 didn't change that. Meanwhile, it seems CMIS died silently.<br />
<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/who-killed-cmis">Who killed CMIS?</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>CMIS came along aiming to standardize interoperability around content. It came to supercede JCR (which is pretty much dead for a ages now). I have never been a fan and always found CMIS cumbersome to work with &#8211; avoided it when I was given the choice. JavaScript folks did not care about it, and the JSON bindings introduced at v1.1 didn&#8217;t change that.</p>
<p><a href="https://www.contentreich.de/angular-is-the-new-ecm-ui-hype">ECM vendors are pitching</a> pure JavaScript libraries these days, and it seems they no longer care about CMIS either. I have not seen one of them pitching or recommending it for a while. However, would be fair to drop a few lines and guide the people who jumped on the bandwagon. I think it may be time to discourage CMIS usage.</p>
<p>Personally, I&#8217;d like to know what actually killed CMIS it. Maybe it was just what I found as a developer &#8211; the cumbersome usage and the fact that implementations where not as interchangeable as one might have expected.</p>
<h2>References</h2>
<ul>
<li><a href="https://de.wikipedia.org/wiki/Content_Management_Interoperability_Services">CMIS on Wikipedia</a></li>
</ul>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/who-killed-cmis">Who killed CMIS?</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/who-killed-cmis/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5751</post-id>	</item>
		<item>
		<title>What&#8217;s that fuss about Alfresco Angular2 components?</title>
		<link>https://www.contentreich.de/whats-that-fuss-about-alfresco-angular2-components</link>
					<comments>https://www.contentreich.de/whats-that-fuss-about-alfresco-angular2-components#comments</comments>
		
		<dc:creator><![CDATA[Sandra Steffan (www.ein-bild.com)]]></dc:creator>
		<pubDate>Thu, 14 Jul 2016 15:17:11 +0000</pubDate>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Content-Management]]></category>
		<category><![CDATA[Angular2]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[development]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=5737</guid>

					<description><![CDATA[<p><img width="871" height="490" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/whats-that-fuss-about-alfresco-a.jpg?fit=871%2C490&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="What&#8217;s that fuss about Alfresco Angular2 components?" title="What&#8217;s that fuss about Alfresco Angular2 components?" decoding="async" loading="lazy" srcset="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/whats-that-fuss-about-alfresco-a.jpg?w=1280&amp;ssl=1 1280w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/whats-that-fuss-about-alfresco-a.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/whats-that-fuss-about-alfresco-a.jpg?resize=1070%2C602&amp;ssl=1 1070w" sizes="auto, (max-width: 871px) 100vw, 871px" data-attachment-id="5744" data-permalink="https://www.contentreich.de/whats-that-fuss-about-alfresco-angular2-components/whats-that-fuss-about-alfresco-angular2-components-2" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/whats-that-fuss-about-alfresco-a.jpg?fit=1280%2C720&amp;ssl=1" data-orig-size="1280,720" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="What&amp;#8217;s that fuss about Alfresco Angular2 components?" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/whats-that-fuss-about-alfresco-a.jpg?fit=1280%2C720&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/whats-that-fuss-about-alfresco-a.jpg?fit=871%2C490&amp;ssl=1" />It's about generating an app by just answering a few questions and a story about zombies ;). We should be sure to understand the nature of the foundation we build upon. Otherwise, we might end up in a zombie apocalypse.<!-- Format : video --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/whats-that-fuss-about-alfresco-angular2-components">What&#8217;s that fuss about Alfresco Angular2 components?</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><iframe loading="lazy" class="youtube-player" width="871" height="490" src="https://www.youtube.com/embed/mK9S60Czzng?version=3&#038;rel=0&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=de-DE&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe></p>
<p>&nbsp;</p>
<p>We should be sure to understand the nature of the foundation we build upon. Otherwise, we might end up in a zombie apocalypse.</p>
<!-- Format : video --><p>Der Beitrag <a href="https://www.contentreich.de/whats-that-fuss-about-alfresco-angular2-components">What&#8217;s that fuss about Alfresco Angular2 components?</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/whats-that-fuss-about-alfresco-angular2-components/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5737</post-id>	</item>
		<item>
		<title>Angular is the new ECM UI Hype</title>
		<link>https://www.contentreich.de/angular-is-the-new-ecm-ui-hype</link>
					<comments>https://www.contentreich.de/angular-is-the-new-ecm-ui-hype#comments</comments>
		
		<dc:creator><![CDATA[Andreas Steffan]]></dc:creator>
		<pubDate>Mon, 11 Jul 2016 10:59:20 +0000</pubDate>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Content-Management]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Productivity]]></category>
		<guid isPermaLink="false">https://www.contentreich.de/?p=5715</guid>

					<description><![CDATA[<p><img width="500" height="205" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/zamunda-twins.gif?fit=500%2C205&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="Angular is the new ECM UI Hype" title="Angular is the new ECM UI Hype" decoding="async" loading="lazy" data-attachment-id="5717" data-permalink="https://www.contentreich.de/angular-is-the-new-ecm-ui-hype/zamunda-twins" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/zamunda-twins.gif?fit=500%2C205&amp;ssl=1" data-orig-size="500,205" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="zamunda-twins" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/zamunda-twins.gif?fit=500%2C205&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/zamunda-twins.gif?fit=500%2C205&amp;ssl=1" />Love it or hate it, but Angular is winning the Enterprise by storm. AngularBeans came first, now ECM vendors are also betting on it.<!-- Format :  --></p>
<p>Der Beitrag <a href="https://www.contentreich.de/angular-is-the-new-ecm-ui-hype">Angular is the new ECM UI Hype</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Love it or hate it, but Angular is winning the Enterprise by storm. AngularBeans came first, now ECM vendors are also betting on it:</p>
<blockquote class="twitter-tweet" data-width="550" data-dnt="true">
<p lang="en" dir="ltr">Soon! <a href="https://twitter.com/Alfresco?ref_src=twsrc%5Etfw">@Alfresco</a> <a href="https://twitter.com/hashtag/angular2?src=hash&amp;ref_src=twsrc%5Etfw">#angular2</a> <a href="https://t.co/jqH5HFPWVN">pic.twitter.com/jqH5HFPWVN</a></p>
<p>&mdash; Ole Hejlskov (@OleHejlskov) <a href="https://twitter.com/OleHejlskov/status/748113448542814208?ref_src=twsrc%5Etfw">June 29, 2016</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<blockquote class="twitter-tweet" data-width="550" data-dnt="true">
<p lang="en" dir="ltr">The New Way to Bootstrap Your Application with Nuxeo Generator <a href="https://t.co/uExnxYtm0m">https://t.co/uExnxYtm0m</a> <a href="https://t.co/ZCbgE86edJ">pic.twitter.com/ZCbgE86edJ</a></p>
<p>&mdash; Nuxeo (@nuxeo) <a href="https://twitter.com/nuxeo/status/751457656674611200?ref_src=twsrc%5Etfw">July 8, 2016</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>Almost looks like they are copying from each other, but I don&#8217;t think that is the case. :) I guess it is most likely because we can be sure now that Angular will be around for a while. A lot of developers love it and appreciate the move:</p>
<p><img data-recalc-dims="1" loading="lazy" decoding="async" data-attachment-id="5719" data-permalink="https://www.contentreich.de/angular-is-the-new-ecm-ui-hype/bw-applause" data-orig-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/bw-applause.gif?fit=480%2C360&amp;ssl=1" data-orig-size="480,360" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="bw-applause" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/bw-applause.gif?fit=480%2C360&amp;ssl=1" data-large-file="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/bw-applause.gif?fit=480%2C360&amp;ssl=1" src="https://i0.wp.com/www.contentreich.de/wp-content/uploads/2016/07/bw-applause.gif?resize=748%2C561&#038;ssl=1" alt="Applause" width="748" height="561" class="alignleft size-full wp-image-5719" /></p>
<p>To be honest, I think a fair share of developers see this as an opportunity to get rid of problematic legacy which they have built over the years. :) Other than that, personally I am way less excited until we see an extensible, well maintained base application built on top of this stuff.</p>
<!-- Format :  --><p>Der Beitrag <a href="https://www.contentreich.de/angular-is-the-new-ecm-ui-hype">Angular is the new ECM UI Hype</a> erschien zuerst auf <a href="https://www.contentreich.de">CONTENTREICH</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.contentreich.de/angular-is-the-new-ecm-ui-hype/feed</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5715</post-id>	</item>
	</channel>
</rss>
