{"id":5413,"date":"2018-08-12T00:42:02","date_gmt":"2018-08-11T22:42:02","guid":{"rendered":"https:\/\/blog.nevercodealone.de\/?p=5413"},"modified":"2018-08-12T00:43:49","modified_gmt":"2018-08-11T22:43:49","slug":"groovy-shell-scripting-teil-1","status":"publish","type":"post","link":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/","title":{"rendered":"Groovy Shell Scripting &#8211; Java++ f\u00fcr die Shell &#8211; Teil 1"},"content":{"rendered":"<p>In der Serie &#8222;Groovy Shell Scripting&#8220; zeigen wir euch, wie man die Programmiersprache <a href=\"http:\/\/groovy-lang.org\/\" target=\"_blank\" rel=\"noopener\">Groovy<\/a> in einer unerwarteten Umgebung einsetzen kann, n\u00e4mlich auf der Kommandozeile. Groovy ist eine dynamische Sprache auf der JVM und gl\u00e4nzte schon einige Jahre vor Java mit Features wie funktionaler Programmierung oder Literals f\u00fcr oft benutzte Datenstrukturen wie List und Map.<\/p>\n<h2>Der Weg zu Groovy Shell Scripting<\/h2>\n<div id=\"attachment_5443\" style=\"width: 310px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting.png\" data-rel=\"penci-gallery-image-content\" ><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5443\" class=\"wp-image-5443 size-medium\" src=\"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting-300x149.png\" alt=\"Groovy Shell Scripting\" width=\"300\" height=\"149\" srcset=\"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting-300x149.png 300w, https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting-768x380.png 768w, https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting-1024x507.png 1024w, https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting-1170x579.png 1170w, https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting-585x290.png 585w, https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting.png 2000w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-5443\" class=\"wp-caption-text\">Groovy Shell Scripting<\/p><\/div>\n<p>Groovy ist eigentlich eine universell einsetzbare Programmiersprache, die man z.B. oft bei Banken findet. Was mich aber damals zu Groovy gef\u00fchrt hat war das Problem, dass meine in einen Tomcat deployte Anwendung keine HTTPS-Verbindung zu einem anderen System aufmachen konnte, obwohl Firewall und curl keine Probleme damit hatten. Letztendlich habe ich das Problem gefunden, indem ich ein Groovy-Skript mit der gleichen JVM wie der Tomcat gestartet habe. Es fehlten Zertifikate im Trust Store der JVM.<\/p>\n<p>Sp\u00e4ter musste ich Daten aus einer komplexeren XML-Datei extrahieren oder Automatisierungsskripte schreiben und landete wieder bei Groovy.<\/p>\n<p>Jetzt werdet ihr euch sicher fragen, ob es ein gro\u00dfer Umstieg war, gleich eine neue Sprache zu lernen. Nein, als Java-Programmierer hatte ich nie das Gef\u00fchl hatte, eine wirklich neue Sprache lernen zu m\u00fcssen. Groovy war eher Java wie ich es mir immer gew\u00fcnscht hatte. Wenn man sich neuere Sprachfeatures von Java ansieht, etwa die Type Inference in Java 10 oder die in Java 8 eingef\u00fchrten Lamdas, muss man anerkennen, dass Groovy viele Trends schon erkannt hatte, bevor sie auch nur in die N\u00e4he von Java gekommen sind.<\/p>\n<p>Ich bin also \u00fcber das Skripting von Java zu Groovy gekommen. In diesem und den n\u00e4chsten Blogbeitr\u00e4gen m\u00f6chte ich euch einige Features beschreiben, die ich oft verwende, wenn ich mit Groovy Shell Scripting unterwegs bin.<\/p>\n<h2>Getting Groovy &#8211; Installation und Setup<\/h2>\n<p>Meinen liebsten Installationsweg f\u00fcr Groovy habe ich gefunden, als ich ein Tool gesucht habe, um zwischen Versionen meiner JVM umschalten zu k\u00f6nnen. Gelandet bin ich bei [sdkman](https:\/\/sdkman.io\/), einem CLI-Tool, mit dem man eine Menge SDKs installieren und zwischen ihren Versionen hin- und herschalten kann. Sandra hat das sdkman hier <a href=\"https:\/\/blog.nevercodealone.de\/effizienteres-arbeiten-an-mehreren-projekten\/\">auch schon angesprochen<\/a>.<\/p>\n<p>Die Installation ist denkbar einfach:<\/p>\n<pre>curl -s \"https:\/\/get.sdkman.io\" | bash<\/pre>\n<p>Nach der Installation seht ihr in eurer <em>.bashrc<\/em> die folgende Zeile:<\/p>\n<pre># THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!\r\nexport SDKMAN_DIR=\"$HOME\/.sdkman\"\r\n[[ -s \"$HOME\/.sdkman\/bin\/sdkman-init.sh\" ]] &amp;&amp; source \"$HOME\/.sdkman\/bin\/sdkman-init.sh\"<\/pre>\n<p>Wenn ihr die zsh, vielleicht sogar mit <a href=\"https:\/\/ohmyz.sh\/\">oh-my-zsh<\/a> verwendet, wie es <a href=\"https:\/\/blog.nevercodealone.de\/codeception-tutorial\/\">Roland hier schon empfohlen hat<\/a>\u00a0k\u00f6nnt ihr diese Zeilen auch einfach ans Ende eurer <em>.zshrc<\/em> kopieren und alles funktioniert. \u00d6ffnet eine neue Shell und ihr k\u00f6nnt loslegen:<\/p>\n<div id=\"attachment_5420\" style=\"width: 310px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5420\" class=\"wp-image-5420 size-medium\" title=\"Groovy Shell Scripting - Installierte und installierbare Versionen von Groovy in sdkman\" src=\"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/sdk-list-groovy-300x271.png\" alt=\"Installierte und installierbare Versionen von Groovy in sdkman\" width=\"300\" height=\"271\" srcset=\"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/sdk-list-groovy-300x271.png 300w, https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/sdk-list-groovy-768x693.png 768w, https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/sdk-list-groovy-1024x924.png 1024w, https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/sdk-list-groovy-1170x1056.png 1170w, https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/sdk-list-groovy-585x528.png 585w, https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/sdk-list-groovy.png 1316w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><p id=\"caption-attachment-5420\" class=\"wp-caption-text\">sdk list groovy<\/p><\/div>\n<p>Ihr seht am <em>*<\/em>, dass ich gerade Groovy 2.5.1 (die derzeit\u00a0 aktuelle stable Version) und 2.4.15, die aktuelle Version der 2.4er Reihe installiert habe. Am <em>&gt;<\/em> seht ihr, dass 2.5.1 auch meine default Version f\u00fcr Groovy ist.<\/p>\n<p>Will ich jetzt die aktuelle Alphaversion von Groovy 2.6 installieren, mache ich das mit:<\/p>\n<pre>\u279c ~ sdk install groovy 2.6.0-alpha-4<\/pre>\n<p>Die Version f\u00fcr die aktuelle Shell setze ich mit<\/p>\n<pre>\u279c ~ sdk use groovy 2.5.1<\/pre>\n<p>und den Default f\u00fcr alle Shells mit<\/p>\n<pre>\u279c ~ sdk default groovy 2.5.1<\/pre>\n<p>sdkman hat noch weitere interessante Features, aber das ist ein Thema f\u00fcr einen anderen Blogpost.<\/p>\n<h2>A groovy kind of Java &#8211; Erste Schritte<\/h2>\n<p>Der erste Schritt mit einer neuen Programmiersprache ist in unserer Zunft das &#8222;Hello World&#8220;. In der Einf\u00fchrung habe ich schon erw\u00e4hnt, dass ich fast keine Umgew\u00f6hnung zwischen Groovy und Java hatte. Das liegt daran, dass Groovy als syntaktische Obermenge von Java entwickelt wurde. Das bedeutet, dass Ihr <em>HelloWorld.java<\/em> in Java schreiben k\u00f6nnt und es ist valides Groovy. Fangen wir genau so an:<\/p>\n<pre><code>public class Hello {\r\n  public static void main(String [] args) {\r\n    System.out.println(\"Hello World!\");\r\n  }\r\n}<\/code><\/pre>\n<p>Das w\u00fcrde in Java kompilieren und laufen. Mit Groovy kann ich es auch einfach so ausf\u00fchren. Ich muss nur die Dateiendung \u00e4ndern:<\/p>\n<pre>\u279c mv HelloWorld.java HelloWorld.groovy\r\n\u279c groovy HelloWorld.groovy\r\nHello World!<\/pre>\n<p>Es geht aber noch besser. Groovy hat einige Verbesserungen an der Syntax vorgenommen, die die Lesbarkeit von Skripten oft erheblich erh\u00f6ht, z.B.<\/p>\n<p>&#8211; das Semikolon am Zeilenende kann entfallen<br \/>\n&#8211; man braucht kein <em>public<\/em> mehr an Klassen und Methoden, das ist der Default<br \/>\n&#8211; man kann Klammern weglassen<br \/>\n&#8211; es gibt viele automatisch importierte Klassen und statische Methoden<\/p>\n<p>Die ganzen Features sind wieder ein Thema f\u00fcr einen eigenen Blogpost. Stay tuned&#8230;<\/p>\n<p>F\u00fcr uns auf der Shell ist wichtig, dass man sogar noch die Klassendeklaration weglassen kann. Man bekommt automatisch eine Unterklasse von <em>groovy.lang.Script<\/em>. Es bleibt folgendes von unserer ehemaligen Klasse \u00fcbrig:<\/p>\n<pre>System.out.println(\"Hello World!\");<\/pre>\n<p>Die eben angesprochen automatischen Imports z.B. von <em>println<\/em> und die optionalen Semikola machen es zu<\/p>\n<pre>println(\"Hello World!\")<\/pre>\n<p>und auch die Klammern bei Methodenaufrufen sind optional. Es bleibt ein Einzeiler:<\/p>\n<pre>println \"Hello World!\"<\/pre>\n<h2>Zum groovy Shell Skript werden<\/h2>\n<p>Um unser Skript zu einem first class citizen auf der Shell zu machen und wirklich von &#8222;Groovy Shell Scripting&#8220; sprechen zu k\u00f6nnen, muss sich unser Skript in die Unix-Philosophie der kleinen komponierbaren Programme einf\u00fcgen. Dazu muss es wie andere Skripte ausf\u00fchrbar sein und Daten \u00fcber Pipes von anderen Programmen annehmen.<\/p>\n<p>Ausf\u00fchrbarkeit bekommen wir, indem wir eine Shebang an den Anfang unseres Skriptes einf\u00fcgen. Damit sagen wir unserer Shell, dass sie einen neuen Prozess mit dem hinter dem Shebang angegebenen Programm starten soll:<\/p>\n<pre>#!\/usr\/bin\/env groovy\r\nprintln \"Hello World!\"<\/pre>\n<p>Danach m\u00fcssen wir die Datei noch ausf\u00fchrbar machen:<\/p>\n<pre>\u279c chmod +x HelloWorld.groovy\r\n\u279c .\/HelloWorld.groovy\r\nHello World!<\/pre>\n<p>Um g\u00e4nzlich zu verbergen, dass wir es mit Groovy zu tun haben, k\u00f6nnen wir noch die Dateiendung entfernen. Groovy braucht sie nicht mehr, wenn unser Skript mit einer Shebang anf\u00e4ngt.<\/p>\n<pre>\u279c mv HelloWorld.groovy hello_world\r\n\u279c .\/hello_world\r\nHello World!<\/pre>\n<p>In den n\u00e4chsten Teilen von &#8222;Groovy Shell Scripting&#8220; stelle ich weitere Features von Groovy auf der CLI vor, etwa wie man mit Pipes Daten von anderen Programmen weiter verarbeitet.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In der Serie &#8222;Groovy Shell Scripting&#8220; zeigen wir euch, wie man die Programmiersprache Groovy in&hellip;<\/p>\n","protected":false},"author":28,"featured_media":5442,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"cybocfi_hide_featured_image":"","footnotes":""},"categories":[4,8,12],"tags":[61,60,35,37,46],"class_list":["post-5413","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gastbeitrag","category-software-qualitaet","category-webdevelopment-tools","tag-best-practice","tag-motivation","tag-sdkman","tag-software-qualitaet","tag-webdevelopment"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Groovy Shell Scripting - Teil 1 - Groovy auf der Shell installieren und verwenden<\/title>\n<meta name=\"description\" content=\"&quot;Groovy Shell Scripting&quot; zeigt wie man Groovy auf der Shell einsetzt und mit anderen Skripten und Linux Tools interoperabel macht. Hier: erste Schritte.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Groovy Shell Scripting - Teil 1 - Groovy auf der Shell installieren und verwenden\" \/>\n<meta property=\"og:description\" content=\"&quot;Groovy Shell Scripting&quot; zeigt wie man Groovy auf der Shell einsetzt und mit anderen Skripten und Linux Tools interoperabel macht. Hier: erste Schritte.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Employer Branding und Tutorials Web Development\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/nevercodealone\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-08-11T22:42:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-08-11T22:43:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Georg Berky\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@georgberky\" \/>\n<meta name=\"twitter:site\" content=\"@nevercodealone\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Georg Berky\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\u00a0Minuten\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Groovy Shell Scripting - Teil 1 - Groovy auf der Shell installieren und verwenden","description":"\"Groovy Shell Scripting\" zeigt wie man Groovy auf der Shell einsetzt und mit anderen Skripten und Linux Tools interoperabel macht. Hier: erste Schritte.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/","og_locale":"de_DE","og_type":"article","og_title":"Groovy Shell Scripting - Teil 1 - Groovy auf der Shell installieren und verwenden","og_description":"\"Groovy Shell Scripting\" zeigt wie man Groovy auf der Shell einsetzt und mit anderen Skripten und Linux Tools interoperabel macht. Hier: erste Schritte.","og_url":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/","og_site_name":"Employer Branding und Tutorials Web Development","article_publisher":"https:\/\/www.facebook.com\/nevercodealone\/","article_published_time":"2018-08-11T22:42:02+00:00","article_modified_time":"2018-08-11T22:43:49+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting.jpg","type":"image\/jpeg"}],"author":"Georg Berky","twitter_card":"summary_large_image","twitter_image":"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting.jpg","twitter_creator":"@georgberky","twitter_site":"@nevercodealone","twitter_misc":{"Verfasst von":"Georg Berky","Gesch\u00e4tzte Lesezeit":"5\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/#article","isPartOf":{"@id":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/"},"author":{"name":"Georg Berky","@id":"https:\/\/blog.nevercodealone.de\/#\/schema\/person\/d3ae4d469af341690c2dade093567b9c"},"headline":"Groovy Shell Scripting &#8211; Java++ f\u00fcr die Shell &#8211; Teil 1","datePublished":"2018-08-11T22:42:02+00:00","dateModified":"2018-08-11T22:43:49+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/"},"wordCount":918,"commentCount":1,"publisher":{"@id":"https:\/\/blog.nevercodealone.de\/#organization"},"image":{"@id":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting.jpg","keywords":["Best Practice","Motivation","sdkman","Software-Qualit\u00e4t","Webdevelopment"],"articleSection":["Gastbeitrag","Software-Qualit\u00e4t","Webdevelopment-Tools"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/","url":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/","name":"Groovy Shell Scripting - Teil 1 - Groovy auf der Shell installieren und verwenden","isPartOf":{"@id":"https:\/\/blog.nevercodealone.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/#primaryimage"},"image":{"@id":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting.jpg","datePublished":"2018-08-11T22:42:02+00:00","dateModified":"2018-08-11T22:43:49+00:00","description":"\"Groovy Shell Scripting\" zeigt wie man Groovy auf der Shell einsetzt und mit anderen Skripten und Linux Tools interoperabel macht. Hier: erste Schritte.","breadcrumb":{"@id":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/#primaryimage","url":"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting.jpg","contentUrl":"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2018\/08\/Groovy-Shell-Scripting.jpg","width":1024,"height":512,"caption":"Groovy Shell Scripting"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.nevercodealone.de\/groovy-shell-scripting-teil-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.nevercodealone.de\/"},{"@type":"ListItem","position":2,"name":"Groovy Shell Scripting &#8211; Java++ f\u00fcr die Shell &#8211; Teil 1"}]},{"@type":"WebSite","@id":"https:\/\/blog.nevercodealone.de\/#website","url":"https:\/\/blog.nevercodealone.de\/","name":"Employer Branding und PHP Training","description":"Employer Branding f\u00fcr Web Development Jobs, viele Tutorials und HowTo Gastbeitr\u00e4ge der Community","publisher":{"@id":"https:\/\/blog.nevercodealone.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.nevercodealone.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/blog.nevercodealone.de\/#organization","name":"Never Code Alone","url":"https:\/\/blog.nevercodealone.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/blog.nevercodealone.de\/#\/schema\/logo\/image\/","url":"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2016\/03\/nca_2.png","contentUrl":"https:\/\/blog.nevercodealone.de\/wp-content\/uploads\/2016\/03\/nca_2.png","width":212,"height":130,"caption":"Never Code Alone"},"image":{"@id":"https:\/\/blog.nevercodealone.de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/nevercodealone\/","https:\/\/x.com\/nevercodealone","https:\/\/www.instagram.com\/nevercodealone\/","https:\/\/www.youtube.com\/c\/NeverCodeAlone"]},{"@type":"Person","@id":"https:\/\/blog.nevercodealone.de\/#\/schema\/person\/d3ae4d469af341690c2dade093567b9c","name":"Georg Berky","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/blog.nevercodealone.de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/892f0dbed8c441dcc08eee0185271abe522c26829ea56967a156c5802a035ca5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/892f0dbed8c441dcc08eee0185271abe522c26829ea56967a156c5802a035ca5?s=96&d=mm&r=g","caption":"Georg Berky"},"description":"Ich bin leiderschaftlicher Programmierer, haupts\u00e4chlich in JVM-Sprachen, z.B. Java, Groovy oder Clojure. Programmieren ist mein Handwerk, aber dazu geh\u00f6ren auch Themen wie die Automatisierung von Builds oder Deployments und Scripting in der Shell und Agilit\u00e4t im Team. Seit einigen Jahren bin ich Co-Organisator der Software Craftsmanship Communities im Ruhrgebiet und in D\u00fcsseldorf. Wenn ich nicht programmiere praktiziere ich Aikido oder spiele Trompete.","sameAs":["https:\/\/twitter.com\/georgberky","https:\/\/x.com\/georgberky"],"url":"https:\/\/blog.nevercodealone.de\/author\/georgberky\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.nevercodealone.de\/wp-json\/wp\/v2\/posts\/5413","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.nevercodealone.de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nevercodealone.de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nevercodealone.de\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nevercodealone.de\/wp-json\/wp\/v2\/comments?post=5413"}],"version-history":[{"count":24,"href":"https:\/\/blog.nevercodealone.de\/wp-json\/wp\/v2\/posts\/5413\/revisions"}],"predecessor-version":[{"id":5444,"href":"https:\/\/blog.nevercodealone.de\/wp-json\/wp\/v2\/posts\/5413\/revisions\/5444"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.nevercodealone.de\/wp-json\/wp\/v2\/media\/5442"}],"wp:attachment":[{"href":"https:\/\/blog.nevercodealone.de\/wp-json\/wp\/v2\/media?parent=5413"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nevercodealone.de\/wp-json\/wp\/v2\/categories?post=5413"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nevercodealone.de\/wp-json\/wp\/v2\/tags?post=5413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}