\n \u003Cinput type=\"text\" name=\"superpower\" />\n \u003Cbutton type=\"submit\" is=\"ajax-submit\" data-target=\"hero-container\">\n add new item\n \u003C/button>\n\u003C/form>\n\n\u003Cdiv id=\"hero-container\">\u003C/div>\n","html",[50,9578,9579,9606,9633,9654,9685,9690,9699,9708,9712],{"__ignoreMap":48},[53,9580,9581,9584,9587,9590,9592,9595,9598,9600,9603],{"class":55,"line":56},[53,9582,9583],{"class":82},"\u003C",[53,9585,9489],{"class":9586},"s9eBZ",[53,9588,9589],{"class":59}," action",[53,9591,390],{"class":82},[53,9593,9594],{"class":63},"\"/heroes\"",[53,9596,9597],{"class":59}," method",[53,9599,390],{"class":82},[53,9601,9602],{"class":63},"\"post\"",[53,9604,9605],{"class":82},">\n",[53,9607,9608,9611,9614,9617,9619,9622,9625,9627,9630],{"class":55,"line":86},[53,9609,9610],{"class":82}," \u003C",[53,9612,9613],{"class":9586},"input",[53,9615,9616],{"class":59}," type",[53,9618,390],{"class":82},[53,9620,9621],{"class":63},"\"text\"",[53,9623,9624],{"class":59}," name",[53,9626,390],{"class":82},[53,9628,9629],{"class":63},"\"hero\"",[53,9631,9632],{"class":82}," />\n",[53,9634,9635,9637,9639,9641,9643,9645,9647,9649,9652],{"class":55,"line":126},[53,9636,9610],{"class":82},[53,9638,9613],{"class":9586},[53,9640,9616],{"class":59},[53,9642,390],{"class":82},[53,9644,9621],{"class":63},[53,9646,9624],{"class":59},[53,9648,390],{"class":82},[53,9650,9651],{"class":63},"\"superpower\"",[53,9653,9632],{"class":82},[53,9655,9656,9658,9660,9662,9664,9667,9670,9672,9675,9678,9680,9683],{"class":55,"line":163},[53,9657,9610],{"class":82},[53,9659,9566],{"class":9586},[53,9661,9616],{"class":59},[53,9663,390],{"class":82},[53,9665,9666],{"class":63},"\"submit\"",[53,9668,9669],{"class":59}," is",[53,9671,390],{"class":82},[53,9673,9674],{"class":63},"\"ajax-submit\"",[53,9676,9677],{"class":59}," data-target",[53,9679,390],{"class":82},[53,9681,9682],{"class":63},"\"hero-container\"",[53,9684,9605],{"class":82},[53,9686,9687],{"class":55,"line":186},[53,9688,9689],{"class":82}," add new item\n",[53,9691,9692,9695,9697],{"class":55,"line":221},[53,9693,9694],{"class":82}," \u003C/",[53,9696,9566],{"class":9586},[53,9698,9605],{"class":82},[53,9700,9701,9704,9706],{"class":55,"line":242},[53,9702,9703],{"class":82},"\u003C/",[53,9705,9489],{"class":9586},[53,9707,9605],{"class":82},[53,9709,9710],{"class":55,"line":273},[53,9711,500],{"emptyLinePlaceholder":499},[53,9713,9714,9716,9718,9721,9723,9725,9728,9730],{"class":55,"line":279},[53,9715,9583],{"class":82},[53,9717,9562],{"class":9586},[53,9719,9720],{"class":59}," id",[53,9722,390],{"class":82},[53,9724,9682],{"class":63},[53,9726,9727],{"class":82},">\u003C/",[53,9729,9562],{"class":9586},[53,9731,9605],{"class":82},[43,9733,9737],{"className":9734,"code":9735,"language":9736,"meta":48,"style":48},"language-javascript shiki shiki-themes github-light github-dark","class AjaxSubmitButton extends HTMLButtonElement {\n connectedCallback() {\n this.addEventListener(\"click\", async (event) => {\n event.preventDefault();\n let html = await ajaxFormSubmit();\n document.getElementById(this.dataset.target).innerHTML = html;\n });\n }\n}\n\ncustomElements.define(\"ajax-submit\", AjaxSubmitButton, {\n extends: \"button\",\n});\n","javascript",[50,9738,9739,9755,9763,9796,9807,9825,9846,9851,9856,9860,9864,9879,9890],{"__ignoreMap":48},[53,9740,9741,9744,9747,9750,9753],{"class":55,"line":56},[53,9742,9743],{"class":389},"class",[53,9745,9746],{"class":59}," AjaxSubmitButton",[53,9748,9749],{"class":389}," extends",[53,9751,9752],{"class":59}," HTMLButtonElement",[53,9754,8543],{"class":82},[53,9756,9757,9760],{"class":55,"line":86},[53,9758,9759],{"class":59}," connectedCallback",[53,9761,9762],{"class":82},"() {\n",[53,9764,9765,9768,9770,9773,9775,9778,9780,9783,9786,9789,9791,9794],{"class":55,"line":126},[53,9766,9767],{"class":89}," this",[53,9769,986],{"class":82},[53,9771,9772],{"class":59},"addEventListener",[53,9774,1067],{"class":82},[53,9776,9777],{"class":63},"\"click\"",[53,9779,99],{"class":82},[53,9781,9782],{"class":389},"async",[53,9784,9785],{"class":82}," (",[53,9787,9788],{"class":8553},"event",[53,9790,1665],{"class":82},[53,9792,9793],{"class":389},"=>",[53,9795,8543],{"class":82},[53,9797,9798,9801,9804],{"class":55,"line":163},[53,9799,9800],{"class":82}," event.",[53,9802,9803],{"class":59},"preventDefault",[53,9805,9806],{"class":82},"();\n",[53,9808,9809,9812,9815,9817,9820,9823],{"class":55,"line":186},[53,9810,9811],{"class":389}," let",[53,9813,9814],{"class":82}," html ",[53,9816,390],{"class":389},[53,9818,9819],{"class":389}," await",[53,9821,9822],{"class":59}," ajaxFormSubmit",[53,9824,9806],{"class":82},[53,9826,9827,9830,9833,9835,9838,9841,9843],{"class":55,"line":221},[53,9828,9829],{"class":82}," document.",[53,9831,9832],{"class":59},"getElementById",[53,9834,1067],{"class":82},[53,9836,9837],{"class":89},"this",[53,9839,9840],{"class":82},".dataset.target).innerHTML ",[53,9842,390],{"class":389},[53,9844,9845],{"class":82}," html;\n",[53,9847,9848],{"class":55,"line":242},[53,9849,9850],{"class":82}," });\n",[53,9852,9853],{"class":55,"line":273},[53,9854,9855],{"class":82}," }\n",[53,9857,9858],{"class":55,"line":279},[53,9859,282],{"class":82},[53,9861,9862],{"class":55,"line":496},[53,9863,500],{"emptyLinePlaceholder":499},[53,9865,9866,9869,9872,9874,9876],{"class":55,"line":503},[53,9867,9868],{"class":82},"customElements.",[53,9870,9871],{"class":59},"define",[53,9873,1067],{"class":82},[53,9875,9674],{"class":63},[53,9877,9878],{"class":82},", AjaxSubmitButton, {\n",[53,9880,9881,9884,9887],{"class":55,"line":509},[53,9882,9883],{"class":82}," extends: ",[53,9885,9886],{"class":63},"\"button\"",[53,9888,9889],{"class":82},",\n",[53,9891,9892],{"class":55,"line":515},[53,9893,9894],{"class":82},"});\n",[18,9896,9897,9898,9901],{},"Der Vorteil des Custom-Elements gegenüber jQuery (oder sonstiger eigener Implementierung) ist, dass der Browser sich\ndarum kümmert, unser JavaScript mit dem HTML zu verbinden und eine Instanz des ",[50,9899,9900],{},"AjaxSubmitButtons"," zu erstellen.",[18,9903,9904,9905,9908,9909,9914],{},"Kommen zur Laufzeit weitere ",[50,9906,9907],{},"submit"," Buttons mit diesem Attribut hinzu, werden sie vom Browser automatisch mit unserem\ngewünschten Verhalten erweitert. Ist das JavaScript aus irgendwelchen Gründen nicht verfügbar funktioniert weiterhin das\ngute alte HTML Formular mit komplettem Seitenreload. Wir verbessern unsere Anwendung mit jedem weiteren\nTechnologie-Layer, der zur Verfügung\nsteht, ",[585,9910,9913],{"href":9911,"rel":9912},"https://developer.mozilla.org/de/docs/Glossary/Progressive_Enhancement",[589],"Progressive Enhancement"," genannt. HTML\nbeschreibt den Inhalt, CSS macht es bunt, und zu guter Letzt verbessern wir die Benutzererfahrung mit JavaScript.",[18,9916,9917],{},"Das Backend wird mit diesem Ansatz auch nicht komplizierter oder gar komplexer. Im Controller müssen wir erkennen, dass\nes sich um einen Ajax Request handelt. In dem Fall wird ein HTML Fragment gerendert, andernfalls wird die komplette\nSeite gerendert:",[43,9919,9921],{"className":288,"code":9920,"language":290,"meta":48,"style":48},"@PostMapping(value = \"/heroes\")\npublic String addSuperhero(\n @RequestParam String hero,\n @RequestParam String superpower,\n @RequestHeader(name = \"X-Requested-With\", defaultValue = \"\") String requestedWith,\n Model model\n ) {\n\n model.addAttribute(\"hero\", hero);\n model.addAttribute(\"superpower\", superpower);\n\n if (\"ajax\".equals(requestedWith)) {\n return \"fragments/hero-fragment :: hero-fragment\";\n }\n\n return \"full-page-including-the-hero-fragment\";\n}\n\n",[50,9922,9923,9928,9933,9938,9943,9948,9953,9958,9962,9967,9972,9976,9981,9986,9990,9994,9999],{"__ignoreMap":48},[53,9924,9925],{"class":55,"line":56},[53,9926,9927],{},"@PostMapping(value = \"/heroes\")\n",[53,9929,9930],{"class":55,"line":86},[53,9931,9932],{},"public String addSuperhero(\n",[53,9934,9935],{"class":55,"line":126},[53,9936,9937],{}," @RequestParam String hero,\n",[53,9939,9940],{"class":55,"line":163},[53,9941,9942],{}," @RequestParam String superpower,\n",[53,9944,9945],{"class":55,"line":186},[53,9946,9947],{}," @RequestHeader(name = \"X-Requested-With\", defaultValue = \"\") String requestedWith,\n",[53,9949,9950],{"class":55,"line":221},[53,9951,9952],{}," Model model\n",[53,9954,9955],{"class":55,"line":242},[53,9956,9957],{}," ) {\n",[53,9959,9960],{"class":55,"line":273},[53,9961,500],{"emptyLinePlaceholder":499},[53,9963,9964],{"class":55,"line":279},[53,9965,9966],{}," model.addAttribute(\"hero\", hero);\n",[53,9968,9969],{"class":55,"line":496},[53,9970,9971],{}," model.addAttribute(\"superpower\", superpower);\n",[53,9973,9974],{"class":55,"line":503},[53,9975,500],{"emptyLinePlaceholder":499},[53,9977,9978],{"class":55,"line":509},[53,9979,9980],{}," if (\"ajax\".equals(requestedWith)) {\n",[53,9982,9983],{"class":55,"line":515},[53,9984,9985],{}," return \"fragments/hero-fragment :: hero-fragment\";\n",[53,9987,9988],{"class":55,"line":521},[53,9989,860],{},[53,9991,9992],{"class":55,"line":527},[53,9993,500],{"emptyLinePlaceholder":499},[53,9995,9996],{"class":55,"line":533},[53,9997,9998],{}," return \"full-page-including-the-hero-fragment\";\n",[53,10000,10001],{"class":55,"line":539},[53,10002,282],{},[3469,10004,10006],{"id":10005},"auf-dem-weg-zur-single-page-application","Auf dem Weg zur Single Page Application",[18,10008,10009],{},"Mittlerweile haben wir die ajax-submit Komponente in unserer Anwendung an sehr vielen Stellen im Einsatz. Bisher hat\nsie sich als robust und einfach bewährt. Jeder im Team hat verstanden wie man es einsetzt und wie es funktioniert. Wir\nbrauchen keine Runtime a la ReactJS, wir müssen Hooks nicht verstehen, wir benötigen kein komplexes Build Setup. Wir\nmüssen nicht überlegen wie wir vue Komponenten integrieren und wir müssen uns keine Gedanken bzgl Client Side only\nFunktionalität machen.",[18,10011,10012],{},"Kurz gesagt: Wir bauen unser Frontend ohne modernes JavaScript Framework und sind (trotzdem) glücklich.",[18,10014,10015],{},"Zugegeben, die Progressive Enhancement Denkweise ist herausfordernd. Daran zu denken und zu überlegen, wie Anforderungen\nohne JavaScript gelöst werden können, hat unsere Industrie vielleicht verlernt? In der Vergangenheit haben mich\nKollegen, die überwiegend im Backend unterwegs sind gefragt, wie man denn heutzutage ein Frontend baut. Nehme man da\nAngular oder React? Über Anforderungen war man sich da aber noch nicht bewusst… Es war zumindest nicht die Einleitung\nzur Technologie Frage.",[649,10017,10019],{"id":10018},"herausforderungen-die-kommen-könnten","Herausforderungen die kommen (könnten)",[577,10021,10022],{},[580,10023,10024],{},[27,10025,10026],{},"Progressive Enhancement Denkweise",[18,10028,10029],{},"Sobald unsere Anwendung einen gewissen Charakter moderner Single Page Applications erreicht hat, wird das natürlich der\nDefault werden (im Geiste). Hier gilt es weiterhin an die Basis zu denken und nicht sofort an JavaScript only Lösungen.",[577,10031,10032],{},[580,10033,10034],{},[27,10035,10036],{},"History Handling",[18,10038,10039,10040,10045],{},"Vor und Zurück nach bestimmten Aktionen ist bisher keine Anforderung. Sollte diese Anforderung kommen ist das aber auch\nkein Hexenwerk. Nach JavaScript Aktionen die URL mit\nder ",[585,10041,10044],{"href":10042,"rel":10043},"https://developer.mozilla.org/en-US/docs/Web/API/History",[589],"history API"," ändern ist im Bereich des Möglichen 😉",[577,10047,10048],{},[580,10049,10050],{},[27,10051,10052],{},"State",[18,10054,10055,10056,10061],{},"Nach bestimmten Aktionen den State an mehreren Stellen im Browser aktualisieren. Hier muss denke ich abewägt werden, ob\nBibiliotheken eine Daseinsberechtigung bekommen, oder\nob ",[585,10057,10060],{"href":10058,"rel":10059},"https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent",[589],"Custom Events"," ausreichen.",[607,10063,10064],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":48,"searchDepth":86,"depth":86,"links":10066},[10067,10068,10069,10070],{"id":9423,"depth":86,"text":9424},{"id":9466,"depth":86,"text":9467},{"id":9539,"depth":86,"text":9530},{"id":10005,"depth":86,"text":10006,"children":10071},[10072],{"id":10018,"depth":126,"text":10019},[613,614],"2020-06-23T11:20:03","Mit einigen Jahren JavaScript und Reactjs Erfahrung durfte ich Ende letzten Jahres (November 2019) Teil eines neuen\\nTeams und eines neuen Projektes werden. Das Projekt ist ein Traumprojekt jeden Entwicklers. Ein grüne Wiese Projekt mit\\n“freier” Technologiewahl. “Frei” in Form von man darf sich die Zeit für eine Risikoanalyse nehmen und moderne Tools und\\nFrameworks evaluieren.","https://synyx.de/blog/frameworkless-frontend-und-trotzdem-gluecklich/",{},"/blog/frameworkless-frontend-und-trotzdem-gluecklich",{"title":9362,"description":9371},"frameworkless-frontend-und-trotzdem-gluecklich","blog/frameworkless-frontend-und-trotzdem-gluecklich",[10083,9736,10084],"development","progressive-enhancement","Mit einigen Jahren JavaScript und Reactjs Erfahrung durfte ich Ende letzten Jahres (November 2019) Teil eines neuen Teams und eines neuen Projektes werden. Das Projekt ist ein Traumprojekt jeden Entwicklers. Ein grüne Wiese Projekt mit 'freier' Technologiewahl. 'Frei' in Form von man darf sich die Zeit für eine Risikoanalyse nehmen und moderne Tools und Frameworks evaluieren.","JGt7bZJ_gokf64kVf7XrDHMaEJ2JdAYkb3HTHT7LZEw",{"id":10088,"title":10089,"author":10090,"body":10091,"category":10174,"date":10175,"description":10176,"extension":617,"link":9273,"meta":10177,"navigation":499,"path":10178,"seo":10179,"slug":10095,"stem":10181,"tags":10182,"teaser":10185,"__hash__":10186},"blog/blog/bewerbung-und-schnuppertag-in-zeiten-von-social-distancing.md","Bewerbung und Schnuppertag in Zeiten von Social Distancing",[1840,6624],{"type":11,"value":10092,"toc":10172},[10093,10096,10104,10107,10110,10124,10127,10130,10133,10136,10139,10144,10149,10152,10155,10158,10161,10164,10167],[14,10094,10089],{"id":10095},"bewerbung-und-schnuppertag-in-zeiten-von-social-distancing",[18,10097,10098,10099,10103],{},"Grundsätzlich ändert sich am Ablaufprozedere wenig, Du sendest Deine Bewerbung per Mail\nan ",[585,10100,10102],{"href":10101},"mailto:jobs@synyx.de","jobs@synyx.de",". Bei der Durchsicht achten wir mehr auf Deine Projekte, sowie Deine technischen\nund methodischen Skills, als auf Zeugnisse. Deshalb ist eine Projektliste sehr hilfreich, in der Du uns Arbeitsweise,\nDauer und eingesetzte Technologien skizzierst.",[18,10105,10106],{},"Im Team wird Deine Bewerbung besprochen und wenn wir eine passende Stelle für Dich haben, erhältst Du eine Einladung zum\nBewerbungsgespräch per Video-Call.",[18,10108,10109],{},"So weit so gut. Sei ganz Du selbst, das ist die erste Gelegenheit uns persönlich kennenzulernen. Wir möchten mehr über\nDich und Deine Erfahrungen, Deine weiteren Ziele erfahren. Das ist auch die Chance für Dich, Deine Fragen loszuwerden.",[18,10111,10112,10113,10118,10119,10123],{},"Da wir derzeit im Homeoffice arbeiten fällt leider der Gang durch unser Büro aus, aber lass Dir versichert sein, es ist\nalles da, was das Herz begehrt. Dazu kannst Du Dich auch gerne ",[585,10114,10117],{"href":10115,"rel":10116},"https://synyx.de/dein-arbeitsplatz/",[589],"hier","\noder ",[585,10120,10117],{"href":10121,"rel":10122},"https://synyx.de/leben-und-arbeiten/",[589]," informieren.",[18,10125,10126],{},"Wenn wir auf einer Wellenlänge sind, laden wir Dich zu einem virtuellen Schnuppertag ein. Warum wir das tun? Wir sind\nkeine Freunde von Hire-and-Fire, deshalb ist uns wichtig, dass unsere Zusammenarbeit langfristig funktioniert. Für\nDich bietet der Schnuppertag die Chance, Dir einen ganzheitlichen Eindruck von Deinen potenziellen neuen Kollegen und\nunsere Arbeitsweise hier bei synyx zu machen.",[18,10128,10129],{},"Um Dir das im Rahmen der Gegebenheiten zu ermöglichen, haben wir uns ein Konzept für einen gelungenen remote\nSchnuppertag überlegt.",[18,10131,10132],{},"Bevor es überhaupt losgeht, werden wir gemeinsam vorab einen Techniktest durchführen. So können wir sicher sein, dass\nuns keine technischen Probleme den Spaß verderben.",[18,10134,10135],{},"Von der Begrüßung bis zur Verabschiedung wird ein Mentor an Deiner Seite sein und Dich virtuell begleiten, Dir Antworten\nliefern und dafür sorgen, dass Du dich wohlfühlst.",[18,10137,10138],{},"Damit Du möglichst viele verschiedene Teams und die unterschiedlichen Themenfelder kennenlernst, ist der Tag in mehrere\nZeitblöcke unterteilt. Wie kann das aussehen?",[18,10140,10141],{},[1794,10142],{"alt":48,"src":10143},"https://media.synyx.de/uploads/2020/06/Tagesablauf1-768x706.jpg",[18,10145,10146],{},[1794,10147],{"alt":48,"src":10148},"https://media.synyx.de/uploads/2020/03/White.jpg",[18,10150,10151],{},"Du darfst bei uns direkt in reale Aufgaben rein schnuppern. Wie an anderen Tagen auch, kann es zu einem Supportfall oder\nanderen Anfragen kommen, da erlebst Du die Teams dann gleich richtig in Action.",[18,10153,10154],{},"Wir wissen, wie anstrengend ein Schnuppertag schon in Reallife sein kann und wollen Dir natürlich genug Möglichkeiten\nzur Erholung geben, deshalb sind regelmäßige Pausen sehr wichtig. Außerdem wirst Du in unserer virtuellen Kaffee-Ecke\nauch andere Kollegen treffen und Dich austauschen können.",[18,10156,10157],{},"Am Ende des Tages führt Dein Mentor oder einer unserer Gründer noch ein Abschlussgespräch mit Dir und entlässt Dich in\nden Feierabend.",[18,10159,10160],{},"Unser Bewerbungsprozess geht an dieser Stelle wie gehabt weiter, jeder der Kollegen, der die Gelegenheit hatte, Dich an\nDeinem Schnuppertag kennenzulernen ist angehalten, seinen Eindruck zu schildern.",[18,10162,10163],{},"So können wir für unsere Seite differenziert beurteilen wie gut Du zu synyx passt.",[18,10165,10166],{},"Du bist selbstverständlich auch angehalten, Dir Gedanken zu machen und uns gerne Dein Feedback zum Schnuppertag zu\ngeben. Im besten Fall bist Du genauso begeistert von uns, wie wir von Dir 😉",[18,10168,10169,10170],{},"Hast Du Lust bekommen, uns kennenzulernen? Dann schreib uns an ",[585,10171,10102],{"href":10101},{"title":48,"searchDepth":86,"depth":86,"links":10173},[],[614],"2020-06-03T16:18:53","Grundsätzlich ändert sich am Ablaufprozedere wenig, Du sendest Deine Bewerbung per Mail\\nan jobs@synyx.de. Bei der Durchsicht achten wir mehr auf Deine Projekte, sowie Deine technischen\\nund methodischen Skills, als auf Zeugnisse. Deshalb ist eine Projektliste sehr hilfreich, in der Du uns Arbeitsweise,\\nDauer und eingesetzte Technologien skizzierst.",{},"/blog/bewerbung-und-schnuppertag-in-zeiten-von-social-distancing",{"title":10089,"description":10180},"Grundsätzlich ändert sich am Ablaufprozedere wenig, Du sendest Deine Bewerbung per Mail\nan jobs@synyx.de. Bei der Durchsicht achten wir mehr auf Deine Projekte, sowie Deine technischen\nund methodischen Skills, als auf Zeugnisse. Deshalb ist eine Projektliste sehr hilfreich, in der Du uns Arbeitsweise,\nDauer und eingesetzte Technologien skizzierst.","blog/bewerbung-und-schnuppertag-in-zeiten-von-social-distancing",[10183,6811,4214,10184],"bewerbungsprozess","social-distancing","Du möchtest Dich bei synyx bewerben und fragst Dich, wie der Bewerbungsprozess abläuft, während Social Distancing angesagt ist? Dann ist dieser Artikel für Dich.","cPbKPgaeMLDIWkklhYyJNT-fc5SkYHijjjIkIA1o_xs",{"id":10188,"title":10189,"author":10190,"body":10191,"category":10264,"date":10265,"description":10266,"extension":617,"link":6580,"meta":10267,"navigation":499,"path":10268,"seo":10269,"slug":10195,"stem":10270,"tags":10271,"teaser":10273,"__hash__":10274},"blog/blog/welt-passwort-tag.md","Welt-Passwort-Tag",[6389],{"type":11,"value":10192,"toc":10259},[10193,10196,10199,10202,10205,10208,10212,10215,10218,10221,10224,10228,10231,10234,10237,10240,10243,10247,10250,10253,10256],[14,10194,10189],{"id":10195},"welt-passwort-tag",[18,10197,10198],{},"Passwörter sind überall. Sie schützen alle möglichen Aspekte unseres täglichen Lebens. Trotzdem denken wir viel zu wenig\nüber sie nach. Wir wollen uns den World Password Day zum Anlass nehmen, uns Passwörter, ihre Sicherheit und die Theorie\ndahinter etwas genauer anzuschauen.",[18,10200,10201],{},"Fangen wir mit einem Gedankenexperiment an, um uns klar zu machen, wie wichtig Passwörter und der sichere Umgang mit\nihnen ist. Stellen wir uns mal vor alle unsere Passwörter wären plötzlich nicht mehr geheim. Das Onlinebanking –\nungeschützt. Social Media Accounts – in Sekunden übernommen. Jede geschriebene Nachricht, jedes geschickte Bild –\nplötzlich öffentlich. Und das ist erst die Spitze des Eisbergs. Mittlerweile gibt es kaum noch etwas, das sich nicht\nonline verwalten lässt. Strom, Gas, Versicherungen, Arzttermine, Handyverträge, Fitness-Tracking – alles online und oft\nnur geschützt durch ein Passwort. Für die meisten von uns wäre es ein absolutes Desaster, wenn Unbekannte plötzlich\nZugriff auf all das hätten.",[18,10203,10204],{},"Die erste Frage, die den meisten beim Thema Passwörter durch den Kopf geht, lautet daher meist “Sind meine Passwörter\neigentlich sicher?”. Die Antwort darauf: “Kommt drauf an”. Das erste und wichtigste Kriterium für ein sicheres Passwort\nhaben wir gerade gesehen: Es muss geheim sein. Ein Passwort kann noch so lang und komplex sein, wenn es nicht geheim\nbleibt, ist es unsicher. Doch was erst mal trivial klingt, wird erstaunlich oft zum Problem.",[18,10206,10207],{},"Und damit ist nicht der unscheinbare Klebezettel am Monitor als “Merkhilfe” gemeint. Tatsächlich ist den meisten\nmittlerweile klar, dass sie Passwörter nicht rumerzählen oder so aufschreiben sollten, dass andere sie finden können.\nDoch ihr seid nicht die Einzigen, die eure Passwörter kennen – die Seiten, bei denen ihr euch damit anmelden wollt,\nmüssen sie ebenfalls kennen.Wenn diese Seiten nicht sorgsam mit euren Passwörtern umgehen, können sie schnell in die\nfalschen Hände gelangen. Problematisch wird das ganze vor allem dann, wenn dasselbe Passwort auch für andere Dienste\nverwendet wurde. Bei sogenannten Credential Stuffing Angriffen probieren große Mengen von Zugangsdaten, die von\ngehackten Diensten geleakt wurden, auf anderen Plattformen aus. Und das oft mit Erfolg, denn das Wiederverwenden von\nPasswörtern ist leider eine verbreitete Praxis. Wenn ihr euch also nicht sicher seid, ob ein Dienst sicher mit euren\nPasswörtern hantiert – Spoiler: Sicher könnt ihr da nie sein – solltet ihr für jeden Dienst ein eigenes Passwort\nverwenden.",[3469,10209,10211],{"id":10210},"doch-wie-sollte-dieses-passwort-aussehen","Doch wie sollte dieses Passwort aussehen?",[18,10213,10214],{},"Wer in den letzten zehn Jahren nicht gerade unter einem Stein geschlafen hat, dürfte diese Regeln schon mal gehört\nhaben: Ein Passwort muss auf jeden Fall lang sein. Und es soll Groß- und Kleinbuchstaben enthalten. Und Zahlen. Und am\nbesten auch noch Sonderzeichen. Ein Passwort, welches nach diesen Regeln erstellt wurde, sollte von den meisten\nWebseiten akzeptiert werden. Aber ist es deswegen auch sicher? Tatsächlich sind diese etablierten Regeln für die\nZusammensetzung sicherer Passwörter definitiv nicht über alle Zweifel erhaben. Nehmen wir mal das Passwort\n“Zwiebelkuchen1!”. Es dürfte mit 15 Zeichen definitiv zu den längeren Passwörtern zählen, enthält Groß- und\nKleinbuchstaben, Zahlen und Sonderzeichen, erfüllt also alle üblichen Kriterien. Aber ist “Zwiebelkuchen1!” deswegen\nschon sicher?",[18,10216,10217],{},"Um diese Fragen zu beantworten, lohnt es sich, einen Blick darauf zu werfen, wie Angreifer vorgehen, um Passwörter zu\nknacken. Haben wir uns die Regel der Geheimhaltung zu Herzen genommen, für jeden Dienst ein eigenes Passwort verwendet\nund dieses geheim gehalten, bleibt einem Angreifer nichts anderes übrig, als zu raten. Die einfachste Methode ist dabei,\nalle möglichen Passwörter auszuprobieren – der sogenannte Brute Force Angriff. Und genau hier kommen unsere etablierten\nKriterien ins Spiel. Die Kriterien zielen darauf ab, die Menge der möglichen Passwörter möglichst groß zu machen, damit\nder Angreifer möglichst lang braucht, um sie durchzuprobieren. Nehmen wir als Beispiel mal ein Zahlenschloss. Ein\neinfaches Zahlenschloss hat drei Ziffern mit jeweils 10 möglichen Zeichen (die Zahlen von 0 bis 9) und damit 10 _\n10 _ 10 = 1.000 mögliche Kombinationen. Braucht ein Angreifer pro Kombination nur eine Sekunde, kann er in nicht mal\n17 Minuten alle möglichen Kombinationen durchprobieren und das Schloss öffnen.",[18,10219,10220],{},"Nehmen wir stattdessen nun ein Zahlenschloss mit vier Ziffern, gibt es 10 _ 10 _ 10 _ 10 = 10.000 verschiedene\nMöglichkeiten und der Angreifer braucht schon fast drei Stunden. Die Länge des Passworts spielt also eine wichtige\nRolle. Noch wichtiger als die Länge ist allerdings die Zusammensetzung. Hätte das Schloss statt drei Ziffern nämlich\ndrei Buchstaben ergeben sich bei einem Alphabet von 26 Zeichen bereits 26 _ 26 _ 26 = 17.576 mögliche Kombinationen.\nNehmen wir Zahlen, Groß- und Kleinschreibung, sowie die üblichsten Sonderzeichen dazu erhalten wir ein Alphabet von 94\nmöglichen Zeichen und damit 94 _ 94 * 94 = 830.584 mögliche Kombinationen. Dafür bräuchte unser Angreifer schon über\nneun Tage. Unser Passwort “Zwiebelkuchen1!” ist sogar 15 Zeichen lang. Um alle Passwörter mit 15 Zeichen bestehend aus\nBuchstaben, Zahlen und Sonderzeichen durchzuprobieren bräuchte ein Angreifer, selbst wenn er 1.000.000 Passwörter in\nder Sekunde ausprobieren kann, immer n hoch 12.534.620.711.557.642 Jahre. Das Passwort ist also sicher – oder?",[18,10222,10223],{},"Was den Brute Force Angriff angeht, ist so ein Passwort definitiv als sicher anzusehen. Leider weiß auch unser\nAngreifer, dass er mit einfachem Durchprobieren wenig Erfolg haben wird. Oft ist das aber auch gar nicht nötig, denn\nviele Passwörter sind alles andere als zufällig gewählt. Schaut man sich die Liste der häufigsten Passwörter an, stellt\nman fest, dass es sich oft um normale Wörter handelt. Ein häufiges Vorgehen ist daher das Durchprobieren von Wörtern aus\ndem Wörterbuch oder von Listen häufiger Passwörter. Ist “Zwiebelkuchen1!” also sicher, weil es nicht im Wörterbuch\nvorkommt? Nicht wirklich. Zwar unterscheidet es sich in Zahlen und Sonderzeichen von einem Wort aus dem Wörterbuch, doch\ndiese sind nicht zufällig gewählt. Stellen wir uns mal vor, jemand hat sein Lieblingspasswort “Zwiebelkuchen” in eine\nPasswortmaske eingegeben und die Maske lehnt das Passwort ab, weil es weder Zahlen noch Sonderzeichen enthält. Was ist\nnun wahrscheinlicher: Dass die Person ein komplett neues Passwort erstellt, oder dass sie so lange Zeichen anhängt, bis\ndie Passwortmaske zufrieden ist? Tatsächlich ist das Anhängen kurzer Zahlen-Sonderzeichen Kombinationen an einfache\nWörter ein häufiges Vorgehen. Und das macht es auch für den Angreifer berechenbar. Denn alle Wörter aus dem Wörterbuch\nmit einer beliebigen Kombination aus einer Zahl und einem Sonderzeichen angehängt durchzuprobieren ist immer noch um ein\nVielfaches schneller als ein Brute Force Angriff. Und mit einem solchen Angriff dürfe “Zwiebelkuchen1!” leider schnell\ngefunden sein.",[3469,10225,10227],{"id":10226},"was-muss-ein-passwort-also-noch-erfüllen-um-sicher-zu-sein","Was muss ein Passwort also noch erfüllen, um sicher zu sein?",[18,10229,10230],{},"Die Kryptographie liefert dazu folgende Antwort: Um sicher zu sein, muss ein Passwort von echtem Zufall ununterscheidbar\nsein. Das Passwort “z$f6^Kj8” ist mit acht Zeichen deutlich kürzer als “Zwiebelkuchen1!”, trotzdem ist es definitiv das\nsicherere Passwort. Der Grund ist, dass es für den Angreifer keine Möglichkeit gibt, schneller auf dieses Passwort zu\nkommen als durch einfaches Ausprobieren. Und einfaches Ausprobieren ist, wenn die Kriterien für Länge und\nZusammensetzung berücksichtigt wurden, extrem ineffizient. Das Passwort hat aber einen entscheidenden Nachteil: Es ist\nalles andere als leicht zu merken. Besonders wenn man für jeden Dienst ein eigenes Passwort vergibt, können echt\nzufällige Passwörter sehr anstrengend sein.",[18,10232,10233],{},"Für dieses Problem existieren verschiedene Lösungen, von denen die meisten aber wieder neue Probleme mit sich bringen.\nEin Lösungsansatz nutzt aus, dass Menschen leichter in der Lage sind, sich Fantasieworte zu merken, wenn sie sie\naussprechen können. Das Problem daran: In Passwörtern, die sich einfach aussprechen lassen, kommen Buchstaben und\nBuchstabenfolgen mit einer ähnlichen Häufigkeit vor wie in der natürlichen Sprache. Diese Eigenschaft kann ein Angreifer\nnutzen, um alle Passwörter auszuschließen, die von dieser Häufigkeit abweichen. Das Resultat ist ein Angriff, der auf\nleicht aussprechbaren Passwörtern deutlich effizienter ist als der einfache Brute Force. Eine andere häufige Empfehlung\nsind Passphrasen, also Passwörter, die aus mehreren echten Wörtern zusammengesetzt sind, welche sich einfach merken\nlassen. Diese Passwörter enthalten zwar keine Zahlen oder Sonderzeichen, gleichen das allerdings durch eine deutlich\nhöhere Länge aus. Neben dem gleichen Problem wie bei leicht aussprechbaren Passwörtern können Angreifer hier einen\nweiteren Effekt nutzen. Man hat nämlich festgestellt, dass Menschen dazu neigen, bei Passphrasen grammatikalisch\nkorrekte Sätze zu formen. Auch dadurch lassen sich wieder etliche Kombinationen ausschließen und ein\nGeschwindigkeitsvorteil gegenüber dem Brute Force erzielen. Zusammengefasst lässt sich sagen: Alles, was Passwörter\nweniger zufällig macht, macht sie angreifbarer.",[18,10235,10236],{},"Es bleibt also dabei: Das sicherste Passwort ist individuell pro Dienst möglichst lang und komplex und echt zufällig –\nund damit leider schwer zu merken. Und genau das ist der Grund, warum immer wieder schwache Passwörter verwendet werden.\nDenn obwohl sich die meisten sehr wohl bewusst sind, wie man sichere Passwörter erstellt, ist es ihnen einfach zu\nanstrengend. Doch es gibt eine Lösung, die in den letzten Jahren immer mehr an Popularität gewinnt: Passwortmanager.\nPasswortmanager ermöglichen es, sich nur noch ein einziges Passwort merken zu müssen und damit ganz bequem und guten\nGewissens allen Regeln für sicheres Passwortmanagement folgen zu können.",[18,10238,10239],{},"Wir haben bei synyx auch unsere Erfahrungen damit sammeln können und das Ergebnis ist klar – wer einmal auf einen\nPasswortmanager gewechselt ist, will nicht mehr davon weg.",[18,10241,10242],{},"Daher ist unsere Empfehlung zum World Password Day: Macht euch das Leben und Gewissen leichter und wechselt auf einen\nPasswortmanager!",[3469,10244,10246],{"id":10245},"update-zum-ändere-dein-passwort-tag-2021-wie-wichtig-ist-es-eigentlich-passwörter-regelmäßig-zu-ändern","Update zum Ändere-Dein-Passwort-Tag 2021: Wie wichtig ist es eigentlich, Passwörter regelmäßig zu ändern?",[18,10248,10249],{},"Um diese Frage zu beantworten, sollte man sich erst mal überlegen, wovor das Ändern des Passworts eigentlich schützt.\nDas Ändern des Passwortes hilft nur dann, wenn jemand euer altes Passwort kannte. Wenn ihr zum Beispiel Aktionen in\neinem eurer Accounts seht, die nicht von euch kommen, wäre das ein klares Indiz dafür, dass jemand euer Passwort in die\nFinger bekommen hat. In solchen Fällen ist und bleibt es immer der sinnvollste erste Schritt, das eigene Passwort zu\nändern. Was aber, wenn ihr nicht gehackt wurdet?",[18,10251,10252],{},"Begeben wir uns mal in die Perspektive des Angreifers, der in euer Konto eindringen will. Der Angreifer kennt euer\nPasswort nicht und kann nur versuchen, euer Passwort",[18,10254,10255],{},"(möglichst effizient) zu raten. Alle Wege, die am Passwort vorbei führen, können wir hier erst mal ignorieren, denn die\nexistieren genau so, wenn ihr euer Passwort nicht ändert. Ist das Passwort bereits ein sicheres Passwort, ändert sich\nfür den Angreifer nichts. Er muss nach wie vor versuchen, euer Passwort rauszufinden, nur dass es nun ein anderes ist.\nNur wenn ihr zufällig genau den Moment trefft, in dem der Angreifer gerade Passwörter durchprobiert, kann es sein, dass\nseine Suche ohne Ergebnis bleibt und er von vorne beginnen muss. Um aus diesem Effekt aber einen Sicherheitsmehrwert zu\nziehen, müsstet ihr euer Passwort viel öfter als nur einmal im Jahr ändern. Tatsächlich existieren Systeme, die genau so\nvorgehen und deren Passwörter teilweise nur wenige Sekunden lang gültig sind – für Menschen ist so was natürlich schwer\nmöglich. Einen echten Mehrwert bringt das provisorische Ändern der privaten Passwörter also nicht.",[18,10257,10258],{},"Das gilt allerdings nur für Passwörter, die bereits sicher sind – also solche, die nur für einen Dienst verwendet und\nlang komplex und echt zufällig gewählt wurden. Erfüllt euer Passwort diese Kriterien nicht, könnt ihr eure Sicherheit\nsteigern, indem ihr es durch ein sicheres Passwort ersetzt. Nutzt also diesen Anlass, um mal zu überprüfen, ob\ntatsächlich auch alle eure Passwörter wirklich sichere Passwörter sind.",{"title":48,"searchDepth":86,"depth":86,"links":10260},[10261,10262,10263],{"id":10210,"depth":86,"text":10211},{"id":10226,"depth":86,"text":10227},{"id":10245,"depth":86,"text":10246},[614],"2020-05-07T20:08:39","Passwörter sind überall. Sie schützen alle möglichen Aspekte unseres täglichen Lebens. Trotzdem denken wir viel zu wenig\\nüber sie nach. Wir wollen uns den World Password Day zum Anlass nehmen, uns Passwörter, ihre Sicherheit und die Theorie\\ndahinter etwas genauer anzuschauen.",{},"/blog/welt-passwort-tag",{"title":10189,"description":10198},"blog/welt-passwort-tag",[6611,10272],"password","Passwörter sind überall. Sie schützen alle möglichen Aspekte unseres täglichen Lebens. Trotzdem denken wir viel zu wenig über sie nach. Wir wollen uns den World Password Day zum Anlass nehmen uns Passwörter, ihre Sicherheit und die Theorie dahinter etwas genauer anzuschauen.","rmFxh6KzFqsLt_sY2lK-hv1FlWlfLvacv_Q58fZuRH8",{"id":10276,"title":10277,"author":10278,"body":10279,"category":10300,"date":10301,"description":10302,"extension":617,"link":10303,"meta":10304,"navigation":499,"path":10305,"seo":10306,"slug":10283,"stem":10307,"tags":10308,"teaser":10309,"__hash__":10310},"blog/blog/synyx-als-partner-der-cyberwehr-bw.md","synyx als Partner der Cyberwehr BW",[6389],{"type":11,"value":10280,"toc":10298},[10281,10284,10287,10290,10293],[14,10282,10277],{"id":10283},"synyx-als-partner-der-cyberwehr-bw",[18,10285,10286],{},"Wer bei Cyberwehr an Feuerwehr für “Cyber” denkt, liegt damit gar nicht so falsch. Wenn es brennt, wissen alle sofort,\nwo sie Hilfe bekommen – bei der 112. Doch was ist, wenn es nicht im wortwörtlichen Sinne brennt, sondern die\nFirmenwebseite gekapert, Server übernommen oder ganze Rechnerlandschaften lahmgelegt wurden und nun der Betrieb steht?\nWorauf große Firmen mit eigener IT-Sicherheitsabteilung vorbereitet sind, trifft Mittelständler und Kleinunternehmen\nbesonders nicht-technischer Branchen oft hart. Der Lieblingsbäcker oder die Autowerkstatt um die Ecke mag zwar keine\neigene IT-Abteilung geschweige denn IT-Sicherheitsexpert*innen beschäftigen, auf Internet und eine funktionierende IT\nkann allerdings kaum noch ein Betrieb verzichten.",[18,10288,10289],{},"Hier kommt das Cyberwehr Projekt ins Spiel, das vom Forschungszentrum Informatik (fzi) und dem Land Baden-Württemberg\nins Leben gerufen wurde. Die Cyberwehr möchte – analog zur Feuerwehr – als Notfallnummer und Anlaufstelle für\nUnternehmen fungieren, die Opfer eines Cyberangriffs geworden sind. Dabei hilft die Cyberwehrleitstelle in\nZusammenarbeit mit externen Sicherheitsexpert*innen den Betroffenen dabei den Vorfall zu untersuchen, Schäden\nfestzustellen und Maßnahmen zur Schadensbehebung zu erstellen und umzusetzen.",[18,10291,10292],{},"Als Partnerunternehmen stellen nun auch wir als synyx unsere Kompetenzen im Bereich IT-Sicherheit dem Cyberwehr Projekt\nund damit hilfesuchenden Unternehmen zur Verfügung. Wer beim nächsten Sicherheitsvorfall die 0800-CYBERWEHR wählt, kann\nalso in Zukunft auch auf unsere Unterstützung zählen.",[18,10294,10295],{},[1794,10296],{"alt":48,"src":10297},"https://media.synyx.de/uploads/2020/05/Cyberwehr-768x384.jpg",{"title":48,"searchDepth":86,"depth":86,"links":10299},[],[614],"2020-05-04T15:37:47","Wer bei Cyberwehr an Feuerwehr für “Cyber” denkt, liegt damit gar nicht so falsch. Wenn es brennt, wissen alle sofort,\\nwo sie Hilfe bekommen – bei der 112. Doch was ist, wenn es nicht im wortwörtlichen Sinne brennt, sondern die\\nFirmenwebseite gekapert, Server übernommen oder ganze Rechnerlandschaften lahmgelegt wurden und nun der Betrieb steht?\\nWorauf große Firmen mit eigener IT-Sicherheitsabteilung vorbereitet sind, trifft Mittelständler und Kleinunternehmen\\nbesonders nicht-technischer Branchen oft hart. Der Lieblingsbäcker oder die Autowerkstatt um die Ecke mag zwar keine\\neigene IT-Abteilung geschweige denn IT-Sicherheitsexpert*innen beschäftigen, auf Internet und eine funktionierende IT\\nkann allerdings kaum noch ein Betrieb verzichten.","https://synyx.de/blog/synyx-als-partner-der-cyberwehr-bw/",{},"/blog/synyx-als-partner-der-cyberwehr-bw",{"title":10277,"description":10286},"blog/synyx-als-partner-der-cyberwehr-bw",[6611],"Was tun, wenn die Firmen-Webseite gekapert, Server übernommen oder ganze Rechnerlandschaften lahmgelegt wurden und nun der Betrieb steht?","3ywRwFWb1KLfqXKnaYgLmNOs6hju9fV_OnEN8grnkZo",{"id":10312,"title":10313,"author":10314,"body":10316,"category":10429,"date":10430,"description":10431,"extension":617,"link":10432,"meta":10433,"navigation":499,"path":10434,"seo":10435,"slug":10436,"stem":10437,"tags":10438,"teaser":10440,"__hash__":10441},"blog/blog/domain-driven-design-remote-workshop-mit-michael-ploed-innoq.md","Domain Driven Design Remote-Workshop mit Michael Plöd | INNOQ",[10315,6624],"michael-ploed",{"type":11,"value":10317,"toc":10427},[10318,10321,10324,10327,10330,10333,10354,10357,10360,10365,10368,10371,10374,10377,10380,10385,10388,10391,10394,10397,10400,10403,10406,10409,10412,10415,10418,10421,10424],[14,10319,10313],{"id":10320},"domain-driven-design-remote-workshop-mit-michael-plöd-innoq",[18,10322,10323],{},"Bereits Anfang des Jahres fand bei synyx ein Workshop mit Michael Plöd von INNOQ zum Thema Domain Driven Design statt,\ndieser war bei den teilnehmenden Mitarbeiter*innen ein voller Erfolg. So stand es außer Frage, dass es einen weiteren\nIntensivkurs über drei Tage geben sollte.",[18,10325,10326],{},"Da sich seit März die Ereignisse aufgrund der Corona-Pandemie jedoch überschlugen, stiegen sowohl INNOQ als auch wir,\nwie natürlich viele andere Firmen ebenfalls, komplett auf Remote-Arbeit im Home-Office um. Es stellte sich nun die\nFrage, wie wir mit der geplanten Schulung umgehen wollten. Eine verteilte Kollaboration bei Entwicklungstätigkeiten ist\nnatürlich längst gang und gäbe.",[18,10328,10329],{},"Weiterhin haben wir allgemein in der IT-Branche den großen Vorteil, dass Remote-Arbeit kein Neuland für uns ist und\nwir seit vielen Jahren Erfahrung mit diesem Arbeitsmodus haben. Aber eine Schulung, bei der alle Teilnehmer*innen und\nder Trainer von zu Hause aus arbeiten, hatten auch wir bis dato noch nie. So entschlossen wir uns zusammen für ein\nExperiment: wir führen die 3-Tage Schulung remote durch. Neue Herausforderungen brauchen eine offene Herangehensweise\nund sowohl synyx als auch INNOQ stehen Neuem grundsätzlich aufgeschlossen gegenüber.",[18,10331,10332],{},"Im Vorfeld des Termins machte sich der INNOQ Fellow Michael Plöd viele Gedanken darüber, wie er den Spirit seiner\nbestehenden und vom iSAQB zertifizierten Vor-Ort DDD Schulung in die Remote-Welt übertragen kann. Da das bestehende\nTraining sehr interaktiv ist und auf der Arbeit an einer komplexen Fallstudie basiert standen folgende Fragen im Raum:",[577,10334,10335,10338,10341,10348,10351],{},[580,10336,10337],{},"Was ist ein passendes Tooling für Voice, Video, Screensharing und die Übungen?",[580,10339,10340],{},"Welche Iterationen zwischen Theorie und Praxis sind für remote am besten geeignet?",[580,10342,10343,10344,10347],{},"Wie stelle ich als Trainer sicher, dass ich keine",[573,10345,10346],{},"n Teilnehmer","in inhaltlich verliere wenn über Video vor allem die\nkleinen Interaktionen und Emotionen verloren gehen können?",[580,10349,10350],{},"Welche neuen Möglichkeiten für Übungen gibt es durch Remote-Tools?",[580,10352,10353],{},"Was sind passende Zyklen für Pausen, vor allem wenn die meisten Teilnehmer*innen noch Kinder zu Hause haben?",[18,10355,10356],{},"Das Ziel war es unter Berücksichtigung der obigen Fragen aus einer sehr bewährten und guten Präsenzschulung eine\nremote-first Schulung mit ansprechender “Teilnehmer-Experience” zu schaffen. Die bei synyx durchgeführte remote Domain\nDriven Design Schulung setzte dabei auf zwei Tools: eine Lösung für Video, Voice und Screensharing und ein Tool für die\nÜbungen. Bei ersterem wurde eine Plattform gewählt, die sog. Breakout-Rooms unterstützt. Dieses Feature gibt dem\nTrainer die Möglichkeit die gesamten Teilnehmer*innen in Sub-Videokonferenzen aufzuteilen was vor allem bei Übungen\nein echter Vorteil ist. Damit lassen sich jederzeit Übungsgruppen bilden und als Trainer kann man einfach zwischen den\nGruppen pendeln.",[18,10358,10359],{},"Weiterhin galt die Regel: Video ist immer bei allen an, außer in den Pausen. Für die Übungen wurde ein\nBrowser-basiertes Tool zur remote Kollaboration gewählt in dem zahlreiche Übungen vorbereitet wurden. Normalerweise\nbasiert die Vor-Ort Domain Driven Design Schulung auf großen und intensiven Übungsblöcken, deren Bearbeitung durchaus\neinmal 45 Minuten dauern kann. Für die Remote-Variante wurde dieser Modus Operandi verändert indem auf kürzere\nTheorie-/Übungs-Zyklen gewechselt wurde. Nur in Ausnahmen gab es zwei längere Theorie Blöcke.",[18,10361,10362],{},[1794,10363],{"alt":48,"src":10364},"https://media.synyx.de/uploads/2020/04/8_2-Retrospektive-Context-Maps-768x811.jpg",[18,10366,10367],{},"Retrospektive Context Maps",[18,10369,10370],{},"Bei den einzelnen Übungen wurden sämtliche Möglichkeiten genutzt, die ein gutes remote Kollaborationstool bietet. Neben\nden klassischen “die Teilnehmer*innen erarbeiten etwas” Übungen gab es auch zahlreiche Aufgaben, bei denen die Gruppen\nbeispielsweise Statements gruppieren sollten oder bei denen es galt vorgefertigte Teillösungen zu einer stimmigen\nGesamtlösung zu kombinieren.",[18,10372,10373],{},"Weiterhin wurden regelmäßige Retrospektiven eingesetzt um sicherzustellen, dass alle Teilnehmer*innen den bisher\nvermittelten Stoff verstanden haben.",[18,10375,10376],{},"Im Hinblick auf die Pausen haben wir mit einer großen Mittagspause und sonst mit 1h Schulung – 10 min Pause gearbeitet.",[18,10378,10379],{},"Was uns natürlich alle interessiert, was waren denn nun die besonderen Herausforderungen und auch die Vorteile, die sich\ndurch einen Workshop im Remote-Modus ergeben haben?",[18,10381,10382],{},[1794,10383],{"alt":48,"src":10384},"https://media.synyx.de/uploads/2020/04/Retrospektive-Feedback-Schulung-768x1419.jpg",[18,10386,10387],{},"Retrospektive zur Schulung",[18,10389,10390],{},"Die gewählten kollaborativen Tools erwiesen sich für alle Teilnehmer*innen als perfekt geeignet für den interaktiven\nWorkshop. Der Einsatz des Video-Chats in Kombination mit dem virtuellem Sticky-Board ist ideal, um Übungen gemeinsam\nzu erarbeiten. Bis auf minimale Anlaufschwierigkeiten, die sich bereits durch den Set-Up-Test einige Tage vor dem\nBeginn der Schulung ausmerzen ließen, ergaben sich von der technischen Seite keinerlei Probleme.",[18,10392,10393],{},"Einige Teilnehmer*innen wünschten sich mehr zwischenmenschlichen Kontakt, der sonst beispielsweise in den Pausen\nstattfindet – das beiläufige Resümieren der Themen bei Kaffee oder Mittagessen. Vielleicht wäre hier das Einrichten\neines virtuellen Pausenraums oder eine freiwillige Socializing-Möglichkeit am Abend des zweiten Schulungstags eine\nOption, um auch zwischen den Arbeitsphasen eine Möglichkeit zum Austausch abseits der Schulung zu bieten.\nGruppenarbeiten kamen jedoch nicht zu kurz und trugen enorm zum fachlichen Austausch bei.",[18,10395,10396],{},"Durch die Verwendung von Laptop und Handy im Workshop, ist es natürlich sehr wichtig den Fokus aufrecht zu erhalten und\nsich diszipliniert nur den benötigten Anwendungen zu widmen. Die Teilnehmer*innen sind dabei gefordert, die\nAufmerksamkeit entsprechend zu bündeln.",[18,10398,10399],{},"Die kürzeren Pausenintervalle und die kürzere Taktung von Theorie und Übungen helfen hierbei aber ungemein, was von\nallen Teilnehmer*innen bestätigt wurde.",[18,10401,10402],{},"Trainer und Teilnehmer*innen sparen sich Anfahrtszeit und unter Umständen eine beschwerliche Anreise.",[18,10404,10405],{},"Der Aufwand die Räumlichkeiten vorzubereiten entfällt komplett, dafür muss selbstverständlich die virtuelle Konzeption\nsehr gut vorbereitet sein. Weiterhin bieten digitale Tools zur Kollaboration gänzlich neue didaktische Möglichkeiten um\nLernergebnisse zu vertiefen.",[18,10407,10408],{},"Das digitale Arbeiten ermöglicht zudem automatisch eine vereinfachte Dokumentation der Ergebnisse.",[18,10410,10411],{},"Keiner muss beispielsweise das Handy zücken, um das Whiteboard zu fotografieren.",[18,10413,10414],{},"Die Achievements des Tages lassen sich bequem und unabhängig rekapitulieren.",[18,10416,10417],{},"Empfehlenswert ist der Einsatz mindestens eines externen Bildschirms, um eine optimale Übersicht zu gewährleisten.",[18,10419,10420],{},"Die Verwendung von digitalen Post-its erzeugt zudem keinen Papiermüll und die Arbeitsergebnisse sind leichter\neditierbar und gut lesbar. Ein weiterer absoluter Pluspunkt für virtuelle Workshops.",[18,10422,10423],{},"Es ist natürlich immer ein verbindendes Erlebnis, gemeinsam an einem Workshop teilzunehmen, bei dem man sich vor Ort\naustauscht und zusammen Zeit verbringt.",[18,10425,10426],{},"Aber wir können nur wiederholen, neue Herausforderungen brauchen eine offene Herangehensweise und wir wurden nicht\nenttäuscht. Michael Plöd hat uns mit seiner professionellen Vorbereitung und Durchführung einmal mehr begeistert, der\nWorkshop war unglaublich produktiv und inspirierend.",{"title":48,"searchDepth":86,"depth":86,"links":10428},[],[614],"2020-04-17T09:10:01","Bereits Anfang des Jahres fand bei synyx ein Workshop mit Michael Plöd von INNOQ zum Thema Domain Driven Design statt,\\ndieser war bei den teilnehmenden Mitarbeiter*innen ein voller Erfolg. So stand es außer Frage, dass es einen weiteren\\nIntensivkurs über drei Tage geben sollte.","https://synyx.de/blog/domain-driven-design-remote-workshop-mit-michael-ploed-innoq/",{},"/blog/domain-driven-design-remote-workshop-mit-michael-ploed-innoq",{"title":10313,"description":10323},"domain-driven-design-remote-workshop-mit-michael-ploed-innoq","blog/domain-driven-design-remote-workshop-mit-michael-ploed-innoq",[10439],"domain-driven-design","Neue Herausforderungen brauchen eine offene Herangehensweise und sowohl synyx als auch INNOQ stehen Neuem grundsätzlich aufgeschlossen gegenüber. Aus diesem Grund entschieden wir uns für ein gemeinsames Experiment: wir führen die 3-Tage Schulung remote durch.","eUr9OGmmO9BgoJU7YZWT7IqYNHKfPP47eAocefh07Q4",{"id":10443,"title":10444,"author":10445,"body":10446,"category":10913,"date":10914,"description":10915,"extension":617,"link":10916,"meta":10917,"navigation":499,"path":10918,"seo":10919,"slug":10920,"stem":10921,"tags":10922,"teaser":10925,"__hash__":10926},"blog/blog/frauen-in-der-it.md","synyx Girls’ Week: Frauen in der IT",[6624],{"type":11,"value":10447,"toc":10908},[10448,10451,10456,10466,10470,10479,10487,10495,10498,10502,10505,10513,10517,10520,10523,10529,10532,10537,10540,10545,10548,10553,10556,10561,10564,10569,10572,10578,10581,10585,10588,10591,10595,10598,10601,10604,10608,10611,10614,10618,10621,10626,10631,10634,10637,10640,10643,10646,10649,10652,10655,10661,10664,10668,10671,10674,10677,10680,10684,10687,10690,10694,10697,10700,10703,10706,10709,10712,10716,10719,10722,10725,10728,10731,10734,10737,10740,10743,10747,10750,10753,10756,10759,10762,10768,10771,10775,10778,10787,10791,10794,10798,10801,10805,10808,10814,10817,10821,10824,10828,10831,10834,10838,10841,10844,10848,10851,10857,10860,10864,10867,10871,10874,10877,10881,10884,10887,10891,10894,10897,10900,10905],[14,10449,10444],{"id":10450},"synyx-girls-week-frauen-in-der-it",[18,10452,10453],{},[573,10454,10455],{},"Wir hatten uns wie jedes Jahr sehr auf den Girls‘ Day gefreut, aber leider liegen die derzeitigen Ereignisse nicht in\nunserer Macht und Sicherheit geht absolut vor.",[18,10457,10458],{},[573,10459,3009,10460,10465],{},[585,10461,10464],{"href":10462,"rel":10463},"https://www.girls-day.de",[589],"Girls‘ Day",", ein Mädchen-Zukunftstag, dient der Berufsorientierung von Schülerinnen.\nSie werden dazu ermutigt, an diesem Tag Erfahrungen in Berufsfeldern zu machen, in denen Frauen bis dato noch eher\nselten anzutreffen sind.",[3469,10467,10469],{"id":10468},"rolle-der-frauen-in-der-it","Rolle der Frauen in der IT",[18,10471,10472,10473,10478],{},"Schaut man sich in Deutschland den mit 16,6% doch sehr geringen Frauenanteil in der Branche an, ist es vielen nicht\nbewusst, dass Frauen maßgeblich an der Computerentwicklung beteiligt\nwaren. [",[585,10474,10477],{"href":10475,"rel":10476},"https://de.statista.com/infografik/13283/frauen-in-der-tech-branche/",[589],"1","]",[18,10480,10481,10482,10478],{},"Um nur zwei der Pionierinnen der Informatik kurz vorzustellen, sei zum einen Ada Lovelace (1815-1852) genannt, die\nsich schon in sehr jungen Jahren für Maschinen und Technik zu interessieren begann. Weit vor der Realisierbarkeit\nentwickelte sie schon Konzepte zur Programmierung einer mechanischen\nMaschine. [",[585,10483,10486],{"href":10484,"rel":10485},"https://www.frauen-informatik-geschichte.de/index.php-id=36.htm",[589],"2",[18,10488,10489,10490,10478],{},"Auch Grace Hopper (1906-1992), eine renommierte Mathematikerin, die bereits Ende der 40er Jahre des 20. Jahrhunderts\nvon den vielfältigen Anwendungsmöglichkeiten von Computern überzeugt war, darf an dieser Stelle nicht fehlen. Sie\nentwickelte den ersten Compiler, der für Menschen verständliche Programmiersprachen in von Computern genutzte\nMaschinensprache übersetzt und war überhaupt ausschlaggebend für die Entwicklung erster\nProgrammiersprachen. [",[585,10491,10494],{"href":10492,"rel":10493},"https://www.frauen-informatik-geschichte.de/index.php-id=62.htm",[589],"3",[18,10496,10497],{},"Die Liste an Frauen, die wesentliche Grundsteine der Computertechnik gelegt haben, ließe sich noch weiter fortführen.",[3469,10499,10501],{"id":10500},"überholte-rollenbilder-übwerwinden","Überholte Rollenbilder übwerwinden",[18,10503,10504],{},"Weibliche, wie natürlich auch andere Perspektiven, sind in der IT sehr wichtig. Wir möchten jungen Frauen ein positives\nVorbild liefern und sie damit bestärken, ihren Interessen und Begabungen frei von überholten Rollenbildern nachzugehen.",[18,10506,10507,10508,10478],{},"Es gibt viele Beispiele die zeigen, wie wichtig es ist, dass Teams divers aufgestellt sind. Amazon beispielsweise hatte\neinen Algorithmus entwickelt, der bei der Auswahl von neuen Mitarbeitern unterstützen sollte. Dieser nahm die Datensätze\nder in den letzten zehn Jahren eingestellten Personen als Basis. Durch die in der Tech-Industrie vorherrschende Anzahl\nan Männern, schloss die KI, dass sie Frauen entsprechend schlechter bewerten solle. Das ist sicherlich nicht bewusster\nDiskriminierung geschuldet, aber es ist anzunehmen, dass dieses Verhalten eher aufgefallen wäre, wenn Frauen an der\nEntwicklung beteiligt gewesen wären. [",[585,10509,10512],{"href":10510,"rel":10511},"https://reut.rs/2Qww5k5",[589],"4",[3469,10514,10516],{"id":10515},"mit-positiven-beispielen-voran","Mit positiven Beispielen voran",[18,10518,10519],{},"Da es uns sehr am Herzen liegt, junge Frauen für technischen Berufe zu begeistern und sie zu überzeugen ihren Weg zu\ngehen, haben wir beschlossen für diese Woche, in der der Girls’ Day stattgefunden hätte, eine Blog-Serie zu starten.",[18,10521,10522],{},"Glücklicherweise gibt es bei synyx äußerst engagierte Mitarbeiterinnen, die Euch gerne einen Einblick in ihre Arbeit und\nihren Weg in die IT geben.",[18,10524,10525],{},[1794,10526],{"alt":10527,"src":10528},"Isabell Duerlich","https://media.synyx.de/uploads/2019/06/duerlich_ws-768x768.jpg",[18,10530,10531],{},"Isabell",[18,10533,10534],{},[27,10535,10536],{},"Seit wann arbeitest du bei synyx und was ist dein Aufgabenfeld?",[18,10538,10539],{},"Ich arbeite seit fast 4 Jahren bei synyx. Die letzten 3,5 Jahre war ich in der Softwareüberwachung und Entwicklung\ntätig, seit Anfang des Jahres schreibe ich Software für den Logistik-Bereich.",[18,10541,10542],{},[27,10543,10544],{},"Was hat dein Interesse geweckt, einen Beruf in der IT zu wählen?",[18,10546,10547],{},"Ich hatte schon immer Interesse an Computern und anderen technischen Geräten. In meiner Freizeit habe ich oft am\nComputer gespielt. In der Oberstufe hatte ich dann für ein halbes Jahr Informatik als Nebenfach. Dort habe ich auch das\nerste mal eigene kleine Programme geschrieben, was ich sehr spaßig fand.",[18,10549,10550],{},[27,10551,10552],{},"Gibt es etwas, das du an deinem Beruf besonders magst?",[18,10554,10555],{},"Die Möglichkeit in viele spannende Bereiche einzutauchen und jeden Tag etwas Neues zu lernen.",[18,10557,10558],{},[27,10559,10560],{},"Wie war dein Werdegang?",[18,10562,10563],{},"2013 habe ich mein Abi an einem naturwissenschaftlichen Gymnasium gemacht und habe mich dann relativ spontan für ein\nInformatikstudium an der Fachhochschule in Karlsruhe entschieden. Die ersten Semester des Studiums waren sehr\ninteressant und haben mir Spaß gemacht. Nach meinem Praxissemester im Bereich Geoinformatik habe ich mich dann als\nWerkstudent bei synyx beworben, wo ich sowohl meine Bachelor- als auch meine Masterarbeit geschrieben habe. Ende 2019\nhabe ich dann mein Studium abgeschlossen und arbeite seit dem Vollzeit bei synyx.",[18,10565,10566],{},[27,10567,10568],{},"Möchtest du jungen Frauen oder speziell den Mädchen beim Girls‘ Day, die sich für technische Berufe interessieren,\netwas mit auf den Weg geben?",[18,10570,10571],{},"Wenn ihr Interesse daran habt einen technischen Beruf zu lernen, dann versucht´s einfach mal. Ich war mir damals auch\nunsicher, ob es das richtige Studium für mich ist und heute bin ich froh mich dafür entschieden zu haben. Selbst wenn\nman merkt, dass es nicht das Richtige für einen sein sollte, hat man immer noch die Möglichkeit sich für einen anderen\nBeruf zu entscheiden. Meiner Meinung nach ist das wichtigste einen Beruf zu finden, der einem Spaß macht, und dafür\nsollte man sich Zeit nehmen.",[18,10573,10574],{},[1794,10575],{"alt":10576,"src":10577},"Julia Dasch","https://media.synyx.de/uploads/2019/06/julia_d_ws-768x768.jpg",[18,10579,10580],{},"Julia",[18,10582,10583],{},[27,10584,10536],{},[18,10586,10587],{},"Ich arbeite seit Oktober 2015 bei synyx und habe ein Duales Studium absolviert.",[18,10589,10590],{},"Mein Aufgabenfeld ist unheimlich vielseitig, zunächst bin ich Anwendungsentwicklerin, sowohl im Backend, als auch im\nFrontend. Dazu engagiere ich mich noch sehr in der Organisation der Devoxx4Kids, eine Veranstaltung um Kindern einen\nkreativen Umgang mit Computern und Spaß am Programmieren zu vermitteln. Da gibt es immer viel zu tun, Orga der\nWorkshops, Planung des Events, die Dokumentation etc.",[18,10592,10593],{},[27,10594,10544],{},[18,10596,10597],{},"Mein Interesse an der IT hat eine Aufgabe im Wirtschaftsgymnasium geweckt. Wir sollten",[18,10599,10600],{},"für das Schulfach Datenverarbeitung einen Steckbrief über uns in Form einer eigenen",[18,10602,10603],{},"Webseite erstellen. Mein damaliger Freund war auch Informatiker und hat mir zu der Zeit weitere Sachen im IT-Umfeld\ngezeigt.",[18,10605,10606],{},[27,10607,10552],{},[18,10609,10610],{},"Man versucht eine Lösung für ein Problem zu finden und macht damit die Anwender der",[18,10612,10613],{},"Software glücklicher.",[18,10615,10616],{},[27,10617,10560],{},[18,10619,10620],{},"Realschule, Wirtschaftsgymnasium, Duales Studium (Informatik)",[18,10622,10623],{},[27,10624,10625],{},"Möchtest du jungen Frauen oder speziell den Mädchen beim Girls‘ Day, die",[18,10627,10628],{},[27,10629,10630],{},"sich für technische Berufe interessieren, etwas mit auf den Weg geben?",[18,10632,10633],{},"Der Beruf ist sehr vielseitig, da es nicht nur einen Weg bereitstellt, sondern viele Möglichkeiten",[18,10635,10636],{},"und Bereiche bietet:",[18,10638,10639],{},"◦ Gestaltung von Benutzeroberflächen",[18,10641,10642],{},"◦ Benutzerführung",[18,10644,10645],{},"◦ Logik und Mathematik",[18,10647,10648],{},"◦ Architekturen einer Software",[18,10650,10651],{},"◦ Probleme, Bugs finden und beheben",[18,10653,10654],{},"Es gibt unheimlich viele Optionen sich persönlich weiter zu entwickeln.",[18,10656,10657],{},[1794,10658],{"alt":10659,"src":10660},"Khrystyna Kadyietska","https://media.synyx.de/uploads/2019/08/khrystyna_ws-768x768.jpg",[18,10662,10663],{},"Khrystyna",[18,10665,10666],{},[27,10667,10536],{},[18,10669,10670],{},"Ich mache seit 2018 bei synyx meine Ausbildung zur Fachinformatikerin im Bereich Anwendungsentwicklung.",[18,10672,10673],{},"Zur Zeit bin ich damit beschäftigt zu lernen, wie man eine App für Android programmiert.",[18,10675,10676],{},"Zwei mal pro Woche gehe ich in die Berufsschule und bereite mich auf",[18,10678,10679],{},"zukünftige Prüfungen vor.",[18,10681,10682],{},[27,10683,10544],{},[18,10685,10686],{},"Ich beschäftige mich gerne mit Aufgaben am PC. Auch als Kind war ich immer",[18,10688,10689],{},"neugierig, wie Handys oder Laptops funktionieren.",[18,10691,10692],{},[27,10693,10552],{},[18,10695,10696],{},"Natürlich, sehr viel. Ich mag, dass du als Softwareentwickler immer die",[18,10698,10699],{},"Möglichkeit hast, etwas Neues zu lernen. Es ist nie langweilig. Du arbeitest nicht nur",[18,10701,10702],{},"am PC und bist alleine. Es ist sehr wichtig sich zuerst mit Kunden und Kollegen zu besprechen,",[18,10704,10705],{},"wie ein Projekt am Ende fertig aussehen soll. Man muss im Team arbeiten,",[18,10707,10708],{},"auch voneinander lernen, und sehr viel kommunizieren, damit",[18,10710,10711],{},"der Kunde am Ende bekommt, was er will.",[18,10713,10714],{},[27,10715,10560],{},[18,10717,10718],{},"Ich komme aus der Ukraine, bin dort geboren und aufgewachsen. Habe dort",[18,10720,10721],{},"auch meinen Bachelor (Englischlehrerin, Deutsch als Nebenfach) gemacht. Da ich",[18,10723,10724],{},"in dieser Zeit an einem html/css-Kurs teil genommen habe, habe ich gemerkt,",[18,10726,10727],{},"dass es mir Spaß macht Webseiten zu stylen. Ich habe mir gewünscht, das irgendwann richtig zu lernen. Nicht nur\nFrontend, sondern auch Backend (diese Wörter waren auch für mich fremd).",[18,10729,10730],{},"Nach dem ich fertig mit dem Studium war, bin ich nach Deutschland gekommen. Zuerst um",[18,10732,10733],{},"die Sprache besser zu lernen, und dann bin ich auf diese Ausbildung gestoßen. Ich habe",[18,10735,10736],{},"mich weiter informiert, was man braucht, um Fachinformatikerin zu werden.",[18,10738,10739],{},"Danach ging alles ganz schnell: Ausbildungsbetrieb finden (synyx), Bewerbung",[18,10741,10742],{},"schreiben, Vorstellungsgespräch nicht versauen 🙂 et voilà du bist Azubi.",[18,10744,10745],{},[27,10746,10568],{},[18,10748,10749],{},"Es gibt keine Frauen- oder Männer-Berufe. Für mich ist es wichtig, dass man",[18,10751,10752],{},"herausfindet, was langfristig Spaß macht. Und ich bin der Meinung, es ist nie zu",[18,10754,10755],{},"spät etwas Neues zu lernen und sich weiter zu entwickeln.",[18,10757,10758],{},"Ich bin noch am Anfang und werde weiter gerne neue Sachen lernen",[18,10760,10761],{},"und mehr Erfahrung sammeln.",[18,10763,10764],{},[1794,10765],{"alt":10766,"src":10767},"Aljona Buchloh","https://media.synyx.de/uploads/2019/08/aljona_ws-768x768.jpg",[18,10769,10770],{},"Aljona",[18,10772,10773],{},[27,10774,10536],{},[18,10776,10777],{},"Bei synyx bin ich schon eine halbe Ewigkeit, genauer gesagt seit 2011. Meine Reise bei synyx begann als Auszubildende\nfür Fachinformatik (Anwendungsentwicklung). Nach der Ausbildung habe ich dann einige Jahre als Softwareentwicklerin\ngearbeitet und seit einem guten Jahr bin ich nun als Scrum Master / Agile Coach tätig. Das bedeutet, mein Fokus liegt\nmittlerweile weniger auf der Technik, sondern mehr auf der kontinuierlichen Verbesserung von Prozessen und Kommunikation\ninnerhalb von Teams.",[18,10779,10780,10781,10786],{},"Schau doch auch mal in den",[585,10782,10785],{"href":10783,"rel":10784},"https://synyx.de/blog/8-jahre-synyx-ein-abwechslungsreicher-rueckblick/",[589],"Rückblick"," auf meine\nZeit bei synyx rein!",[18,10788,10789],{},[27,10790,10544],{},[18,10792,10793],{},"Angefangen hat bei mir damals alles mit Homepage-Basteleien. Anpassen zu können, wie Dinge im Browser dargestellt\nwerden, hat mich total fasziniert. Ganz viel war mit Ausprobieren verbunden und irgendwann habe ich beschlossen, mich da\nrichtig reinzufuchsen. In der Ausbildung habe ich dann natürlich sehr viel mehr gelernt, als nur Dinge im Browser\nanzuzeigen. Mein größter Antrieb blieb jedoch der gleiche: etwas erschaffen zu können, indem ich Zeichen in eine gewisse\nStruktur bringe.",[18,10795,10796],{},[27,10797,10552],{},[18,10799,10800],{},"Die IT ist ein super schnelllebiger Bereich, der sich ständig verändert und weiterentwickelt. Es reicht nicht aus, sich\neinmalig etwas anzueignen, stattdessen ist lebenslanges Lernen gefragt. Aber genau das macht das Berufsfeld meiner\nMeinung nach so spannend, denn es wird einfach nie langweilig.",[18,10802,10803],{},[27,10804,10568],{},[18,10806,10807],{},"Ganz egal um welchen Beruf es geht: Begeisterung ist alles. Wenn du dich für etwas begeistern kannst, ist der Grundstein\ngelegt. Den Rest lernst du schon mit der Zeit.",[18,10809,10810],{},[1794,10811],{"alt":10812,"src":10813},"Petra Scherer","https://media.synyx.de/uploads/2019/06/lila_ws-768x768.jpg",[18,10815,10816],{},"Lila",[18,10818,10819],{},[27,10820,10536],{},[18,10822,10823],{},"Ich bin seit Oktober 2017 bei synyx. Noch bin ich im Studium. Das absolviere ich an der DHBW Karlsruhe, was bedeutet,\ndass ich immer mal ein paar Wochen im Betrieb und dann wieder einige Wochen an der DH bin. Bei synyx mache ich dann\nkleinere Projekte, die eigentlich immer Relevanz für eine bestehende Software, einen Partner oder synyx selbst haben.\nDarüber schreibe ich für die DH jeweils eine Praxisarbeit.",[18,10825,10826],{},[27,10827,10544],{},[18,10829,10830],{},"Eigentlich bin ich fertig ausgebildete Lehrerin. Aber je nach Fächerkombination ist es schwierig bis unmöglich gewesen\neine Stelle zu bekommen. Bei mir war es unmöglich. Daher habe ich als Erzieherin gejobbt und wusste schnell, das das\nnichts für mich ist. Nach drei Jahren habe ich dann angefangen mich nach anderen Möglichkeiten umzusehen.",[18,10832,10833],{},"Viele meiner Freunde, mit denen ich mich sehr gut verstehe, arbeiten im IT Bereich, daher kam ich auf die Idee mir das\nmal anzuschauen. Vielleicht denke ich ja nicht ohne Grund ähnlich wie meine Freunde, hatte ich mir gedacht. Kurze Zeit\nspäter habe ich einen Fernkurs zur C#-Softwareentwicklerin begonnen. Der hat mir dann so viel Spaß gemacht, dass ich\nmich informiert habe, wie ich diesen Beruf am besten erlernen und ausüben kann.",[18,10835,10836],{},[27,10837,10552],{},[18,10839,10840],{},"Zwar ist es nicht selten frustrierend, wenn etwas eine ganze Weile nicht so funktioniert, wie man gern hätte. Bei der\nSoftwareentwicklung passiert das regelmäßig. Aber man ist nie allein, kann andere im Team fragen, programmiert\ngemeinsam. Das finde ich toll. Und das Gefühl, wenn man dann die Lösung gefunden hat, ist super. Bei synyx arbeiten wir\nagil, daher ist die Teamarbeit sehr wichtig. Ich fühle mich mit den KollegInnen sehr wohl.",[18,10842,10843],{},"Außerdem kann man immer etwas Neues lernen. Alles entwickelt sich und bleibt daher spannend.",[18,10845,10846],{},[27,10847,10568],{},[18,10849,10850],{},"Lasst euch nicht erzählen, was ihr angeblich nicht könnt. Macht, was ihr mögt, denn dann könnt ihr mit eurem Beruf\nerfolgreich und glücklich werden.",[18,10852,10853],{},[1794,10854],{"alt":10855,"src":10856},"Daniela Grammlich","https://media.synyx.de/uploads/2024/01/dani-2023-300x300.jpg",[18,10858,10859],{},"Dani",[18,10861,10862],{},[27,10863,10536],{},[18,10865,10866],{},"Seit September 2018 unterstütze ich synyx als Systementwicklerin bzw. -administratorin, sprich ich kümmere mich um\nalles was Software braucht, um laufen zu können. Dazu gehört die Konfiguration und der Betrieb von Servern und der\ndarauf ausgeführten Software, aber auch die Unterstützung der Kollegen aus der Entwicklung bei ihrer Arbeit in Bereichen\nwie beispielsweise Sicherheit und Stabilität. Bei uns Administratoren laufen viele Kommunikationsfäden zusammen, sowohl\nvon Menschen als auch von Hard- und Software. Vielseitigkeit und ein guter Überblick ist dazu sehr wichtig. Ab und zu\nmuss aber auch einem Drucker gut zugeredet oder an einem Kabel gewackelt werden.",[18,10868,10869],{},[27,10870,10544],{},[18,10872,10873],{},"Ich habe mich schon in früher Kindheit für Computer interessiert und darauf programmiert, kommuniziert, gespielt,\ngeschrieben, gestaltet, sie auf- und auseinander geschraubt und anderweitig hantiert. Dabei habe ich mir vieles selbst\nbeigebracht, das mache ich heute immer noch so.",[18,10875,10876],{},"Der Rest hat sich sehr natürlich angefühlt. In der Schule habe ich mich für die naturwissenschaftlichen und technischen\nFächer interessiert und entsprechend meinen Stundenplan gestaltet. Am Ende führte eins zum anderen,\nInformatik-Ausbildung, Informatik-Studium und nun ist es ein gewaltiger Teil meines Lebens.",[18,10878,10879],{},[27,10880,10552],{},[18,10882,10883],{},"Vielseitigkeit, ständiger Fortschritt und lebenslanges Lernen motivieren mich dran zu bleiben und bringen mich auch nach\nso vielen Jahren immer wieder zum Staunen. Das Lösen von komplexen Problemen, sowohl technisch als auch\nzwischenmenschlich, macht mir viel Spaß und fordert mich heraus.",[18,10885,10886],{},"Außerdem mag ich dass ich von überall arbeiten kann, wenn ich das möchte.",[18,10888,10889],{},[27,10890,10560],{},[18,10892,10893],{},"Kurvig, aber immer auf Informatik ausgerichtet: Technisches Wahlfach auf der Realschule, Technisches Gymnasium,\nAusbildung zur Fachinformatikerin Richtung Anwendungsentwicklung und letztendlich Studium an der Hochschule in\nInformatik.",[18,10895,10896],{},"Dazwischen ein abgebrochenes Studium an der Uni in Informatik – ich bin einfach keine Theoretikerin.",[18,10898,10899],{},"Während des Studiums und danach habe ich länger als Software-Entwicklerin gearbeitet, dabei habe ich die Affinität für\nAdministratives entwickelt und ausgebaut.",[18,10901,10902],{},[27,10903,10904],{},"Möchtest du jungen Frauen oder speziell den Mädchen beim Girls‘ Day die sich für technische Berufe interessieren,\netwas mit auf den Weg geben?",[18,10906,10907],{},"Lasst euch nicht erzählen was ihr könnt und wer ihr seid. Wenn ihr Lust auf was habt, macht es einfach – es lohnt sich.",{"title":48,"searchDepth":86,"depth":86,"links":10909},[10910,10911,10912],{"id":10468,"depth":86,"text":10469},{"id":10500,"depth":86,"text":10501},{"id":10515,"depth":86,"text":10516},[614],"2020-03-23T08:07:36","Wir hatten uns wie jedes Jahr sehr auf den Girls‘ Day gefreut, aber leider liegen die derzeitigen Ereignisse nicht in\\nunserer Macht und Sicherheit geht absolut vor.","https://synyx.de/blog/frauen-in-der-it/",{},"/blog/frauen-in-der-it",{"title":10444,"description":10455},"frauen-in-der-it","blog/frauen-in-der-it",[10923,10924],"girls-day","women-in-tech","Wir hatten uns wie jedes Jahr sehr auf den Girls‘ Day gefreut, aber leider liegen die derzeitigen Ereignisse nicht in unserer Macht und Sicherheit geht absolut vor. Da es uns sehr am Herzen liegt, junge Frauen mit Interesse an technischen Berufen, zu überzeugen ihren Weg zu gehen, haben wir überlegt, wie wir das umsetzen können.","UlzuBd-Uze9865Q4zmGTyZJk2yrqItGvfpkbDYQNFj0",{"id":10928,"title":10929,"author":10930,"body":10933,"category":11080,"date":11081,"description":11082,"extension":617,"link":11083,"meta":11084,"navigation":499,"path":11085,"seo":11086,"slug":11088,"stem":11089,"tags":11090,"teaser":11092,"__hash__":11093},"blog/blog/die-oop-2020-in-muenchen.md","Die OOP 2020 in München",[10931,10932],"mennerich","meseck",{"type":11,"value":10934,"toc":11074},[10935,10938,10945,10960,10964,10974,10978,11000,11004,11031,11034,11038,11061,11071],[14,10936,10929],{"id":10937},"die-oop-2020-in-münchen",[18,10939,10940,10941,10944],{},"Vom 03. bis zum 07. Februar fand in München zum bereits 29ten Male die OOP statt, eine jährlich von SIGS DATACOM\norganisierte Fachtagung für Software-Architektur. Unter dem Motto ",[27,10942,10943],{},"business meets software","fanden sich gut 2400\nTeilnehmer an der Messe in München ein, um in regen Austausch zu treten und sich fortzubilden. Insgesamt wurden 170\nVorträge in 13 Tracks angeboten, darunter waren viele hochkarätige Sprecher aus relevanten Bereichen der IT. Zusammen\nmit einer Messe mit knapp 70 Ausstellern ist die OOP damit eine der größten unabhängigen Fachkonferenzen für Software\nArchitektur in Europa.",[18,10946,10947,10948,10951,10952,10959],{},"Von daher war es uns eine große Freude, im Rahmen des Tracks ",[27,10949,10950],{},"Modern Architecture – Known & Unknown","auf der OOP 2020\neine Nachtschule geben zu dürfen, in der wir vor fast vollem Raume mit interessierten Teilnehmern über ein uns sehr am\nHerz liegendes Thema diskutieren konnten:\n",[573,10953,10954],{},[585,10955,10958],{"href":10956,"rel":10957},"https://www.oop-konferenz.de/oop2020/programm/konferenzprogramm/sessiondetails/action/detail/session/ndo-1-3/title/systemtheorie-und-softwarearchitektur-auf-der-suche-nach-unbekannten-kontexten.html",[589],"Systemtheorie und Softwarearchitektur – Auf der Suche nach unbekannten Kontexten",".\nTrotz bahnbedingt etwas holpriger Anreise nach München hatten wir vorher aber glücklicher Weise noch etwas Zeit, selbst\nnoch ein paar sehr gute Vorträge zu hören. Für uns als Sprecher war am Freitag dann auch die Teilnahme an den Workshops\nfrei. 😉",[649,10961,10963],{"id":10962},"keynote-von-hannah-fry","Keynote von Hannah Fry",[18,10965,10966,10967],{},"Hannah Fry ist Professorin am University College London und beschäftigt sich als Mathematikern mit sozialen\nFragestellungen. In der Keynote ging sie auf amüsante Art und Weise der Fragestellung nach, wie vertrauensürdig\nmaschinelle Lernalgorithmen sind. Vom Anlernen von Tauben zur Melanomerkennung bis hin zu Algorithmen, die rosa Schafe\nals Blumen erkennen diskutierte sie die Glaubwürdigkeit maschinell angelernter Algorithmen. Auch auf moralische\nFragestellungen und Probleme bei der Erkennung terroristischer Aktivitäten ging sie dabei ein, immer wieder unter\nEinbeziehung des Auditoriums. So diskutierte sie beispielsweise Vor- und Nachteile von Algorithmen beim Fällen von\nGerichtsurteilen, oder suchte mit ihrem Publikum nach dem richtigen Wort um Menschen von Maschinen zu unterscheiden.\nGenaueres kann man auch in Frys zahlreichen Büchern nachlesen, unter anderem ",[585,10968,10971],{"href":10969,"rel":10970},"https://www.chbeck.de/fry-hello-world/product/26909221",[589],[573,10972,10973],{},"Hello World – Being Humanin the Age of\nAlgorithms.",[649,10975,10977],{"id":10976},"session-von-gunter-dueck","Session von Gunter Dueck",[18,10979,10980,10981,10984,10985,10988,10989,10992,10993],{},"Gunter Dueck aka ",[573,10982,10983],{},"Wild Dueck","(@wilddueck) zuzuhören, ist immer ein Erlebnis und seit langem ist er fest im Programm der\nOOP verankert. Er sprach über ",[27,10986,10987],{},"Lähmungen im Angesicht des Unbekannten",", von Digitalisierung und der McDonaldisierung\ndes Alten. Den ",[27,10990,10991],{},"Fat Smoker","nahm er als Sinnbild für den Zustand in größeren Unternehmen: Man weiß, woran es krankt,\nweiß was man tun muß um zu gesunden und dennoch geht es weiter wie gehabt. Dueck erzählte dabei auf gewohnt amüsante\nWeise Anekdoten aus seinem privaten und seinem Arbeitsleben, um zu motivieren: Es geht um Lernen, Üben und Explorieren,\nnicht um Erreichen und Messen. Thematisiert wird diese kulturelle Umstand auch in seinem neuen Buch ",[585,10994,10997],{"href":10995,"rel":10996},"https://www.campus.de/buecher-campus-verlag/wirtschaft-gesellschaft/wirtschaft/heute_schon_einen_prozess_optimiert-15859.html",[589],[573,10998,10999],{},"Heute schon einen\nProzess optimiert?: Das Management frisst seine\nMitarbeiter.",[649,11001,11003],{"id":11002},"nachtschule-von-uns","Nachtschule von uns 😉",[18,11005,11006,11007,11010,11011,11014,11015,11022,11023,11030],{},"Abends um 18:30h durften wir dann unsere Nachtschule halten. Trotz der fortgeschrittenen Zeit und nach einem für einige\nTeilnehmer doch schon sehr langen Tagungstag, waren recht viele und erfreulicherweise sehr diskussionsfreudige\nTeilnehmer erschienen. Es gab während unserer Präsentation als auch im Nachgang viele gute Kommentare, Nachfragen und\nauch Anregungen, so, dass wir erst weit nach dem offiziellen Ende der Nachtschule das Tagungsgebäude verlassen haben.\nDas Interesse, doch recht schwierige Themen wie ",[27,11008,11009],{},"Konstruktivismus","und ",[27,11012,11013],{},"Systemtheorie nach Niklas Luhmann","mit\nSoftwareentwicklung und -architektur zu verbinden, freut uns sehr. Es bestätigt uns auch in unserer Überzeugung, dass\ndies wichtige Themen sind. Hier noch einmal vielen herzlichen Dank an alle, die sich die Zeit genommen haben so\nausführlich mit uns zu sprechen! Wer ein bisschen was dazu lesen möchte, darf sich gerne noch unseren Artikel in der\n",[573,11016,11017],{},[585,11018,11021],{"href":11019,"rel":11020},"https://www.informatik-aktuell.de/management-und-recht/projektmanagement/systemisch-agile-sofwareentwicklung.html",[589],"Informatik Aktuell","\nzu Gemüte führen, oder auch eine Aufnahme eines ähnlichen Vortrags von uns auf der ",[585,11024,11027],{"href":11025,"rel":11026},"https://www.youtube.com/watch?v=FAA31oVBrBI",[589],[573,11028,11029],{},"JUG\nKarlsruhe"," im Dezember 2019 ansehen.",[18,11032,11033],{},"Der Freitag war vertiefenden Workshops gewidmet.",[649,11035,11037],{"id":11036},"workshop-dave-farley","Workshop Dave Farley",[18,11039,11040,11041,11044,11045,11052,11053,11060],{},"Dave Farley von Continuous Delivery Ltd. gab einen Ganztagesworkshop zum Thema ",[27,11042,11043],{},"Continuous Delivery Advanced Deployment\nPipelines",". Als Mitautor des Buches ",[585,11046,11049],{"href":11047,"rel":11048},"https://www.amazon.de/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912",[589],[573,11050,11051],{},"Continuous Delivery: Reliable Software Releases Through Build, Test, and\nDeployment Automation","\nberichtete er ausgiebig aus seinem großen Erfahrungsfundus. Der Workshop bot zwar keine Hands-on Übungen am Rechner an,\nwar aber geprägt von ausführlichen und sehr tief gehenden Diskussionen, in denen Farley die Vorteile und Notwendigkeiten\nder Continuous Delivery Philosophie herausstellte. Als ehemaliger Mitarbeiter von Thoughtworks verwies er auch immer\nwieder auf die Studien von ",[585,11054,11057],{"href":11055,"rel":11056},"https://www.amazon.de/Accelerate-Software-Performing-Technology-Organizations/dp/1942788339/ref=pd_sbs_14_t_2/260-3252525-6073864?_encoding=UTF8&pd_rd_i=1942788339&pd_rd_r=a9c6abf8-8070-4274-a5e0-129f2e3d59cb&pd_rd_w=rVM4V&pd_rd_wg=66liA&pf_rd_p=a2f6bca6-dcb1-4822-8e28-66b64b37970e&pf_rd_r=TDW4AGDXGE1G6JR970TH&psc=1&refRID=TDW4AGDXGE1G6JR970TH",[589],[573,11058,11059],{},"Accelerate","\nworin Vorteile der DevOps-Kultur und Continous Delivery auch wissenschaftlich strikt untermauert sind (aus unserer\nSicht eine klare Leseempfehlung!). Farley betonte immer wieder, dass aus seiner Sicht die zwei schwierigsten Probleme\nder Informatik Nebenläufigkeit (Concurrency) und Kopplung (Coupling) seien; mit CD werde das Zweite adressiert.",[18,11062,11063,11064],{},"Als Ingenieur ist es essentiell schnell zu lernen, ob die gewählten Ansätze tragen. Dazu dienen kurze Feedbackzyklen,\ndie Ideen der CD sind hierbei die Grundphilosophie, die entstehenden Pipelines die Werkzeuge (weshalb konkrete Tools\nauch nur am Rande besprochen wurden). Schnelle Pipelines und kurze Wege in die Produktion können die Schlüsselelemente\nerfolgreicher Projekte mit gesunden Mitarbeitern sein. Eine schöne Empfehlung zur Motivation der testgetriebenen\nEntwicklung ist das Tutorial dazu von J. B. Rainsberger (@jbrains) namens ",[585,11065,11068],{"href":11066,"rel":11067},"https://online-training.jbrains.ca/p/wbitdd-01",[589],[573,11069,11070],{},"TDD Done\nRight.",[18,11072,11073],{},"Alles in allem waren es zwei sehr gelungene, wenn auch anstrengende Tage in München. Gerne kommen wir 2020 wieder, wenn\nsich die OOP zum 30ten Male jährt. 😉",{"title":48,"searchDepth":86,"depth":86,"links":11075},[11076,11077,11078,11079],{"id":10962,"depth":126,"text":10963},{"id":10976,"depth":126,"text":10977},{"id":11002,"depth":126,"text":11003},{"id":11036,"depth":126,"text":11037},[614],"2020-02-17T11:51:16","Vom 03. bis zum 07. Februar fand in München zum bereits 29ten Male die OOP statt, eine jährlich von SIGS DATACOM\\norganisierte Fachtagung für Software-Architektur. Unter dem Motto business meets softwarefanden sich gut 2400\\nTeilnehmer an der Messe in München ein, um in regen Austausch zu treten und sich fortzubilden. Insgesamt wurden 170\\nVorträge in 13 Tracks angeboten, darunter waren viele hochkarätige Sprecher aus relevanten Bereichen der IT. Zusammen\\nmit einer Messe mit knapp 70 Ausstellern ist die OOP damit eine der größten unabhängigen Fachkonferenzen für Software\\nArchitektur in Europa.","https://synyx.de/blog/die-oop-2020-in-muenchen/",{},"/blog/die-oop-2020-in-muenchen",{"title":10929,"description":11087},"Vom 03. bis zum 07. Februar fand in München zum bereits 29ten Male die OOP statt, eine jährlich von SIGS DATACOM\norganisierte Fachtagung für Software-Architektur. Unter dem Motto business meets softwarefanden sich gut 2400\nTeilnehmer an der Messe in München ein, um in regen Austausch zu treten und sich fortzubilden. Insgesamt wurden 170\nVorträge in 13 Tracks angeboten, darunter waren viele hochkarätige Sprecher aus relevanten Bereichen der IT. Zusammen\nmit einer Messe mit knapp 70 Ausstellern ist die OOP damit eine der größten unabhängigen Fachkonferenzen für Software\nArchitektur in Europa.","die-oop-2020-in-muenchen","blog/die-oop-2020-in-muenchen",[4494,6240,11091],"dddesign","Vom 03. bis zum 07. Februar fand in München zum bereits 29ten Male die OOP statt, eine jährlich von SIGS DATACOM organisierte Fachtagung für Software-Architektur. Unter dem Motto 'business meets software' fanden sich gut 2400 Teilnehmer an der Messe in München ein, um in regen Austausch zu treten und sich fortzubilden.","uU-2f7bAtqDIPtnTxLniFCBDVc3G8CPQvwHobE6BYOo",{"id":11095,"title":11096,"author":11097,"body":11100,"category":11190,"date":11191,"description":11192,"extension":617,"link":11193,"meta":11194,"navigation":499,"path":11195,"seo":11196,"slug":11104,"stem":11197,"tags":11198,"teaser":11202,"__hash__":11203},"blog/blog/kandddinsky-2019-in-berlin.md","KanDDDinsky 2019 in Berlin",[9,11098,11099],"heib","contargo_poetzsch",{"type":11,"value":11101,"toc":11188},[11102,11105,11108,11113,11120,11125,11128,11131,11134,11139,11153,11158,11161,11166,11169,11174,11177,11182,11185],[14,11103,11096],{"id":11104},"kandddinsky-2019-in-berlin",[18,11106,11107],{},"Die KanDDDinsky Konferenz in Berlin fand 2019 in einem Hotel nahe dem Alexanderplatz statt. Ein Tag vor der eigentlichen\nKonferenz gab es zusätzlich einen Workshoptag der DDD Europe. Hier wurden drei tagesfüllende Workshops angeboten, bei\ndenen tiefer und in kleinen Gruppen auf DDD Themen eingegangen wurde. Die Konferenz selbst bestand zum einen Teil aus\neinstündigen Vorträgen, als auch aus zweistündigen “Hands-on” Workshops. Dazwischen gab es in den Kaffee Pausen\nreichlich Snacks sowie Abend- und Mittagessen. Mit ca. 200 Teilnehmern war alles recht übersichtlich und nicht\nüberfüllt. Die Konferenzsäle befanden sich direkt im Hotel, sodass wir nach dem Frühstück gleich starten konnten.\nNachfolgend findet ihr Erfahrungsberichte zu den einzelnen Workshops und Vorträgen, welche uns in guter Erinnerung\ngeblieben sind sowie ein abschließendes Fazit.",[18,11109,11110],{},[27,11111,11112],{},"Workshop: Thomas Coopman — Event Storming",[18,11114,11115,11116,11119],{},"Der DDD Workshop “EventStorming Introduction” von Thomas Coopman fand am ersten Tag in Kollaboration mit DDD Europe\nstatt. Das Ziel des Workshops EventStorming Introduction war es, den Teilnehmern die Grundlagen von Eventstorming näher\nzu bringen und ihnen zu zeigen, wie sie die Methodik im eigenen Unternehmen einführen können. Dazu haben sich die\nTeilnehmer nach einer kurzen Vorstellung der Problemdomäne am Prozess selbst versucht, unter ständiger Anleitung von\nThomas Coopman. Die Problemdomäne bestand aus einem kurzfristigen Autoverleih (vergleichbar mit den E-Scootern in\nmanchen Städten). Hierzu wurde zunächst klassisch das ",[573,11117,11118],{},"Big Picture"," erarbeitet und das Modell später Schritt für Schritt\nverfeinert und ergänzt. Anschließend wurde der Happy Path im “explicit” und im “reverse” Walkthrough explizit\ndurchgespielt. Interessant war, dass Coopman Brandolinis Prozess angepasst und eine eigene Sprache entwickelt hat:\nBereits während des Big Pictures wurde nicht mit Aggregates und Repositories, sondern mit Commands, die Events\nverursachen, und Rules, die greifen, gearbeitet. Dieser Ansatz hat dabei geholfen User Stories und Acceptance-Tests\nschneller zu finden und Example Mapping effizienter durchführen zu können. Um die Einführung in den Unternehmen zu\nvereinfachen, hat Coopman ständig interveniert und wertvolle Tipps aus seiner umfangreichen Erfahrung mitgegeben, sei es\nfür Teilnehmer (“Domänenexperten sind da um ausgefragt zu werden”) oder für Moderatoren (“mind. 1m Papier/Person”,\n“keine Super-Stickys kaufen”). Im Workshop konnte Thomas viele Kniffe an uns weitergeben — es wäre interessant, an\neinem weiteren Tag zu sehen, wie Coopman den Prozess abgeschlossen hätte und beim Sprung zum Domänenmodell vorgegangen\nwäre.",[18,11121,11122],{},[27,11123,11124],{},"Workshop: Marco Heimeshoff, Roman Sachse — Why are words, how do they mean?",[18,11126,11127],{},"Einer der “Hands on”-Workshops an den beiden Konferenztagen hieß: “Why are words, how do they mean?” und wurde von\nMarco Heimeshoff und Roman Sachse moderiert. Aus der Beschreibung war nur zu erkennen, dass es sich irgendwie um\nDomain-Driven Design (DDD) drehen musste. Ich erhoffte mir einen praktischen Workshop mit geringem Theorieanteil und\nnach einer kurzen Einführung ging es direkt mit dem praktischen Teil los. Aufgabenstellung war, die Domäne für ein Hotel\nUnternehmen zu entwickeln. Der Raum wurde in mehrere kleine Gruppen aufgeteilt, von denen jede eine Methode des Event\nModeling auf einen Teilbereich der Hotelbranche anwenden durfte (beispielsweise Event Storming oder Domain Story\nTelling). Meine Gruppe wählte den Themenbereich “Verwaltung der Hotelzimmer”. Dabei ging es z.B. darum, wie ein\nKinderbett auf Anfrage des Kunden auf das Hotelzimmer gelangt oder wie die Räume gereinigt werden. Mit Hilfe des Domain\nStory Telling bildeten wir einfache Sätze, welche aus Actors, Activities und Work Objects bestanden — wodurch sich schon\nbald eine Vielzahl von vernetzten Arbeitsabläufen bildete. Hier ließ sich zum einen schon eine Sprache erkennen, zum\nanderen Stellen, welche schwerer zu modellieren waren als andere.",[18,11129,11130],{},"Nach ungefähr 45 Minuten begann der zweite Teil des Workshops. Hier ging es darum die diskutierte Domäne in Programmcode\numzusetzen. Einer der Mentoren bediente die Tastatur und der Raum mit den Teilnehmern konnte bestimmen, in welche\nRichtung entwickelt wurde. Wir begannen einen Teilbereich zu implementieren der zuvor von einer der Gruppen modelliert\nwurde. Die Mentoren sind dabei dynamisch auf Anmerkungen oder Fragen aus dem Teilnehmerkreis eingegangen. Kam eine\nProblemstellung auf, wurde die Lösung direkt erklärt und beispielhaft umgesetzt.",[18,11132,11133],{},"Im ersten Teil des Workshops konnten die Teilnehmer eine Form des Event Modeling mitgestalten und sich in die Domäne\nhineinversetzen. Der zweite Teil hat abstrakte Konzepte des DDD anschaulich erklärt und praktisch umgesetzt. Man konnte\nden Inhalt mitgestalten und sich aktiv beteiligen. Leider dauerte der Workshop lediglich zwei Stunden und die Mentoren\nkonnten nicht auf alle Modelle der einzelnen Teams eingehen. Alles in allem war es ein gelungener Workshop, der sicher\nauch in einem längeren Format gut gelungen wäre.",[18,11135,11136],{},[27,11137,11138],{},"Vortrag: Roman Sachse — Is Maybe an Option",[18,11140,11141,11142,11145,11146,1628,11149,11152],{},"Im Vortrag “Is Maybe an Option” hat sich Roman Sachse an ein grundlegendes Problem gewagt, das in DDD meist\nstillschweigend umgangen wird: ",[573,11143,11144],{},"Nullability im Domain Model."," Sei es die Abwesenheit eines Datenbank-Feldes, der\nRückgabewert einer Funktion, die etwas nicht parse-bares parsen soll oder dass Felder wegen des objektrelationalen\nMappings leer gelassen werden müssen — Sachse hat zu vielen Problemstellungen aus der echten Welt anhand kurzer\nF#-Schnipsel erklärt, mit welchen Strategien sie angegangen werden können. Dabei ist er stark auf die Datentypen\n",[573,11147,11148],{},"Option",[573,11150,11151],{},"Maybe"," eingegangen. Auch wenn sich die Erkenntnisse nicht eins zu eins auf ein Java- oder .NET-Projekt\nübertragen lassen, hat Roman Sachse mit Ansätzen, die sich auch mit Generics und Optionals umsetzen lassen, neue\nDenkanstöße gegeben.",[18,11154,11155],{},[27,11156,11157],{},"Vortrag: Dennis Doomen — A practical introduction to DDD, CQRS…",[18,11159,11160],{},"Domain-Driven Design, Command-Query-Responsibility-Segregation und Event Sourcing sind Paradigmen, die hervorragend\nzusammenpassen und meist gemeinschaftlich in einem Projekt eingeführt werden. In seinem Vortrag “A practical\nintroduction to DDD, CQRS and Event Sourcing” ist Dennis Doomen zunächst in einem kleinen Rundumschlag auf die Themen\neingegangen und hat sich dann an “echten” Problemstellungen abgearbeitet: “Was passiert, wenn ich das ReadModel anpassen\nmuss?” “Wie trenne ich die Komponenten sauber?” “Was sind Alternativen, durch die ich bestimmte Komponenten ersetzen\nkann?” Der Vortrag hat nicht nur Grundlagen für Einsteiger geliefert, sondern auch Tipps für übliche Probleme. Die\nFolien sind sicherlich eine gute Grundlage für die Verwendung der Paradigmen in großen, änderungsaffinen Projekten",[18,11162,11163],{},[27,11164,11165],{},"Vortrag: Michael Plöd — Pitching DDD to the management",[18,11167,11168],{},"In den “C-level”-Management-Ebenen wird DDD immer noch oft als esoterischer, teurer Quatsch abgetan — zu versuchen,\nmit Event Storming o.ä. zu punkten, hilft oft nicht. Doch viele der Punkte, die für das Management aktuell wichtig sind,\nsei es beispielsweise Agilität, finden sich in den Ansätzen von Domain-Driven Design wieder. Michael Plöd hat in seinem\nVortrag analytisch dargelegt, wie genau das Paradigma helfen kann, die Ziele der Manager zu erreichen — und dabei Talent\ndarin bewiesen, Management und Entwicklung auf einen gemeinsamen Nenner zu bringen, Argumentationsgrundlagen zu finden\nund mit kleinen Tricks ans Ziel zu kommen. Obwohl viele Ideen aus dem Vortrag analog oder leicht angepasst im nächsten\nMeeting verwendet werden können, ging es um mehr, nämlich um die Denkweise, mit der die unterschiedlichen Sichtweisen\nund Ziele der leitenden und ausführenden Teile zusammengeführt werden können.",[18,11170,11171],{},[27,11172,11173],{},"Vortrag: Philipp Krenn — Building Distributeted Systems in Distributed Team",[18,11175,11176],{},"Im Vortrag “Building Distributeted Systems in Distributed Team” von Philipp Krenn ging es um die verteilte Arbeit bei\nElastic. Das klassische Büro ist dort eher der Ausnahmefall, die Mitarbeiter sind weltweit verteilt und arbeiten im\nwesentlichen von zu Hause aus. Es wurde aufgezeigt wie dies funktioniert, welche Vorteile es mit sich bringt (wie z.B.\nhohe Flexibilität), aber auch welche Nachteile (z.B. die Remote-Releaseparty fällt eher kleiner aus). Wichtigste\nErkenntnis war für mich, dass es einfacher ist, wenn das gesamte Team verteilt ist, im Gegensatz zu einzelnen,\nverteilten Teammitgliedern (oder an einzelnen Tagen verteilten). Dies deckt sich auch mit der Erfahrung aus eigenen\nProjekten, wo viele klassische Arbeitsplätze im Büro haben und einzelne remote arbeiten.",[18,11178,11179],{},[27,11180,11181],{},"PARTY SESSION — So You Want to be a Rockstar Developer?",[18,11183,11184],{},"Die Party Session von Dylan Beattie fand am ersten Abend der Konferenz Tage statt. Zum Spaß entwickelte er eine\nProgrammiersprache, die aus Songtexten bestand und veröffentlichte eine Spezifikation auf Github. Er zeigte sehr\nunterhaltsam, wie sich das Projekt in der Open Source Community verselbstständigte. Bald gab es nicht nur die\nSpezifikation, sondern auch die Möglichkeit Programme in „Rockstar“ zu schreiben. Mit humorvollen Beispielen und einer\nGitarreneinlage bildete der Vortrag den perfekten Abschluss des ersten Tages.",[18,11186,11187],{},"Die Kandddinsky ist eine eher kleine Konferenz. Die Vortragssäle sind nicht überfüllt und auch in den Workshops lässt es\nsich gut mitarbeiten. Die Speaker sind Teilnehmer der Konferenz und stehen in den Pausen für Fragen und Diskussionen zur\nVerfügung. Es ist nicht unwahrscheinlich einen der Speaker als Teilnehmer eines Workshops oder Vortrags anzutreffen. Der\nInhalt der Vorträge war oft wenig technisch und auch der Anteil an DDD Themen war weniger als zuvor gedacht. Für DDD\nNeulinge wäre auch eine Einführungsveranstaltung zu Beginn der Konferenz hilfreich gewesen. Für unsere Workshopbesucher\nhat sich der zusätzliche Tag in Berlin gelohnt. Die Sessions mit kleinem Publikum haben konzentriert Wissen vermittelt\nund neue Impulse gesetzt.",{"title":48,"searchDepth":86,"depth":86,"links":11189},[],[613,5823,614],"2019-12-13T13:56:04","Die KanDDDinsky Konferenz in Berlin fand 2019 in einem Hotel nahe dem Alexanderplatz statt. Ein Tag vor der eigentlichen\\nKonferenz gab es zusätzlich einen Workshoptag der DDD Europe. Hier wurden drei tagesfüllende Workshops angeboten, bei\\ndenen tiefer und in kleinen Gruppen auf DDD Themen eingegangen wurde. Die Konferenz selbst bestand zum einen Teil aus\\neinstündigen Vorträgen, als auch aus zweistündigen “Hands-on” Workshops. Dazwischen gab es in den Kaffee Pausen\\nreichlich Snacks sowie Abend- und Mittagessen. Mit ca. 200 Teilnehmern war alles recht übersichtlich und nicht\\nüberfüllt. Die Konferenzsäle befanden sich direkt im Hotel, sodass wir nach dem Frühstück gleich starten konnten.\\nNachfolgend findet ihr Erfahrungsberichte zu den einzelnen Workshops und Vorträgen, welche uns in guter Erinnerung\\ngeblieben sind sowie ein abschließendes Fazit.","https://synyx.de/blog/kandddinsky-2019-in-berlin/",{},"/blog/kandddinsky-2019-in-berlin",{"title":11096,"description":11107},"blog/kandddinsky-2019-in-berlin",[11199,6240,11200,10083,11201,5836],"berlin","ddd","domain-driven-development","Erfahrungsbericht der KanDDDinsky Konferenz 2019","LkddH4oMqPym1394NkfmhIu5bWj7Mx9y4njBxfheu0A",{"id":11205,"title":11206,"author":11207,"body":11209,"category":11660,"date":11661,"description":11662,"extension":617,"link":11663,"meta":11664,"navigation":499,"path":11665,"seo":11666,"slug":11667,"stem":11668,"tags":11669,"teaser":11670,"__hash__":11671},"blog/blog/poketime-gets-a-makeover-at-the-code-clininc.md","PokeTime gets a makeover at the Code Clinic",[11208],"jayasinghe",{"type":11,"value":11210,"toc":11652},[11211,11214,11217,11220,11223,11227,11230,11233,11237,11240,11243,11295,11378,11382,11385,11434,11441,11445,11448,11455,11458,11469,11480,11483,11487,11494,11501,11626,11635,11640,11644,11647,11650],[14,11212,11206],{"id":11213},"poketime-gets-a-makeover-at-the-code-clinic",[18,11215,11216],{},"In the planning phase for our last Devoxx4Kids Event in Karlsruhe we decided to pick up the awesome PokeTime workshop by\nCassandra and Stephen Chin. I was a mentor for this workshop at JCrete4Kids this year and really liked the mixture of\nhardware tinkering, building software snippets and playing the finished game in the end.",[18,11218,11219],{},"A few weeks after the initial planning I cloned the code from Github and tried to run it on my Raspberry Pi. I was not\nable to compile it without further preparation and probably some support from Cassandra. 🙁",[18,11221,11222],{},"Being a somewhat experienced breaker and builder of things I thought that I could make it on my own. 😉 This post tells\nabout the different steps that lead to a successful PokeTime workshop in Karlsruhe.",[3469,11224,11226],{"id":11225},"build-environment","Build environment",[18,11228,11229],{},"The root cause for the failing build was the lack of the right build environment. I am sure that on the SD cards that we\nused at the JCrete4Kids event all the needed libs were in place. Since I did not have an image of those cards I was kind\nof lost.",[18,11231,11232],{},"The existing build was done with Ant. Since my time with Ant is long ago and I did not want to go back there I created a\nvanilla pom.xml descriptor for a Maven build and started my first build to see what was missing.",[3469,11234,11236],{"id":11235},"openjdk-and-javafx","OpenJDK and JavaFX",[18,11238,11239],{},"The PokeTime application is a game UI that runs with keyboard controls as well as sensor input from Raspberry Pi\nsensors. So the main (external) dependencies are JavaFX and Pi4J. My gut feeling told me that JavaFX would be the harder\npart. Indeed, JavaFX is only included in Oracle JDK 8 and not in OpenJDK. After JDK 8 it has been totally removed and\nhanded over to the the OpenFJX project and made available under GPL license.",[18,11241,11242],{},"Since I was moving parts anyways I switched from JDK 8 to JDK 11 and introduced the OpenJFX dependencies in my Maven\ndescriptor:",[43,11244,11248],{"className":11245,"code":11246,"language":11247,"meta":48,"style":48},"language-xml shiki shiki-themes github-light github-dark"," \u003Cproperties>\n \u003Cproject.build.sourceEncoding>UTF-8\u003C/project.build.sourceEncoding>\n \u003Cjavafx.version>11\u003C/javafx.version>\n \u003Cjava.version>11\u003C/java.version>\n \u003Cpi4j.version>1.1\u003C/pi4j.version>\n \u003Cmaven.compiler.source>${java.version}\u003C/maven.compiler.source>\n \u003Cmaven.compiler.target>${java.version}\u003C/maven.compiler.target>\n \u003Cmaven.compiler.release>${java.version}\u003C/maven.compiler.release>\n \u003C/properties>\n","xml",[50,11249,11250,11255,11260,11265,11270,11275,11280,11285,11290],{"__ignoreMap":48},[53,11251,11252],{"class":55,"line":56},[53,11253,11254],{}," \u003Cproperties>\n",[53,11256,11257],{"class":55,"line":86},[53,11258,11259],{}," \u003Cproject.build.sourceEncoding>UTF-8\u003C/project.build.sourceEncoding>\n",[53,11261,11262],{"class":55,"line":126},[53,11263,11264],{}," \u003Cjavafx.version>11\u003C/javafx.version>\n",[53,11266,11267],{"class":55,"line":163},[53,11268,11269],{}," \u003Cjava.version>11\u003C/java.version>\n",[53,11271,11272],{"class":55,"line":186},[53,11273,11274],{}," \u003Cpi4j.version>1.1\u003C/pi4j.version>\n",[53,11276,11277],{"class":55,"line":221},[53,11278,11279],{}," \u003Cmaven.compiler.source>${java.version}\u003C/maven.compiler.source>\n",[53,11281,11282],{"class":55,"line":242},[53,11283,11284],{}," \u003Cmaven.compiler.target>${java.version}\u003C/maven.compiler.target>\n",[53,11286,11287],{"class":55,"line":273},[53,11288,11289],{}," \u003Cmaven.compiler.release>${java.version}\u003C/maven.compiler.release>\n",[53,11291,11292],{"class":55,"line":279},[53,11293,11294],{}," \u003C/properties>\n",[43,11296,11298],{"className":11245,"code":11297,"language":11247,"meta":48,"style":48}," \u003Cdependency>\n \u003CgroupId>org.openjfx\u003C/groupId>\n \u003CartifactId>javafx-controls\u003C/artifactId>\n \u003Cversion>${javafx.version}\u003C/version>\n \u003Cclassifier>linux\u003C/classifier>\n \u003C/dependency>\n \u003Cdependency>\n \u003CgroupId>org.openjfx\u003C/groupId>\n \u003CartifactId>javafx-fxml\u003C/artifactId>\n \u003Cversion>${javafx.version}\u003C/version>\n \u003C/dependency>\n \u003Cdependency>\n \u003CgroupId>org.openjfx\u003C/groupId>\n \u003CartifactId>javafx-graphics\u003C/artifactId>\n \u003Cversion>${javafx.version}\u003C/version>\n \u003Cclassifier>linux\u003C/classifier>\n \u003C/dependency>\n",[50,11299,11300,11305,11310,11315,11320,11325,11330,11334,11338,11343,11348,11352,11356,11361,11366,11370,11374],{"__ignoreMap":48},[53,11301,11302],{"class":55,"line":56},[53,11303,11304],{}," \u003Cdependency>\n",[53,11306,11307],{"class":55,"line":86},[53,11308,11309],{}," \u003CgroupId>org.openjfx\u003C/groupId>\n",[53,11311,11312],{"class":55,"line":126},[53,11313,11314],{}," \u003CartifactId>javafx-controls\u003C/artifactId>\n",[53,11316,11317],{"class":55,"line":163},[53,11318,11319],{}," \u003Cversion>${javafx.version}\u003C/version>\n",[53,11321,11322],{"class":55,"line":186},[53,11323,11324],{}," \u003Cclassifier>linux\u003C/classifier>\n",[53,11326,11327],{"class":55,"line":221},[53,11328,11329],{}," \u003C/dependency>\n",[53,11331,11332],{"class":55,"line":242},[53,11333,11304],{},[53,11335,11336],{"class":55,"line":273},[53,11337,11309],{},[53,11339,11340],{"class":55,"line":279},[53,11341,11342],{}," \u003CartifactId>javafx-fxml\u003C/artifactId>\n",[53,11344,11345],{"class":55,"line":496},[53,11346,11347],{}," \u003Cversion>${javafx.version}\u003C/version>\n",[53,11349,11350],{"class":55,"line":503},[53,11351,11329],{},[53,11353,11354],{"class":55,"line":509},[53,11355,11304],{},[53,11357,11358],{"class":55,"line":515},[53,11359,11360],{}," \u003CgroupId>org.openjfx\u003C/groupId>\n",[53,11362,11363],{"class":55,"line":521},[53,11364,11365],{}," \u003CartifactId>javafx-graphics\u003C/artifactId>\n",[53,11367,11368],{"class":55,"line":527},[53,11369,11319],{},[53,11371,11372],{"class":55,"line":533},[53,11373,11324],{},[53,11375,11376],{"class":55,"line":539},[53,11377,11329],{},[3469,11379,11381],{"id":11380},"pi4j","Pi4J",[18,11383,11384],{},"So, the JavaFX part was sorted out e.g. no more build issues for JavaFX controls. 🙂 Next one was the Pi4J library. This\none is needed to make the GPIO connector of the Raspberry Pi usable in your Java code.",[43,11386,11388],{"className":11245,"code":11387,"language":11247,"meta":48,"style":48}," \u003Cdependency>\n \u003CgroupId>com.pi4j\u003C/groupId>\n \u003CartifactId>pi4j-core\u003C/artifactId>\n \u003Cversion>${pi4j.version}\u003C/version>\n \u003C/dependency>\n \u003Cdependency>\n \u003CgroupId>com.pi4j\u003C/groupId>\n \u003CartifactId>pi4j-device\u003C/artifactId>\n \u003Cversion>${pi4j.version}\u003C/version>\n \u003C/dependency>\n",[50,11389,11390,11394,11399,11404,11409,11413,11417,11421,11426,11430],{"__ignoreMap":48},[53,11391,11392],{"class":55,"line":56},[53,11393,11304],{},[53,11395,11396],{"class":55,"line":86},[53,11397,11398],{}," \u003CgroupId>com.pi4j\u003C/groupId>\n",[53,11400,11401],{"class":55,"line":126},[53,11402,11403],{}," \u003CartifactId>pi4j-core\u003C/artifactId>\n",[53,11405,11406],{"class":55,"line":163},[53,11407,11408],{}," \u003Cversion>${pi4j.version}\u003C/version>\n",[53,11410,11411],{"class":55,"line":186},[53,11412,11329],{},[53,11414,11415],{"class":55,"line":221},[53,11416,11304],{},[53,11418,11419],{"class":55,"line":242},[53,11420,11398],{},[53,11422,11423],{"class":55,"line":273},[53,11424,11425],{}," \u003CartifactId>pi4j-device\u003C/artifactId>\n",[53,11427,11428],{"class":55,"line":279},[53,11429,11408],{},[53,11431,11432],{"class":55,"line":496},[53,11433,11329],{},[18,11435,11436,11437,11440],{},"Once the Pi4J dependency was added I was able to start the game using the Maven JavaFX plugin: ",[50,11438,11439],{},"mvn javafx:run",". The\ngame started and I was enthusiastic. Famous last words: “Now I need to check out how this runs on my Raspberry Pi..”",[3469,11442,11444],{"id":11443},"write-once-run-everywhere","Write once run everywhere.. 😉",[18,11446,11447],{},"For development speed and overall comfort reasons I had switched from the Raspberry Pi to my Linux desktop in the\nmeantime. My naive self was still narrating the early Java slogan “write once write everywhere”. However, once I tried\nthe latest version of the code on the Raspberry Pi it failed miserably at run time. Surprise, surprise: most of the code\nin the used libraries is platform dependent.",[18,11449,11450,11451,11454],{},"On my Linux box I did not realize this since the OpenJFX Maven plugin managed the platform aspects of JavaFX and the\nPi4J code was always encapsulated by ",[50,11452,11453],{},"PiSystem.isPiUnix",". This code was just not run on my Linux desktop. 🙂",[18,11456,11457],{},"On the Raspberry Pi however, I got something like",[43,11459,11463],{"className":11460,"code":11461,"language":11462,"meta":48,"style":48},"language-plaintext shiki shiki-themes github-light github-dark","Unable to determine hardware version. I see: Hardware : BCM2835 - expecting BCM2708 or BCM2709.\n","plaintext",[50,11464,11465],{"__ignoreMap":48},[53,11466,11467],{"class":55,"line":56},[53,11468,11461],{},[18,11470,11471,11472,11476,11477,986],{},"So somehow there was some trouble loading the right native libraries for Pi4J. Of course I was not alone with this\nerror: ",[585,11473,11474],{"href":11474,"rel":11475},"https://github.com/Pi4J/pi4j/issues/349",[589],". And the solution I found after some time of research looked simple.\nJust add this system property to the start of your Java program: ",[50,11478,11479],{},"-Dpi4j.linking=dynamic",[18,11481,11482],{},"However, just add a system property to startup initiated by a Maven plugin is not a trivial thing at all. Since a new\nJVM is forked from the initial Maven call all parameters that you hand over to the Maven call are lost for the JavaFX\napplication. At least I did not find a solution for this.",[3469,11484,11486],{"id":11485},"maven-shade-plugin-and-fat-jars-to-the-rescue","Maven shade plugin and fat jars to the rescue!",[18,11488,11489,11490,11493],{},"After I read the relevant parts of the code of the Open JFX Maven plugin I found no way to specify system properties for\nthe started JavaFX application and gabe up on this approach. In the end there must be a way to produce a jar file\nsuitable for application shipment. I don’t start my IntelliJ Idea (yes, it’s built with JavaFX) with ",[50,11491,11492],{},"mvn javafx:start",".\n😉",[18,11495,11496,11497,11500],{},"I used the Maven shade plugin to create a fat jar of the application and all of it’s dependencies. In order to package\nto right version for the platform-dependent OpenJFX parts I needed to add a ",[50,11498,11499],{},"\u003Cclassifier>linux\u003C/classifier>"," to the\nrelevant dependencies.",[43,11502,11504],{"className":11245,"code":11503,"language":11247,"meta":48,"style":48}," \u003Cplugin>\n \u003CgroupId>org.apache.maven.plugins\u003C/groupId>\n \u003CartifactId>maven-shade-plugin\u003C/artifactId>\n \u003Cversion>3.2.0\u003C/version>\n \u003Cexecutions>\n \u003Cexecution>\n \u003Cphase>package\u003C/phase>\n \u003Cgoals>\n \u003Cgoal>shade\u003C/goal>\n \u003C/goals>\n \u003Cconfiguration>\n \u003CshadedArtifactAttached>true\u003C/shadedArtifactAttached>\n \u003CshadedClassifierName>project-classifier\u003C/shadedClassifierName>\n \u003CoutputFile>shade\\${project.artifactId}.jar\u003C/outputFile>\n \u003Ctransformers>\n \u003Ctransformer implementation=\n \"org.apache.maven.plugins.shade.resource.ManifestResourceTransformer\">\n \u003CmainClass>sample.Main\u003C/mainClass>\n \u003C/transformer>\n \u003C/transformers>\n \u003C/configuration>\n \u003C/execution>\n \u003C/executions>\n \u003C/plugin>\n",[50,11505,11506,11511,11516,11521,11526,11531,11536,11541,11546,11551,11556,11561,11566,11571,11576,11581,11586,11591,11596,11601,11606,11611,11616,11621],{"__ignoreMap":48},[53,11507,11508],{"class":55,"line":56},[53,11509,11510],{}," \u003Cplugin>\n",[53,11512,11513],{"class":55,"line":86},[53,11514,11515],{}," \u003CgroupId>org.apache.maven.plugins\u003C/groupId>\n",[53,11517,11518],{"class":55,"line":126},[53,11519,11520],{}," \u003CartifactId>maven-shade-plugin\u003C/artifactId>\n",[53,11522,11523],{"class":55,"line":163},[53,11524,11525],{}," \u003Cversion>3.2.0\u003C/version>\n",[53,11527,11528],{"class":55,"line":186},[53,11529,11530],{}," \u003Cexecutions>\n",[53,11532,11533],{"class":55,"line":221},[53,11534,11535],{}," \u003Cexecution>\n",[53,11537,11538],{"class":55,"line":242},[53,11539,11540],{}," \u003Cphase>package\u003C/phase>\n",[53,11542,11543],{"class":55,"line":273},[53,11544,11545],{}," \u003Cgoals>\n",[53,11547,11548],{"class":55,"line":279},[53,11549,11550],{}," \u003Cgoal>shade\u003C/goal>\n",[53,11552,11553],{"class":55,"line":496},[53,11554,11555],{}," \u003C/goals>\n",[53,11557,11558],{"class":55,"line":503},[53,11559,11560],{}," \u003Cconfiguration>\n",[53,11562,11563],{"class":55,"line":509},[53,11564,11565],{}," \u003CshadedArtifactAttached>true\u003C/shadedArtifactAttached>\n",[53,11567,11568],{"class":55,"line":515},[53,11569,11570],{}," \u003CshadedClassifierName>project-classifier\u003C/shadedClassifierName>\n",[53,11572,11573],{"class":55,"line":521},[53,11574,11575],{}," \u003CoutputFile>shade\\${project.artifactId}.jar\u003C/outputFile>\n",[53,11577,11578],{"class":55,"line":527},[53,11579,11580],{}," \u003Ctransformers>\n",[53,11582,11583],{"class":55,"line":533},[53,11584,11585],{}," \u003Ctransformer implementation=\n",[53,11587,11588],{"class":55,"line":539},[53,11589,11590],{}," \"org.apache.maven.plugins.shade.resource.ManifestResourceTransformer\">\n",[53,11592,11593],{"class":55,"line":545},[53,11594,11595],{}," \u003CmainClass>sample.Main\u003C/mainClass>\n",[53,11597,11598],{"class":55,"line":4941},[53,11599,11600],{}," \u003C/transformer>\n",[53,11602,11603],{"class":55,"line":4949},[53,11604,11605],{}," \u003C/transformers>\n",[53,11607,11608],{"class":55,"line":4957},[53,11609,11610],{}," \u003C/configuration>\n",[53,11612,11613],{"class":55,"line":4966},[53,11614,11615],{}," \u003C/execution>\n",[53,11617,11618],{"class":55,"line":4973},[53,11619,11620],{}," \u003C/executions>\n",[53,11622,11623],{"class":55,"line":4978},[53,11624,11625],{}," \u003C/plugin>\n",[18,11627,11628,11629,11634],{},"The resulting fat jar could then be started via\na",[585,11630,11633],{"href":11631,"rel":11632},"https://github.com/Devoxx4KidsDE/PokeTime/blob/master/start",[589],"start script","that included the right parameter for the\nPi4J system property. Finally the PokeTime application started on my Raspberry Pi 2b! 😀",[18,11636,11637],{},[1794,11638],{"alt":48,"src":11639},"https://media.synyx.de/uploads/2019/11/d4k_poketime.jpeg",[3469,11641,11643],{"id":11642},"fun-at-the-devoxx4kids","Fun at the Devoxx4Kids",[18,11645,11646],{},"In the end we had a successful PokeTime workshop at the October 2019 Devoxx4Kids event in Karlsruhe. A huge thank you\ngoes out to Cassandra and Stephen Chin for the initial application and concept as well as to Patrick Helm (my colleague\nfrom synyx) who led the workshop efforts including hardware order, assembly and production of the poke balls! 🙂",[18,11648,11649],{},"Also a huge thank you for all the other organziers and mentors of the Karlsruhe Devoxx4Kids events!",[607,11651,989],{},{"title":48,"searchDepth":86,"depth":86,"links":11653},[11654,11655,11656,11657,11658,11659],{"id":11225,"depth":86,"text":11226},{"id":11235,"depth":86,"text":11236},{"id":11380,"depth":86,"text":11381},{"id":11443,"depth":86,"text":11444},{"id":11485,"depth":86,"text":11486},{"id":11642,"depth":86,"text":11643},[614],"2019-11-08T11:40:03","In the planning phase for our last Devoxx4Kids Event in Karlsruhe we decided to pick up the awesome PokeTime workshop by\\nCassandra and Stephen Chin. I was a mentor for this workshop at JCrete4Kids this year and really liked the mixture of\\nhardware tinkering, building software snippets and playing the finished game in the end.","https://synyx.de/blog/poketime-gets-a-makeover-at-the-code-clininc/",{},"/blog/poketime-gets-a-makeover-at-the-code-clininc",{"title":11206,"description":11216},"poketime-gets-a-makeover-at-the-code-clininc","blog/poketime-gets-a-makeover-at-the-code-clininc",[],"Migrating educational code for Raspberry Pis from Ant and Oracle JDK 8 to Maven and OpenJDK 11","kWisy25Jq2gOc67o_dGtBB4q68Ozcd8T4pqYI6IWIJw",{"id":11673,"title":11674,"author":11675,"body":11676,"category":11831,"date":11832,"description":11833,"extension":617,"link":11834,"meta":11835,"navigation":499,"path":11836,"seo":11837,"slug":11680,"stem":11839,"tags":11840,"teaser":11841,"__hash__":11842},"blog/blog/code-with-attitude-part-2.md","Code with Attitude – Part 2",[3920],{"type":11,"value":11677,"toc":11824},[11678,11681,11690,11694,11697,11700,11703,11753,11760,11765,11769,11772,11775,11779,11782,11785,11788,11792,11795,11798,11801,11804,11807,11811,11814,11817],[14,11679,11674],{"id":11680},"code-with-attitude-part-2",[18,11682,11683,11684,11689],{},"After talking about the attitude concerning values and synyx’ new claim “Code with\nAttitude” ",[585,11685,11688],{"href":11686,"rel":11687},"https://synyx.de/blog/2018-11-16-code-with-attitude-part-1",[589],"some time ago,"," today I want to focus on the\n“attitude” towards the people you interact with.",[3469,11691,11693],{"id":11692},"part-2-people-what-people","Part 2 – People? What people?",[18,11695,11696],{},"When I was a student at the University of Applied Sciences in Karlsruhe my imagination of my future job was a little\nhazy as my mind still exclusively revolved around football, beer and Counter-Strike. “Real life” was still pretty far\naway. The one thing I was pretty sure of was that being a developer is not something “people oriented” like psychology\nor being a nurse. After graduation I was to be placed in a small office at a pretty desk with a nice computer and do the\nsweet hacking all day long.",[18,11698,11699],{},"Oh boy was I wrong. Years of project work in software development taught me that as a developer you have to deal with\npeople of different kinds every hour of every day.",[18,11701,11702],{},"You have to…",[577,11704,11705,11708,11711,11714,11717,11720,11723,11726,11729,11732,11735,11738,11741,11744,11747,11750],{},[580,11706,11707],{},"pair with your teammates",[580,11709,11710],{},"engineer requirements with your product owner",[580,11712,11713],{},"keep your janitor in a good mood",[580,11715,11716],{},"work out solutions with your team",[580,11718,11719],{},"coach students",[580,11721,11722],{},"get coached by your scrum master",[580,11724,11725],{},"deal with your boss",[580,11727,11728],{},"deal with your bosses’ boss",[580,11730,11731],{},"kiss the sysadmin’s ass",[580,11733,11734],{},"negotiate integration with other teams",[580,11736,11737],{},"chat with the coffee machine maintainer",[580,11739,11740],{},"collaborate with external suppliers",[580,11742,11743],{},"talk to the users about their needs",[580,11745,11746],{},"be creative with designers",[580,11748,11749],{},"interact with the developer community through conferences, user groups, CoPs, open source contributions, Twitter,\nmailing lists, Stackoverflow…",[580,11751,11752],{},"… and many more",[18,11754,11755,11756,11759],{},"Every single one of these humans contributes to the success of your work and this is probably only a small subset of the\ncomplete list of relevant people and interactions. So if your plan is to hide in your nerdhole and just code for\nyourself then you may still be a good coder but you are wasting a lot of potential. The interaction with other humans is\none of the main parts of a software developer’s job and it is not recommendable to half-ass this. ",[27,11757,11758],{},"Software\ndevelopment is a people oriented job!"," This realization is incorporated into our company culture and the way we work at\nsynyx. There are so many aspects of this, of having a “healthy” attitude towards your peers that I have to confine\nmyself on some of the most important ones:",[18,11761,11762],{},[1794,11763],{"alt":48,"src":11764},"https://media.synyx.de/uploads/2019/09/sticker_code-1024x768-768x576.jpg",[3469,11766,11768],{"id":11767},"respect-and-appreciation","Respect and Appreciation",[18,11770,11771],{},"One of the most important things at synyx is that everybody is on equal footing, which creates the most comfortable\nworking atmosphere. Every student, the janitor, every programmer, the cleaning lady, the office girls, our three bosses\nare part of our workforce and are treated with equal respect by each other.",[18,11773,11774],{},"We transfer the same mindset to our project work. A senior developer is not too valuable to do some dirty work and clean\nup hundreds of unit tests or empty the dishwasher from time to time. Students and juniors are integrated into actual\nproject work, if possible. When working with our clients we expect the same thing. To be able to talk openly and on\nequal terms with them without political mumbo-jumbo. To be treated as coworkers and not as freelance codemonkeys or\nexternal consultants from the ivory tower. This is the way we can contribute best to our client’s success. And in my\nopinion it is the only way self-organised, agile teams can really work.",[3469,11776,11778],{"id":11777},"openness-and-honesty","Openness and Honesty",[18,11780,11781],{},"Openness to direct communication is vital. You can help your colleagues best when they have the feeling that they can\nalways talk to you and ask for your help, ideally face to face. Always try to solve tricky problems together and seize\nopportunities to learn from each other. Teams with this mindset are fastest in problem solving and have the best\nknowledge distribution between their members.",[18,11783,11784],{},"In the other direction – don’t build walls. Don’t make yourself inaccessible with always-on-headphones, physical\ndistance or walls, narrow-minded choice of communication channels or artificial bureaucracy. I’ve known teams who only\never talked about requirements when you filled out a 9 page word document for them. Other colleagues put themselves out\nof the game by only accepting communication by email. Of course it is important to maintain focus for yourself but\nhindering communication only leads to your colleagues avoiding you.",[18,11786,11787],{},"Provide honest, regular feedback to your coworkers. Emphasizing their qualities and complimenting their work is equally\nimportant to pointing out problems. Positive feedback and downright thankfulness are a proven way to boost morale and\nwork performance. On the other side – please, please don’t procrastinate uncomfortable conversations! This only makes\nthings worse! I was witness to multiple situations in different teams where the long avoided elephant in the room\nsuddenly blew up and completely destroyed the morale and sometimes the ability to work toghether. Unspoken conflicts are\na project risk!",[3469,11789,11791],{"id":11790},"attitude-towards-yourself","Attitude towards yourself",[18,11793,11794],{},"Essential for sustainable success is a healthy self-assessment. No matter how much experience you have, you always have\nto weigh in the possibility that you are flawed, you can make mistakes, you are not all-knowing and you make wrong\ndecisions. In everything you do you should take this into account.",[18,11796,11797],{},"Don’t make important decisions by yourself. Always let one or more colleagues challenge your ideas. This is no matter of\nstrength or weakness, this is caring about the quality of the result. For example there is no such thing as the perfect\nsoftware architect who can think up everything on his own and always create the best possible solution. Architecture –\nand most other important decisions – should always be a team effort.",[18,11799,11800],{},"Question yourself whenever possible. Is this still the right way to do this? Am I rushing this? What are the downsides\nof my idea? Do I know enough to make this decision? Who could know this better than me? Is this the right way or the\nlazy way to do it? Can I learn something new here? Should I do this alone? What are the implications of my decision? Did\nI handle this situation correctly? How can I improve the way I work? One basic requirement for self improvement is being\nself-critical.",[18,11802,11803],{},"Don’t make yourself indispensable. There are companies out there where this might provide you with some kind of twisted\njob security but it neither makes you a likable colleague nor does it make you a good developer. Share your knowledge!\nEnable your team to do everything you build and learn by themselves! Create comprehensible documentation where\nnecessary. Make everything as intuitively understandable as possible. Use methods like common code ownership, pair\nprogramming, daily standups! Always take care of the truck factor! Everything you can do should also be possible to do\nfor at least two other persons, ideally your whole team. You have done a good job when you can leave your team without\nhaving to worry that anything goes downhill afterwards.",[18,11805,11806],{},"All this does not mean that it is forbidden to be self-confident. Be aware and proud of your capabilities and\nachievements! Sharing them is essential. Do good things and talk about them!",[3469,11808,11810],{"id":11809},"thats-it","Thats it!",[18,11812,11813],{},"Being a good developer requires the willingness to interact with the people around you. All of the things mentioned\nabove don’t require you being loud or an extrovert of some kind. The only prerequisites are an open mindset and active\ncommunication, which is something everybody can achieve. This is an integral part of “Code with Attitude” and something\nthat we actively encourage to the benefit of the people working at synyx and at our clients. Is it successful? Yes! And\nit feels great!",[18,11815,11816],{},"Twitter: @indyarni",[18,11818,11819,11820],{},"Mail: ",[585,11821,11823],{"href":11822},"mailto:franke@synyx.de","franke@synyx.de",{"title":48,"searchDepth":86,"depth":86,"links":11825},[11826,11827,11828,11829,11830],{"id":11692,"depth":86,"text":11693},{"id":11767,"depth":86,"text":11768},{"id":11777,"depth":86,"text":11778},{"id":11790,"depth":86,"text":11791},{"id":11809,"depth":86,"text":11810},[614],"2019-10-22T09:44:59","After talking about the attitude concerning values and synyx’ new claim “Code with\\nAttitude” some time ago, today I want to focus on the\\n“attitude” towards the people you interact with.","https://synyx.de/blog/code-with-attitude-part-2/",{},"/blog/code-with-attitude-part-2",{"title":11674,"description":11838},"After talking about the attitude concerning values and synyx’ new claim “Code with\nAttitude” some time ago, today I want to focus on the\n“attitude” towards the people you interact with.","blog/code-with-attitude-part-2",[],"After talking about the attitude concerning values and synyx' new claim 'Code with Attitude' some time ago, today I will focus on the 'attitude' towards the people you interact with.","WkzNfLgxLpnIRap5881FAy2ze9gn15rnA5bNIUxsVwU",{"id":11844,"title":11845,"author":11846,"body":11848,"category":11901,"date":11902,"description":11903,"extension":617,"link":11904,"meta":11905,"navigation":499,"path":11906,"seo":11907,"slug":11852,"stem":11908,"tags":11909,"teaser":11910,"__hash__":11911},"blog/blog/limit-of-active-devices-during-android-device-tests.md","Limit of active devices during Android device tests",[11847],"ullinger",{"type":11,"value":11849,"toc":11899},[11850,11853,11856,11859,11864,11867,11870,11882,11885,11890,11893,11896],[14,11851,11845],{"id":11852},"limit-of-active-devices-during-android-device-tests",[18,11854,11855],{},"Some time ago we decided to expand our pool of Android devices. These are used in our Continuous Integration (CI)\npipeline. But running our tests we noticed a peculiar behaviour: Only 3 devices would execute the test suite while the\nrest would wait. As soon as a device finished one of the waiting devices would proceed.",[18,11857,11858],{},"As a result our device test would run roughly twice as long. We value fast build times and rapid feedback while still\nrunning large test suites. We had to fix this problem.",[18,11860,11861],{},[1794,11862],{"alt":48,"src":11863},"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0ODgiIGhlaWdodD0iMzY3IiB2aWV3Qm94PSItMC41IC0wLjUgNDg4IDM2NyIgY29udGVudD0iJmx0O214ZmlsZSBob3N0PSZxdW90O3d3dy5kcmF3LmlvJnF1b3Q7IG1vZGlmaWVkPSZxdW90OzIwMTktMTAtMDhUMTI6MDI6MjcuNDcxWiZxdW90OyBhZ2VudD0mcXVvdDtNb3ppbGxhLzUuMCAoWDExOyBVYnVudHU7IExpbnV4IHg4Nl82NDsgcnY6NjkuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC82OS4wJnF1b3Q7IGV0YWc9JnF1b3Q7LXFQRHRJbnhRY29aVjRndkZhMTgmcXVvdDsgdmVyc2lvbj0mcXVvdDsxMi4wLjImcXVvdDsgdHlwZT0mcXVvdDtkZXZpY2UmcXVvdDsgcGFnZXM9JnF1b3Q7MSZxdW90OyZndDsmbHQ7ZGlhZ3JhbSBpZD0mcXVvdDtVeDVoZTdQWmJacEtlNEU0NG9KViZxdW90OyBuYW1lPSZxdW90O1BhZ2UtMSZxdW90OyZndDs3WnBmZDlvZ0dNWS9qWmYxR0Vnd3VXeHR0OTEwcCtkMDUyeTcybUVCRGFjeE9NUWErK2xIRFBrTFZydlZtRTF6b3p3aEpMeS9Gd0tQRHVCa25uNFVlQkhkYzBMakFSaVJkQUJ2QndBNDBQWFVSNlpzY3NWMy9WeVlDVVowcFVwNFpDOVVpeU90cmhpaHkwWkZ5WGtzMmFJcGhqeEphQ2diR2hhQ3I1dlZwanh1M25XQlo5UVFIa01jbStwWFJtU2tWUWNGMVlsUGxNMGlmV3NmalBNVGMxeFUxajFaUnBqd2RVMkNkd000RVp6TC9OczhuZEE0QzE0UmwveTZEenZPbGc4bWFDSVB1Y0JMVi9mcmE3eGVmWGJKeS9yWDk5a1BNcjRDZVN2UE9GN3BEdXVIbFpzaUFrc3ArRlBaZVdjQWI4cWVqRlNCNEdWRWlTN2dtTTBTOVQxVXowU0ZFaUk1ajZ1ckZsbVQ4M1NXcGNwd3pzT24xV0s0TGJCd09SUml5KzlHNkNUSTJzdnZQZUV4Rjl1SGdhUHRvYzVNV1J6WDlPbjJVTHJ1RHhXU3Bqc0Q1WlRoVjNsTCtaeEtzVkZWOUFXQkJxWXpGdW5pdXNMditscUxhdVJoVVJIcmxKdVZMVmRVMUJjTjVnMlFvQVVTM01HcGlBbExJaXFZYkVXcVVsWFlDVk1CTWMrY2t2ZVVWMCtrK29pMlIxZFVBUnFpeHVHYmtCRm8xWEdQeEh4c01QOUNsMUlwTktYaFNqS2VYQkxnYlFtZ0pvOTlHUUJkeTdnKzJyQXV1ckIvOHIwd1BXeFFPOEJrNnRpWU92Qm9VSDBEcW5PeVZ5cE93aWdMZTZjSTJqUGtIODJ6MEJuQ3hnR085VzQxVjBDbld3S2RncGZuOWh3UU1nRHRXdnY4bjRCOHJ4bHBwOSs4aXVtMnhzczlKMTdBYWRQb09TLzMwRlZJSDdhQUNVK291ZnZEbUpEMzJ2MEJOeGo2bHZGV0RFYzRHbnJtSW1NTW03aGN5NXJEYTFGSHh5THFYWWcyaUhxdEdSVTVOb1RXZGVLeEdIbm1MSGxoVkdjVVFKTVE2cFRRd2J1elBoQlNPTWc0K0dtM3hpZ0t3L2ZCQk5zdk8yQVpTRjZubUE1d01HbENyak1ydU1ya2tvelRCS0hDSURiZnNnZ1BnMkJjQ045endZZUZjSnRxQ0hscFV5ODlxQjIzNmxxR09CZFRKdk1XUnlPZ3kxbURWMHB3Q3FGcU1DdHNhb1YyYzNubktERmM2eFpDRlFDK0VpRTlJTU1sRmpNcTk3NVF6S1NvUWJjeEx6UkJZeXpaYy9PQmJZbWc3L0RBV1NKZk1lNWFXL2U4bi9vaVVQTy9XKzJVRTd4dXlQTmFEZVZ4TUJyYXBtWFo2Ny9JVk5NWjJER2hYT3llQTVmYUZndXZZN3ZIQ3d5b1oyWDNHSWE0K2RydTFXNEhtZXV1czdKN1FOQnp1d2VaeTY2enNuc2dhTms5UGNkbExyL095dTJCSHZxMzVqL2JiOG05M2RXYzNPMEI0OTY3UGVqaTM3M3FKTURSNmQwZWRISGtYbWRrZWMxMTYvWWc4MWVtSGhQcXlPMHhNQ0hYTnBRNjlYdVF1WXUrcGM4c3BFdURsK3E0YkVWK1g1NXJ5YUNYaFpHRk9MN1dKK2FNa093Mk4rdUlTZnE0d0Z1alphMEladHo0S2lGbEpyd0RoN1p6NGR0bU5OdUVCdDYrN1ZYRjZpK0p1ZlZSL2JFVDN2MEcmbHQ7L2RpYWdyYW0mZ3Q7Jmx0Oy9teGZpbGUmZ3Q7Ij48ZGVmcz48ZmlsdGVyIGlkPSJkcm9wU2hhZG93Ij48ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJjZUFscGhhIiBzdGREZXZpYXRpb249IjEuNyIgcmVzdWx0PSJibHVyIi8+PGZlT2Zmc2V0IGluPSJibHVyIiBkeD0iMyIgZHk9IjMiIHJlc3VsdD0ib2Zmc2V0Qmx1ciIvPjxmZUZsb29kIGZsb29kLWNvbG9yPSIjM0Q0NTc0IiBmbG9vZC1vcGFjaXR5PSIwLjQiIHJlc3VsdD0ib2Zmc2V0Q29sb3IiLz48ZmVDb21wb3NpdGUgaW49Im9mZnNldENvbG9yIiBpbjI9Im9mZnNldEJsdXIiIG9wZXJhdG9yPSJpbiIgcmVzdWx0PSJvZmZzZXRCbHVyIi8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0ib2Zmc2V0Qmx1ciIvPjwvZmlsdGVyPjwvZGVmcz48ZyBmaWx0ZXI9InVybCgjZHJvcFNoYWRvdykiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSI0ODAiIGhlaWdodD0iMzYwIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjI2LjY3IiBoZWlnaHQ9IjYyLjY3IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNy41LDI0LjUpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlOyIgcG9pbnRlci1ldmVudHM9ImFsbCIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEyIiByZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgY29sb3I6IHJnYigxMDIsIDEwMiwgMTAyKTsgbGluZS1oZWlnaHQ6IDEuMjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdDsiPiM8L2Rpdj48L2Rpdj48L2ZvcmVpZ25PYmplY3Q+PHRleHQgeD0iNSIgeT0iMTIiIGZpbGw9IiM2NjY2NjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSI+IzwvdGV4dD48L3N3aXRjaD48L2c+PHJlY3QgeD0iMTQwIiB5PSIwIiB3aWR0aD0iMzQwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjY0LjUsMjIuNSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3Qgc3R5bGU9Im92ZXJmbG93OnZpc2libGU7IiBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iODkiIGhlaWdodD0iMTIiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDEwMiwgMTAyLCAxMDIpOyBsaW5lLWhlaWdodDogMS4yOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7dGV4dC1hbGlnbjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjppbmhlcml0OyI+VGVzdCBleGVjdXRpb248L2Rpdj48L2Rpdj48L2ZvcmVpZ25PYmplY3Q+PHRleHQgeD0iNDUiIHk9IjEyIiBmaWxsPSIjNjY2NjY2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPlRlc3QgZXhlY3V0aW9uPC90ZXh0Pjwvc3dpdGNoPjwvZz48cmVjdCB4PSIwIiB5PSI2MCIgd2lkdGg9IjE0MCIgaGVpZ2h0PSIxMzAiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjUsNzEuNSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3Qgc3R5bGU9Im92ZXJmbG93OnZpc2libGU7IiBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iOCIgaGVpZ2h0PSIxMiIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMTAyLCAxMDIsIDEwMik7IGxpbmUtaGVpZ2h0OiAxLjI7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdoaXRlLXNwYWNlOiBub3dyYXA7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LWFsaWduOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7Ij4xPC9kaXY+PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjQiIHk9IjEyIiBmaWxsPSIjNjY2NjY2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPjE8L3RleHQ+PC9zd2l0Y2g+PC9nPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguNSwxMDIuNSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3Qgc3R5bGU9Im92ZXJmbG93OnZpc2libGU7IiBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iOCIgaGVpZ2h0PSIxMiIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMTAyLCAxMDIsIDEwMik7IGxpbmUtaGVpZ2h0OiAxLjI7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdoaXRlLXNwYWNlOiBub3dyYXA7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LWFsaWduOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7Ij4yPC9kaXY+PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjQiIHk9IjEyIiBmaWxsPSIjNjY2NjY2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPjI8L3RleHQ+PC9zd2l0Y2g+PC9nPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguNSwxMzMuNSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3Qgc3R5bGU9Im92ZXJmbG93OnZpc2libGU7IiBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iOCIgaGVpZ2h0PSIxMiIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMTAyLCAxMDIsIDEwMik7IGxpbmUtaGVpZ2h0OiAxLjI7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdoaXRlLXNwYWNlOiBub3dyYXA7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LWFsaWduOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7Ij4zPC9kaXY+PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjQiIHk9IjEyIiBmaWxsPSIjNjY2NjY2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPjM8L3RleHQ+PC9zd2l0Y2g+PC9nPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguNSwxNjUuNSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3Qgc3R5bGU9Im92ZXJmbG93OnZpc2libGU7IiBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iOCIgaGVpZ2h0PSIxMiIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMTAyLCAxMDIsIDEwMik7IGxpbmUtaGVpZ2h0OiAxLjI7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdoaXRlLXNwYWNlOiBub3dyYXA7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LWFsaWduOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7Ij40PC9kaXY+PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjQiIHk9IjEyIiBmaWxsPSIjNjY2NjY2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPjQ8L3RleHQ+PC9zd2l0Y2g+PC9nPjxyZWN0IHg9IjE1OS44MyIgeT0iNzAuNSIgd2lkdGg9IjE3My4zMyIgaGVpZ2h0PSIxNS42NyIgZmlsbD0iI2FhZGRmZiIgc3Ryb2tlPSJub25lIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9IjE2MCIgeT0iMTAxLjUiIHdpZHRoPSIxNDAiIGhlaWdodD0iMTYiIGZpbGw9IiNhYWRkZmYiIHN0cm9rZT0ibm9uZSIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cmVjdCB4PSIxNjAiIHk9IjEzMyIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIxNiIgZmlsbD0iI2FhZGRmZiIgc3Ryb2tlPSJub25lIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9IjMwMCIgeT0iMTY1IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE2IiBmaWxsPSIjZmZlNmNjIiBzdHJva2U9IiNkNzliMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSAzMDAuMyAxNjQuODEgTCAyOTkuNTggMTE3LjIzIiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWRhc2hhcnJheT0iMyAzIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9IjAiIHk9IjIwMCIgd2lkdGg9IjE0MCIgaGVpZ2h0PSIxMzAiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjUsMjExLjUpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlOyIgcG9pbnRlci1ldmVudHM9ImFsbCIgd2lkdGg9IjgiIGhlaWdodD0iMTIiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDEwMiwgMTAyLCAxMDIpOyBsaW5lLWhlaWdodDogMS4yOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7dGV4dC1hbGlnbjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjppbmhlcml0OyI+MTwvZGl2PjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI0IiB5PSIxMiIgZmlsbD0iIzY2NjY2NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj4xPC90ZXh0Pjwvc3dpdGNoPjwvZz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjUsMjQyLjUpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlOyIgcG9pbnRlci1ldmVudHM9ImFsbCIgd2lkdGg9IjgiIGhlaWdodD0iMTIiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDEwMiwgMTAyLCAxMDIpOyBsaW5lLWhlaWdodDogMS4yOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7dGV4dC1hbGlnbjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjppbmhlcml0OyI+MjwvZGl2PjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI0IiB5PSIxMiIgZmlsbD0iIzY2NjY2NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj4yPC90ZXh0Pjwvc3dpdGNoPjwvZz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjUsMjczLjUpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlOyIgcG9pbnRlci1ldmVudHM9ImFsbCIgd2lkdGg9IjgiIGhlaWdodD0iMTIiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDEwMiwgMTAyLCAxMDIpOyBsaW5lLWhlaWdodDogMS4yOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7dGV4dC1hbGlnbjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjppbmhlcml0OyI+MzwvZGl2PjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI0IiB5PSIxMiIgZmlsbD0iIzY2NjY2NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj4zPC90ZXh0Pjwvc3dpdGNoPjwvZz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjUsMzA1LjUpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlOyIgcG9pbnRlci1ldmVudHM9ImFsbCIgd2lkdGg9IjgiIGhlaWdodD0iMTIiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDEwMiwgMTAyLCAxMDIpOyBsaW5lLWhlaWdodDogMS4yOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7dGV4dC1hbGlnbjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjppbmhlcml0OyI+NDwvZGl2PjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI0IiB5PSIxMiIgZmlsbD0iIzY2NjY2NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj40PC90ZXh0Pjwvc3dpdGNoPjwvZz48cmVjdCB4PSIxNTkuODMiIHk9IjIxMC41IiB3aWR0aD0iMTczLjMzIiBoZWlnaHQ9IjE1LjY3IiBmaWxsPSIjYWFkZGZmIiBzdHJva2U9Im5vbmUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iMTYwIiB5PSIyNDEuNSIgd2lkdGg9IjE0MCIgaGVpZ2h0PSIxNiIgZmlsbD0iI2FhZGRmZiIgc3Ryb2tlPSJub25lIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9IjE2MCIgeT0iMjczIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjE2IiBmaWxsPSIjYWFkZGZmIiBzdHJva2U9Im5vbmUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iMTYwIiB5PSIzMDQuNSIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNiIgZmlsbD0iI2ZmZTZjYyIgc3Ryb2tlPSIjZDc5YjAwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ1LjUsMjUuNSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3Qgc3R5bGU9Im92ZXJmbG93OnZpc2libGU7IiBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iNDgiIGhlaWdodD0iMTIiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4yOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogNDlweDsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3ctd3JhcDogbm9ybWFsOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7dGV4dC1hbGlnbjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjppbmhlcml0O3doaXRlLXNwYWNlOm5vcm1hbDsiPkRldmljZXM8L2Rpdj48L2Rpdj48L2ZvcmVpZ25PYmplY3Q+PHRleHQgeD0iMjQiIHk9IjEyIiBmaWxsPSIjMDAwMDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPkRldmljZXM8L3RleHQ+PC9zd2l0Y2g+PC9nPjwvZz48L3N2Zz4=",[18,11865,11866],{},"Investigating every sensible gradle switch or task configuration we still were unsuccessful. Then, frustrated, we\ndecided to dig into the source code of the Google Android build tools project and understand just what was going on.",[18,11868,11869],{},"There, we realized that Google decided to use the Java Common Pool to trigger the device tests in parallel. This pool is\nconfigured to use n = CoreCount – 1 threads per default. This observation fit perfectly, as we were currently running\ndevice tests on a Dual Core with Hyperthreading (4 “virtual” cores).",[18,11871,11872,11873,11878,11879],{},"The default number of threads for\nthe ",[585,11874,11877],{"href":11875,"rel":11876},"https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html",[589],"Common Pool"," can be configured\nwith the JVM option ",[50,11880,11881],{},"java.util.concurrent.ForkJoinPool.common.parallelism",[18,11883,11884],{},"Gradle is triggered by our jenkins agent. We decided to “fix” our gradle installation by updating our installation-wide\ngradle-config:",[18,11886,11887],{},[27,11888,11889],{},"/var/lib/jenkins/.gradle/gradle.properties:",[18,11891,11892],{},"`#Allow more simultaneous device tests",[18,11894,11895],{},"systemProp.java.util.concurrent.ForkJoinPool.common.parallelism=10`",[18,11897,11898],{},"Because the main load of the test execution should be carried by the devices itself we expected no negative consequences\nin this scenario. And indeed, setting this option to a higher value did allow all device to test in parallel, saving us\nvaluable time.",{"title":48,"searchDepth":86,"depth":86,"links":11900},[],[613,5824,614,997],"2019-10-08T14:24:36","Some time ago we decided to expand our pool of Android devices. These are used in our Continuous Integration (CI)\\npipeline. But running our tests we noticed a peculiar behaviour: Only 3 devices would execute the test suite while the\\nrest would wait. As soon as a device finished one of the waiting devices would proceed.","https://synyx.de/blog/limit-of-active-devices-during-android-device-tests/",{},"/blog/limit-of-active-devices-during-android-device-tests",{"title":11845,"description":11855},"blog/limit-of-active-devices-during-android-device-tests",[],"Some time ago we decided to expand our pool of Android devices. These are used in our Continuous Integration (CI) pipeline. But running our tests we noticed a peculiar behaviour: Only 3 devices would execute the suite while the rest would wait. Then as soon as a device finished one of the waiting devices would proceed with the test suite.","y-Hh4822zLikheKy9i4ThKw_hAy-qX4soVfd6xPaMu4",{"id":11913,"title":11914,"author":11915,"body":11917,"category":12058,"date":12059,"description":12060,"extension":617,"link":12061,"meta":12062,"navigation":499,"path":12063,"seo":12064,"slug":11921,"stem":12066,"tags":12067,"teaser":12072,"__hash__":12073},"blog/blog/mein-erster-besuch-auf-dem-barcamp-pforzheim.md","Mein erster Besuch auf dem BarCamp Pforzheim",[11916],"buchloh",{"type":11,"value":11918,"toc":12048},[11919,11922,11931,11935,11942,11951,11955,11958,11961,11966,11971,11975,11978,11981,11985,11988,11991,11994,11997,12010,12014,12017,12021,12035,12039,12045],[14,11920,11914],{"id":11921},"mein-erster-besuch-auf-dem-barcamp-pforzheim",[18,11923,11924,11925,11930],{},"Die coolsten Erlebnisse entstehen bei mir meist aus einem spontanen Impuls heraus. Genauso ging es mir auch letzten\nSamstag, als ich mich plötzlich zum ersten Mal auf dem ",[585,11926,11929],{"href":11927,"rel":11928},"https://www.barcamp-pforzheim.de/",[589],"BarCamp Pforzheim","\nwiederfand, das auch dieses Jahr wieder von synyx gesponsert wurde. Den Freitag hatte ich leider verpasst, aber\noffensichtlich hat mir ein Tag auf dem BarCamp bereits ausgereicht, um mich auch heute noch wie berauscht zu fühlen von\nall den Eindrücken, spannenden Unterhaltungen und interessanten Menschen.",[3469,11932,11934],{"id":11933},"was-ist-so-ein-barcamp-eigentlich","Was ist so ein BarCamp eigentlich?",[18,11936,11937,11938,11941],{},"Ein BarCamp hat kein festes Programm, sondern lebt von den Teilnehmenden. Zeitslots und Räume geben zwar einen Rahmen\nvor, aber ",[27,11939,11940],{},"wie"," diese gefüllt werden, hängt völlig von den Teilnehmenden ab.",[18,11943,11944,11945,11950],{},"Nach einem leckeren Frühstück (“Endlich Kaffee!”) zum ersten Eingrooven in\nder ",[585,11946,11949],{"href":11947,"rel":11948},"https://www.emma-pf.de/",[589],"tollen Location"," ging es um 10 Uhr los mit einer kurzen Einführung inklusive\nVorstellungsrunde aller Teilnehmenden – es durften nur Name, drei Hashtags und Twitter-Handle genannt werden.",[649,11952,11954],{"id":11953},"und-dann-begann-auch-schon-die-sessionplanung-für-den-tag","Und dann begann auch schon die Sessionplanung für den Tag.",[18,11956,11957],{},"Wie man sich das vorstellen kann? Ganz viele motivierte Menschen springen plötzlich von ihren Plätzen auf und eilen zu\neiner wachsenden Schlange ans Mikrofon, um ihre Session-Idee vorzustellen. Bei genügend Handzeichen (“Wer hat Lust?”)\nwird die Session einem Zeitslot und Raum zugeordnet. Tatsächlich wurden so viele Vorschläge eingereicht, dass ein\nzusätzlicher Zeitslot, nämlich die Mittagspause, ebenfalls noch mit Sessions gefüllt wurde.",[18,11959,11960],{},"Eine Session muss übrigens kein Frontalvortrag sein, sondern kann auch ein Mitmach-Workshop oder einfach eine lockere\nAustauschrunde zu einer bestimmten Fragestellung sein.",[18,11962,11963],{},[1794,11964],{"alt":48,"src":11965},"https://media.synyx.de/uploads/2019/10/barcamppf19sessions-768x576.jpeg",[18,11967,11968],{},[1794,11969],{"alt":48,"src":11970},"https://media.synyx.de/uploads/2019/10/barcamppf19d4k-768x576.jpeg",[649,11972,11974],{"id":11973},"ganz-schön-schwer-sich-zu-entscheiden","Ganz schön schwer, sich zu entscheiden.",[18,11976,11977],{},"Man kann es sich vielleicht schon denken: Das dabei entstandene Programm war wirklich sehr vielseitig. Das bunt\ngemischte Publikum war es auch, was mir am BarCamp besonders gefallen hat. Menschen unterschiedlichen Alters und\nberuflicher Hintergründe – von Techie bis Physiotherapeut, Illustrator oder Goldschmied –genau diese bunte Mischung hat\nmeiner Meinung nach den spannenden Austausch ausgemacht.",[18,11979,11980],{},"Nicht nur die Vielseitigkeit der Themen, auch die Tatsache, dass zu jedem Zeitslot fünf(!) Sessions parallel liefen, hat\nes manchmal ganz schön schwer gemacht, sich zu entscheiden. Um eine Vorstellung zu bekommen, was für Sessions so geboten\nwurden, hier ein kleiner Einblick in die Sessions, die ich besucht habe.",[649,11982,11984],{"id":11983},"eine-session-jagt-die-nächste","Eine Session jagt die nächste.",[18,11986,11987],{},"Die erste Session, an der ich teilnahm, drehte sich um das Thema “Alphatiere und artgerechte Mitarbeiterhaltung”, in der\nsich über die Zusammenarbeit zwischen Alphatieren und der Generation Y ausgetauscht wurde. Danach folgte eine ruhige,\nfast meditative Phase der Selbstreflexion in der Session “Dein Leben in einem kurzen Satz mit dem\nInspirationsstatement”, die noch immer in mir nachwirkt.",[18,11989,11990],{},"Sehr gerne wäre ich im Mittagspause-Slot in die Session “Agile Family”, bei der es darum ging, wie ein Kanban-Board\nsich positiv auf den Haussegen auswirken kann, aber mein Bauch knurrte leider zu sehr. Also hieß es für mich erst\neinmal: Essen fassen! Trotz leichtem Fresskoma nach dem guten Essen, das es neben der Getränkeversorgung übrigens auch\nall inclusive gab, fühlte ich mich gestärkt und bereit für die Nachmittagssessions.",[18,11992,11993],{},"Die Themen “Bitcoin”, “Hörbuch mit Musik” und “Selbstbestimmtes Sterben” lockten mich nicht so sehr, also führte ich mir\neine teilweise fast philosophische Session “Künstliche Intelligenz” zu Gemüte, die mir interessante Konzepte zu\nIntelligenz näher brachte. Trotz allem war mein Energielevel um 15 Uhr dann etwas arg weit unten. Um nicht zu riskieren,\nden Rest des BarCamps zu verschlafen, entschied ich mich spontan lieber gegen die Session “Entspannungsmethoden” und\nnahm stattdessen an einer lebhaften Austauschrunde zum Thema “Macht mehr Komplimente” teil.",[18,11995,11996],{},"Schnell noch dem Sessionverantwortlichen ein Kompliment ausgesprochen und dann ab in die spannende Session “Systemisches\nKonsensieren”, die vorbeiging wie im Flug.",[18,11998,11999,12000,12003,12004,12009],{},"Zack, schon brach die letzte Session an – “",[573,12001,12002],{},"Oh, wir sind ja jetzt dran.","” – in der wir über\nunsere ",[585,12005,12008],{"href":12006,"rel":12007},"https://github.com/synyx/urlaubsverwaltung",[589],"Open Source Urlaubsverwaltung"," plauderten und uns wertvolle Gedanken\naußerhalb unserer Techie-Blase einholen konnten.",[649,12011,12013],{"id":12012},"die-session-nach-den-sessions","Die Session nach den Sessions.",[18,12015,12016],{},"Doch nach der letzten Session und einem kurzen Abschluss war es noch lange nicht vorbei. Denn die Session nach den\nSessions ging noch eine ganze Weile in der Kneipe nebenan weiter und bot die Gelegenheit zu weiteren spannenden\nAustauschrunden.",[649,12018,12020],{"id":12019},"noch-mehr-einblick","Noch mehr Einblick?",[18,12022,12023,12028,12029,12034],{},[585,12024,12027],{"href":12025,"rel":12026},"https://app.konferenz.guide/index.html?seite=sessionList&event=bcpf19",[589],"Hier"," findet sich der komplette Sessionplan der\nzwei Tage. Mehr Eindrücke und Photos lassen sich beispielsweise auf\ndem ",[585,12030,12033],{"href":12031,"rel":12032},"https://twitter.com/barcamppf",[589],"Twitter-Account des BarCamp Pforzheim"," finden.",[3469,12036,12038],{"id":12037},"nach-dem-barcamp-ist-vor-dem-barcamp","Nach dem BarCamp ist vor dem BarCamp.",[18,12040,12041,12042,986],{},"Der Termin für nächstes Jahr steht bereits fest: ",[27,12043,12044],{},"25. und 26. September 2020",[18,12046,12047],{},"In meinem Kalender sind die beiden Tage bereits markiert. Ich kann es wirklich nur wärmstens empfehlen. Also schnell\neintragen, nur noch 359 Tage 😉",{"title":48,"searchDepth":86,"depth":86,"links":12049},[12050,12057],{"id":11933,"depth":86,"text":11934,"children":12051},[12052,12053,12054,12055,12056],{"id":11953,"depth":126,"text":11954},{"id":11973,"depth":126,"text":11974},{"id":11983,"depth":126,"text":11984},{"id":12012,"depth":126,"text":12013},{"id":12019,"depth":126,"text":12020},{"id":12037,"depth":86,"text":12038},[5823,614],"2019-10-01T17:00:25","Die coolsten Erlebnisse entstehen bei mir meist aus einem spontanen Impuls heraus. Genauso ging es mir auch letzten\\nSamstag, als ich mich plötzlich zum ersten Mal auf dem BarCamp Pforzheim\\nwiederfand, das auch dieses Jahr wieder von synyx gesponsert wurde. Den Freitag hatte ich leider verpasst, aber\\noffensichtlich hat mir ein Tag auf dem BarCamp bereits ausgereicht, um mich auch heute noch wie berauscht zu fühlen von\\nall den Eindrücken, spannenden Unterhaltungen und interessanten Menschen.","https://synyx.de/blog/mein-erster-besuch-auf-dem-barcamp-pforzheim/",{},"/blog/mein-erster-besuch-auf-dem-barcamp-pforzheim",{"title":11914,"description":12065},"Die coolsten Erlebnisse entstehen bei mir meist aus einem spontanen Impuls heraus. Genauso ging es mir auch letzten\nSamstag, als ich mich plötzlich zum ersten Mal auf dem BarCamp Pforzheim\nwiederfand, das auch dieses Jahr wieder von synyx gesponsert wurde. Den Freitag hatte ich leider verpasst, aber\noffensichtlich hat mir ein Tag auf dem BarCamp bereits ausgereicht, um mich auch heute noch wie berauscht zu fühlen von\nall den Eindrücken, spannenden Unterhaltungen und interessanten Menschen.","blog/mein-erster-besuch-auf-dem-barcamp-pforzheim",[12068,12069,12070,12071],"barcamp","bcpf19","pforzheim","unkonferenz","Ein kleiner Erfahrungsbericht von meinem ersten Besuch auf dem BarCamp Pforzheim 2019 #bcpf19","8d_-lkp6gdHsdaEp7xXUQg8eNMU9SldwK0g7oJuimlM",{"id":12075,"title":12076,"author":12077,"body":12078,"category":12212,"date":12213,"description":12214,"extension":617,"link":10783,"meta":12215,"navigation":499,"path":12216,"seo":12217,"slug":12218,"stem":12219,"tags":12220,"teaser":12223,"__hash__":12224},"blog/blog/8-jahre-synyx-ein-abwechslungsreicher-rueckblick.md","8 Jahre synyx – Ein abwechslungsreicher Rückblick",[11916],{"type":11,"value":12079,"toc":12206},[12080,12083,12086,12091,12097,12099,12103,12106,12115,12126,12135,12138,12142,12145,12151,12157,12163,12166,12170,12173,12179,12184,12187,12190,12193,12197,12200],[14,12081,12076],{"id":12082},"_8-jahre-synyx-ein-abwechslungsreicher-rückblick",[18,12084,12085],{},"Genau heute vor 8 Jahren, am 1. August 2011, begann meine Geschichte bei synyx. Damals war synyx noch eine kleine Bude\nmit etwa zwanzig MitarbeiterInnen, die zwei schnieke Altbauwohnungen mit Fischgrätenparkett und Deckenstuck als Büro\nnutzten.",[18,12087,12088],{},[1794,12089],{"alt":48,"src":12090},"https://media.synyx.de/uploads/2019/08/P1080729-768x576.jpg",[18,12092,12093],{},[1794,12094],{"alt":12095,"src":12096},"Altes Büro in der Karlstraße 68","https://media.synyx.de/uploads/2019/08/P1080060-768x576.jpg",[18,12098,12095],{},[3469,12100,12102],{"id":12101},"start-ins-abenteuer-ausbildung","Start ins Abenteuer Ausbildung",[18,12104,12105],{},"Nach erfolgreichem Abbruch meines Biostudiums hatte ich die fixe Idee, in die IT einzusteigen. Programmiererfahrung\nhatte ich keine vorzuweisen – nur stundenlange Spielereien mit HTML und CSS – aber dafür einen großen Berg an Motivation\nfür ein neues Abenteuer als Keyboardjockey. Ich weiß nicht, für welche Seite es das gewagtere Experiment war, doch zu\nmeiner Überraschung durfte ich tatsächlich die Ausbildung zur Fachinformatikerin für Anwendungsentwicklung beginnen.",[18,12107,12108,12109,12114],{},"So bekam ich die ersten Monate erst einmal Druckbetankung in Sachen Java, Spring und Co. von meinem Ausbilder Alex. Bis\nes im Oktober dann mit dem ersten Grüne-Wiese-Projekt losging, einer elektronischen Urlaubsverwaltung für synyx, die\nzum Open Source Projekt heranwuchs und auch heute noch stetig weiterentwickelt\nwird. (",[585,12110,12113],{"href":12111,"rel":12112},"https://synyx.de/blog/urlaubsverwaltung-die-geschichte-eines-open-source-projekts/",[589],"Zur Geschichte der Urlaubsverwaltung",")",[18,12116,12117,12118,12121,12122,12125],{},"Nach einigen Monaten eigenständiger Hackerei und erfolgreichem Live-Gang der Urlaubsverwaltung wurde es dann ernst für\nmich. Ich kam in ein ",[573,12119,12120],{},"richtiges"," Team und arbeitete plötzlich an einem ",[573,12123,12124],{},"richtigen"," Kundenprojekt – oder besser gesagt an\nmehreren. Denn das damalige Indy-Team klopfte wochenweise Software für unterschiedliche Kunden runter. Das war ganz\nschön spannend, weil echt abwechslungsreich.",[18,12127,12128,12129,12134],{},"Gegen Ende meiner Ausbildung durfte ich in die dunkle äh andere Seite der IT-Welt eintauchen und einige Monate bei den\nAdmins verbringen. (",[585,12130,12133],{"href":12131,"rel":12132},"https://synyx.de/blog/devoooops-azubitausch-bei-synyx/",[589],"Azubitausch bei synyx",") Das war eine sehr\nlehrreiche Zeit, wenn auch ehrlich gesagt nicht viel hängen geblieben ist. Mein Wissen in Sachen Netzwerk blieb\nunterirdisch. Doch einige Sachen wie zum Beispiel die Provisionierung mit Puppet fand ich echt interessant und nützlich.",[18,12136,12137],{},"Kurz vor Einsetzen des ops-typischen Bartwuchses fand meine Zeit bei den Admins ein Ende, denn mein Abschlussprojekt\nstand an. Dieses war eine Webanwendung zur Pflege von Konfigurationsproperties mit dem schönen Namen Properties\nManagement System, kurz PMS. Alles lief glatt, sodass ich im Januar 2014 das Experiment Ausbildung zur\nFachinformatikerin erfolgreich abschloss.",[3469,12139,12141],{"id":12140},"hallo-arbeitsleben","Hallo Arbeitsleben!",[18,12143,12144],{},"Bäm – und so begann das richtige Arbeitsleben. Nicht dass sich dadurch etwas großartig änderte, denn auch als Azubi\nhatte ich mich immer wie ein vollwertiges Teammitglied gefühlt. Aber zumindest konnte ich mir nun die eher ungeliebte\nBerufsschule sparen und das Konto war besser gefüllt 🙂 Auch nach meiner Ausbildung hackerte ich nebenbei immer wieder an\nder Urlaubsverwaltung herum, doch hauptsächlich war ich in mehreren Projekten unseres großen Logistikkunden Contargo\nunterwegs. Eine interessante Domäne und unterschiedliche Technologien, die ich da kennenlernen durfte. Die Arbeit am\nFrontend lag mir zwar immer einen Tick mehr, dennoch war stets Interdisziplinarität angesagt.",[18,12146,12147,12148,12150],{},"Im Herbst 2014 war es bei synyx vorbei mit dem Flair der Altbauwohnung, denn der Umzug in ein ",[573,12149,12120],{}," Bürogebäude\nstand an. Andernfalls hätten wir unsere Schreibtische wohl stapeln müssen. Mit fortschreitendem Wachstum wurde es\neinfach zu eng. So ein neues Büro ist natürlich erst einmal eine Umstellung. Aber ich denke, wir haben es uns ganz\ngemütlich gemacht, vor allem mit unseren besonderen Themenräumen. (Wieviele Menschen halten schon Meetings im Birkenwald\noder Omas Wohnzimmer ab?) Außerdem ist eine Klimaanlage im Karlsruher Sommer wirklich nicht zu verachten. Fußbäder und\nnasse Handtücher im Nacken, um überhaupt halbwegs denken zu können, sind Details aus dem alten Büro, die ich echt nicht\nvermisse 🙂",[18,12152,12153],{},[1794,12154],{"alt":12155,"src":12156},"raum_memory_leak","https://media.synyx.de/uploads/2019/08/IMG_4441-Kopie-768x512.jpg",[18,12158,12159],{},[1794,12160],{"alt":12161,"src":12162},"Blick ins synyx Wohnzimmer","https://media.synyx.de/uploads/2019/08/D9AYt99WkAYnKO0-768x512.jpeg",[18,12164,12165],{},"Impressionen aus dem aktuellen synyx Büro in der Gartenstraße 67",[3469,12167,12169],{"id":12168},"ein-neues-abenteuer-kommt-selten-allein","Ein neues Abenteuer kommt selten allein…",[18,12171,12172],{},"Ende 2016 erwartete mich dann ein Abenteuer privater Natur. Ich wurde Mama und war erst einmal knapp zwei Jahre in\nElternzeit. Trotzdem zog es mich fast jedes Mal zum monatlich stattfindenden synyx Frühstück. Anfangs mit schlafendem\nBaby im Tragetuch, später mit dem durch’s Büro krabbelnden/laufenden Kleinkind. Sich beim gemeinsamen Mampfen über\nNeuigkeiten auszutauschen und aktuelle Projektstände präsentiert zu bekommen, führt dazu, dass sich zwei Jahre\neigentlich gar nicht so lang anfühlen.",[18,12174,12175],{},[1794,12176],{"alt":12177,"src":12178},"synyx_fruehstueck","https://media.synyx.de/uploads/2019/08/IMG_9055-768x512.jpg",[18,12180,12181],{},[1794,12182],{"alt":48,"src":12183},"https://media.synyx.de/uploads/2019/08/IMG_7865-768x512.jpg",[18,12185,12186],{},"Das synyx Frühstück – Hier geht's um mehr als Essen",[18,12188,12189],{},"Solch eine lange Zeit raus zu sein und irgendwie auch nicht, lässt einen nachdenklich werden. In mir wird immer ein\nkleines Nerd-Herz schlagen, doch der Abstand hat mir gezeigt, dass mich andere Dinge noch mehr interessieren als die\nSoftwareentwicklung. So kommt es also, dass ich erneut ein Experiment bei synyx angeleiert habe und nun seit Anfang des\nJahres als Scrum Master / Agile Coach unterwegs bin. Das ist ganz schön aufregend, kann ich sagen 🙂",[18,12191,12192],{},"Wenn Du plötzlich wieder ganz viele Dinge zum ersten Mal machst und Dich manchmal fast wieder wie ein Azubi fühlst.\nNichtsdestotrotz fühlt sich die Entscheidung richtig an und ich freue mich darüber, dass solche Weiterentwicklungen bei\nsynyx möglich sind.",[3469,12194,12196],{"id":12195},"bock-mitzumachen","Bock mitzumachen?",[18,12198,12199],{},"In diesem (manchmal) echt verrückten Laden bist Du nicht einfach nur ein Schräubchen im Getriebe, sondern hast die\nMöglichkeit, Dich und die Firma weiterzuentwickeln – und zwar egal in welcher Rolle Du hier unterwegs bist. Niemand wird\nDir Deine Aufgaben auf dem Silbertablett servieren und sowas wie eine Karriereleiter suchst Du hier auch vergeblich.\nDoch wenn Du mit Leidenschaft und Eigenverantwortung bei der Sache bist, kannst Du hier ziemlich glücklich werden.",[18,12201,12202,12203,12205],{},"Du hast Bock, eigenverantwortlich an spannenden Projekten mit modernen Technologien mitzuwirken? Dann melde Dich bei uns\nunter ",[585,12204,10102],{"href":10101}," und erzähl uns, wer Du bist und was Du so kannst. Zeugnisse sind uns nicht\nso wichtig. Statt Deine Grundschulnoten zu analysieren, wollen wir lieber mehr über Deine Interessen und Fähigkeiten\nerfahren. Du als Mensch zählst. Wir freuen uns, von Dir zu hören!",{"title":48,"searchDepth":86,"depth":86,"links":12207},[12208,12209,12210,12211],{"id":12101,"depth":86,"text":12102},{"id":12140,"depth":86,"text":12141},{"id":12168,"depth":86,"text":12169},{"id":12195,"depth":86,"text":12196},[614],"2019-08-01T20:25:05","Genau heute vor 8 Jahren, am 1. August 2011, begann meine Geschichte bei synyx. Damals war synyx noch eine kleine Bude\\nmit etwa zwanzig MitarbeiterInnen, die zwei schnieke Altbauwohnungen mit Fischgrätenparkett und Deckenstuck als Büro\\nnutzten.",{},"/blog/8-jahre-synyx-ein-abwechslungsreicher-rueckblick",{"title":12076,"description":12085},"8-jahre-synyx-ein-abwechslungsreicher-rueckblick","blog/8-jahre-synyx-ein-abwechslungsreicher-rueckblick",[3121,12221,12222],"jobs","rueckblick","Von wegen Eintönigkeit. 8 Jahre beim gleichen Unternehmen zu sein, kann ganz schön abwechslungsreich sein.","TSFTxvrimS0wxRsZIxYadrK86y5fBc7c12YlEh6FgZI",{"id":12226,"title":12227,"author":12228,"body":12229,"category":12354,"date":12355,"description":12236,"extension":617,"link":12356,"meta":12357,"navigation":499,"path":12358,"seo":12359,"slug":12233,"stem":12360,"tags":12361,"teaser":12363,"__hash__":12364},"blog/blog/ist-das-jetzt-urlaub-oder-arbeit-ein-typischer-tag-auf-der-jcrete.md","Ist das jetzt Urlaub oder Arbeit?! – Ein typischer Tag auf der JCrete",[11208],{"type":11,"value":12230,"toc":12352},[12231,12234,12237,12263,12269,12278,12281,12284,12290,12293,12296,12299,12302,12305,12308,12314,12317,12323,12338,12341,12349],[14,12232,12227],{"id":12233},"ist-das-jetzt-urlaub-oder-arbeit-ein-typischer-tag-auf-der-jcrete",[18,12235,12236],{},"Zuallererst möchte ich mich bedanken:",[577,12238,12239,12245,12251,12257],{},[580,12240,12241,12244],{},[27,12242,12243],{},"Bei der synyx:"," für ein modernes, eigenverantwortliches Weiterbildungskonzept, das es mir ermöglicht ohne große\nDiskussionen an so einer Veranstaltung teilzunehmen!",[580,12246,12247,12250],{},[27,12248,12249],{},"Bei den Disorganizern der JCrete",": dafür, dass ich dabei sein durfte!",[580,12252,12253,12256],{},[27,12254,12255],{},"Bei meinen Kindern",": weil sie so super mitgemacht haben und nicht verloren gegangen sind!",[580,12258,12259,12262],{},[27,12260,12261],{},"Bei meiner Frau:"," weil sie darauf vertraut hat, dass mir die Kinder nicht verloren gehen! 😉",[18,12264,12265],{},[1794,12266],{"alt":12267,"src":12268},"jCrete: Dinner mit Meerblick","https://media.synyx.de/uploads/2019/07/IMG_20190715_075755-768x576.jpg",[18,12270,12271,12272,12277],{},"Wenn man als Unterkunft eins der Zimmer in der OAC (",[585,12273,12276],{"href":12274,"rel":12275},"https://www.oac.gr/en/",[589],"Orthodox Academy of Crete"," ) gebucht hat,\nwacht man jeden Morgen mit einer gigantischen Aussicht direkt aufs Meer auf. Die allgegenwärtigen Zikaden schlafen noch\nund man hört das Meer rauschen. Um 6:30 warten auf dem Hof vor dem Zimmer die zwei Läufergruppen. Egal bei wie viel Raki\nund Bier man den Abend zuvor über die Java-Welt philosophiert hat, Frühsport muss sein. Eine schnelle Gruppe mit 5er\nSchnitt und eine gemütliche Gruppe mit 7-8er Schnitt erklimmt die Hügel hinter der Akademie. Danach kann man direkt ins\nMeer springen und sich abkühlen.",[18,12279,12280],{},"Ich habe diesmal Kinder dabei und schaue den Läufern vom Balkon aus zu. 😉",[18,12282,12283],{},"Beim Frühstück sitze ich mit zum Teil mir unbekannten oder halt auch sehr prominenten Menschen aus der Java Community\nzusammen. Schon vor dem ersten Schluck Kaffe entwickeln sich coole Diskussionen. Kurz noch Brötchen für die Kinder auf\ndem Zimmer schmieren und dann geht’s schon los mit Konferenzprogramm.",[18,12285,12286],{},[1794,12287],{"alt":12288,"src":12289},"jCrete: Beach-Programm-Slot","https://media.synyx.de/uploads/2019/07/Image-from-iOS-768x576.jpg",[18,12291,12292],{},"In die erste Session “Rust for Java Programmers” stolpere ich mehr aus Zufall. Da ich eh mal was über Rust lernen\nwollte, bleibe ich sitzen und lerne von Alex Snaps und Ben Harper einiges über die Programmiersprache von Mozilla.\nSpeichersicherheit und Performance spielen eine große Rolle. Was ich mitnehme: Rust kann und sollte man für Dinge\neinsetzen, die man sonst in C oder C++ schreiben würde. Also nah an der Hardware oder absolut Performance-kritisch.\nFür die Entwicklung von Webapplikationen oder Services gibt es aber geeignetere Sprachen.",[18,12294,12295],{},"In der Pause inhaliere ich zwei Becher Kaffe und schaue nach den Kindern. Die spielen inzwischen mit Kindern der anderen\nTeilnehmern auf dem Hof zwischen den beiden Hauptgebäuden und überwinden dabei jegliche Sprachbarrieren.",[18,12297,12298],{},"Die zweite Session findet in der großen Halle statt. Marcus Hirt stellt Java Mission Control und Flight Recorder vor.\nWir diskutieren die gemachten Erfahrungen sowie die Stärken und Schwächen der beiden Tools. Spannede und für mich neue\nInfo war, dass beide Tools ab OpenJDK 11 Opensource und damit frei nutzbar sind. Das sind IMHO großartige Neuigkeiten\nund bieten für uns viele neue Möglichkeiten zur Überwachung und Analyse unserer Produktiv-Applikationen. Zumindest\nsofern sie schon auf JDK 11 laufen. Es gab allerdings auch Andeutungen, dass ein Downport für OpenJDK 8 in Arbeit ist.",[18,12300,12301],{},"In der Pause wieder Kaffe, kurze Gespräche mit anderen Teilnehmern und Durchzählen der Kinder. 1 .. 2, alle noch da und\nnicht verhungert.",[18,12303,12304],{},"Die dritte Session dreht sich um das Testen von Microservices. Das war bereits im letzten Jahr ein großes Thema. Es wird\nlebhaft über die Testpyramide und den Aufwand, den man in unterschiedliche Arten von Tests stecken muss oder will,\ndiskutiert. Viele Teams, die größere Microservice Projekte umsetzen, scheinen stark mit dem “ich fahre gerade mal alles\nauf meinem Minikube hoch und teste dann” zu kämpfen. Es ist einfach ein nicht zu unterschätzender Aufwand. Ich erzähle\nein wenig, wie wir bei unserem Kunden Contargo entwickeln: SCS anstatt Microservices, bewusster Schnitt der Kontexte und\nlose Kopplung zwischen diesen. Viele Probleme, die diskutiert werden, ergeben sich überhaupt nicht für uns. Der richtige\nSchnitt der Kontexte kann so viel Arbeit sparen!",[18,12306,12307],{},"Nach den Sessions treffen wir uns nochmal alle in der großen Halle und wir sprechen das restliche Tagesprogramm aka\nAusflüge durch. Ich sammle meine Kinder ein und es geht los Richtung Mittagessen.",[18,12309,12310],{},[1794,12311],{"alt":12312,"src":12313},"Foodporn bei der jCrete","https://media.synyx.de/uploads/2019/07/IMG_20190718_130038-768x576.jpg",[18,12315,12316],{},"Das Mittagsessen findet wie jeden Tag auf der großen, mit Segeltuch überspannten Dachterrasse der Akademie statt. Es\ngibt überwiegend vegetarische, super leckere Spezialitäten aus Kreta. Wer will, kann sich griechischen Wein genehmigen.\n😉 Während meine Kinder über das griechische Essen jammern und lieber den Nachtisch-Kuchen als Hauptmahlzeit nehmen,\ndiskutiere ich mit Sébastien Blanc, dem DevRel-Menschen aus dem Keycloak Team, über die Erfahrungen, die wir bei synyx\nund unseren Kunden mit Keycloak machen.",[18,12318,12319],{},[1794,12320],{"alt":12321,"src":12322},"Foodtester Vivian war begeistert!","https://media.synyx.de/uploads/2019/07/IMG_20190715_202536-768x576.jpg",[18,12324,12325,12326,12331,12332,12337],{},"Den Nachmittag verbringen wir in einem Wasserpark in der Nähe von Chania. Da meine Kinder gerne Wasserrutschen rutschen,\nwar das auf jeden Fall ein Pflichttermin. Auch andere Teilnehmer hatten sich hier mit ihren Kindern eingefunden. Fotos\ngibt es keine, weil ich alle Hände damit zu tun hatte, dass die Kinder nicht verloren gehen oder ertrinken. Am Abend\nhatten die Disorganizers zwei Tavernen für alle Teilnehmer reserviert.\nDie",[585,12327,12330],{"href":12328,"rel":12329},"https://www.tripadvisor.com/Restaurant_Review-g1191160-d4605253-Reviews-Panorama_Tavern_Falasarna-Falassarna_Chania_Prefecture_Crete.html",[589],"Panorama Tavern in Falassarna","\nund\ndie ",[585,12333,12336],{"href":12334,"rel":12335},"https://www.tripadvisor.com/Restaurant_Review-g1028265-d12957049-Reviews-Fish_Tavern_1960-Kissamos_Chania_Prefecture_Crete.html",[589],"1960 Fish Tavern in Kissamos",".\nWir haben die Fisch-Taverne in Kissamos gewählt und haben uns in einem dreistündigen Seafood/Veggie DoS-Angriff\nwiedergefunden. Gegen 23 Uhr war der Tag dann vorbei. Genug erlebt.",[18,12339,12340],{},"So, das war nun nur einer von insgesamt 5 Konferenz-Tagen. 😉 Zum Abschluss noch ein Video der JCrete vom letzten Jahr.\nDort hatte uns ein Profi-Filmteam begleitet und super Aufnahmen gemacht.",[18,12342,12343,12348],{},[585,12344,12347],{"href":12345,"rel":12346},"https://youtu.be/6-zF8JrWlt4",[589],"Video auf YouTube ansehen"," (Mit dem Laden des Videos akzeptieren Sie die\nDatenschutzerklärung von YouTube.)",[18,12350,12351],{},"Heinz und Kirk erklären, wie die JCrete geboren wurde und was diese Unconference so besonders macht.",{"title":48,"searchDepth":86,"depth":86,"links":12353},[],[12068,5823,614],"2019-07-25T12:02:20","https://synyx.de/blog/ist-das-jetzt-urlaub-oder-arbeit-ein-typischer-tag-auf-der-jcrete/",{},"/blog/ist-das-jetzt-urlaub-oder-arbeit-ein-typischer-tag-auf-der-jcrete",{"title":12227,"description":12236},"blog/ist-das-jetzt-urlaub-oder-arbeit-ein-typischer-tag-auf-der-jcrete",[12362],"java-unconference-kreta-crete","Die JCrete ist eine, wenn nicht *die* Unconference im Java-Umfeld. Initiiert von Heinz Kabutz, Kirk Pepperdine und einem Team von Dis-Organizern, findet die Unconference seit 2011 jedes Jahr auf der griechischen Insel Kreta statt. Ich hatte die Ehre, dieses Jahr schon schon zum zweiten Mal dabei zu sein und beschreibe an dieser Stelle einen typischen Tag auf der JCrete.","EBvddf8HZccRoGUlG2DNdn17lwdnhRHgEjqYb02L0Yg",{"id":12366,"title":12367,"author":12368,"body":12370,"category":12424,"date":12425,"description":12377,"extension":617,"link":12426,"meta":12427,"navigation":499,"path":12428,"seo":12429,"slug":12430,"stem":12431,"tags":12432,"teaser":12435,"__hash__":12436},"blog/blog/experiment-javascript-ein-synyx-entwickler-erzaehlt-von-seinen-anfaengen.md","Experiment JavaScript – Ein synyx Entwickler erzählt von seinen Anfängen",[12369],"lange",{"type":11,"value":12371,"toc":12419},[12372,12375,12378,12382,12389,12392,12395,12398,12402,12405,12408,12410,12413],[14,12373,12367],{"id":12374},"experiment-javascript-ein-synyx-entwickler-erzählt-von-seinen-anfängen",[18,12376,12377],{},"Alles ging vor knapp drei Jahren mit einer ganz harmlosen Frage los:",[3469,12379,12381],{"id":12380},"kannst-du-dir-vorstellen-in-einem-javascript-projekt-zu-arbeiten","„Kannst Du Dir vorstellen, in einem JavaScript-Projekt zu arbeiten?“",[18,12383,12384,12385,12388],{},"Das war der Abschluss meines Bewerbungsgesprächs bei synyx. Lässt man die üblichen Website-Spielereien außer Acht, hatte ich zu diesem Zeitpunkt noch keine wirklichen Erfahrungen mit JavaScript vorzuweisen. Damals hätte ich es vermutlich nicht einmal als ",[573,12386,12387],{},"richtige"," Programmiersprache bezeichnet. Doch mein Interesse war geweckt und ich ließ mich auf das Experiment JavaScript ein.",[18,12390,12391],{},"Dann ging der für mich anfangs beschwerliche Weg los. Ich komme aus der klassischen Java-Welt und JavaScript ist doch ein bisschen anders als Java. Typsicherheit und einen Compiler habe ich vor allem anfangs sehr vermisst, aber mich auch über das direkte Ausführen von kleinen Fragmenten gefreut. JavaScript lässt sich einfach interaktiver / schneller entwickeln. Das macht Spaß, wenn man sich darauf einlässt. Die Sprache gibt einem viele Freiheiten, dynamisches Überschreiben von Methoden zum Beispiel.",[18,12393,12394],{},"Ach ja, Methoden – ein gutes Thema. Neben der Single-Threaded-Natur ist die prototypische Vererbung doch recht gewöhnungsbedürftig. Aber man sollte ja sowieso eher delegieren als vererben 😉 Und durch das Ducktyping sind Vererbungen auch gar nicht so wichtig. Die Sprache hatte für mich definitiv viele Eigenheiten, die ich mir erst nach und nach erarbeiten musste. Toll war, dass ich damit nicht allein im Team war.",[18,12396,12397],{},"Oh ja, das Team. Es ist klasse, wie offen wir über Probleme sprechen und gemeinsam nach Lösungen suchen können. Die verschiedenen Charaktere helfen dabei, zu guten Ergebnissen zu gelangen.",[3469,12399,12401],{"id":12400},"eine-interessante-sprache-und-ein-tolles-team-aber-was-machen-wir-da-eigentlich","Eine interessante Sprache und ein tolles Team, aber was machen wir da eigentlich?",[18,12403,12404],{},"Natürlich einem großen Kunden gute Software abliefern. Wobei so natürlich ist es eigentlich gar nicht. Wir bearbeiten zur Zeit zwei Projekte, die ihre Ausführungsumgebung gewechselt haben und parallel weiterentwickelt werden sollten. Von einem Headless-Browser in eine Node-Umgebung zu wechseln, klingt nach einem natürlichen Schritt. Allerdings brachte das viele kleinere und größere Probleme mit sich, die nur durch die intensive Zusammenarbeit mit dem Kunden, der die Ausführungsumgebung bereitstellt, zu bewältigen waren.",[18,12406,12407],{},"Erschwerend kam hinzu, dass nur eine Lösung komplett bei synyx erstellt wurde. Bei der anderen unterstützen wir einen Dienstleister, der an dem Programm seit rund sechs Jahren arbeitet. Gemeinsam machen wir die Anwendung fit für die Zukunft. Musik-Streaming ins Auto, ein interessantes, wenn auch stellenweise stressiges Projekt. Vor sechs Jahren wurde JavaScript doch noch ganz anders geschrieben als heute.",[3469,12409,12196],{"id":12195},[18,12411,12412],{},"Wenn Dich JavaScript als allgegenwärtige Sprache interessiert, Du Deine Erfahrungen einbringen willst oder einfach mal schauen möchtest, wie es ist, mit einem großen Kunden zusammenzuarbeiten, der versucht Probleme prozessorientiert zu lösen, komm doch mal bei uns vorbei und wir schauen, ob es für Dich und uns passt.",[18,12414,12415,12416,12418],{},"Melde Dich einfach bei uns unter ",[585,12417,10102],{"href":10101}," und erzähl uns, wer Du bist und was Du so kannst. Zeugnisse sind uns nicht so wichtig. Statt Deine Grundschulnoten zu analysieren, wollen wir lieber mehr über Deine Interessen und Fähigkeiten erfahren. Wir freuen uns, von Dir zu hören!",{"title":48,"searchDepth":86,"depth":86,"links":12420},[12421,12422,12423],{"id":12380,"depth":86,"text":12381},{"id":12400,"depth":86,"text":12401},{"id":12195,"depth":86,"text":12196},[614],"2019-05-28T16:26:03","https://synyx.de/blog/experiment-javascript-ein-synyx-entwickler-erzaehlt-von-seinen-anfaengen/",{},"/blog/experiment-javascript-ein-synyx-entwickler-erzaehlt-von-seinen-anfaengen",{"title":12367,"description":12377},"experiment-javascript-ein-synyx-entwickler-erzaehlt-von-seinen-anfaengen","blog/experiment-javascript-ein-synyx-entwickler-erzaehlt-von-seinen-anfaengen",[3121,12433,12434,9736,12221],"developer","entwickler","Werdegang des JavaScript Developers Christian Lange bei synyx.","AqRd7fJ4-roSV9bB721fTkY674GmJh6n6gpoi-HeEUI",{"id":12438,"title":12439,"author":12440,"body":12441,"category":12523,"date":12524,"description":12448,"extension":617,"link":12525,"meta":12526,"navigation":499,"path":12527,"seo":12528,"slug":12529,"stem":12530,"tags":12531,"teaser":12532,"__hash__":12533},"blog/blog/schulesynyx-spass-mit-stiften.md","schule@synyx – Spaß mit Stiften",[11916],{"type":11,"value":12442,"toc":12520},[12443,12446,12449,12452,12460,12463,12466,12470,12485,12488,12491,12496,12501,12506],[14,12444,12439],{"id":12445},"schulesynyx-spaß-mit-stiften",[18,12447,12448],{},"(Fast) jeden Freitag treffen sich interessierte synyxer in der Schule@synyx, um sich gegenseitig etwas Neues beizubringen.",[18,12450,12451],{},"In verschiedenen Formaten (Vortrag, Workshop, Diskussion, …) möchten wir Wissen verteilen und unsere Erkenntnisse mit den Kollegen challengen. Hier macht es keinen Unterschied, ob der Inhalt aus der aktuellen Arbeit beim Kunden, einem R&D-Projekt oder einer Spielerei entstanden ist.",[18,12453,12454,12455,12459],{},"(Mein Kollege Arnold hat die Schule@synyx ",[585,12456,10117],{"href":12457,"rel":12458},"https://synyx.de/blog/schulesynyx-the-self-training-company/",[589]," schonmal ausführlicher erklärt.)",[12461,12462],"hr",{},[18,12464,12465],{},"Heute gibt’s in der Schule@synyx bereits die dritte Runde “Spaß mit Stiften”. Da bei den beiden ersten Runden im März noch nicht alle Interessierten dabei sein konnten, gibt’s heute erneut eine Einheit.",[3469,12467,12469],{"id":12468},"spaß-mit-stiften-notizen-visuell-aufpeppen","Spaß mit Stiften – Notizen visuell aufpeppen",[18,12471,12472,12473,12478,12479,12484],{},"Bei “Spaß mit Stiften” geht’s weder um Kunst noch um Perfektion. Die liebe Dani (",[585,12474,12477],{"href":12475,"rel":12476},"https://twitter.com/dgrammlich",[589],"@dgrammlich",") und ich (",[585,12480,12483],{"href":12481,"rel":12482},"https://twitter.com/fraulyoner",[589],"@fraulyoner",") geben im Rahmen eines einstündigen Mitmach-Workshops eine kleine Einführung zum Thema Bildsprache (Sketch Notes). Wir zeigen ein paar einfache Kniffe, mit denen sich Notizen visuell aufpeppen lassen und wollen dabei vor allem eins: Spaß vermitteln.",[18,12486,12487],{},"Notizblock, Whiteboard, Flipcharts oder Post-its – Notizen sind in unserem Arbeitsalltag allgegenwärtig. Ja, auch wenn wir hier hauptsächlich Techies sind. Visuelle Notizen fördern das gemeinsame Verständnis in Diskussionen und sorgen dafür, dass Informationen einfacher und länger im Gedächtnis verankert werden. Doch leider herrscht gerade im Techie-Umfeld allzu oft große Hemmung, überhaupt einen Stift in die Hand zu nehmen, um Gedanken visuell darzustellen. Genau diese Hemmung versuchen wir bei “Spaß mit Stiften” zu mindern.",[18,12489,12490],{},"Hier ein paar Eindrücke von den vergangenen Runden:",[18,12492,12493],{},[1794,12494],{"alt":48,"src":12495},"https://media.synyx.de/uploads/2019/06/schule-spass-mit-stiften-bildsprache-768x1024.jpg",[18,12497,12498],{},[1794,12499],{"alt":48,"src":12500},"https://media.synyx.de/uploads/2019/06/schule-spass-mit-stiften-eindruck-768x576.jpg",[18,12502,12503],{},[1794,12504],{"alt":48,"src":12505},"https://media.synyx.de/uploads/2019/06/schule-spass-mit-stiften-feedback-768x1024.jpg",[18,12507,12508,12509,12514,12515,12114],{},"Im Dezember 2015 hatten wir übrigens ",[585,12510,12513],{"href":12511,"rel":12512},"https://www.frauhoelle.com/",[589],"Frau Hoelle"," zu Besuch bei synyx und hatten damals inhouse gleich mehrere Workshop-Tage zum Thema Sketch Notes / Visual Thinking. (siehe ",[585,12516,12519],{"href":12517,"rel":12518},"https://synyx.de/blog/visual-thinking-synyx-sketcht/",[589],"Blog-Beitrag",{"title":48,"searchDepth":86,"depth":86,"links":12521},[12522],{"id":12468,"depth":86,"text":12469},[614],"2019-05-17T16:20:52","https://synyx.de/blog/schulesynyx-spass-mit-stiften/",{},"/blog/schulesynyx-spass-mit-stiften",{"title":12439,"description":12448},"schulesynyx-spass-mit-stiften","blog/schulesynyx-spass-mit-stiften",[],"Spaß mit Stiften – Notizen in der schule@synyx visuell aufpeppen.","ZLTmGm-q4Sa4ynHAVlVlnp9Ff5VmCOnGkr3AYw0CUE0",{"id":12535,"title":12536,"author":12537,"body":12539,"category":12625,"date":12626,"description":12627,"extension":617,"link":12628,"meta":12629,"navigation":499,"path":12630,"seo":12631,"slug":12543,"stem":12632,"tags":12633,"teaser":12634,"__hash__":12635},"blog/blog/schulesynyx-security-testing.md","schule@synyx – security testing",[12538],"kuehn",{"type":11,"value":12540,"toc":12622},[12541,12544,12547,12550,12556,12558,12561,12565,12568,12585,12595,12606,12609,12612,12614],[14,12542,12536],{"id":12543},"schulesynyx-security-testing",[18,12545,12546],{},"(Fast) jeden Freitag treffen sich interessierte synyxer in der Schule@synyx, um sich gegenseitig etwas Neues\nbeizubringen.",[18,12548,12549],{},"In verschiedenen Formaten (Vortrag, Workshop, Diskussion, …) möchten wir Wissen verteilen und unsere Erkenntnisse mit\nden Kollegen challengen. Hier macht es keinen Unterschied, ob der Inhalt aus der aktuellen Arbeit beim Kunden, einem\nR&D-Projekt oder einer Spielerei entstanden ist.",[18,12551,12454,12552,12555],{},[585,12553,10117],{"href":12457,"rel":12554},[589]," schonmal\nausführlicher erklärt)",[12461,12557],{},[18,12559,12560],{},"Ich habe zuletzt über das Thema “Security Testing in Continuous Integration” berichtet, das ich aktuell vertiefe und\nüber das ich dieses Jahr auf Meetups und Konferenzen spreche.",[649,12562,12564],{"id":12563},"security-testing-in-continuous-integration","Security Testing in Continuous Integration",[18,12566,12567],{},"Die meisten aktuell genutzten Programmiersprachen bieten komplexe Frameworks an, mit deren Hilfe man leicht bestehende\nBibliotheken von Dritten einbinden kann, um sich viel Aufwand bei der Implementierung einer Lösung zu sparen. Leider\nbesteht hier die Chance, dass diese Bibliotheken Sicherheitslücken mit sich bringen, über die man aber schnell den\nÜberblick verliert. Da in den meisten Softwareprojekten sowieso schon Continuous Integration benutzt wird, um die\nbekannten Arbeitsschritte wie Tests, Packaging, Release, Deployments und Integrationstests ohne händischen Aufwand der\nEntwickler abzuwickeln, bietet es sich an, Tool-gestützte Sicherheitstests in die bestehenden CI-Jobs einzubinden. Für\ndiverse Sicherheitstests stehen Open-Source-Projekte zur Verfügung.",[18,12569,12570,12571,12576,12577,12584],{},"Nach einer grundlegenden Einführung zu Sicherheit in Softwareprojekten und -betrieb, zur Klassifizierung von\nSicherheitslücken in CVE, CPE und co, wurde anhand eines Java-Projekts auf Basis von SpringBoot und\nMaven ",[585,12572,12575],{"href":12573,"rel":12574},"https://github.com/cy4n/broken",[589],"(Link)"," demonstriert, wie man Schwachstellen in Dependencies mit Hilfe von ",[585,12578,12581],{"href":12579,"rel":12580},"https://www.owasp.org/index.php/OWASP_Dependency_Check",[589],[573,12582,12583],{},"OWASP Dependency-Check"," erkennen kann, ohne viel Ahnung von\nIT-Sicherheit zu haben.",[18,12586,12587,12588,986],{},"Weiterhin wurde auf Basis eines bereitgestellten Docker-Images (Dockerfile im o.g. github-repo) gezeigt, dass auch im\nBetrieb leider viel schiefgehen kann, wenn man auf veraltete oder unbekannte Docker-Container setzt. Zum Scannen nach\nbekannten Schwachstellen in Containern empfiehlt sich der Einsatz von ",[585,12589,12592],{"href":12590,"rel":12591},"https://github.com/coreos/clair",[589],[573,12593,12594],{},"CoreOS Clair",[18,12596,12597,12598,12605],{},"Wenn man die Software dann gebaut und deployed hat, empfiehlt es sich (insofern die Applikation eine API oder Webseite\nanbietet), auch die angebotenen (HTTP-)Endpunkte zu scannen. An dieser Stelle wird keine statische Prüfung über den\nCode oder die installierten Pakete ausgeführt, sondern tatsächlich dynamisch ein Webservice oder eine API angegriffen.\nMit dem ",[585,12599,12602],{"href":12600,"rel":12601},"https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project",[589],[573,12603,12604],{},"OWASP ZAProxy"," lassen sich hier Links\nerkennen (spidern), danach wird versucht, diese Links, Formulare und weitere dynamische Elemente über Query-Parameter,\nFormulardaten und Schadcode anzugreifen (natürlich nur eigene Systeme).",[18,12607,12608],{},"All diese Tools lassen sich mit 2-3 Shell-Befehlen ausführen und sind daher super geeignet, um bestehende\nCI/CD-Pipelines zu ergänzen. Alle erlauben das Whitelisting von bestimmten Schwachstellen, so dass man sich wirklich\nauf neue Schwachstellen konzentrieren kann, um diese schnell (je nach Priorität) zu beheben oder Updates auszuführen.",[18,12610,12611],{},"Im Anschluss an die Präsentation und Demo haben einige Teilnehmer noch diskutiert, wie man nun mit den gefundenen\nSchwachstellen umgehen sollte, sowohl technisch als auch im Prozess der Weiterentwicklung, z.B. wer den Fix priorisiert\nund ausführt.",[12461,12613],{},[18,12615,12616,12617,12621],{},"Die Folien findet man ",[585,12618,10117],{"href":12619,"rel":12620},"https://github.com/cy4n/talk-securitytesting/blob/master/securitytesting_slides.pdf",[589],", ein\nausführlicher Artikel zu diesem Thema ist in Arbeit.",{"title":48,"searchDepth":86,"depth":86,"links":12623},[12624],{"id":12563,"depth":126,"text":12564},[614],"2019-05-13T16:01:48","(Fast) jeden Freitag treffen sich interessierte synyxer in der Schule@synyx, um sich gegenseitig etwas Neues\\nbeizubringen.","https://synyx.de/blog/schulesynyx-security-testing/",{},"/blog/schulesynyx-security-testing",{"title":12536,"description":12546},"blog/schulesynyx-security-testing",[],"Freitags treffen sich interessierte synyxer in der Schule@synyx, um sich gegenseitig Neues beizubringen. Christian Kühn informierte in diesem Rahmen über “Security Testing in Continuous Integration”.","glJT62QMdgIAuJ3I57VV-cS4labBwL0DNFUyz1Kmu_s",{"id":12637,"title":12638,"author":12639,"body":12640,"category":13043,"date":13044,"description":13045,"extension":617,"link":13046,"meta":13047,"navigation":499,"path":13048,"seo":13049,"slug":12644,"stem":13050,"tags":13051,"teaser":13054,"__hash__":13055},"blog/blog/java-deep-dive-class-file-format-for-debug-information.md","Java Deep Dive – class file format for debug information",[11847],{"type":11,"value":12641,"toc":13037},[12642,12645,12648,12651,12660,12666,12677,12682,12685,12695,12699,12702,12713,12716,12725,12730,12755,12772,12777,12792,12798,12804,12809,12813,12823,12827,12830,12837,12842,12849,12854,12861,12869,12907,12910,12915,12918,12921,12930,12933,12939,12943,12946,12949,12973,12982,12985,12988,12992,13008,13015,13035],[14,12643,12638],{"id":12644},"java-deep-dive-class-file-format-for-debug-information",[18,12646,12647],{},"We are developing Apps for Android and one important aspect of our pipeline is automated device testing using Espresso.\nMy co-worker recently had to debug an Android test that would fail on only one of our various devices.",[18,12649,12650],{},"The test claimed that one of the checked Views was not visible (enough), under visual inspection the User Interface\nlooked fine though. To find out exactly why the offending View made Espresso fail, he decided to debug into the\nViewMatcher.",[18,12652,12653,12654,12659],{},"We were surprised that no variable values where available when debugging inside\nEspresso",[585,12655,12658],{"href":12656,"rel":12657},"https://synyx.de/blog/2019-03-14-android-debug-class-format/?page=1#1",[589],"[1]",". There was no way for us to read\nthe values of the offending View-object:",[18,12661,12662],{},[1794,12663],{"alt":12664,"src":12665},"Code Beispiel","https://media.synyx.de/uploads/2019/03/matcher-no-debug-1-cut-768x718.png",[18,12667,12668,12669,12672,12673,12676],{},"Here we even get the warning ",[50,12670,12671],{},"Variables are not avaible","when at least the local variable ",[573,12674,12675],{},"areaPercent"," with its value\nshould be displayed:",[18,12678,12679],{},[1794,12680],{"alt":12664,"src":12681},"https://media.synyx.de/uploads/2019/03/matcher-no-debug-2-768x634.png",[18,12683,12684],{},"Debugging our own code was working as expected, so the IDE and debugger itself seemed to work fine. We suspected that\nthe Espresso library might miss some critical debug information. The test was fixed shortly after, but we were still\ncurious about the behaviour of the debugger and wanted to know if the initial guess was correct.",[18,12686,12687,12690,12691,12694],{},[573,12688,12689],{},"What"," exactly is stored in java classes for debugging? ",[573,12692,12693],{},"How"," is that information stored? We will find out right here.",[3469,12696,12698],{"id":12697},"debug-information-format-in-java-class-files","Debug information format in Java class files",[18,12700,12701],{},"A class file can contain three different pieces of debug information:",[577,12703,12704,12707,12710],{},[580,12705,12706],{},"line information",[580,12708,12709],{},"local variable information",[580,12711,12712],{},"source information",[18,12714,12715],{},"This is explained when calling",[43,12717,12719],{"className":288,"code":12718,"language":290,"meta":48,"style":48},"javac -help\n",[50,12720,12721],{"__ignoreMap":48},[53,12722,12723],{"class":55,"line":56},[53,12724,12718],{},[18,12726,12727],{},[1794,12728],{"alt":12664,"src":12729},"https://media.synyx.de/uploads/2019/03/javac-options.png",[18,12731,12732,12733,12736,12737,12740,12741,12744,12745,12750,12751,12754],{},"Compiling with",[50,12734,12735],{},"javac","using default settings results in classes containing ",[573,12738,12739],{},"lines"," and ",[573,12742,12743],{},"vars","\ninformation",[585,12746,12749],{"href":12747,"rel":12748},"https://synyx.de/blog/2019-03-14-android-debug-class-format/?page=1#2",[589],"[2]",". Existing class files can be\nanalyzed using the ",[50,12752,12753],{},"javap","tool that is part of the JDK.",[18,12756,12757,12758,12763,12764,12767,12768,12771],{},"We decided to download",[585,12759,12762],{"href":12760,"rel":12761},"https://synyx.de/blog/2019-03-14-android-debug-class-format/?page=1#3",[589],"[3]"," the Espresso core\nlibrary from a maven repository, unzip the Android ",[573,12765,12766],{},"aar","-Archive and finally unzip the contained classes.jar. Running\n",[50,12769,12770],{},"javap -l"," on our ViewMatchers class gave the following output:",[18,12773,12774],{},[1794,12775],{"alt":12664,"src":12776},"https://media.synyx.de/uploads/2019/03/javap-debuggable-768x158.png",[18,12778,12779,12780,12783,12784,12787,12788,12791],{},"Adding the ",[573,12781,12782],{},"-l"," option should print line ",[27,12785,12786],{},"and"," variable information but we only find ",[573,12789,12790],{},"LineNumberTable"," entries.",[18,12793,12794,12795,12797],{},"Using a hex-editor we can verify that the class file seems to contain a ",[573,12796,12790],{}," of some kind:",[18,12799,12800],{},[1794,12801],{"alt":12802,"src":12803},"espresso test","https://media.synyx.de/uploads/2019/03/bless-espresso-768x439.png",[18,12805,12806,12807,7317],{},"We check one of our own, fully debuggable class files again with ",[50,12808,12770],{},[18,12810,12811],{},[1794,12812],{"alt":12664,"src":12776},[18,12814,12815,12816,12818,12819,12822],{},"We can see the ",[573,12817,12790],{}," as well as a ",[573,12820,12821],{},"LocalVariableTable"," that was missing in the ViewMatchers class.",[3469,12824,12826],{"id":12825},"assumption-verification","Assumption & Verification",[18,12828,12829],{},"At this point we can assume:",[18,12831,12832],{},[27,12833,12834,12836],{},[573,12835,12821],{}," is required to debug variable values",[18,12838,12839],{},[573,12840,12841],{},"Comparing behaviour and class content between Espresso and our own code we can assume LocalVariableTable is required to\ndebug variable values.",[18,12843,12844],{},[27,12845,12846,12848],{},[573,12847,12790],{}," is required to use breakpoints",[18,12850,12851],{},[573,12852,12853],{},"Unrelated to the above behaviour: A single line of source code can be translated to many bytecode statements. Placing a\nbreakpoint on a source code line requires a debugger to know which bytecode statement to break at. Therefor, omitting\nthe LineNumberTable should break the ability to set and trigger breakpoints.",[18,12855,12856,12857,12860],{},"We will try to verify both of these assumptions by compiling our own class using ",[50,12858,12859],{},"javac -g:none"," and observe how the\ndebug behaviour changes.",[18,12862,12863,12864],{},"The Android Gradle/Groovy build is sometimes difficult to work with, this is a solution to add arguments to the java\ncompiler ",[585,12865,12868],{"href":12866,"rel":12867},"https://synyx.de/blog/2019-03-14-android-debug-class-format/?page=1#4",[589],"[4]",[43,12870,12872],{"className":288,"code":12871,"language":290,"meta":48,"style":48},"allprojects {\n gradle.projectsEvaluated {\n tasks.withType(JavaCompile) {\n options.compilerArgs << "-g:none"\n }\n }\n}\n",[50,12873,12874,12879,12884,12889,12894,12899,12903],{"__ignoreMap":48},[53,12875,12876],{"class":55,"line":56},[53,12877,12878],{},"allprojects {\n",[53,12880,12881],{"class":55,"line":86},[53,12882,12883],{}," gradle.projectsEvaluated {\n",[53,12885,12886],{"class":55,"line":126},[53,12887,12888],{}," tasks.withType(JavaCompile) {\n",[53,12890,12891],{"class":55,"line":163},[53,12892,12893],{}," options.compilerArgs << "-g:none"\n",[53,12895,12896],{"class":55,"line":186},[53,12897,12898],{}," }\n",[53,12900,12901],{"class":55,"line":221},[53,12902,860],{},[53,12904,12905],{"class":55,"line":242},[53,12906,282],{},[18,12908,12909],{},"After cleaning & rebuilding our app we restart the test and try to debug:",[18,12911,12912],{},[1794,12913],{"alt":12664,"src":12914},"https://media.synyx.de/uploads/2019/03/debug-own-no-debuginfo-768x301.png",[18,12916,12917],{},"We can see the breakpoint is disabled! Additionally, after starting the test we fell right through to the next\nstackframe in ViewMatchers. We did not stop at the breakpoint! Breaking in ViewMatchers and dropping down the stack we\ncan also confirm we there is no local variable information available.",[18,12919,12920],{},"Checking the output of",[43,12922,12924],{"className":288,"code":12923,"language":290,"meta":48,"style":48},"javap -l\n",[50,12925,12926],{"__ignoreMap":48},[53,12927,12928],{"class":55,"line":56},[53,12929,12923],{},[18,12931,12932],{},"again we can verify the missing debug information:",[18,12934,12935],{},[1794,12936],{"alt":12937,"src":12938},"Code Ausgabe","https://media.synyx.de/uploads/2019/03/javap-own-nondebuggable-768x183.png",[3469,12940,12942],{"id":12941},"final-thoughts","Final Thoughts",[18,12944,12945],{},"We have seen how the IDEs debug behaviour and capabilities relate to the information embedded in the class files.",[18,12947,12948],{},"This is relevant to Android just as well as “traditional” java applications. Android also relies on the information\nembedded in the class files, as we have seen when unpacking the Espresso-Core AAR archive. We were able to use basic\ntools from the JDK (javap) to analyze Espresso classes.",[18,12950,12951,12952,12955,12956,12958,12959,12962,12963,12966,12967,12972],{},"We still don’t know ",[27,12953,12954],{},"why"," Espresso is missing the ",[573,12957,12821],{},". Building our App in the ",[573,12960,12961],{},"Release","-Variant\nwith ",[573,12964,12965],{},"debuggable=false"," did still include the full debug information. It is possible that Proguard is responsible for\nstripping the information from the class files, it seems at least\ncapable ",[585,12968,12971],{"href":12969,"rel":12970},"https://synyx.de/blog/2019-03-14-android-debug-class-format/?page=1#5",[589],"[5]"," to do so. Unfortunately, the\ndocumentation for ProGuard is not explaining when and how debug information is manipulated.",[18,12974,12975,12976,12981],{},"For a deeper technical reading of the class file format you can consult the documentation provided by\nOracle ",[585,12977,12980],{"href":12978,"rel":12979},"https://synyx.de/blog/2019-03-14-android-debug-class-format/?page=1#6",[589],"[6]",". Be careful to check the correct\njava version.",[18,12983,12984],{},"And finally, the next time you debug an application you hopefully have a better understanding of some of the involved\nparts.",[18,12986,12987],{},"We might possibly explore the remaining open questions in a future blog post.",[3469,12989,12991],{"id":12990},"references","References",[5899,12993,12994,13000,13006],{},[580,12995,12996],{},[585,12997,12998],{"href":12998,"rel":12999},"https://developer.android.com/training/testing/espresso",[589],[580,13001,13002],{},[585,13003,13004],{"href":13004,"rel":13005},"https://www.logicbig.com/how-to/java-command/compile-with-debug-info.html",[589],[580,13007],{},[18,13009,13010,13011],{},"e.g.: ",[585,13012,13013],{"href":13013,"rel":13014},"https://mvnrepository.com/artifact/com.android.support.test.espresso/espresso-core/3.0.2",[589],[5899,13016,13017,13023,13029],{"start":163},[580,13018,13019],{},[585,13020,13021],{"href":13021,"rel":13022},"https://stackoverflow.com/a/42297051",[589],[580,13024,13025],{},[585,13026,13027],{"href":13027,"rel":13028},"https://stackoverflow.com/a/5258014",[589],[580,13030,13031],{},[585,13032,13033],{"href":13033,"rel":13034},"https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.12",[589],[607,13036,989],{},{"title":48,"searchDepth":86,"depth":86,"links":13038},[13039,13040,13041,13042],{"id":12697,"depth":86,"text":12698},{"id":12825,"depth":86,"text":12826},{"id":12941,"depth":86,"text":12942},{"id":12990,"depth":86,"text":12991},[614],"2019-03-14T12:15:02","We are developing Apps for Android and one important aspect of our pipeline is automated device testing using Espresso.\\nMy co-worker recently had to debug an Android test that would fail on only one of our various devices.","https://synyx.de/blog/java-deep-dive-class-file-format-for-debug-information/",{},"/blog/java-deep-dive-class-file-format-for-debug-information",{"title":12638,"description":12647},"blog/java-deep-dive-class-file-format-for-debug-information",[5834,290,13052,13053],"mobile","test","We are developing Apps for Android and one important aspect of our pipeline is automated device testing using Espresso. My co-worker recently had to debug an Android test that would fail on only one of our various devices.","lL-cpl7U2Hib5KMqgnEiAPswVdD5Ewyxua6xj3G-aJQ",{"id":13057,"title":13058,"author":13059,"body":13060,"category":13191,"date":13192,"description":13193,"extension":617,"link":13194,"meta":13195,"navigation":499,"path":13196,"seo":13197,"slug":13199,"stem":13200,"tags":13201,"teaser":13202,"__hash__":13203},"blog/blog/von-schlipstraegern-raketenwissenschaften-und-einhoernern-die-geschichte-eines-entwicklers-bei-synyx.md","Von Schlipsträgern, Raketenwissenschaften und Einhörnern – Die Geschichte eines Entwicklers bei synyx",[11916],{"type":11,"value":13061,"toc":13185},[13062,13065,13074,13079,13082,13088,13092,13095,13098,13101,13105,13114,13126,13129,13155,13161,13165,13168,13174,13176,13179],[14,13063,13058],{"id":13064},"von-schlipsträgern-raketenwissenschaften-und-einhörnern-die-geschichte-eines-entwicklers-bei-synyx",[18,13066,13067,13068,13073],{},"Ein dickes Grinsen steht dem Vorlesenden ins Gesicht, als er zum Abschluss des Dailys den Spruch des Tages aus\ndem ",[585,13069,13072],{"href":13070,"rel":13071},"http://www.der-falsche-kalender.de/",[589],"Falschen Kalender"," von Marc-Uwe Kling präsentiert:",[6653,13075,13076],{},[18,13077,13078],{},"“Glück ist ganz einfach. Gute Gesundheit und ein schlechtes Gedächtnis.\" — Dorie",[18,13080,13081],{},"Das ist der Sebastian, genannt Seb. In der Kürze liegt die Würze, außer es geht um die Benennung von sprechenden\nJava-Methoden. Der Seb ist nicht nur leidenschaftlicher Erklimmer von Felsbrocken aller Art — und das sogar an der\nfrischen Luft — sondern auch ein synyx Urgestein.",[18,13083,13084],{},[1794,13085],{"alt":13086,"src":13087},"Seb am Arbeiten","https://media.synyx.de/uploads/2019/02/seb1-768x512.jpg",[3469,13089,13091],{"id":13090},"von-schlipsträgern-und-defekten-live-cds","Von Schlipsträgern und defekten Live-CDs",[18,13093,13094],{},"Einst, in einer fast vergessenen Ära seines Studentenlebens — es war das Jahr 2007 — schlenderte der Seb auf einer\nFirmenkontaktmesse umher. Auf der Suche nach Antworten auf die wirklich wichtigen Fragen des Lebens stieß er so auf den\nMessestand einer kleinen Klitsche namens synyx. Nach einem kleinen Plausch mit den zwei lässigen Gestalten, die da so\nrumhingen, war für Seb klar: Hier hatte er keine Schlips tragenden Dudes von der Personalabteilung vor sich, sondern\nTechies aus Leidenschaft, die wissen, wovon sie sprechen. Auf dieses Arbeitsumfeld hatte er richtig Bock.",[18,13096,13097],{},"Das Giveaway in Form der sagenumwobenen Minos Live-CD — ein damals von synyx entwickelter modularer Baukasten für\nUnternehmenssoftware — stellte sich zuhause zwar als inkompatibel mit seiner Hardware heraus, aber das störte den Seb\nnicht weiter. Denn das Gesamtbild stimmte. Prompt wurde aus einer Bewerbung ein Arbeitsvertrag. Seb stieg bei synyx als\nstudentische Hilfskraft ein, brachte seine Diplomarbeit erfolgreich hinter sich und blieb. Bis zum heutigen Tage.",[18,13099,13100],{},"Mit mittlerweile über 65 Mitarbeitern lässt sich synyx längst nicht mehr als kleine Klitsche bezeichnen. Doch auch heute\nnoch sucht man hier vergeblich nach Schlipsträgern und einer Personalabteilung. Minos Live-CDs sind schon eine ganze\nWeile Geschichte, aber wer weiß, was die Zukunft noch bringt. Irgendwann gilt ja fast alles wieder als retro.",[3469,13102,13104],{"id":13103},"von-hölzernen-usb-sticks-und-raketenwissenschaften","Von hölzernen USB-Sticks und Raketenwissenschaften",[18,13106,13107,13108,13113],{},"Da der Seb praktisch zum synyx Inventar gehört, ist er auch ein waschechter Pionier in einem großen Kundenprojekt. Er\nsaß in vorderster Reihe, als im Jahr 2010 die wilde Fahrt mit dem\nLogistikunternehmen ",[585,13109,13112],{"href":13110,"rel":13111},"https://www.contargo.net/",[589],"Contargo"," begann.",[18,13115,13116,13119,13120,13125],{},[573,13117,13118],{},"“Schau‘ dir mal den Code an”"," — hieß es, als er eines schönen Tages einen kunstvollen USB-Stick aus Holz in die Hand\ngedrückt bekam. Dies war nicht nur die Geburtsstunde eines aufregenden ",[585,13121,13124],{"href":13122,"rel":13123},"https://synyx.de/was/codeclinic",[589],"Code Clinic","\nProjektes, sondern auch einer bis zum heutigen Tage andauernden Partnerschaft zwischen synyx und Contargo. Mittlerweile\ngibt es unzählige freshe Projekte, die synyx für und mit Contargo auf die Straße bringt.",[18,13127,13128],{},"Wie es sich für einen alten Hasen gehört, hat der Seb schon viele Projekte und Teams durchlaufen. Heute ist er Teil des\ngrandiosen Team Rocket. Mit Raketenwissenschaften hat das zwar weniger zu tun, aber schließlich gehören Raketen auch (\nnoch) nicht zur Transportkette.",[18,13130,13131,13132,13135,13136,13139,13140,13145,13146,13151,13152],{},"Team Rocket ist zuhause in einer verteilten System-Landschaft. Manch einer würde hier vielleicht den Begriff\n",[573,13133,13134],{},"“Microservices”"," raushauen. Doch da das einen gewissen Beigeschmack von ",[573,13137,13138],{},"“Wir wollen voll hipp und trendy wirken”","\nerregen könnte, spricht der Seb lieber von vielfältigen Projekten, meist basierend\nauf ",[585,13141,13144],{"href":13142,"rel":13143},"http://spring.io/projects/spring-boot",[589],"Spring Boot",", die über ",[585,13147,13150],{"href":13148,"rel":13149},"https://www.amqp.org/",[589],"AMQP"," miteinander\nkommunizieren. Allein beim Team Rocket liegen rund 50 solcher Projekte an der Zahl. Da den Durchblick zu behalten, ist\nnicht immer leicht. Doch zum Glück heißt es trotzdem nur selten: ",[573,13153,13154],{},"“Das war mal wieder ein Schuss in den Ofen!”",[18,13156,13157],{},[1794,13158],{"alt":13159,"src":13160},"Kalender zitat: Um Jahre voraus","https://media.synyx.de/uploads/2019/02/seb2-768x512.jpg",[3469,13162,13164],{"id":13163},"von-code-monkeys-und-einhörnern","Von Code Monkeys und Einhörnern",[18,13166,13167],{},"Empathische Informatiker mit kommunikativen Skills — das sind doch bloß Fabelwesen wie Einhörner, oder? Tja, falsch\ngedacht. Code Monkeys, die im stillen Kämmerlein präzise Anforderungen in die Tasten hauen, wären bei synyx reichlich\nfehl am Platze. Stattdessen heißt es hier mitdenken, mitdenken und — Überraschung — mitdenken.",[18,13169,13170,13173],{},[573,13171,13172],{},"“Was bringt dem Kunden (den größten) Mehrwert?”"," — Diese Frage steht stets im Vordergrund und erfordert Empathie für\nden Kunden. Die Teammitglieder bringen eigenständig Themen in die Plannings mit ein und sprechen Schwachstellen in\nPlanung, Umsetzung und Technologien an. Natürlich entscheidet am Ende der Kunde, welche Themen wann eingeplant werden,\ndoch die Verantwortung für gut benutzbare Software liegt letztlich bei allen Beteiligten. Genau das gibt der täglichen\nArbeit erst die richtige Würze.",[3469,13175,12196],{"id":12195},[18,13177,13178],{},"Du ziehst Techies aus Leidenschaft Schlipsträgern vor und hast Bock, eigenverantwortlich an spannenden Projekten mit\nmodernen Technologien mitzuwirken?",[18,13180,13181,13182,13184],{},"Dann melde Dich bei uns unter ",[585,13183,10102],{"href":10101}," und erzähl uns, wer Du bist und was Du so kannst.\nZeugnisse sind uns nicht so wichtig. Statt Deine Grundschulnoten zu analysieren, wollen wir lieber mehr über Deine\nInteressen und Fähigkeiten erfahren. Wir freuen uns, von Dir zu hören!",{"title":48,"searchDepth":86,"depth":86,"links":13186},[13187,13188,13189,13190],{"id":13090,"depth":86,"text":13091},{"id":13103,"depth":86,"text":13104},{"id":13163,"depth":86,"text":13164},{"id":12195,"depth":86,"text":12196},[614],"2019-02-12T10:47:40","Ein dickes Grinsen steht dem Vorlesenden ins Gesicht, als er zum Abschluss des Dailys den Spruch des Tages aus\\ndem Falschen Kalender von Marc-Uwe Kling präsentiert:","https://synyx.de/blog/von-schlipstraegern-raketenwissenschaften-und-einhoernern-die-geschichte-eines-entwicklers-bei-synyx/",{},"/blog/von-schlipstraegern-raketenwissenschaften-und-einhoernern-die-geschichte-eines-entwicklers-bei-synyx",{"title":13058,"description":13198},"Ein dickes Grinsen steht dem Vorlesenden ins Gesicht, als er zum Abschluss des Dailys den Spruch des Tages aus\ndem Falschen Kalender von Marc-Uwe Kling präsentiert:","von-schlipstraegern-raketenwissenschaften-und-einhoernern-die-geschichte-eines-entwicklers-bei-synyx","blog/von-schlipstraegern-raketenwissenschaften-und-einhoernern-die-geschichte-eines-entwicklers-bei-synyx",[3121,12433,12434,12221],"Ein ganz normaler Morgen. Ein ganz normales Daily. Die versammelte Mannschaft.","OEqZ98Gd5nLrPjyxiPm6Kxbmyf8khdQ3bhmWOwdZYUc",{"id":13205,"title":13206,"author":13207,"body":13210,"category":13356,"date":13357,"description":13358,"extension":617,"link":13359,"meta":13360,"navigation":499,"path":13361,"seo":13362,"slug":13214,"stem":13364,"tags":13365,"teaser":13369,"__hash__":13370},"blog/blog/devoxx4kids-goes-iot.md","Devoxx4Kids goes IoT",[13208,13209],"dfuchs","dasch",{"type":11,"value":13211,"toc":13351},[13212,13215,13229,13235,13238,13241,13250,13254,13261,13267,13270,13274,13281,13287,13293,13296,13300,13303,13309,13312,13315,13334,13342,13348],[14,13213,13206],{"id":13214},"devoxx4kids-goes-iot",[18,13216,13217,13221,13222,13224],{},[1794,13218],{"alt":13219,"src":13220},"YouTube","http://localhost:8080/wp-content/plugins/borlabs-cookie/assets/images/cb-no-thumbnail.png?rel=0&modestbranding=1&iv_load_policy=3","\nMit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.",[6730,13223],{},[585,13225,13228],{"href":13226,"rel":13227},"https://policies.google.com/privacy",[589],"Mehr erfahren",[18,13230,13231],{},[585,13232,13234],{"href":13233},"#","Video laden",[18,13236,13237],{},"YouTube immer entsperren",[18,13239,13240],{},"Devoxx4Kids 2018 | Workshops Arduino, Calliope und Mindstorms",[18,13242,13243,13244,13249],{},"Bei der neunten Devoxx4Kids in Karlsruhe am 20.10.2018 stand Elektronik und das Internet der Dinge hoch im Kurs! In\nden Räumlichkeiten der ",[585,13245,13248],{"href":13246,"rel":13247},"https://karlshochschule.de/de/",[589],"Karlshochschule"," konnten insgesamt 30 Kinder zusammen mit\nunseren 19 Mentoren spielerisch Konzepte der Elektronik und Grundlagen der Programmierung erlernen. Für die Herbst\nAusgabe der Devoxx4Kids wurden dieses Mal drei komplett neue Workshop ausgearbeitet um auch “Wiederholungstätern” unter\nden Kindern viel Spaß und Spannung bieten zu können. Für die Herbstausgabe der Devoxx4Kids wurden dieses Mal drei\nkomplett neue Workshop ausgearbeitet, um auch “Wiederholungstätern” unter den Kindern viel Spaß und Spannung bieten zu\nkönnen.",[3469,13251,13253],{"id":13252},"arduino","Arduino",[18,13255,3316,13256,13260],{},[585,13257,13253],{"href":13258,"rel":13259},"https://www.arduino.cc/",[589]," Workshop tauchten die Kids ab in die Elektronik. Mit Steckbrett, LEDs und Sensoren\nging es darum, erste Schaltungen zu stecken und damit eine kleine Temperatur Messstation aufzubauen.",[18,13262,13263],{},[1794,13264],{"alt":13265,"src":13266},"LEDs im Detail","https://media.synyx.de/uploads/2019/03/06-768x512.jpg",[18,13268,13269],{},"Was ist nötig, um eine LED zum Leuchten zu bringen?",[3469,13271,13273],{"id":13272},"calliope","Calliope",[18,13275,3009,13276,13280],{},[585,13277,13273],{"href":13278,"rel":13279},"https://calliope.cc/",[589]," ist eine kleine Platine mit vielen Sensoren, Lautsprecher und einem kleinen\neinfachen Display. Damit ausgestattet wurden geheime Nachrichten versendet oder aber auch die Lautstärke im Raum\ngemessen.",[18,13282,13283],{},[1794,13284],{"alt":13285,"src":13286},"Calliope Lautstärke Messungen","https://media.synyx.de/uploads/2019/03/07-768x512.jpg",[18,13288,13289],{},[1794,13290],{"alt":13291,"src":13292},"calliope übungen auf der devoxx4kids","https://media.synyx.de/uploads/2019/03/08-768x512.jpg",[18,13294,13295],{},"Die Calliope-Sterne zur Lautstärke Messung: Wenn es zu laut ist, wird die Ampel rot!",[3469,13297,13299],{"id":13298},"mbot","MBot",[18,13301,13302],{},"Dieser Workshop war der Liebling der Kinder! Hier kam richtig Fahrt auf! Und das nicht nur weil der MBot durch sein\nLächeln besticht sondern auch die Bewegung mit ins Spiel kam. Ein MBot ist kleiner Roboter welcher sich mit Motoren\nfortbewegen kann. Über Abstandssensoren kann er Hindernissen ausweichen und somit auf seine Umwelt reagieren.",[18,13304,13305],{},[1794,13306],{"alt":13307,"src":13308},"mbots Test auf der Devoxx4kids","https://media.synyx.de/uploads/2019/03/09-768x512.jpg",[18,13310,13311],{},"Die MBots hatten es schwer, einen Weg aus dem Käfig zu finden.",[18,13313,13314],{},"Um die Ergebnisse des Tages festzuhalten, konnten die Kinder dieses Mal ihre ersten kleinen Programme auf einem\ngesponsorten USB-Stick mit nach Hause nehmen.",[18,13316,13317,13318,13322,13323,13328,13329,13333],{},"Ein großer Dank geht natürlich an die Mentoren und unsere Sponsoren ",[585,13319,3122],{"href":13320,"rel":13321},"https://synyx.de",[589],"\nund ",[585,13324,13327],{"href":13325,"rel":13326},"http://emendare.de",[589],"Emendare"," ohne die die Devoxx4Kids nicht möglich wäre. Außerdem sind wir sehr dankbar für die\nRäumlichkeiten in der ",[585,13330,13248],{"href":13331,"rel":13332},"http://karlshochschule.de",[589],"!",[18,13335,13336,13337,13341],{},"Die Materialien der verschiedenen Workshops der Devoxx4Kids Deutschland sind\nauf ",[585,13338,3573],{"href":13339,"rel":13340},"https://github.com/Devoxx4KidsDE",[589]," zu finden.",[18,13343,13344],{},[1794,13345],{"alt":13346,"src":13347},"devoxx4kids Abschied","https://media.synyx.de/uploads/2019/03/10-768x512.jpg",[18,13349,13350],{},"Bis zum nächsten Mal!",{"title":48,"searchDepth":86,"depth":86,"links":13352},[13353,13354,13355],{"id":13252,"depth":86,"text":13253},{"id":13272,"depth":86,"text":13273},{"id":13298,"depth":86,"text":13299},[3747,614],"2018-11-30T11:57:58","\\nMit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.Mehr erfahren","https://synyx.de/blog/devoxx4kids-goes-iot/",{},"/blog/devoxx4kids-goes-iot",{"title":13206,"description":13363},"\nMit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.Mehr erfahren","blog/devoxx4kids-goes-iot",[13366,13367,13368],"devoxx4dis","iot","karlsruhe","Bei der neunten Devoxx4Kids in Karlsruhe am 20.10.2018 stand Elektronik und das Internet der Dinge hoch im Kurs! In den Räumlichkeiten der Karlshochschule konnten insgesamt 30 Kinder zusammen mit unseren 19 Mentoren spielerisch Konzepte der Elektronik und Grundlagen der Programmierung erlernen.","GsYHF7tRhPozLBRdH5SQkthit1kuegh6znaVr6CycPA",{"id":13372,"title":13373,"author":13374,"body":13375,"category":13462,"date":13463,"description":13464,"extension":617,"link":13465,"meta":13466,"navigation":499,"path":13467,"seo":13468,"slug":13379,"stem":13469,"tags":13470,"teaser":13474,"__hash__":13475},"blog/blog/marketing-bei-synyx-was-geht-denn-da-so.md","Marketing bei synyx – Was geht denn da so?",[11916],{"type":11,"value":13376,"toc":13457},[13377,13380,13386,13389,13392,13398,13402,13405,13411,13414,13417,13420,13424,13427,13433,13436,13442,13445,13449,13452],[14,13378,13373],{"id":13379},"marketing-bei-synyx-was-geht-denn-da-so",[18,13381,13382,13385],{},[573,13383,13384],{},"„Guten Morgen, liebe Kellerkinder“"," — schallt eine sonore Stimme durch das jäh erhellte Großraumbüro.",[18,13387,13388],{},"Das ist der Thomas. Der Thomas ist der Chef in diesem kuriosen Laden namens synyx. Zumindest einer der drei Chefs. Der\nThomas hat es gerne hell. Er ist die aufgehende Sonne des Marketing Teams und erleuchtet dieses nicht nur mit\nHalogenstrahlern, sondern auch als Product Owner.",[18,13390,13391],{},"Dieses Marketing Team — Wer sind die denn eigentlich und was machen die so den ganzen Tag?",[18,13393,13394],{},[1794,13395],{"alt":13396,"src":13397},"Code with attitude Sticker","https://media.synyx.de/uploads/2019/02/sticker_code-768x576.jpg",[3469,13399,13401],{"id":13400},"ey-dude-wo-kommen-eigentlich-die-geilen-sticker-her","Ey Dude, wo kommen eigentlich die geilen Sticker her?",[18,13403,13404],{},"Es ist 10:30 Uhr an einem nebligen Dienstag im Kreativraum. Drei fröhlich schnatternde Gestalten kritzeln an einer Wand\nherum, die von oben bis unten mit Whiteboards ausgekleidet ist. Konzeptionsmeeting nennen die das. Vielleicht atmen sie\naber auch nur gerne die Dämpfe der Whiteboard-Marker ein.",[18,13406,13407,13410],{},[573,13408,13409],{},"„Ständig twittern wir bloß darüber, was für Hippies wir sind. Dabei haben wir hier nicht nur Barfußhelden und\nLongboardfahrer, die Leute können ja sogar tatsächlich was. Und zwar nicht grad wenig. Das sollten wir viel mehr nach\naußen zeigen.“"," — philosophiert der langhaarige Hippie der Gruppe namens Schdaff.",[18,13412,13413],{},"Eigentlich heißt der Schdaff ja Stephan, aber als Stephan kennt ihn hier niemand. Der Schdaff hat dauernd neue Ideen im\nKopf und redet gerne und viel darüber. Manchmal sagt er sogar etwas Sinnvolles. In diesem Haufen von sonderbaren\nSoftwareentwicklern und bärtigen Admins ist der Schdaff ein kleiner Exot. Der Schdaff ist nämlich\nKommunikationsdesigner.",[18,13415,13416],{},"Im Zoo hält man bedrohte Tierarten meistens pärchenweise. Ähnlich läuft das mit Designern in einer IT-Firma ab. Vor\netwa einem Jahr wurde dem Schdaff ein Partner zur Seite gestellt. Nämlich der Joff. Der Joff ist ebenfalls Designer. Man\nerkennt ihn ganz leicht an seinen Batman-Hausschuhen und der Batman-Maske. Das ist nämlich seine wahre Identität. Aber\npsst, das ist natürlich streng geheim.",[18,13418,13419],{},"Zusammen tüfteln die zwei Paradiesvögel an visuellen Konzepten herum, bis aus Ideen und wilden Kritzeleien echt geile\nDinge herauspurzeln – von Plakaten und Icons, bis hin zu T-Shirts und Stickern. Die Beiden produzieren heißen Scheiß am\nlaufenden Band.",[3469,13421,13423],{"id":13422},"ja-ist-denn-schon-wieder-weihnachten","Ja, ist denn schon wieder Weihnachten?",[18,13425,13426],{},"Es ist Anfang November. Obwohl die Regale in den Supermärkten bereits seit August mit Lebkuchen bestückt sind, kommt\nWeihnachten wie jedes Jahr völlig überraschend.",[18,13428,13429,13432],{},[573,13430,13431],{},"“Wir müssen uns endlich um die Weihnachtspost kümmern!”"," — ertönt eine besorgte Frauenstimme.",[18,13434,13435],{},"Das ist die Katja. Die Katja ist ein waschechtes synyx Urgestein. Sie ist Teil von synyx, seit es synyx gibt. Und das\nsind inzwischen ein paar Jährchen. Die Katja ist die eierlegende Wollmilchsau des Marketing Teams. Genauer gesagt war\ndie Katja viele Jahre lang ganz alleine das Marketing Team. Die Katja hat den Durchblick und Überblick über so ziemlich\nalles. Sie organisiert Events und Sponsorings, betreibt Kommunikation mit der halben Welt und kümmert sich um alles, was\nin irgendeiner Weise mit Marketing zu tun hat. Dazu gehört zum Beispiel auch die Konzeption und Organisation von\nMerchandise-Artikeln und das Pflegen und Überwachen von Social-Media-Kanälen. Bei der vielen Kommunikation mit\nKollegen und Chefs ist ihr ursprünglich erlernter Beruf der Erzieherin eine ungemeine Hilfe. Denn bei synyx gibt es\nSechsjährige jeden Alters.",[18,13437,13438],{},[1794,13439],{"alt":13440,"src":13441},"Synema Darth Vader und Stormtrooper Figuren","https://media.synyx.de/uploads/2019/02/synema_lichtschwerter-768x512.jpg",[18,13443,13444],{},"Die Katja macht ihren Job echt gern. Oft bezeichnet sie synyx als ihr Baby. Doch was die Katja noch lieber hat, ist das\nMeer. Deshalb hat die Katja leider beschlossen, in den Norden Deutschlands zu ziehen und ihren Posten als eierlegende\nWollmilchsau aufzugeben. Vielleicht ist das mit dem Meer aber auch bloß eine Ausrede, um vor dem beginnenden Umbau der\nRheinbrücke zu fliehen.",[3469,13446,13448],{"id":13447},"eierlegende-marketing-wollmilchsau-mit-durchblick-gesucht","Eierlegende Marketing-Wollmilchsau mit Durchblick gesucht",[18,13450,13451],{},"Was auch immer nun stimmen mag, Katjas anstehender Ausstieg hat dazu geführt, einen Blog Post zu konzipieren, der einen\nauthentischen Einblick in den Arbeitsalltag des Marketing Teams liefern soll. Herausgekommen ist dieser Text. Falls Du,\nlieber Leser, tatsächlich bis hierhin gelesen haben solltest und noch nicht die Hände über dem Kopf zusammengeschlagen\nhast, vielleicht hast Du ja Interesse an einem Job bei synyx als eierlegende Marketing-Wollmilchsau? 😉",[18,13453,13454,13455,13184],{},"Melde Dich doch bei uns unter ",[585,13456,10102],{"href":10101},{"title":48,"searchDepth":86,"depth":86,"links":13458},[13459,13460,13461],{"id":13400,"depth":86,"text":13401},{"id":13422,"depth":86,"text":13423},{"id":13447,"depth":86,"text":13448},[614],"2018-11-29T10:46:42","„Guten Morgen, liebe Kellerkinder“ — schallt eine sonore Stimme durch das jäh erhellte Großraumbüro.","https://synyx.de/blog/marketing-bei-synyx-was-geht-denn-da-so/",{},"/blog/marketing-bei-synyx-was-geht-denn-da-so",{"title":13373,"description":13464},"blog/marketing-bei-synyx-was-geht-denn-da-so",[3121,13471,13472,13473],"design","marketing","unternehmenskommunikation","„Guten Morgen, liebe Kellerkinder“ — schallt eine sonore Stimme durch das jäh erhellte Großraumbüro Das ist der Thomas. Der Thomas ist der Chef in diesem kuriosen Laden namens synyx. Zumindest einer der drei Chefs. Der Thomas hat es gerne hell. Er ist die aufgehende Sonne des Marketing Teams und erleuchtet dieses nicht nur mit Halogenstrahlern, sondern auch als Product Owner Dieses Marketing Team — Wer sind die denn eigentlich und was machen die so den ganzen Tag?","IL-7ErnYK_7GvNrvwj3aF6cLB2kk_1QygLorrdU6Quk",{"id":13477,"title":13478,"author":13479,"body":13480,"category":13577,"date":13578,"description":13579,"extension":617,"link":13580,"meta":13581,"navigation":499,"path":13582,"seo":13583,"slug":13484,"stem":13584,"tags":13585,"teaser":13586,"__hash__":13587},"blog/blog/code-with-attitude-part-1-values.md","Code with Attitude – Part 1: Values",[3920],{"type":11,"value":13481,"toc":13574},[13482,13485,13488,13493,13500,13504,13507,13516,13522,13525,13531,13534,13537,13543,13546,13549,13552,13557,13564,13567],[14,13483,13478],{"id":13484},"code-with-attitude-part-1-values",[18,13486,13487],{},"At synyx we recently came forward with a new tagline, trying to express our general mindset that is distinctive\nconcerning the way we work with clients, the software community and each other. The line is:",[18,13489,13490],{},[27,13491,13492],{},"Code with Attitude",[18,13494,13495,13496,13499],{},"In the instant I heard this simple sentence for the first time it triggered a multitude of associations, memories and\nemotions that I connect with the word “attitude” in conjunction with software development. One after another all the\nsituations from different projects during my time at synyx came to mind, where a certain expression of attitude helped\non the way to success. This tells me that our marketing dudes did an excellent job expressing the synyx mindset in one\npowerful and simple statement and also that I have ",[573,13497,13498],{},"a lot"," to say about it. This is why I want to share my\ninterpretation of “Code with Attitude” within this blog series.",[3469,13501,13503],{"id":13502},"part-1-courage-to-be-true-to-your-values","Part 1 – Courage to be true to your values",[18,13505,13506],{},"As a human being everybody has a bunch of values and moral standards that you deem to be important and that greatly\ninfluence where and how you live and work. Now you are probably thinking of something like “Don’t code guidance software\nfor nuclear weapons” or “If you manager tells you to tweak the emission control software for the new car model – say\nno!”. Although these are obvious examples, this is not quite what I mean as I have never been in an extreme situation\nlike this – nor have 99% of software developers. What I mean is a set of values, that influence your day-to-day work,\nlike the dedication to quality and sustainability, respectful communication or keeping an open mind.",[18,13508,13509,13510,13515],{},"Behind the term “your values” lies more complexity than you might expect. It does not only mean your personal,\nindividual values but also those ",[585,13511,13514],{"href":13512,"rel":13513},"https://synyx.de/wer/werte/",[589],"of your employer"," and – if your employer is a service\nprovider – even the values of your clients. If you are working for your client it is in his best interest when you take\nhis sense of what is right or wrong into account for the actions you take or don’t take. Ideally those three value\nsystems should be mostly overlapping. If they are heavily misaligned this is a situation that you should not be in.",[18,13517,13518],{},[1794,13519],{"alt":13520,"src":13521},"Synyx Werte: Nachhaltigkeit, Soziale Verantwortung, Auf dem Weg zur Exzellenz, Leidenschaft, Eigenverantwortung, offen & ehrlich","https://media.synyx.de/uploads/2019/03/synyx_values-768x432.png",[18,13523,13524],{},"The synyx values - sustainability, social responsibility, pursuit of excellence, passion, individuality,\nself-responsibility, honest&candor",[18,13526,13527,13528,986],{},"Becoming aware of these values is only the first step. The second one is to venerate and defend them, which often needs\none of the core agile values – ",[573,13529,13530],{},"courage",[18,13532,13533],{},"In fact I am convinced that it is an integral part of our job to bring up the courage to act on our own and our client’s\nvalues. But what does this mean in practice?",[18,13535,13536],{},"There are countless examples of situations where that courage is needed. There is the business guy from the “quality is\nkey” company, who wants to cut software tests to deliver faster to the clients. There are multi-team environments in\nthe “collaborative mind” company where every team is keeping to their own instead of collaborating, feeding to the “Us\nand Them” mindset. There is the Project Manager in the “customer centric” company, conducting a\ndesign-up-front-waterfall-big-bang-release project without the feedback of one single customer. There is the\nwhatever-guy from the “security first” company not caring about data encryption. There is the developer in the “open\nsource” company claiming ownership of “his” part of code within the project. There are quality engineers in the “work\nsmarter not harder” company clicking through thousands of pages of manual testing plans. If you witness any of those or\nsimilar situations at your employer or client, it is your obligation as a rational and professional person to address\nand try to improve the issue. More often than not I observe external contractors or employees resigning to the\ncircumstances thinking “Fuck it, I’m doing my job and getting paid for what I am told”. In my opinion this is the\nopposite of “doing your job”. Your job is to do what is best for your employer/client/project and that means to bring up\nthe courage to question established practices, to actively address problems, to call out bullshit if necessary.",[18,13538,13539],{},[1794,13540],{"alt":13541,"src":13542},"Scrum Werte","https://media.synyx.de/uploads/2019/03/agile_values.png",[18,13544,13545],{},"For many people this might seem counter-intuitive. The conservative employer thinks he needs people, who do as they are\ntold. The conservative employee keeps to himself being afraid to offend anybody and fearing the repercussions. In fact\nthe opposite is true and both would highly benefit from “showing more attitude”. As an employer you should embrace\nemployees and external contractors, who question things and who challenge everything against your values and their own\nvalues. This is the only way to improve, to produce sustainable products, to come closer to excellence and to create the\nsolutions you really want! As an employee questioning things and standing up for your values makes your dayjob more\nexciting and meaningful instantly! It gives you the chance to do something that you really care about from your own\naccord, thus increasing your motivation and quality of life and consequentially improving the quality of your work\nresults!",[18,13547,13548],{},"For me this is one of the core parts of “Code with attitude” and one of the most basic mindsets that we live and breathe\nhere at synyx. It is the attitude to have the strong intention to understand our client’s value system and needs and to\nhave the courage to actively act in their best interest, while incorporating our own values for our client’s good.",[18,13550,13551],{},"During my work in different projects this mindset has helped me and our clients countless times. I don’t know how often\nwe had to defend our values of sustainability, quality and excellence by emphasizing the importance of things like code\nquality, automated tests, slack time and refactorings to keep a project afloat or even rescue it from certain failure.\nThere were times when clients needed to be reminded of their own core values like customer friendliness, innovativeness,\ndata minimization or accessability. Otherwise their projects would have gone in (for them!) completely undesirable\ndirections.",[18,13553,13554],{},[573,13555,13556],{},"It is part of our job to get to know the client’s values and remind them!",[18,13558,13559,13560,13563],{},"One time I actually witnessed a project manager from a larger corporation with a\nhundreds-of-developers-software-department make the claim that his company is ",[573,13561,13562],{},"not"," a software company and\ntherefore the software doesn’t have to be developed on a professional level. The guy in a room of ten people who spoke\nup was me – the only guy not employed by the company. I love being that guy, it is a great part of what makes my job\nmeaningful.",[18,13565,13566],{},"The bottom line is that to be of maximum value for you and your client you have to be aware of that complex value system\nmentioned above and you have to bring up the courage to act on it. To say “no” at the right times, to say “yes, but” at\nthe right times, to encourage at the right times. Code with attitude!",[18,13568,13569],{},[585,13570,13573],{"href":13571,"rel":13572},"https://twitter.com/indyarni",[589],"@indyarni",{"title":48,"searchDepth":86,"depth":86,"links":13575},[13576],{"id":13502,"depth":86,"text":13503},[613,614],"2018-11-16T12:29:29","At synyx we recently came forward with a new tagline, trying to express our general mindset that is distinctive\\nconcerning the way we work with clients, the software community and each other. The line is:","https://synyx.de/blog/code-with-attitude-part-1-values/",{},"/blog/code-with-attitude-part-1-values",{"title":13478,"description":13487},"blog/code-with-attitude-part-1-values",[4494,10083,3122]," At synyx we recently came forward with a new tagline, trying to express our general mindset that is distinctive concerning the way we work with clients, the software community and each other. The line is: 'Code with Attitude'. In the instant I heard this simple sentence for the first time it triggered a multitude of associations, memories and emotions that I connect with the word 'attitude' in conjunction with software development.","tbrGLbKylIO0pyaul1N1XDF1TGfKGhQk-zGgy0J997U",{"id":13589,"title":13590,"author":13591,"body":13592,"category":14527,"date":14528,"description":14529,"extension":617,"link":14530,"meta":14531,"navigation":499,"path":14532,"seo":14533,"slug":13596,"stem":14534,"tags":14535,"teaser":14536,"__hash__":14537},"blog/blog/wie-meine-entwicklungsumgebung-eingerichtet-ist.md","Wie meine Entwicklungsumgebung eingerichtet ist",[6623],{"type":11,"value":13593,"toc":14522},[13594,13597,13600,13603,13626,13629,13632,13647,13652,13655,13736,13755,13758,13864,13867,13882,13885,13916,13919,14000,14109,14116,14123,14370,14373,14376,14516,14519],[14,13595,13590],{"id":13596},"wie-meine-entwicklungsumgebung-eingerichtet-ist",[18,13598,13599],{},"Beim synyx Camp vor zwei Wochen haben wir uns unter anderem über das Setup unserer Entwicklungsumgebungen unterhalten.\nIm Folgenden möchte ich kurz berichten, wie ich meine eingerichtet habe und welche Programme ich in meiner alltäglichen\nArbeit nicht mehr missen möchte.",[18,13601,13602],{},"Kurz angerissen werden:",[577,13604,13605,13612,13619],{},[580,13606,13607],{},[585,13608,13611],{"href":13609,"rel":13610},"https://synyx.de/blog/2018-11-09-entwicklungsumgebung/?page=1#terminal",[589],"Terminal",[580,13613,13614],{},[585,13615,13618],{"href":13616,"rel":13617},"https://synyx.de/blog/2018-11-09-entwicklungsumgebung/?page=1#git",[589],"Git",[580,13620,13621],{},[585,13622,13625],{"href":13623,"rel":13624},"https://synyx.de/blog/2018-11-09-entwicklungsumgebung/?page=1#programme",[589],"Programme",[3469,13627,13611],{"id":13628},"terminal",[18,13630,13631],{},"Ich arbeite mit einem MacBook und habe von Anfang an iTerm2 genutzt. Weshalb weiß ich leider nicht mehr. Vielleicht gab\nes damals für das von Haus aus installierte Terminal keine Möglichkeit ein Dark Theme zu verwenden. Vielleicht gab es\ndamals auch nicht die Möglichkeit ein Terminalfenster in der Horizontalen zu splitten. Beides ist mittlerweile möglich.\nAndere von mir genutzte iTerm2 Features kommen mir gerade nicht in den Sinn…",[18,13633,13634,13635,13640,13641,13646],{},"Viel interessanter finde ich jedenfalls die Frage, welche Shell installiert ist und wie sie personalisiert ist. Ich\nverwende ",[585,13636,13639],{"href":13637,"rel":13638},"https://github.com/zsh-users/zsh",[589],"zsh"," und natürlich(?)\nauch ",[585,13642,13645],{"href":13643,"rel":13644},"https://github.com/robbyrussell/oh-my-zsh",[589],"oh-my-zsh",", um meine Shell im Look & Feel anzupassen und mit Plugins\nerweitern zu können.",[18,13648,13649],{},[1794,13650],{"alt":12664,"src":13651},"https://media.synyx.de/uploads/2019/03/prompt-1-768x578.png",[18,13653,13654],{},"Folgende oh-my-zsh Plugins habe ich installiert:",[577,13656,13657,13678,13706,13721],{},[580,13658,13659,13660],{},"z",[577,13661,13662,13668],{},[580,13663,13664,13665,13667],{},"führt eine Liste von Pfaden, in welche man auf der Shell mit ",[50,13666,9245],{}," navigiert und matcht die eingegebenen Zeichen\nauf den meist besuchten Pfad",[580,13669,13670,13671,13674,13675],{},"z. B. führt bei mir der Befehl ",[50,13672,13673],{},"z dot"," zu ",[50,13676,13677],{},"/Users/seber/projects/git/dotfiles",[580,13679,13680,13685],{},[585,13681,13684],{"href":13682,"rel":13683},"https://github.com/lukechilds/zsh-better-npm-completion",[589],"zsh-better-npm-completion",[577,13686,13687,13690],{},[580,13688,13689],{},"drücke Tab, um projektspezifische npm Task Vorschläge zu bekommen",[580,13691,13692,13693,99,13696,99,13699,1628,13702,13705],{},"z. B. bekomme ich im Screenshot die Tasks ",[50,13694,13695],{},"lint",[50,13697,13698],{},"lint:watch",[50,13700,13701],{},"start",[50,13703,13704],{},"start:watch"," vorgeschlagen",[580,13707,13708,13713,13718,13720],{},[585,13709,13712],{"href":13710,"rel":13711},"https://github.com/zsh-users/zsh-autosuggestions",[589],"zsh-autosuggestions",[577,13714,13715],{},[580,13716,13717],{},"fange an zu tippen und der Befehl wird ausgegraut vervollständigt",[6730,13719],{},"drücke Pfeiltaste rechts und Enter, um ihn auszuführen",[580,13722,13723,13728,13733,13735],{},[585,13724,13727],{"href":13725,"rel":13726},"https://github.com/zsh-users/zsh-syntax-highlighting",[589],"zsh-syntax-highlighting",[577,13729,13730],{},[580,13731,13732],{},"hebt das auszuführende Programm farblich hervor",[6730,13734],{},"(nützlich um zu sehen, ob ich mich vertippt habe)",[18,13737,13738,13739,13744,13745,13750,13751,13754],{},"Als Prompt habe ich lange Zeit die ",[585,13740,13743],{"href":13741,"rel":13742},"https://github.com/sindresorhus/pure",[589],"pure prompt"," verwendet. Sie ist super schlank\nund zeigt nützliche Infos zum aktuellen git Repository an. Vor wenigen Wochen bin ich jedoch\nzur ",[585,13746,13749],{"href":13747,"rel":13748},"https://github.com/denysdovhan/spaceship-prompt",[589],"spaceship-prompt"," gewechselt. Einerseits um einfach mal wieder\nwas neues auszuprobieren, andererseits weil sie mir von Haus aus die Version der Programmiersprache des aktuellen\nProjektes anzeigt. Im Screenshot oben sieht man nach dem Wechsel in das ",[50,13752,13753],{},"workshop-maze-vr"," Verzeichnis den Hinweis, dass\ndas Projekt ein nodeJS Projekt ist und die bash session aktuell v10.9.0 verwendet. Neben nodeJS werden einige andere\nProgrammiersprachen unterstützt, Java leider nicht.",[18,13756,13757],{},"Die Anordnung der spaceship prompt Dinge und ob sie überhaupt angezeigt werden sollen, kann konfiguriert werden:",[43,13759,13761],{"className":45,"code":13760,"language":47,"meta":48,"style":48},"SPACESHIP_PROMPT_ORDER=(\n time # Time stamps section\n user # Username section\n dir # Current directory section\n git # Git section (git_branch + git_status)\n node # Node.js section\n docker # Docker section\n exec_time # Execution time\n line_sep # Line break\n jobs # Background jobs indicator\n exit_code # Exit code section\n char # Prompt character\n)\n",[50,13762,13763,13772,13780,13788,13796,13804,13812,13820,13828,13836,13844,13852,13860],{"__ignoreMap":48},[53,13764,13765,13768,13770],{"class":55,"line":56},[53,13766,13767],{"class":82},"SPACESHIP_PROMPT_ORDER",[53,13769,390],{"class":389},[53,13771,1139],{"class":82},[53,13773,13774,13777],{"class":55,"line":86},[53,13775,13776],{"class":389}," time",[53,13778,13779],{"class":1867}," # Time stamps section\n",[53,13781,13782,13785],{"class":55,"line":126},[53,13783,13784],{"class":63}," user",[53,13786,13787],{"class":1867}," # Username section\n",[53,13789,13790,13793],{"class":55,"line":163},[53,13791,13792],{"class":63}," dir",[53,13794,13795],{"class":1867}," # Current directory section\n",[53,13797,13798,13801],{"class":55,"line":186},[53,13799,13800],{"class":63}," git",[53,13802,13803],{"class":1867}," # Git section (git_branch + git_status)\n",[53,13805,13806,13809],{"class":55,"line":221},[53,13807,13808],{"class":63}," node",[53,13810,13811],{"class":1867}," # Node.js section\n",[53,13813,13814,13817],{"class":55,"line":242},[53,13815,13816],{"class":63}," docker",[53,13818,13819],{"class":1867}," # Docker section\n",[53,13821,13822,13825],{"class":55,"line":273},[53,13823,13824],{"class":63}," exec_time",[53,13826,13827],{"class":1867}," # Execution time\n",[53,13829,13830,13833],{"class":55,"line":279},[53,13831,13832],{"class":63}," line_sep",[53,13834,13835],{"class":1867}," # Line break\n",[53,13837,13838,13841],{"class":55,"line":496},[53,13839,13840],{"class":63}," jobs",[53,13842,13843],{"class":1867}," # Background jobs indicator\n",[53,13845,13846,13849],{"class":55,"line":503},[53,13847,13848],{"class":63}," exit_code",[53,13850,13851],{"class":1867}," # Exit code section\n",[53,13853,13854,13857],{"class":55,"line":509},[53,13855,13856],{"class":63}," char",[53,13858,13859],{"class":1867}," # Prompt character\n",[53,13861,13862],{"class":55,"line":515},[53,13863,685],{"class":82},[18,13865,13866],{},"und auch das Symbol mit welchem eine Zeile beginnen soll. Ich wollte weiterhin das Zeichen der pure prompt verwenden und\nhabe daher den default überschrieben:",[43,13868,13870],{"className":45,"code":13869,"language":47,"meta":48,"style":48},"SPACESHIP_CHAR_SYMBOL='❯ '\n",[50,13871,13872],{"__ignoreMap":48},[53,13873,13874,13877,13879],{"class":55,"line":56},[53,13875,13876],{"class":82},"SPACESHIP_CHAR_SYMBOL",[53,13878,390],{"class":389},[53,13880,13881],{"class":63},"'❯ '\n",[3469,13883,13618],{"id":13884},"git",[18,13886,13887,13888,1628,13891,13894,13895,99,13900,99,13905,99,13910,13915],{},"Git verwende ich überwiegend über die Konsole. Mit grafischen Programmen bin ich nie richtig warm geworden. Angefangen\nmit ",[50,13889,13890],{},"gitk",[50,13892,13893],{},"git gui"," auf einem Linux Rechner bin ich\nüber ",[585,13896,13899],{"href":13897,"rel":13898},"https://git-cola.github.io/",[589],"git-cola",[585,13901,13904],{"href":13902,"rel":13903},"https://www.sourcetreeapp.com/",[589],"SourceTree",[585,13906,13909],{"href":13907,"rel":13908},"https://www.gitkraken.com/",[589],"GitKraken",[585,13911,13914],{"href":13912,"rel":13913},"https://git-fork.com/",[589],"Fork","\nund noch ein paar andere gestolpert. Aber das Geklicke und der Kontextwechsel zwischen IDE und $Werkzeug haben mich\nimmer gestört. Auch visuell fand ich bis auf GitKraken und neuerdings Fork nichts ansprechend (ja, ist mir wichtig, hat\nman anfangs schon beim Dark Theme fürs Terminal bemerkt 🙄). Hauptsächlich hat mich aber das Nichtvorhandensein bzw. die\numständliche Handhabung des rebasen gestört. Das geht für mich am schnellsten auf der Konsole mit eigenen git aliasen.",[18,13917,13918],{},"Meine häufigsten Befehle sind:",[577,13920,13921,13937,13950,13963,13980],{},[580,13922,13923,13926],{},[50,13924,13925],{},"git up",[577,13927,13928,13934],{},[580,13929,13930,13931,13933],{},"hole den aktuellen Stand von ",[50,13932,4214],{}," mit einem rebase",[580,13935,13936],{},"lösche alle lokalen Branches die bereits gemerged wurden",[580,13938,13939,13942,13947,13949],{},[50,13940,13941],{},"git cm \"jetzt funktionierts wirklich!!!1elf\"",[577,13943,13944],{},[580,13945,13946],{},"comitte alle Änderungen mit der folgenden commit message",[6730,13948],{},"(inklusive neu angelegte Dateien)",[580,13951,13952,13955,13960,13962],{},[50,13953,13954],{},"git amend",[577,13956,13957],{},[580,13958,13959],{},"füge alle Änderungen dem letzten HEAD commit hinzu",[6730,13961],{},"(exklusive neu angelegte Dateien)",[580,13964,13965,13968],{},[50,13966,13967],{},"git ll",[577,13969,13970,13973],{},[580,13971,13972],{},"drucke eine Liste aller commit hashes und messages des aktuellen Branches ab HEAD",[580,13974,13975,13976,13979],{},"die Länge der Liste kann mit ",[50,13977,13978],{},"-42"," begrenzt werden",[580,13981,13982,1628,13985,13988],{},[50,13983,13984],{},"git fix",[50,13986,13987],{},"git ri",[577,13989,13990,13997],{},[580,13991,13992,13993,13996],{},"erzeuge einen ",[50,13994,13995],{},"fixup"," commit und räume die commits mit einem interactive rebase auf",[580,13998,13999],{},"workflow ist dann wie folgt:",[43,14001,14003],{"className":45,"code":14002,"language":47,"meta":48,"style":48},"❯ git ll -5\na52747d (HEAD -> master, origin/master, origin/HEAD) foo\nb858f05 bar\n4954b3d baz\n782d959 bum\n2b1c7c6 buff\n❯ git add .\n❯ git fix 782d959\n❯ git ri 782d959^\n",[50,14004,14005,14019,14041,14049,14057,14065,14073,14085,14097],{"__ignoreMap":48},[53,14006,14007,14010,14013,14016],{"class":55,"line":56},[53,14008,14009],{"class":59},"❯",[53,14011,14012],{"class":63}," git",[53,14014,14015],{"class":63}," ll",[53,14017,14018],{"class":89}," -5\n",[53,14020,14021,14024,14027,14029,14032,14035,14038],{"class":55,"line":86},[53,14022,14023],{"class":59},"a52747d",[53,14025,14026],{"class":82}," (HEAD -",[53,14028,1084],{"class":389},[53,14030,14031],{"class":63}," master,",[53,14033,14034],{"class":63}," origin/master,",[53,14036,14037],{"class":63}," origin/HEAD",[53,14039,14040],{"class":82},") foo\n",[53,14042,14043,14046],{"class":55,"line":126},[53,14044,14045],{"class":59},"b858f05",[53,14047,14048],{"class":63}," bar\n",[53,14050,14051,14054],{"class":55,"line":163},[53,14052,14053],{"class":59},"4954b3d",[53,14055,14056],{"class":63}," baz\n",[53,14058,14059,14062],{"class":55,"line":186},[53,14060,14061],{"class":59},"782d959",[53,14063,14064],{"class":63}," bum\n",[53,14066,14067,14070],{"class":55,"line":221},[53,14068,14069],{"class":59},"2b1c7c6",[53,14071,14072],{"class":63}," buff\n",[53,14074,14075,14077,14079,14082],{"class":55,"line":242},[53,14076,14009],{"class":59},[53,14078,14012],{"class":63},[53,14080,14081],{"class":63}," add",[53,14083,14084],{"class":63}," .\n",[53,14086,14087,14089,14091,14094],{"class":55,"line":273},[53,14088,14009],{"class":59},[53,14090,14012],{"class":63},[53,14092,14093],{"class":63}," fix",[53,14095,14096],{"class":63}," 782d959\n",[53,14098,14099,14101,14103,14106],{"class":55,"line":279},[53,14100,14009],{"class":59},[53,14102,14012],{"class":63},[53,14104,14105],{"class":63}," ri",[53,14107,14108],{"class":63}," 782d959^\n",[18,14110,14111,14112,14115],{},"Eigene git aliase können in der globalen git config unter ",[50,14113,14114],{},"~/.gitconfig"," abgelegt werden.",[18,14117,14118,14119,14122],{},"Da ich meine merge requests im Normalfall erst auf den master rebase bevor ich sie zum mergen freigebe, bin ich super\nglücklich über das ",[50,14120,14121],{},"rerere"," Feature von git. Ist das Feature aktiviert, merkt sich git beim rebasen, wie ein Konflikt\ngelöst wird. Kommt es erneut zu dem selben Konflikt, weiß git wie es diesen automatisiert zu lösen hat.",[43,14124,14126],{"className":45,"code":14125,"language":47,"meta":48,"style":48},"[rerere]\n enabled = true\n[alias]\n s = status\n st = stash\n co = checkout\n cob = checkout -b\n fix = commit --fixup\n ri = rebase -i --autosquash\n up = !git pull --rebase --prune && git bclean\n cm = !git add -A && git commit -m\n amend = commit -a --amend\n ll = !git --no-pager log --oneline --decorate\n bclean = \"!f() { branches=$(git branch --merged ${1-master} | grep -v \" ${1-master}$\"); [ -z \\\"$branches\\\" ] || git branch -d$branches; }; f\"\n",[50,14127,14128,14133,14142,14147,14157,14167,14177,14190,14203,14218,14245,14268,14283,14304],{"__ignoreMap":48},[53,14129,14130],{"class":55,"line":56},[53,14131,14132],{"class":82},"[rerere]\n",[53,14134,14135,14138,14140],{"class":55,"line":86},[53,14136,14137],{"class":59}," enabled",[53,14139,1245],{"class":63},[53,14141,5104],{"class":89},[53,14143,14144],{"class":55,"line":126},[53,14145,14146],{"class":82},"[alias]\n",[53,14148,14149,14152,14154],{"class":55,"line":163},[53,14150,14151],{"class":59}," s",[53,14153,1245],{"class":63},[53,14155,14156],{"class":63}," status\n",[53,14158,14159,14162,14164],{"class":55,"line":186},[53,14160,14161],{"class":59}," st",[53,14163,1245],{"class":63},[53,14165,14166],{"class":63}," stash\n",[53,14168,14169,14172,14174],{"class":55,"line":221},[53,14170,14171],{"class":59}," co",[53,14173,1245],{"class":63},[53,14175,14176],{"class":63}," checkout\n",[53,14178,14179,14182,14184,14187],{"class":55,"line":242},[53,14180,14181],{"class":59}," cob",[53,14183,1245],{"class":63},[53,14185,14186],{"class":63}," checkout",[53,14188,14189],{"class":89}," -b\n",[53,14191,14192,14195,14197,14200],{"class":55,"line":273},[53,14193,14194],{"class":59}," fix",[53,14196,1245],{"class":63},[53,14198,14199],{"class":63}," commit",[53,14201,14202],{"class":89}," --fixup\n",[53,14204,14205,14208,14210,14213,14215],{"class":55,"line":279},[53,14206,14207],{"class":59}," ri",[53,14209,1245],{"class":63},[53,14211,14212],{"class":63}," rebase",[53,14214,7211],{"class":89},[53,14216,14217],{"class":89}," --autosquash\n",[53,14219,14220,14223,14225,14228,14231,14234,14237,14240,14242],{"class":55,"line":496},[53,14221,14222],{"class":59}," up",[53,14224,1245],{"class":63},[53,14226,14227],{"class":63}," !git",[53,14229,14230],{"class":63}," pull",[53,14232,14233],{"class":89}," --rebase",[53,14235,14236],{"class":89}," --prune",[53,14238,14239],{"class":82}," && ",[53,14241,13884],{"class":59},[53,14243,14244],{"class":63}," bclean\n",[53,14246,14247,14250,14252,14254,14256,14259,14261,14263,14265],{"class":55,"line":503},[53,14248,14249],{"class":59}," cm",[53,14251,1245],{"class":63},[53,14253,14227],{"class":63},[53,14255,14081],{"class":63},[53,14257,14258],{"class":89}," -A",[53,14260,14239],{"class":82},[53,14262,13884],{"class":59},[53,14264,14199],{"class":63},[53,14266,14267],{"class":89}," -m\n",[53,14269,14270,14273,14275,14277,14280],{"class":55,"line":509},[53,14271,14272],{"class":59}," amend",[53,14274,1245],{"class":63},[53,14276,14199],{"class":63},[53,14278,14279],{"class":89}," -a",[53,14281,14282],{"class":89}," --amend\n",[53,14284,14285,14288,14290,14292,14295,14298,14301],{"class":55,"line":515},[53,14286,14287],{"class":59}," ll",[53,14289,1245],{"class":63},[53,14291,14227],{"class":63},[53,14293,14294],{"class":89}," --no-pager",[53,14296,14297],{"class":63}," log",[53,14299,14300],{"class":89}," --oneline",[53,14302,14303],{"class":89}," --decorate\n",[53,14305,14306,14309,14311,14314,14316,14319,14322,14325,14327,14330,14333,14335,14338,14340,14343,14346,14348,14350,14352,14355,14357,14360,14362,14365,14367],{"class":55,"line":521},[53,14307,14308],{"class":59}," bclean",[53,14310,1245],{"class":63},[53,14312,14313],{"class":63}," \"!f() { branches=$(",[53,14315,13884],{"class":59},[53,14317,14318],{"class":63}," branch ",[53,14320,14321],{"class":89},"--merged",[53,14323,14324],{"class":89}," ${1",[53,14326,4812],{"class":63},[53,14328,14329],{"class":82},"master",[53,14331,14332],{"class":89},"}",[53,14334,8696],{"class":389},[53,14336,14337],{"class":59}," grep",[53,14339,2235],{"class":89},[53,14341,14342],{"class":63}," \" ",[53,14344,14345],{"class":89},"${1",[53,14347,4812],{"class":63},[53,14349,14329],{"class":82},[53,14351,14332],{"class":89},[53,14353,14354],{"class":63},"$\"); [ -z ",[53,14356,7323],{"class":89},[53,14358,14359],{"class":82},"$branches",[53,14361,7323],{"class":89},[53,14363,14364],{"class":63}," ] || git branch -d",[53,14366,14359],{"class":82},[53,14368,14369],{"class":63},"; }; f\"\n",[3469,14371,13625],{"id":14372},"programme",[18,14374,14375],{},"Weitere Programme, die ich in meiner täglichen Arbeit nicht mehr missen möchte, sind:",[577,14377,14378,14400,14418,14432,14464,14485,14506],{},[580,14379,14380,6159,14385,14388],{},[585,14381,14384],{"href":14382,"rel":14383},"https://brew.sh/",[589],"homebrew",[573,14386,14387],{},"(kommandozeile)",[577,14389,14390,14393],{},[580,14391,14392],{},"quasi DER Paketmanager für OSX",[580,14394,14395,14396,14399],{},"Programme installieren mit ",[50,14397,14398],{},"brew install FOO",". Schneller gehts nicht!",[580,14401,14402,6159,14407,14409],{},[585,14403,14406],{"href":14404,"rel":14405},"https://github.com/direnv/direnv",[589],"direnv",[573,14408,14387],{},[577,14410,14411],{},[580,14412,14413,14414,14417],{},"lege in einem Verzeichnis eine ",[50,14415,14416],{},".envrc"," Datei ab und definiere dort z. B. die Java oder NodeJS Version, oder auch\neine andere git E-Mail-Adresse, falls man hier eine andere als die globale verwenden möchte für commits",[580,14419,14420,6159,14425,14427],{},[585,14421,14424],{"href":14422,"rel":14423},"https://stedolan.github.io/jq/",[589],"jq",[573,14426,14387],{},[577,14428,14429],{},[580,14430,14431],{},"JSON Prozessor für die Kommandozeile",[580,14433,14434,6159,14439,14441],{},[585,14435,14438],{"href":14436,"rel":14437},"https://github.com/nodenv/nodenv",[589],"nodenv",[573,14440,14387],{},[577,14442,14443,14451],{},[580,14444,14445,14446,12114],{},"verwalte unterschiedliche Versionen von NodeJS (Alternative zu z.\nB. ",[585,14447,14450],{"href":14448,"rel":14449},"https://github.com/creationix/nvm",[589],"Node Version Manager (nvm)",[580,14452,14453,14454,14457,14458,14460,14461,14463],{},"Anfang des Jahres bin ich von ",[50,14455,14456],{},"nvm"," auf ",[50,14459,14438],{}," umgestiegen, weil letzteres die Shell beim Initialisieren nicht\nblockiert. ",[50,14462,14456],{}," braucht seine Zeit zum Laden von NodeJS",[580,14465,14466,14471],{},[585,14467,14470],{"href":14468,"rel":14469},"https://www.spectacleapp.com/",[589],"spectacle",[577,14472,14473,14476,14479,14482],{},[580,14474,14475],{},"verschiebe Fenster und ändere deren Größe mit deiner Tastatur",[580,14477,14478],{},"die Tastenkombinationen sind konfigurierbar",[580,14480,14481],{},"ich hatte einen UltraWide Monitor und habe so schnell mal drei Fenster in der Breite gedrittelt verteilt",[580,14483,14484],{},"Natürlich ist das auch auf einem normalen Laptop Display sinnvoll, Fenster ohne Maus rechts/links oder oben/unten\nausrichten zu können",[580,14486,14487,14492],{},[585,14488,14491],{"href":14489,"rel":14490},"https://github.com/Clipy/Clipy",[589],"clipy",[577,14493,14494,14503],{},[580,14495,14496,14497,14502],{},"wer die copy-paste aus IntelliJ lieb gewonnen hat; clipy macht das systemweit (die Alternative wäre, das\nPowerpack für ",[585,14498,14501],{"href":14499,"rel":14500},"https://www.alfredapp.com/",[589],"Alfred"," zu kaufen)",[580,14504,14505],{},"man achte auf Passwörter! Clipy bietet die Möglichkeit, bestimmte Programme zu ignorieren. Es ist ratsam dort\nKeepassX oder sonstigen Tresor einzutragen 😉",[580,14507,14508,14511],{},[27,14509,14510],{},"spotify",[577,14512,14513],{},[580,14514,14515],{},"Musik muss natürlich sein 🎧",[18,14517,14518],{},"Vielen Dank fürs Lesen (☞゚ヮ゚)☞ (smilie eingefügt mit clipy snippets)",[607,14520,14521],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":48,"searchDepth":86,"depth":86,"links":14523},[14524,14525,14526],{"id":13628,"depth":86,"text":13611},{"id":13884,"depth":86,"text":13618},{"id":14372,"depth":86,"text":13625},[613,614],"2018-11-09T12:41:34","Beim synyx Camp vor zwei Wochen haben wir uns unter anderem über das Setup unserer Entwicklungsumgebungen unterhalten.\\nIm Folgenden möchte ich kurz berichten, wie ich meine eingerichtet habe und welche Programme ich in meiner alltäglichen\\nArbeit nicht mehr missen möchte.","https://synyx.de/blog/wie-meine-entwicklungsumgebung-eingerichtet-ist/",{},"/blog/wie-meine-entwicklungsumgebung-eingerichtet-ist",{"title":13590,"description":13599},"blog/wie-meine-entwicklungsumgebung-eingerichtet-ist",[10083],"Beim synyx Camp vor zwei Wochen haben wir uns unter anderem über das Setup unserer Entwicklungsumgebungen unterhalten. Im Folgenden möchte ich kurz berichten, wie ich meine eingerichtet habe und welche Programme ich in meiner alltäglichen Arbeit nicht mehr missen möchte.","38z-kKuLlmfwcQfMnzrrf1gJHoh-qvNZsZ_skAURUrY",{"id":14539,"title":14540,"author":14541,"body":14542,"category":14675,"date":14676,"description":48,"extension":617,"link":14677,"meta":14678,"navigation":499,"path":14679,"seo":14680,"slug":14681,"stem":14682,"tags":14683,"teaser":14687,"__hash__":14688},"blog/blog/nachfragen-statt-urteilen-4-gedankenanstoesse-fuer-effektive-code-reviews.md","Nachfragen statt urteilen: 4 Gedankenanstöße für effektive Code Reviews",[11916],{"type":11,"value":14543,"toc":14668},[14544,14547,14552,14555,14558,14561,14565,14570,14573,14578,14581,14584,14588,14592,14595,14599,14602,14605,14609,14613,14616,14620,14623,14626,14629,14633,14637,14640,14644,14647,14650,14654,14657,14660,14665],[14,14545,14540],{"id":14546},"nachfragen-statt-urteilen-4-gedankenanstöße-für-effektive-code-reviews",[6653,14548,14549],{},[18,14550,14551],{},"My code is guaranteed 100% mistrake free.",[18,14553,14554],{},"Das Arbeiten mit Pull Requests und Code Reviews gehört bei synyx zum Alltag. Neuer Code fließt normalerweise erst dann\nin den Hauptzweig eines Projekts, sobald er ein Review durchlaufen hat. Selbstverständlich kann es berechtigte Ausnahmen\ngeben. Zum Beispiel bei Code, der komplett im Pair Programming erstellt oder lediglich durch einen winzigen Fix\nverändert wurde.",[18,14556,14557],{},"Code Reviews sind nicht als bürokratisches Kontrollwerkzeug zu betrachten, sondern als wirksames Hilfsmittel zur\nVerbesserung der Qualität nach dem Prinzip: Vier Augen sehen mehr als zwei.",[18,14559,14560],{},"Fernab von Technik und Tools möchte ich im Folgenden vier Gedankenanstöße für effektive Code Reviews liefern.",[3469,14562,14564],{"id":14563},"_1-eine-bewusste-entscheidung","1. Eine bewusste Entscheidung?",[18,14566,14567],{},[27,14568,14569],{},"Gut:",[18,14571,14572],{},"“Diese Variable sollte nicht public sein.”",[18,14574,14575],{},[27,14576,14577],{},"Besser:",[18,14579,14580],{},"“Wieso hast du dich dafür entschieden, diese Variable public zu machen?”",[18,14582,14583],{},"Die erste Herangehensweise führt lediglich zur Anpassung des Scopes von genau einer Variable. Die zweite\nHerangehensweise hingegen bietet Raum für tiefergehende Erkenntnisse. Es kann eine lehrreiche Diskussion über die\nSichtbarkeit von Variablen entstehen. Es kann aber auch sein, dass die Konfiguration der Entwicklungsumgebung angepasst\nwird. Vielleicht hat der Entwickler den Scope für die Variable gar nicht bewusst gewählt, sondern lediglich übersehen,\ndass seine IDE unpassenden Boiler Plate Code generiert hat.",[3469,14585,14587],{"id":14586},"_2-zu-kurz-gedacht","2. Zu kurz gedacht?",[18,14589,14590],{},[27,14591,14569],{},[18,14593,14594],{},"“Das funktioniert so nicht.”",[18,14596,14597,7317],{},[27,14598,14577],{},[18,14600,14601],{},"“Wieso hast du das Problem auf genau diese Weise gelöst und nicht anders? Hast du Edge Case XY eigentlich bedacht?”",[18,14603,14604],{},"Im besten Fall schreibt ihr gemeinsam einen Test für den nicht abgedeckten Edge Case und optimiert den Code im Teamwork.\nVielleicht findet sich aber auch ein guter Grund, wieso das Problem genau so gelöst wurde. Es muss nicht immer der Autor\nzu kurz gedacht haben, manchmal kann auch der Reviewer einen Aspekt übersehen haben. Durch Fragen entstehen\nDiskussionen, die zu neuen Erkenntnissen und Wissenstransfer führen können.",[3469,14606,14608],{"id":14607},"_3-wie-soll-ein-junior-einem-senior-schon-helfen","3. Wie soll ein Junior einem Senior schon helfen?",[18,14610,14611],{},[27,14612,14569],{},[18,14614,14615],{},"“Puh, das verstehe ich jetzt nicht wirklich. Naja, wird schon passen.”",[18,14617,14618],{},[27,14619,14577],{},[18,14621,14622],{},"“Ich verstehe diese Stelle im Code nicht so ganz. Kannst du mir das genauer erklären?”",[18,14624,14625],{},"Als Junior den Code eines Seniors zu reviewen ist doch sinnlos, oder? Nein, ganz im Gegenteil. Beide Seiten profitieren\ngleichermaßen. Der Junior kann eine ganze Menge dabei lernen, zu sehen, wie ein gestandener Entwickler ein bestimmtes\nProblem löst. Der Senior wiederum profitiert vom frischen Blickwinkel des Juniors. Womöglich wurde die ein oder andere\nStelle im Code derart überoptimiert, dass andere Teammitglieder sie nur noch schwer nachvollziehen können. Vielleicht\nfehlen erklärende Kommentare als Hilfe. Durch gezielte Verständnisfragen kann der Junior zu besser wartbarem Code\nbeitragen, gerade weil er wenig Erfahrung mitbringt. Abgesehen davon macht auch der erfahrenste Entwickler\nFlüchtigkeitsfehler, die durch ein zweites Paar Augen ausgemerzt werden können.",[18,14627,14628],{},"Verläuft das Code Review in umgekehrter Richtung, profitiert der Junior langfristig mehr, wenn der Senior ihm das\nProblem nur aufzeigt, statt vorgefertigte Lösungshäppchen zu servieren. Durch die richtigen Fragen entsteht Raum zur\nErschließung eigener Lösungswege und damit ein langfristiger Lerneffekt.",[3469,14630,14632],{"id":14631},"_4-über-geschmack-lässt-sich-nicht-streiten","4. Über Geschmack lässt sich (nicht) streiten?",[18,14634,14635],{},[27,14636,14569],{},[18,14638,14639],{},"“Ich kann While-Schleifen nicht ausstehen.”",[18,14641,14642],{},[27,14643,14577],{},[18,14645,14646],{},"“Wieso hast du hier eine While-Schleife benutzt und keine For-Schleife?”",[18,14648,14649],{},"Natürlich sollten sich alle Teammitglieder an gemeinsam festgelegte Konventionen und Best Practices halten. Trotz allem\nhat jeder Entwickler seinen eigenen individuellen Stil. Solange dieser nicht gegen die vereinbarten Konventionen\nverstößt, spricht doch nichts dagegen, die individuellen Vorlieben zu akzeptieren, oder? Durch neugieriges Nachfragen\nerfährt man vielleicht sogar, ob bestimmte Motive hinter einer Stilrichtung zur Problemlösung stecken.",[3469,14651,14653],{"id":14652},"nachfragen-statt-urteilen","Nachfragen statt urteilen!",[18,14655,14656],{},"Das gilt definitiv nicht nur für Code Reviews. Selbst in enger Zusammenarbeit innerhalb eines Teams sehen wir immer nur\ngewisse Momentaufnahmen unserer Mitmenschen. Wir können bloß Vermutungen anstellen, aber nie hundertprozentig sicher\nsein, wieso jemand tut, was er tut, oder wie seine Äußerungen wirklich gemeint sind. Durch zeitnahes Nachfragen lassen\nsich kleine Ärgernisse und potentielle Missverständnisse schnell aus dem Weg räumen, anstatt sich mit der Zeit zu einem\nmonströsen Konflikt anzustauen.",[18,14658,14659],{},"Wenn du also das nächste Mal Ärger in dir aufsteigen spürst, spreche lieber die betreffende Person auf ihr Verhalten an,\nstatt vorschnell zu urteilen und dich (innerlich) aufzuregen.",[18,14661,14662],{},[27,14663,14664],{},"Vielleicht ist ja alles ganz anders, als du denkst 😉",[18,14666,14667],{},"Hinweis: Aus Gründen der Lesbarkeit habe ich im Text ausschließlich die männliche Form benutzt, nichtsdestotrotz beziehe\nich mich immer auf Angehörige aller Geschlechter.",{"title":48,"searchDepth":86,"depth":86,"links":14669},[14670,14671,14672,14673,14674],{"id":14563,"depth":86,"text":14564},{"id":14586,"depth":86,"text":14587},{"id":14607,"depth":86,"text":14608},{"id":14631,"depth":86,"text":14632},{"id":14652,"depth":86,"text":14653},[614],"2018-11-05T12:46:10","https://synyx.de/blog/nachfragen-statt-urteilen-4-gedankenanstoesse-fuer-effektive-code-reviews/",{},"/blog/nachfragen-statt-urteilen-4-gedankenanstoesse-fuer-effektive-code-reviews",{"title":14540,"description":48},"nachfragen-statt-urteilen-4-gedankenanstoesse-fuer-effektive-code-reviews","blog/nachfragen-statt-urteilen-4-gedankenanstoesse-fuer-effektive-code-reviews",[14684,9355,14685,14686],"codereview","nachfragen","soft-skills","My code is guaranteed 100% mistrake free. Das Arbeiten mit Pull Requests und Code Reviews gehört bei synyx zum Alltag. Neuer Code fließt normalerweise erst dann in den Hauptzweig eines Projekts, sobald er ein Review durchlaufen hat. Selbstverständlich kann es berechtigte Ausnahmen geben. Zum Beispiel bei Code, der komplett im Pair Programming erstellt oder lediglich durch einen winzigen Fix verändert wurde. Code Reviews sind nicht als bürokratisches Kontrollwerkzeug zu betrachten, sondern als wirksames Hilfsmittel zur Verbesserung der Qualität nach dem Prinzip: Vier Augen sehen mehr als zwei.","mZG0hzuJ8JXuCMJi7Viy5YHIqbMIChTcJh_fVQZSm-I",{"id":14690,"title":14691,"author":14692,"body":14693,"category":15058,"date":15059,"description":48,"extension":617,"link":15060,"meta":15061,"navigation":499,"path":15062,"seo":15063,"slug":14697,"stem":15064,"tags":15065,"teaser":15071,"__hash__":15072},"blog/blog/connect-to-multiple-vpns-at-once-using-networkmanager-and-systemd-resolved.md","Connect to multiple VPNs at once using NetworkManager and systemd-resolved",[11208],{"type":11,"value":14694,"toc":15047},[14695,14698,14744,14754,14758,14761,14764,14768,14771,14796,14807,14811,14814,14823,14836,14840,14843,14851,14855,14858,14878,14881,14884,14894,14903,14918,14921,14930,14933,14937,14946,14956,14965,14968,14978,14981,14991,14994,14997,15000,15015,15019,15022,15026,15029,15037,15041,15044],[14,14696,14691],{"id":14697},"connect-to-multiple-vpns-at-once-using-networkmanager-and-systemd-resolved",[43,14699,14701],{"className":45,"code":14700,"language":47,"meta":48,"style":48},"It’s not DNS\nThere is a no way it’s DNS\nIt was DNS\n",[50,14702,14703,14714,14735],{"__ignoreMap":48},[53,14704,14705,14708,14711],{"class":55,"line":56},[53,14706,14707],{"class":59},"It’s",[53,14709,14710],{"class":63}," not",[53,14712,14713],{"class":63}," DNS\n",[53,14715,14716,14719,14721,14724,14727,14730,14733],{"class":55,"line":86},[53,14717,14718],{"class":59},"There",[53,14720,9669],{"class":63},[53,14722,14723],{"class":63}," a",[53,14725,14726],{"class":63}," no",[53,14728,14729],{"class":63}," way",[53,14731,14732],{"class":63}," it’s",[53,14734,14713],{"class":63},[53,14736,14737,14740,14742],{"class":55,"line":126},[53,14738,14739],{"class":59},"It",[53,14741,265],{"class":63},[53,14743,14713],{"class":63},[18,14745,14746],{},[573,14747,14748,14749],{},"from ",[585,14750,14753],{"href":14751,"rel":14752},"https://www.cyberciti.biz/humour/a-haiku-about-dns/",[589],"DNS Haiku",[3469,14755,14757],{"id":14756},"the-dark-side","The dark side",[18,14759,14760],{},"When I started at synyx I chose to get a MacBook in order to be productive as quick as possible. I still had the\ncumbersome Linux desktop experience from my previous employer in mind. 😉 At synyx, however, things are different: we\nhave a highly skilled admin team that provides a very convenient environment to use Linux on laptops. So, a few weeks\nago I decided to move away from MacOS to Linux (again).",[18,14762,14763],{},"One of the trickier parts of that migration effort was to setup my VPNs with the same comfort as I had on MacOS. Since\nwe are working as consultants/external developers for several customers there is the need to connect to synyx’ VPN as\nwell as our customers’ VPNs. Thus I need to connect to at least two VPNs with working DNS resolution into all connected\nnetworks.",[3469,14765,14767],{"id":14766},"dns-configuration-with-etcresolvconf","DNS configuration with /etc/resolv.conf",[18,14769,14770],{},"Traditionally on Linux systems the DNS servers used to resolve hostnames to IP addresses are listed in the configuration\nfile /etc/resolv.conf :",[43,14772,14774],{"className":288,"code":14773,"language":290,"meta":48,"style":48},"search example.com local.lan\nnameserver 1.1.1.1\nnameserver 8.8.8.8\nnameserver 9.9.9.9\n",[50,14775,14776,14781,14786,14791],{"__ignoreMap":48},[53,14777,14778],{"class":55,"line":56},[53,14779,14780],{},"search example.com local.lan\n",[53,14782,14783],{"class":55,"line":86},[53,14784,14785],{},"nameserver 1.1.1.1\n",[53,14787,14788],{"class":55,"line":126},[53,14789,14790],{},"nameserver 8.8.8.8\n",[53,14792,14793],{"class":55,"line":163},[53,14794,14795],{},"nameserver 9.9.9.9\n",[18,14797,14798,14799,14802,14803,14806],{},"When OpenVPN establishes a connection the server side returns information about the connected network. A part of this\nare the nameserver(s) that are used to resolve names that are part of the connected network. In the simplest possible\nsetup the nameserver of the VPN is appended to the list of nameservers that have been written to that file for the\n",[573,14800,14801],{},"normal"," network connection by your network manager. For the first connection this simple approach is sufficient in most\nof the cases. As soon as you configure and connect the second VPN a harsh limitation of libnss",[573,14804,14805],{},"dns library that parses\nresolv.conf kicks in: only _three"," nameserver entries in /etc/resolv.conf are supported. So only the names of the VPN\nyou connected at first are resolvable. If your network manager has for any reasons written 3 nameservers your VPN’s\nnameservers are completely ignored.",[3469,14808,14810],{"id":14809},"alternative-dns-configuration-mechanisms","Alternative DNS configuration mechanisms",[18,14812,14813],{},"Luckily name resolution in libc general is configurable via the /etc/nsswitch.conf configuration file. Besides other\nmechanisms the file defines how to lookup hostnames. In its default setting the section responsible for resolving\nhostnames points to ‘files’ and ‘dns’. The first one uses /etc/hosts and the latter uses /etc/resolv.conf for\nresolution. As the /etc/resolv.conf is limited to 3 nameserver entries this is not suitable for connecting to multiple\nVPNs simultaneously.",[18,14815,14816,14817,14822],{},"In the past I had a setup with a handcrafted ",[585,14818,14821],{"href":14819,"rel":14820},"https://wiki.archlinux.org/index.php/Dnsmasq",[589],"Dnsmasq"," installation that\nwas congfigured to lookup names from the VPN via the VPN’s nameserver. This time, however, I wanted to try something\nelse. In recent systemd versions a new service called systemd-resolved was introduced. It can be used to dynamically\nconfigure DNS servers dependending on the active network connection(s).",[18,14824,14825,14826,14829,14830,14835],{},"So, if the libnss_dns plugin in libc is limited to three server entries in /etc/resolv.conf some other mechanism has to\nbe used. One idea is that you statically configure the address of a locally installed nameserver that is (re-)\nconfigured by OpenVPN connections. ",[585,14827,14821],{"href":14819,"rel":14828},[589]," is one of the tools many\npeople (including past-me) used for this task. In this article however, I want to focus on the already\nmentioned ",[585,14831,14834],{"href":14832,"rel":14833},"https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html",[589],"systemd-resolved"," and how it\ncan be integrated into the hostname lookup on a modern Linux system.",[3469,14837,14839],{"id":14838},"openvpn-and-selinux","OpenVPN and SELinux",[18,14841,14842],{},"Before we get into the details of connecting systemd-resolved with OpenVPN I want to point out a dirty detail of\nconvincing OpenVPN to work together with SELinux (which is active by default on Fedora). So, I use Gnome’s\nNetworkManager as a network manager not only for WiFi and fixed networks but also for VPNs (and 4G as well). So I used\nthe very convenient UI to import my existing VPN configuration and tried to connect. Nothing happened. 😐",[18,14844,14845,14846,14850],{},"After looking into the logs I realized that the NetworkManager OpenVPN plugin was not permitted to access the VPN\ncertificate files for some reasons. For quite some time I tried to fix permissions but nothing helped. After some\ngoogling I found this ",[585,14847,7042],{"href":14848,"rel":14849},"https://unix.stackexchange.com/questions/166807/selinux-and-openvpn#166811",[589]," which\ndescribes that OpenVPN may only access files in the ~/.cert directory and restore the SELinux security context of the\nfiles with the restorecon command.",[3469,14852,14854],{"id":14853},"configure-and-activate-systemd-resolved","Configure and activate systemd-resolved",[18,14856,14857],{},"Before we can use systemd-resolved it needs to be configured and activated. The config file is located at\n/etc/systemd/resolved.conf:",[43,14859,14861],{"className":288,"code":14860,"language":290,"meta":48,"style":48},"[Resolve]\nFallbackDNS=8.8.8.8\nDNSSEC=false\n\n",[50,14862,14863,14868,14873],{"__ignoreMap":48},[53,14864,14865],{"class":55,"line":56},[53,14866,14867],{},"[Resolve]\n",[53,14869,14870],{"class":55,"line":86},[53,14871,14872],{},"FallbackDNS=8.8.8.8\n",[53,14874,14875],{"class":55,"line":126},[53,14876,14877],{},"DNSSEC=false\n",[18,14879,14880],{},"The first line defines a fallback DNS if all of your dynamically configured nameservers fail. At least for me this was\nuseful. The second line is more important – it deactivates DNSSEC. DNSSEC defines security extensions on top of the DNS\nprotocol. Although this sounds like a very reasonable thing to do you’ll – especially in private networks – encounter\nnameservers who do not (properly) support DNSSEC. Sadly it can not be configured per connected network but only\nglobally. So for my setup I deactivated the whole thing.",[18,14882,14883],{},"After configuration systemd-resolved can be enabled and started:",[43,14885,14887],{"className":288,"code":14886,"language":290,"meta":48,"style":48},"sudo systemctl enable systemd-resolved --now\n\n",[50,14888,14889],{"__ignoreMap":48},[53,14890,14891],{"class":55,"line":56},[53,14892,14893],{},"sudo systemctl enable systemd-resolved --now\n",[18,14895,14896,14897,14902],{},"Now that systemd-resolved is active we need to push new nameserver configurations to systemd-resoved everytime a new\nVPN is connected (and remove them if the VPN is disconnected). If you do not use NetworkManager’s OpenVPN integration\nbut operate OpenVPN directly you can\nuse ",[585,14898,14901],{"href":14899,"rel":14900},"https://github.com/jonathanio/update-systemd-resolved",[589],"Jonathan Wright’s very useful update-systemd-resolved","\nscript. Just configure it in your OpenVPN config file to be run on connect and disconnect. When you use NetworkManager\nthings are even simpler: Just activete systemd-resolved in the configuration by adding\n/etc/NetworkManager/conf.d/resolved.conf:",[43,14904,14906],{"className":288,"code":14905,"language":290,"meta":48,"style":48},"[main]\ndns=systemd-resolved\n\n",[50,14907,14908,14913],{"__ignoreMap":48},[53,14909,14910],{"class":55,"line":56},[53,14911,14912],{},"[main]\n",[53,14914,14915],{"class":55,"line":86},[53,14916,14917],{},"dns=systemd-resolved\n",[18,14919,14920],{},"And then restart NetworkManager:",[43,14922,14924],{"className":288,"code":14923,"language":290,"meta":48,"style":48},"sudo systemctl restart NetworkManager\n",[50,14925,14926],{"__ignoreMap":48},[53,14927,14928],{"class":55,"line":56},[53,14929,14923],{},[18,14931,14932],{},"Upon each connect and disconnect of standard networks (wifi, ethernet and 4G) or VPNs NetworkManager will update the\nnameserver information in systemd-resolved.",[3469,14934,14936],{"id":14935},"let-your-software-use-systemd-resolved-for-dns-resolution","Let your software use systemd-resolved for DNS resolution",[18,14938,14939,14940,14945],{},"I assume most of the software on Linux is using libc for name resolution. In libc the name resolution is configured via\na file called ",[585,14941,14944],{"href":14942,"rel":14943},"http://man7.org/linux/man-pages/man5/nsswitch.conf.5.html",[589],"/etc/nsswitch.conf",". Besides other sections\nnsswitch.conf has a section for hostname resolution. Here is the relevant line from the file:",[43,14947,14949],{"className":288,"code":14948,"language":290,"meta":48,"style":48},"hosts: files resolve [!UNAVAIL=return] dns myhostname\n\n",[50,14950,14951],{"__ignoreMap":48},[53,14952,14953],{"class":55,"line":56},[53,14954,14955],{},"hosts: files resolve [!UNAVAIL=return] dns myhostname\n",[18,14957,14958,14959,14964],{},"The important part is the ‘resolve’ behind ‘files’. It tells libc to load a plugin\ncalled ",[585,14960,14963],{"href":14961,"rel":14962},"https://www.freedesktop.org/software/systemd/man/nss-resolve.html",[589],"libnss_resolve"," and try to use for hostname\nresolution before other plugins like the traditional libnss_dns are tried. By this all software using libc’s name\nresolution will automatically use systemd-resolved from now on.",[18,14966,14967],{},"There are, however, other applications that parse your /etc/resolv.conf on their own and circumvent systemd-resolved\nunconsciously. For this applications /etc/resolv.conf needs to be replaced with a symlink to either",[43,14969,14971],{"className":288,"code":14970,"language":290,"meta":48,"style":48},"/run/systemd/resolve/resolv.conf\n\n",[50,14972,14973],{"__ignoreMap":48},[53,14974,14975],{"class":55,"line":56},[53,14976,14977],{},"/run/systemd/resolve/resolv.conf\n",[18,14979,14980],{},"or",[43,14982,14984],{"className":288,"code":14983,"language":290,"meta":48,"style":48},"/run/systemd/resolve/stub-resolv.conf\n\n\n",[50,14985,14986],{"__ignoreMap":48},[53,14987,14988],{"class":55,"line":56},[53,14989,14990],{},"/run/systemd/resolve/stub-resolv.conf\n",[18,14992,14993],{},"The first file just contains all nameserver entries that have been configured for systemd-resolved. This is again not\nvery helpful for our scenario since it will definitly contain more than three entries and you cannot be sure whether\nother applications parsing that file have the same limitation as the libnss_dns library.",[18,14995,14996],{},"The second file is better for our scenario. It just contains a single nameserver entry which points to 127.0.0.53\nwhich is a local DNS server that is part of systemd-resolved and just forwards name resolution requests to the\nconfigured nameservers.",[18,14998,14999],{},"So execute the following on your system:",[43,15001,15003],{"className":288,"code":15002,"language":290,"meta":48,"style":48},"sudo mv /etc/resolv.conf /etc/resolv.conf.bak\nsudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf\n\n",[50,15004,15005,15010],{"__ignoreMap":48},[53,15006,15007],{"class":55,"line":56},[53,15008,15009],{},"sudo mv /etc/resolv.conf /etc/resolv.conf.bak\n",[53,15011,15012],{"class":55,"line":86},[53,15013,15014],{},"sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf\n",[3469,15016,15018],{"id":15017},"gnome-software-and-systemd-resolved","Gnome Software and systemd-resolved",[18,15020,15021],{},"For some reason Gnome Software stopped working after I activated systemd-resolved in /etc/nsswitch.conf – it failed to\nresolve hostnames when downloading packages. I was able to fix this by changing the order in /etc/nsswitch.conf so that\ndns is before resolve. I did not dig into details here. If you happen to know what could be the reason for this – feel\nfree to get in touch with me. 😉",[3469,15023,15025],{"id":15024},"closing-words","Closing words",[18,15027,15028],{},"As you can see from the length of this article, it takes a significant amount of effort and knowledge to configure your\nLinux desktop to support multiple and simultaneously connected VPN with working DNS resolution. Nevertheless, once\nconfigured correctly everything works really well! 😀",[18,15030,15031,15032,986],{},"So, I hope everything was understandable and helpful for you. If you have any remarks drop a line on\nTwitter ",[585,15033,15036],{"href":15034,"rel":15035},"https://twitter.com/robinjayasinghe",[589],"@robinjayasinghe",[3469,15038,15040],{"id":15039},"update-052020","Update (05/2020)",[18,15042,15043],{},"In the meantime some time has passed and for various reasons I switched through some distros. In Debian 10 the\nsystemd-resolved approach described in this article worked well. Only Gnome Software did not work reliably when\nresolved was active. Afterwards I switched back to Fedora and used Fedora 31 for a while. Here I had the option to use\nsystemd-resolved in NetworkManager but decided to use the alternatively offered dnsmasq plugin for NetworkManager. This\nworked like a charm and there was nothing more to configure than activating the plugin. However, Gnome Software still\nhad issues for me. I did not do any research on that. Due to a crashed upgrade to Fedora 32 I rage-migrated to Ubuntu\n20.04 LTS. I am not yet sure what Ubuntu did beneath the surface but connecting to multiple VPNs at the same time\nincluding proper DNS resolution works OOTB. Kudos to the folks at Canonical. Gnome Software works (even when connected\nto VPNs). :partyhat:",[607,15045,15046],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":48,"searchDepth":86,"depth":86,"links":15048},[15049,15050,15051,15052,15053,15054,15055,15056,15057],{"id":14756,"depth":86,"text":14757},{"id":14766,"depth":86,"text":14767},{"id":14809,"depth":86,"text":14810},{"id":14838,"depth":86,"text":14839},{"id":14853,"depth":86,"text":14854},{"id":14935,"depth":86,"text":14936},{"id":15017,"depth":86,"text":15018},{"id":15024,"depth":86,"text":15025},{"id":15039,"depth":86,"text":15040},[614],"2018-11-04T13:53:34","https://synyx.de/blog/connect-to-multiple-vpns-at-once-using-networkmanager-and-systemd-resolved/",{},"/blog/connect-to-multiple-vpns-at-once-using-networkmanager-and-systemd-resolved",{"title":14691,"description":48},"blog/connect-to-multiple-vpns-at-once-using-networkmanager-and-systemd-resolved",[15066,15067,15068,15069,15070],"dns","linux","networking","openvpn","vpn","It’s not DNS There is a no way it’s DNS It was DNS from DNS Haiku The dark side When I started at synyx I chose to get a MacBook in order to be productive as quick as possible. I still had the cumbersome Linux desktop experience from my previous employer in mind. ;) At synyx, however, things are different: we have a highly skilled admin team that provides a very convenient environment to use Linux on laptops.","V0f3e_bN6YwO0GDFFg6sOJp8A9JIH6--ZO6c_uAbOdI",{"id":15074,"title":15075,"author":15076,"body":15077,"category":15416,"date":15417,"description":15418,"extension":617,"link":15419,"meta":15420,"navigation":499,"path":15421,"seo":15422,"slug":15081,"stem":15424,"tags":15425,"teaser":15427,"__hash__":15428},"blog/blog/konferenz-logbuch-bedcon-2018.md","Konferenz-Logbuch: BEDCon 2018",[13208],{"type":11,"value":15078,"toc":15406},[15079,15082,15103,15109,15112,15115,15121,15124,15127,15133,15135,15139,15143,15149,15151,15154,15158,15180,15184,15199,15205,15208,15212,15223,15227,15230,15234,15253,15256,15267,15271,15285,15288,15308,15316,15320,15334,15337,15348,15351,15354,15365,15369,15372,15375,15383,15386,15388,15397,15400],[14,15080,15075],{"id":15081},"konferenz-logbuch-bedcon-2018",[18,15083,15084,15085,15090,15091,15096,15097,15102],{},"Bei der diesjährigen ",[585,15086,15089],{"href":15087,"rel":15088},"http://www.bed-con.org/2018/",[589],"BEDCon"," ist synyx gleich doppelt vertreten gewesen. Nicht nur der\nTalk “Observability in einer Microservice Welt” von Andreas Weigel (",[585,15092,15095],{"href":15093,"rel":15094},"https://twitter.com/aendi",[589],"@aendi",") und Jakob\nFels (",[585,15098,15101],{"href":15099,"rel":15100},"https://twitter.com/JakobFels",[589],"@JakobFels",") war dieses Mal eine Premiere. Auch unser Stand im Messe-Bereich der\nKonferenz hat das erste Mal zu Gesprächen, Diskussion und natürlich jede Menge synyx Stickern eingeladen.",[18,15104,15105],{},[1794,15106],{"alt":15107,"src":15108},"Thomas Kraft am Bedcon Stand","https://media.synyx.de/uploads/2019/04/bedcon_stand-768x865.png",[18,15110,15111],{},"Zwar nicht der größte Stand, dafür aber komplett in der Bahn transportiert.",[18,15113,15114],{},"Unsere Reisegruppe von insgesamt fünf synyxern und Jakob war zwar in allen belangen bestens auf die Konferenz\nvorbereitet (z. Bsp. waren alle Folien für den Talk bereits VOR der Abreise fertig) nur bei der getränketechnischen\nVersorgung war wohl etwas knapp kalkuliert worden, sodass am Ende auch das Boardbistro nur noch mit leeren Kästen da\nstand.",[18,15116,15117],{},[1794,15118],{"alt":15119,"src":15120},"Getting started Bedcon","https://media.synyx.de/uploads/2018/09/bedcon_getting-started-768x520.jpg",[18,15122,15123],{},"Gut vorbereitet aber was fehlt?",[18,15125,15126],{},"Immerhin konnte eine vermeindlich kaputte Zapfanlage, der Techniker war bereits informiert, wieder in Gang gebracht\nwerden, sodass wir relativ entspannt in Berlin ankamen und einen ruhigen ersten Abend mit vietnamesichen Essen und\nkleineren Arbeiten am Talk verbrachten.",[18,15128,15129],{},[1794,15130],{"alt":15131,"src":15132},"Feilen bis zur letzen Minute","https://media.synyx.de/uploads/2018/09/bedcon_wip-768x531.jpg",[18,15134,15131],{},[3469,15136,15138],{"id":15137},"talks","Talks",[649,15140,15142],{"id":15141},"observability-in-einer-microservice-welt","Observability in einer Microservice Welt",[18,15144,15145],{},[1794,15146],{"alt":15147,"src":15148},"#somethingwithbananas","https://media.synyx.de/uploads/2018/09/bedcon_banane-768x768.png",[18,15150,15147],{},[18,15152,15153],{},"Der erste Konferenztag startete gleich mit einen Höhepunkt der zwei Tage. Direkt im ersten Slot starteten Andi und Jakob\nmit ihrem Talk zum Thema Observability. Die Migration bei dm-drogerie markt zu einer verteilten Systemarchitektur hat\nviele Herausforderungen nach sich gezogen. Neben vielen Einblicken in die tägliche Arbeit und Erkenntnissen durch den\nDevOps-Kulturwandel, wurden die Themen Logging, Metriken und Tracing vorgestellt. Dabei kam der visuelle Part nicht zu\nkurz. Die Folien von @schdaff führten nicht nur wie ein roter Faden durch das Thema, sondern machten den Talk auch noch\nsehr anschaulich und unterhaltsam.",[1217,15155,15157],{"id":15156},"kernaussagen","Kernaussagen",[577,15159,15160,15163,15177],{},[580,15161,15162],{},"Unterscheidung zwischen verschiedenen Sichten auf verteilte Systeme mit Logging, Metriken und Tracing",[580,15164,15165,15166],{},"Livedemo mit entsprechenden Umsetzungen:\n",[577,15167,15168,15171,15174],{},[580,15169,15170],{},"Logging via Logstash in Elastic Search und Visualisierung mit Kibana",[580,15172,15173],{},"Metriken mit dem Micrometer Framework als Metrikenfassade und Influx und Grafana zur Speicherung und\nVisualisierung",[580,15175,15176],{},"Tracing mit Spring Cloud Sleuth und Zipkin",[580,15178,15179],{},"DevOps-Kulturwandel bringt Chancen zur Verbesserung der Zusammenarbeit: Weg von Schuldzuweisungen hin zu\nverantwortungsbewussteren Handeln.",[649,15181,15183],{"id":15182},"offline-first-kein-netz-kein-fehler-zufriedene-nutzer","Offline First – kein Netz, kein Fehler, zufriedene Nutzer",[18,15185,15186,15187,15192,15193,15198],{},"Viele Webanwendungen glänzen nicht gerade wenn es um ihre Offline-Fähigkeit geht. Direkt von Anfang an bei der\nEntwicklung auch Nutzer ohne oder mit sehr schlechter Verbindung etwa bei Usability Fragen mit zu beachten, liegt oft\ngenug nicht im Projektscope. Genau darum ging es\nbei ",[585,15188,15191],{"href":15189,"rel":15190},"https://de.slideshare.net/devday-dd/devday-2018-ulrich-deiters-offline-first-kein-netz-kein-fehler-zufriedene-nutzer",[589],"“Offline First – kein Netz, kein Fehler, zufriedene Nutzer”","\nvon ",[585,15194,15197],{"href":15195,"rel":15196},"https://twitter.com/ulid000",[589],"Ulrich Deiters",", der damit viele wichtige Grundsätze und Denkanstöße lieferte.",[18,15200,15201],{},[1794,15202],{"alt":15203,"src":15204},"Disconnected-Dino","https://media.synyx.de/uploads/2018/09/offline-dino.png",[18,15206,15207],{},"Die Nutzererwartung ist dagegen ganz klar – solange die Anwendung keine klare Aussage zum aktuellen Netzwerkzustand\nliefert, ist man eher enttäuscht wenn etwa der formulierte Tweet auf Grund von Timeouts oder anderen Fehlern im Nirvana\nverschwindet. Anhand von vielen teils auch sehr amüsanten Beispielen wurde einem schnell klar wie oft man sich in die\nZone begibt, in der der Endnutzer recht verärgert die App schließt und oder am liebsten deinstallieren würde. Aber auch\nCAP und der die damit verbundene Partition Tolerance kam im Talk nicht zu kurz und wurde nochmal näher beleuchtet, sowie\nFallstricke aufgezeigt, in die man laufen kann wenn der Client keine Verbindung hat.",[1217,15209,15211],{"id":15210},"ansätze-zum-handeln","Ansätze zum Handeln",[577,15213,15214,15217,15220],{},[580,15215,15216],{},"Zeitstempel der letzten Änderung der Daten bzw. der letzten Synchronisation anbieten, dadurch ist der Nutzer in der\nLage die Datenqualität und -aktualität besser einschätzen zu können.",[580,15218,15219],{},"Klare Aussage über den aktuellen Zustand der Netzwerkverbindung treffen, nicht unbedingt nur wenn der Nutzer offline\nist.",[580,15221,15222],{},"Lokale Datenbank/Caches können einem über so manche Verbindungsunterbrechung retten auch wenn dann vielleicht nicht\nalle Daten konsistent sind. Hier gilt es abzuwägen.",[1217,15224,15226],{"id":15225},"das-credo","Das Credo",[18,15228,15229],{},"“Kein Netz” ist nicht zwingend ein Fehler!",[649,15231,15233],{"id":15232},"self-contained-integrationstests-mit-docker-und-testcontainers","Self-Contained Integrationstests mit Docker und Testcontainers",[18,15235,15236,15237,15192,15242,15247,15248,15252],{},"Wer kennt es nicht, die lokale Datenbankinstallation hat wieder mal nicht die Migration beim Initialisieren des\nIntegrationstests überlebt. Oder aber man möchte möglichst mit echter Datenbankanbindung testen da die Implementierung\nsehr vom jeweiligen Datenbanksystem abhängt und nicht durch eine In-Memory Datenbank umgesetzt wird. Ein weiteres\nEinsatzgebiet sind UI Tests die beispielsweise mit Selenium Tests durchführen und ebenfalls ein spezielles Testsetup\nbenötigen. An dieser Stelle sind die\nin ",[585,15238,15241],{"href":15239,"rel":15240},"https://www.innoq.com/en/talks/2018/09/self-contained-integrationstests-mit-docker-und-testcontainers/",[589],"“Self-Contained Integrationstests mit Docker und Testcontainers”",[585,15243,15246],{"href":15244,"rel":15245},"https://twitter.com/michaelvitz",[589],"Michael Vitz"," vorgestellten ",[585,15249,757],{"href":15250,"rel":15251},"http://testcontainers.org",[589]," ein\nsinnvoller Ansatz um die Herausforderung zu meistern.",[18,15254,15255],{},"Das Konzept der Testcontainer basiert auf Docker Containern die sich als JUnit Rules in den Testcode integrieren lassen.\nDabei bieten sich auch die Möglichkeit komplett eigene Container bzw. Setups zu nutzen. Für viel verwendete Fälle gibt\nes zusätzlich dedizierte Abstraktionen die das Handling vereinfachen:",[577,15257,15258,15261,15264],{},[580,15259,15260],{},"mysql, postgresql oder oracle-xe",[580,15262,15263],{},"selenium",[580,15265,15266],{},"nginx",[649,15268,15270],{"id":15269},"test-the-architecture","Test the Architecture",[18,15272,15273,15274,15192,15279,15284],{},"Tests können auf ganz unterschiedliche Aspekte der Software abzielen. Ein oft, vielleicht auch in Zeiten von\nMicroservices, vernachlässigter Teil ist die Architektur bzw. das einhalten, von beim Projektstart getroffenen\nArchitekturentscheidungen. An dieser Stelle setzt der\nTalk ",[585,15275,15278],{"href":15276,"rel":15277},"https://speakerdeck.com/dennisrippinger/test-the-architecture",[589],"“Test the Architecture”",[585,15280,15283],{"href":15281,"rel":15282},"https://twitter.com/dennisrippinger",[589],"Dennis Rippinger"," an und zeigt Möglichkeiten wie man getroffene Entscheidungen\nnachhaltig automatisiert festzuhalten.",[18,15286,15287],{},"Während des Talks wurden anhand von Code Beispielen verschiedene Tools vorgestellt die Architekturen in Regeln und Tests\ngießen lassen:",[577,15289,15290,15296,15302],{},[580,15291,15292,15295],{},[27,15293,15294],{},"Degraph",": Visualisierung von Klassen und Package Strukturen mit Junit Testing Support Bietet allerdings nur\nLayer-basiertes Testing und hat durch den Scala Background weniger Fokus auf Java.",[580,15297,15298,15301],{},[27,15299,15300],{},"jqAssist",": Bietet auch die Möglichkeit der Visualisierung ähnlich wie Degraph. Im Talk wurde gezeigt das auf Basis\nder Graphen eine Graphdatenbank (Neo4J) befüllt werden kann. Darauf aufbauend können dann in der Cypher Query\nLanguage (Querylanguage der Neo4J Datenbank) Tests schreiben.",[580,15303,15304,15307],{},[27,15305,15306],{},"ArchUnit",": Dieses Framework bietet die ebenfalls die Möglichkeit zum Testen der Architektur in Unittests. Dabei\nkönnen zum Beispiel Zugriffe zwischen Packages klar abgetestet werden.",[18,15309,15310,15311,15315],{},"Danke für die vielen Beispiele die dazu auf ",[585,15312,3573],{"href":15313,"rel":15314},"https://github.com/DennisRippinger/test-the-architecture",[589]," zu finden\nsind.",[649,15317,15319],{"id":15318},"wie-werde-ich-ein-erfolgreicher-software-architekt","Wie werde ich ein erfolgreicher Software-Architekt?",[18,15321,15322,15323,15192,15328,15333],{},"Es gehört wohl mehr dazu gute Softwaredesignentscheidungen zu treffen als nur die neuesten Buzzwords von Konferenzen in\ndas eigene Projekt einfließen zu lassen. Genau darum ging es im\nVortrag ",[585,15324,15327],{"href":15325,"rel":15326},"https://www.innoq.com/de/talks/2018/09/wie-werde-ich-ein-erfolgreicher-software-architekt-bedcon/",[589],"“Wie werde ich ein erfolgreicher Software-Architekt?”",[585,15329,15332],{"href":15330,"rel":15331},"https://twitter.com/ewolff",[589],"Eberhard Wolff",", in dem die Rolle des klassischen Softwarearchitekten mit einer\nmoderneren Interpretation anhand von unterschiedlichen Aspekten vorgestellt wurde.",[18,15335,15336],{},"Generische Architekturaspekte wie",[577,15338,15339,15342,15345],{},[580,15340,15341],{},"Saubere Architektur und hohe Code Qualität",[580,15343,15344],{},"Skalierbarkeit",[580,15346,15347],{},"Favorisiertes Framework/Sprache",[18,15349,15350],{},"lösen generell erstmal keine Probleme.",[18,15352,15353],{},"Es geht viel mehr darum technische Expertise im Team zu nutzen und zu fördern statt die Expertise und damit die\nEntscheidung bei einer Person zu halten. Entsprechend nimmt der Architekt eher eine moderierende Rolle ein da die\nEntscheidung im Team getroffen wird. Im Talk wurde dieser Aspekt auch mit dem Bild eines kollaborativen\nGesellschaftsspiel verglichen da durchaus ähnliche Aspekte Rolle spielen:",[577,15355,15356,15359,15362],{},[580,15357,15358],{},"Keiner kann alleine gewinnen",[580,15360,15361],{},"Jeder übernimmt eine gewisse Rolle",[580,15363,15364],{},"Gute Kommunikation ist eine sehr wichtige Komponente",[1217,15366,15368],{"id":15367},"das-fazit-des-talks","Das Fazit des Talks",[18,15370,15371],{},"“Aufgabe eines Architekten ist es kontinuierlich Entscheidungen ohne genug Informationen zu treffen”",[18,15373,15374],{},"Dabei gilt:",[577,15376,15377,15380],{},[580,15378,15379],{},"Die besten Entscheidungen sind solche die man später treffen kann",[580,15381,15382],{},"Oft können Entscheidungen nur auf Grundlage von wenig oder unzureichender Informationslage getroffen werden und das\nist auch OK so.",[18,15384,15385],{},"Aus meiner Sicht brachte der Talk zwar wenig wirklich neue Erkenntnisse stattdessen war er eine klare Bestätigung von\nvielen Erfahrungen und Werten die wir bei synyx in der täglichen Arbeit erleben und fördern.",[3469,15387,969],{"id":968},[18,15389,15390,15391,15396],{},"Die diesjährige BEDCon hat sich in allen belangen gelohnt. Nicht nur wegen den vielen wirklich guten Vorträgen, sondern\nauch die synyx & Jakob Reisegruppe eilte von einer Überraschung zur nächsten. So gab es für drei von\nuns ",[585,15392,15395],{"href":15393,"rel":15394},"https://twitter.com/aendi/status/1037749829622005760",[589],"tolle Preise"," zu gewinnen! Zwar waren auch zwei Trostpreise\ndabei, aber hey immerhin wars kein jQuery-Buch! Und auch wenn die parallel laufende “Lack & Leder”-Konferenz nicht\nzwingend bei jedem den Geschmack getroffen hat, trug sie zur allgemeinen Heiterkeit der Truppe bei 😉",[18,15398,15399],{},"In diesem Sinne:",[18,15401,15402],{},[1794,15403],{"alt":15404,"src":15405},"Code-with-Attitude-Bier","https://media.synyx.de/uploads/2018/09/bedcon_beerwithattitude-768x1121.jpg",{"title":48,"searchDepth":86,"depth":86,"links":15407},[15408,15415],{"id":15137,"depth":86,"text":15138,"children":15409},[15410,15411,15412,15413,15414],{"id":15141,"depth":126,"text":15142},{"id":15182,"depth":126,"text":15183},{"id":15232,"depth":126,"text":15233},{"id":15269,"depth":126,"text":15270},{"id":15318,"depth":126,"text":15319},{"id":968,"depth":86,"text":969},[614],"2018-09-14T14:10:55","Bei der diesjährigen BEDCon ist synyx gleich doppelt vertreten gewesen. Nicht nur der\\nTalk “Observability in einer Microservice Welt” von Andreas Weigel (@aendi) und Jakob\\nFels (@JakobFels) war dieses Mal eine Premiere. Auch unser Stand im Messe-Bereich der\\nKonferenz hat das erste Mal zu Gesprächen, Diskussion und natürlich jede Menge synyx Stickern eingeladen.","https://synyx.de/blog/konferenz-logbuch-bedcon-2018/",{},"/blog/konferenz-logbuch-bedcon-2018",{"title":15075,"description":15423},"Bei der diesjährigen BEDCon ist synyx gleich doppelt vertreten gewesen. Nicht nur der\nTalk “Observability in einer Microservice Welt” von Andreas Weigel (@aendi) und Jakob\nFels (@JakobFels) war dieses Mal eine Premiere. Auch unser Stand im Messe-Bereich der\nKonferenz hat das erste Mal zu Gesprächen, Diskussion und natürlich jede Menge synyx Stickern eingeladen.","blog/konferenz-logbuch-bedcon-2018",[15426,11199,6240,5836],"bedcon","Bei der diesjährigen BEDCon ist synyx gleich doppelt vertreten gewesen. Nicht nur der Talk “Observability in einer Microservice Welt” von Andreas Weigel (@aendi) und Jakob Fels (@JakobFels) war dieses Mal eine Premiere. Auch unser Stand im Messe-Bereich der Konferenz hat das erste Mal zu Gesprächen, Diskussion und natürlich jede Menge synyx Stickern eingeladen. Dabei handelte es sich zwar nicht um den größten Stand, dafür wurde er aber komplett in der Bahn transportiert.","deVB5Imm-u3lBGhO_fR3D94wJ4CXE9Vv02Q2Ay0l3R4",{"id":15430,"title":15431,"author":15432,"body":15433,"category":15800,"date":15801,"description":48,"extension":617,"link":15802,"meta":15803,"navigation":499,"path":15804,"seo":15805,"slug":15437,"stem":15806,"tags":15807,"teaser":15814,"__hash__":15815},"blog/blog/implementing-at-least-once-delivery-with-rabbitmq-and-springs-rabbittemplate.md","Implementing At Least Once Delivery With RabbitMQ and Spring’s RabbitTemplate",[11208],{"type":11,"value":15434,"toc":15786},[15435,15438,15442,15445,15465,15468,15471,15475,15478,15484,15487,15498,15501,15512,15516,15519,15523,15526,15529,15533,15536,15543,15546,15550,15553,15559,15562,15566,15573,15576,15591,15647,15651,15654,15657,15731,15734,15741,15745,15761,15771,15775,15778,15781,15784],[14,15436,15431],{"id":15437},"implementing-at-least-once-delivery-with-rabbitmq-and-springs-rabbittemplate",[3469,15439,15441],{"id":15440},"message-delivery-characteristics","Message Delivery Characteristics",[18,15443,15444],{},"First some theory about delivery semantics in messaging systems. When a system wants to communicate via a message broker\nthe developer needs a clear understanding of the delivery semantics. At first one needs to know if and how often a\nmessage will be delivered to the broker (and potential consumers):",[577,15446,15447,15453,15459],{},[580,15448,15449,15452],{},[573,15450,15451],{},"At most once"," – the message is delivered at most once but also not at all.",[580,15454,15455,15458],{},[573,15456,15457],{},"At least once"," – the message guaranteed to be delivered but can be delivered multiple times.",[580,15460,15461,15464],{},[573,15462,15463],{},"Exactly once"," – the message is guaranteed to be delivered exactly once.",[18,15466,15467],{},"The second point that is – at least at first sight – important for message consumers is the ordering of messages.\nOrdering in a messaging context means that messages arrive at the consumer in the same order as they have been sent by a\ngiven producer.",[18,15469,15470],{},"Even if some brokers claim to guarantee “exactly once in order delivery” it’s recommended to not take the order of\nincoming messages for granted. Because a) things can get messy in distributed systems and b) you might not want to rely\non semantics of your current broker too much since you’ll end up with another broker in the future.",[3469,15472,15474],{"id":15473},"amqp-rabbitmq-send-semantics","AMQP / RabbitMQ Send Semantics",[18,15476,15477],{},"In my current customer project we are using RabbitMQ as a message broker to implement an event-driven archticure. Since\nwe are building our services and frontend apps with Spring Boot we can use the very convenient RabbitTemplate of Spring\nAMQP.",[18,15479,15480,15483],{},[573,15481,15482],{},"Note:"," AMQP is the messaging protocol. One implemantation is RabbitMQ. In this article I might use both terms\ninterchangeably.",[18,15485,15486],{},"Once the correct connection paramters for your RabbitMQ paramters are provided to your applicaiton context your\napplication will automatically connect to the RabbitMQ server. When your code needs to send messages via AMQP you just\nneed to autowire an instance of RabbitTemplate and call the send method like this:",[43,15488,15492],{"className":15489,"code":15490,"language":15491,"meta":48,"style":48},"language-abap shiki shiki-themes github-light github-dark","rabbitTemplate.send(\"your_exchange\", \"a_routing_key\", yourMessageObject);\n","abap",[50,15493,15494],{"__ignoreMap":48},[53,15495,15496],{"class":55,"line":56},[53,15497,15490],{},[18,15499,15500],{},"If the RabbitMQ server is available the call just returns and the message seems to be delivered. However, as you are\nleaving your JVM’s process you enter the realm of distributed systems. Virtually everything can go wrong now. 😉",[18,15502,15503,15504,15507,15508],{},"So, comparing the above mentioned delivery semantics with the observations from our RabbitMQ usage in Spring Boot,\nRabbitMQ guarantees ",[573,15505,15506],{},"at least once delivery"," if not configured elsewise. Also, there is only one small cornercase where\nmessage ordering is\nguaranteed: ",[585,15509,15510],{"href":15510,"rel":15511},"https://www.rabbitmq.com/semantics.html#ordering",[589],[3469,15513,15515],{"id":15514},"the-dirty-details","The Dirty Details",[18,15517,15518],{},"When looking at the send semantics of the RabbitTemplate in Spring Boot we can seperate into two topics:",[649,15520,15522],{"id":15521},"passing-the-notwork","Passing The Notwork",[18,15524,15525],{},"The first is about reaching the RabbitMQ server at all. So, the network connection can be shaky or not available. Or the\nhost is reachable but the RabbitMQ service on the host is down. In that case the RabbitTemplate will throw an exception\nto the caller. From this point on the caller code can handle the failed message delivery conciously.",[18,15527,15528],{},"From an API interaction point of view the message can be considered as delivered (to the broker) if no exception is\nthrown by the send call. So this is quite comparable to an RestTemplate / HttpClient call. However, as you’ll see later\nthings can still go wrong even if the call returned successfully.",[649,15530,15532],{"id":15531},"delivery-inside-the-message-broker","Delivery Inside the Message Broker",[18,15534,15535],{},"When you use an AMQP message broker things are a bit different than when interacting via HTTP. This brings us to the\nsecond topic: Transferring the message to the broker is only the first part of a longer process. The broker tries to\nroute messages to the queues that are bound to the exchange on which the message is sent.",[18,15537,15538,15539,15542],{},"As mentiond – the broker ",[573,15540,15541],{},"tries"," to route the messages. If no queue is bound the message is just rushing through the\nexchange and is lost in the end. Another case is that if the target exchange does not exist (for whatever reason) the\nbroker returns an HTTP like error code: 404. On the client side the send() method call has already returned. The\nRabbitMQ template has no chance to notify it’s caller of the failed delivery. The only thing left is writing an error to\nthe application’s log.",[18,15544,15545],{},"There are probably more cases that match this problem space. One can categorize them like “received message but could\nnot deliver it to any queues”. The important point for all problems in this category is that once the\nRabbitTemplate.send() method returned the client code cannot be sure whether the message has really been delivered.",[3469,15547,15549],{"id":15548},"choose-your-weapon","Choose Your Weapon",[18,15551,15552],{},"For most of your scenarios this behavior is perfectly OK. At least with many of our cases we emit event messages in a\n“fire and forget” style. The code is written without knowledge of and excpectation towards any consumers.\nInconsistencies caused by not delivered messages need to be detected and handled seperatly.",[18,15554,15555,15556,986],{},"There are however scenarios where you really want to be sure that a given message has a) reached the message broker and\nb) been routed – the above mentioned ",[573,15557,15558],{},"at least onće delivery",[18,15560,15561],{},"In that case the AMQP protocol, RabbitMQ and Spring’s RabbitTemplate offer some (configuration) tools to help you.",[649,15563,15565],{"id":15564},"enable-and-handle-publisher-confirms-callbacks","Enable and Handle Publisher-Confirms Callbacks",[18,15567,15568,15569],{},"The publisher confirms callback helps the application developer to have his code to be notified when the RabbitMQ server\nhas received a message and has delivered it to the desired exchange. Technical details can be found\nhere: ",[585,15570,15571],{"href":15571,"rel":15572},"https://www.rabbitmq.com/confirms.html",[589],[18,15574,15575],{},"To enable the publisher confirms callbacks two things must be done:",[577,15577,15578,15588],{},[580,15579,15580,15581,15584,15585,15587],{},"The property ",[50,15582,15583],{},"spring.rabbitmq.publisher-confirms"," must be set to ",[50,15586,408],{},". Please notice that this property has global\neffect. Even if there is more than one RabbitTemplate configured.",[580,15589,15590],{},"Since the RabbitMQ server cannot return the cofirmation synchonously some callback code has to be registered so it can\nbe called once the confirm has arrived. The callback can be registered during the Creation of the RabbitTemplate.\nInstead of using the autoconfigured RabbitTemplate one needs to configure the RabbitTemplate manually and then provide\na new Instance of RabbitTemplate.CofirmCallback to the RabbitTemplate::setConfirmCallback method. One of the arguments\nof the confirm method of that class is the boolean ‘ack’ if it’s ‘true’ the publisher has confirmed that the message\nhas been received. If it’s false something went wrong.",[43,15592,15594],{"className":288,"code":15593,"language":290,"meta":48,"style":48},"template.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {\n\n @Override\n public void confirm(CorrelationData correlationData, boolean ack, String cause) {\n if(ack) {\n applicationEventPublisher.publish(new PublishConfirmedEvent(correlationData.getId());\n } else {\n applicationEventPublisher.publish(new PublishNotConfirmedEvent(correlationData.getId(), cause);\n }\n }\n});\n",[50,15595,15596,15601,15605,15610,15615,15620,15625,15630,15635,15639,15643],{"__ignoreMap":48},[53,15597,15598],{"class":55,"line":56},[53,15599,15600],{},"template.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {\n",[53,15602,15603],{"class":55,"line":86},[53,15604,500],{"emptyLinePlaceholder":499},[53,15606,15607],{"class":55,"line":126},[53,15608,15609],{}," @Override\n",[53,15611,15612],{"class":55,"line":163},[53,15613,15614],{}," public void confirm(CorrelationData correlationData, boolean ack, String cause) {\n",[53,15616,15617],{"class":55,"line":186},[53,15618,15619],{}," if(ack) {\n",[53,15621,15622],{"class":55,"line":221},[53,15623,15624],{}," applicationEventPublisher.publish(new PublishConfirmedEvent(correlationData.getId());\n",[53,15626,15627],{"class":55,"line":242},[53,15628,15629],{}," } else {\n",[53,15631,15632],{"class":55,"line":273},[53,15633,15634],{}," applicationEventPublisher.publish(new PublishNotConfirmedEvent(correlationData.getId(), cause);\n",[53,15636,15637],{"class":55,"line":279},[53,15638,12898],{},[53,15640,15641],{"class":55,"line":496},[53,15642,860],{},[53,15644,15645],{"class":55,"line":503},[53,15646,9894],{},[649,15648,15650],{"id":15649},"handle-return-callbacks","Handle Return Callbacks",[18,15652,15653],{},"In contrast to the Publisher Confirms Callback the Return Callback is not activated by a configuration property but is\ndirectly set on the RabbitTemplate object with setMandatory(true). So this has only effect for the one instance of the\nRabbitTemplate. If you want to have different behavior to this respect you can configure several RabbitTemplates with\ndifferent Qualifiers.",[18,15655,15656],{},"By activating the mandatory flag the sent messages indicate that the sender expects the message to be routed to a queue.\nIf the message is not routed the RabbitMQ server needs to return the whole message to the sender with a reply code.",[43,15658,15660],{"className":288,"code":15659,"language":290,"meta":48,"style":48},"template.setMandatory(true);\ntemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {\n\n @Override\n public void returnedMessage(Message message, int replyCode, String replyText, String exchange,\n String routingKey) {\n\n if (replyCode == AMQP.NO_ROUTE) {\n applicationEventPublisher.publish(new NoRouteEvent(message.getMessageId(),\n replyText, replyCode, exchange, routingKey);\n } else if(...) {\n // more code for other cases goes here\n }\n }\n});\n",[50,15661,15662,15667,15672,15676,15680,15685,15690,15694,15699,15704,15709,15714,15719,15723,15727],{"__ignoreMap":48},[53,15663,15664],{"class":55,"line":56},[53,15665,15666],{},"template.setMandatory(true);\n",[53,15668,15669],{"class":55,"line":86},[53,15670,15671],{},"template.setReturnCallback(new RabbitTemplate.ReturnCallback() {\n",[53,15673,15674],{"class":55,"line":126},[53,15675,500],{"emptyLinePlaceholder":499},[53,15677,15678],{"class":55,"line":163},[53,15679,15609],{},[53,15681,15682],{"class":55,"line":186},[53,15683,15684],{}," public void returnedMessage(Message message, int replyCode, String replyText, String exchange,\n",[53,15686,15687],{"class":55,"line":221},[53,15688,15689],{}," String routingKey) {\n",[53,15691,15692],{"class":55,"line":242},[53,15693,500],{"emptyLinePlaceholder":499},[53,15695,15696],{"class":55,"line":273},[53,15697,15698],{}," if (replyCode == AMQP.NO_ROUTE) {\n",[53,15700,15701],{"class":55,"line":279},[53,15702,15703],{}," applicationEventPublisher.publish(new NoRouteEvent(message.getMessageId(),\n",[53,15705,15706],{"class":55,"line":496},[53,15707,15708],{}," replyText, replyCode, exchange, routingKey);\n",[53,15710,15711],{"class":55,"line":503},[53,15712,15713],{}," } else if(...) {\n",[53,15715,15716],{"class":55,"line":509},[53,15717,15718],{}," // more code for other cases goes here\n",[53,15720,15721],{"class":55,"line":515},[53,15722,12898],{},[53,15724,15725],{"class":55,"line":521},[53,15726,860],{},[53,15728,15729],{"class":55,"line":527},[53,15730,9894],{},[18,15732,15733],{},"Message delivery/handling inside the message broker can fail for several reasons. The constants in the\ncom.rabbitmq.client.AMQP interface can give a hint to what can go wrong. Besides obvious codes like NOT_FOUND or\nACCESS_REFUSED the NO_ROUTE code is special since other errors are mostly caused by configuration problems. NO_ROUTE is\nreturned is when no queue (with a matching routing key) is bound to the target exchange and the mandatory flag is true.\nIt is the message producer’s way to express it’s wish for ‘at least once’ semantics.",[18,15735,15736,15737],{},"Also check the official\ndocu: ",[585,15738,15739],{"href":15739,"rel":15740},"https://www.rabbitmq.com/reliability.html#producer",[589],[649,15742,15744],{"id":15743},"identifying-message-deliveries-in-global-callbacks","Identifying Message Deliveries in Global Callbacks",[18,15746,15747,15748,15751,15752,15754,15755,15758,15759,986],{},"Both of the above mentioned techniques have one thing in common. They apply globally or at least to the scope to one\nRabbitTemplate instance. So it is important to set the ",[573,15749,15750],{},"messageId"," of the sent message with some value that can later be\nused to match the context from which the message has been sent. When you get a publisher confirms callback the initially\nset ",[573,15753,15750],{}," is now the ",[573,15756,15757],{},"correllationData.Id"," and if you get a return callback you have the initial message at hand\nwhere you can directly access the ",[573,15760,15750],{},[18,15762,15763,15764,15767,15768,986],{},"If you have different parts of your application communicating via RabbitMQ and want to be able to distinguish the\nmessages from each other it helps to prefix the id with some meaning ful token like ",[573,15765,15766],{},"orders"," or ",[573,15769,15770],{},"notifications",[3469,15772,15774],{"id":15773},"handling-callbacks-from-the-rabbittemplate","Handling Callbacks From the RabbitTemplate",[18,15776,15777],{},"It turned out to be a useful pattern to publish meaningful Application Events from the above mentioned callbacks and\nthen listen to these in some other application code. This helps to avoid tangle between your different domains and the\npotential central RabbitMQ configuration.",[18,15779,15780],{},"Also, you can easily handle the events in an async manner if needed. Be aware that this callbacks will potentially arive\nvery quickly and also do not rely on correct ordering. It helps to implement a state machine for handling async events\nwithout fixed order in a reliable manner.",[18,15782,15783],{},"also, to be more resilient against crashes (of the JVM) between delivery attempts you might want to persist your\ndelivery attempts (in a database).",[607,15785,989],{},{"title":48,"searchDepth":86,"depth":86,"links":15787},[15788,15789,15790,15794,15799],{"id":15440,"depth":86,"text":15441},{"id":15473,"depth":86,"text":15474},{"id":15514,"depth":86,"text":15515,"children":15791},[15792,15793],{"id":15521,"depth":126,"text":15522},{"id":15531,"depth":126,"text":15532},{"id":15548,"depth":86,"text":15549,"children":15795},[15796,15797,15798],{"id":15564,"depth":126,"text":15565},{"id":15649,"depth":126,"text":15650},{"id":15743,"depth":126,"text":15744},{"id":15773,"depth":86,"text":15774},[613,614],"2018-07-28T14:44:10","https://synyx.de/blog/implementing-at-least-once-delivery-with-rabbitmq-and-springs-rabbittemplate/",{},"/blog/implementing-at-least-once-delivery-with-rabbitmq-and-springs-rabbittemplate",{"title":15431,"description":48},"blog/implementing-at-least-once-delivery-with-rabbitmq-and-springs-rabbittemplate",[15808,15809,15810,15811,15812,1010,15813],"amqp","boot","distributed","messaging","rabbitmq","systems","Message Delivery Characteristics First some theory about delivery semantics in messaging systems. When a system wants to communicate via a message broker the developer needs a clear understanding of the delivery semantics. At first one needs to know if and how often a message will be delivered to the broker (and potential consumers): At most once - the message is delivered at most once but also not at all.","Tt3Ogxa-9Ig57HD1cc-ElR-Uard7wk79ygQUyUrtxF0",{"id":15817,"title":15818,"author":15819,"body":15820,"category":15970,"date":15971,"description":48,"extension":617,"link":15972,"meta":15973,"navigation":499,"path":15974,"seo":15975,"slug":15824,"stem":15976,"tags":15977,"teaser":15979,"__hash__":15980},"blog/blog/code-coverage-with-significance.md","Code Coverage with significance",[3920],{"type":11,"value":15821,"toc":15960},[15822,15825,15829,15832,15835,15838,15841,15844,15847,15854,15865,15869,15884,15890,15893,15897,15900,15904,15907,15911,15914,15931,15937,15940,15944,15947,15950,15954,15957],[14,15823,15818],{"id":15824},"code-coverage-with-significance",[3469,15826,15828],{"id":15827},"_839-what-does-that-even-mean","83,9% – what does that even mean?",[18,15830,15831],{},"Conversations about unit test coverage usually sound like this:",[18,15833,15834],{},"A: “What’s your coverage?”",[18,15836,15837],{},"B: “About 83,9%”",[18,15839,15840],{},"C: “Meh. Solid.”",[18,15842,15843],{},"A: “Solid? That’s incredibly high!”",[18,15845,15846],{},"D: “Ours is 40% but we have a lot of generated code so it’s still high.”",[18,15848,15849,15850,15853],{},"This shows that the perception of code coverage is highly subjective and most of the time does not have the informative\nvalue that a precise percentage indicator like “83,9%” suggests. As soon as you have a portion of code in your project,\nthat is not covered on purpose (like generated code) but is still included in the coverage analysis, you lose the\nsignificance of the coverage indicator. You’re only able to tell that ",[27,15851,15852],{},"some"," of your code is covered and maybe you can\ndeviate from the percentage that your coverage is “high” or “low”. You can tell that your coverage is going up or down,\nbut not even that is dependable as it does not take into account how much of the new code is purposefully not tested.\nHow many tests are missing? What is the risk that you take on every new release? You can not provide a satisfactory\nanswer to these questions.",[18,15855,15856,15857,15864],{},"There are divergent opinions on what “good” code coverage is, varying somewhere between 60% and 90% from my experience.\nI claim: ",[573,15858,15859,15860,15863],{},"Your unit test coverage is good when ",[27,15861,15862],{},"100% of the code you want to test"," is covered by unit tests."," And in\nmy opinion this is measurable and doable and makes the coverage indicator significant again.",[3469,15866,15868],{"id":15867},"purposefully-untested-code","Purposefully untested code",[18,15870,15871,15872,15877,15878,15883],{},"In every larger project there are some portions of code that you do not want to test with unit tests. The first step\ntowards a meaningful code coverage indicator is to identify these portions. Then coverage tools\nlike ",[585,15873,15876],{"href":15874,"rel":15875},"https://www.eclemma.org/jacoco/",[589],"Jacoco"," and reporting tools like ",[585,15879,15882],{"href":15880,"rel":15881},"https://www.sonarqube.org/",[589],"SonarQube"," can help\nyou exclude these portions from the coverage report – usually by defining exclusion patterns like in the picture below.",[18,15885,15886],{},[1794,15887],{"alt":15888,"src":15889},"Code Coverage Exclusions","https://media.synyx.de/uploads/2019/04/exclusions.png",[18,15891,15892],{},"Following are some examples of code you don’t want to test and how you can exclude it to shave off some percent of your\ncoverage’s insignificance.",[649,15894,15896],{"id":15895},"code-of-3rd-party-libraries","Code of 3rd party libraries",[18,15898,15899],{},"Just stating the obvious. As changes on this code are not in your cognizance, neither are its tests. In a normal project\nsetup 3rd party libraries are not included in the coverage report by default.",[649,15901,15903],{"id":15902},"test-code","Test code",[18,15905,15906],{},"Usually code, that is intended for testing purposes only, is separated from the production code which makes it easily\nexcludable. There may be some exceptions like mock objects or testing infrastructure that exist near the production\ncode, in which case you should specifically exclude them from your coverage report.",[649,15908,15910],{"id":15909},"generated-code","Generated code",[18,15912,15913],{},"Changes in this code are done by a code generator. You should assume that the generated code is correct, when the\ngenerator works correctly. That said, if you wrote the generator yourself, you obviously still have to test the\ngenerator. Often the exclusion of generated code is easy as it is usually located in a separated package and you can\ndefine a simple exclusion pattern for it.",[18,15915,15916,15917,15922,15923,15930],{},"Sometimes it is a bit more complicated, for example when you use a convenience framework\nlike ",[585,15918,15921],{"href":15919,"rel":15920},"https://projectlombok.org/",[589],"Lombok"," in Java, that generates accessors, constructors and the like for you. It\nresults in bytecode where handwritten and generated code are present within the same class, which makes it nearly\nimpossible to only exclude the generated methods. Most of the time Lombok is used in objects like DTOs, JPA entity\nclasses etc., that are only holding some property fields and no business logic. One possible solution here is to define\nthese whole classes as “not to be tested” and make them easily identifiable with a consistent naming convention or by\nmoving them into similar packages so you can use patterns like “",[27,15924,15925,15926,15929],{},"/",[573,15927,15928],{},"Dto.","” or “","/dto/**” to exclude them\ncompletely.",[18,15932,15933],{},[1794,15934],{"alt":15935,"src":15936},"Code-Beispiel","https://media.synyx.de/uploads/2018/06/lombok_fail.png",[18,15938,15939],{},"A little off topic: When you don’t use Lombok and you write your getters, setters and constructors/builders yourself,\nthat does not mean you have to unit test them explicitly. When all of your business code is unit tested then all needed\ngetters, setters and constructors should be tested implicitly and show up as covered in the coverage report. If they\ndon’t then it means that either the tests for your business code are not complete or that the getters/setters are not\nactually used and you should just delete them. Unfortunately things like equals() and hashcode() are a whole different\nstory because of their high cyclomatic complexity.",[649,15941,15943],{"id":15942},"code-better-covered-by-other-types-of-tests","Code better covered by other types of tests",[18,15945,15946],{},"A good example for code that is better tested by non-unit tests are repository classes that access your database.\nWriting unit tests for them is possible but cumbersome because they usually use a lot of framework API that has to be\nmocked. Also repository classes typically don’t contain much logic besides database access so unit tests don’t test that\nmuch. IMO it is better to write tests that actually integrate with a (more or less) real database and do without unit\ntests.",[18,15948,15949],{},"Another example are classes like Spring configurations annotated with @Configuration. They are not intended to be tested\nby unit tests. Their purpose is to construct a working application context which is better checked by good integration\ntests. This is why I usually exclude “**/*Config.*” from the unit test coverage report.",[3469,15951,15953],{"id":15952},"the-new-meaning-of-839","The new meaning of 83,9%",[18,15955,15956],{},"When you put a little effort into defining the correct exclusions for your code coverage you are rewarded with an\nactually meaningful coverage percentage. It means that when you have 83.9% code coverage you are actually missing\n16.1% of unit tests that you should write – that’s a valuable piece of information! It is also possible that you can\nactually reach 100% unit test coverage! How cool is that?",[18,15958,15959],{},"Well to be honest – realistically it is still nearly impossible to reach 100% in a larger project. There are always\nthings like private constructors to prevent instantiation or code paths that can not be reached in tests because some\nstatic framework dependencies can not be mocked and probably a dozen other reasons that prevent you from providing\nreasonable unit tests in some weird cases. But if that leads to “only” 98% test coverage at least you know that exactly\n2% of your production code has the risk to break without you noticing and you can consciously accept, assess and\ncommunicate that risk.",{"title":48,"searchDepth":86,"depth":86,"links":15961},[15962,15963,15969],{"id":15827,"depth":86,"text":15828},{"id":15867,"depth":86,"text":15868,"children":15964},[15965,15966,15967,15968],{"id":15895,"depth":126,"text":15896},{"id":15902,"depth":126,"text":15903},{"id":15909,"depth":126,"text":15910},{"id":15942,"depth":126,"text":15943},{"id":15952,"depth":86,"text":15953},[613,614],"2018-06-11T14:53:35","https://synyx.de/blog/code-coverage-with-significance/",{},"/blog/code-coverage-with-significance",{"title":15818,"description":48},"blog/code-coverage-with-significance",[15978],"testing","83,9% - what does that even mean? Conversations about unit test coverage usually sound like this: A: “What’s your coverage?” B: “About 83,9%” C: “Meh. Solid.” A: “Solid? That’s incredibly high!” D: “Ours is 40% but we have a lot of generated code so it’s still high.” This shows that the perception of code coverage is highly subjective and most of the time does not have the informative value that a precise percentage indicator like '","nDo5Wxhzv_lZrfVYpMfwdgPVRYj486SqZEOYOsmqy5o",{"id":15982,"title":15983,"author":15984,"body":15986,"category":16089,"date":16090,"description":16091,"extension":617,"link":16092,"meta":16093,"navigation":499,"path":16094,"seo":16095,"slug":15990,"stem":16096,"tags":16097,"teaser":16098,"__hash__":16099},"blog/blog/meine-ausbildung-bei-synyx.md","Meine Ausbildung bei synyx",[15985],"ochs",{"type":11,"value":15987,"toc":16084},[15988,15991,15994,15997,16000,16003,16007,16010,16013,16016,16019,16022,16025,16031,16035,16038,16041,16044,16050,16053,16056,16059,16063,16066,16069,16072,16075,16081],[14,15989,15983],{"id":15990},"meine-ausbildung-bei-synyx",[18,15992,15993],{},"Ich bin nun bereits seit fast einem Jahr ausgelernt und möchte euch ein bisschen über die drei jährige Ausbildung bei\nsynyx berichten.",[18,15995,15996],{},"Als Erstausbildung habe ich 2.5 Jahre Elektriker gemacht, in dieser Zeit wurde mir klar, dass dieser Beruf nicht zu mir\npasst.",[18,15998,15999],{},"Die Softwareentwicklung brachte ich mir während der Ausbildung selber bei.",[18,16001,16002],{},"Dadurch kam ich auch zu meiner Ausbildung als Fachinformatiker für Anwendungsentwicklung bei der Firma synyx.",[3469,16004,16006],{"id":16005},"mein-erstes-lehrjahr","Mein erstes Lehrjahr",[18,16008,16009],{},"Meine Ausbildung bei der synyx fing im August 2014 an, damals noch im alten Büro ohne Klimaanlage.",[18,16011,16012],{},"Vorher hatte ich bereits Erfahrungen im Frontend Bereich (HTML, CSS, und ein wenig JavaScript) gesammelt.",[18,16014,16015],{},"Mein Ausbilder war Alex. Er brachte mir die Grundlagen von Java und Softwareengineering bei.",[18,16017,16018],{},"Durch kleine Projekte wie ein einarmiger Bandit, ein Taschenrechner, ein Tic Tac Toe spiel und eine Google Kalender\nEvent Timeline vertiefte ich die saubere strukturierte Umsetzung eines Software -Projektes.",[18,16020,16021],{},"Gegen Ende meines ersten Lehrjahres bekam ich mein erstes Projekt namens BackupControl, welches heute noch im Einsatz\nist.",[18,16023,16024],{},"Das Projekt soll den Mitarbeitern eine einfache Möglichkeit bieten ihre Backups manuell zu konfigurieren.",[18,16026,16027],{},[1794,16028],{"alt":16029,"src":16030},"BackupControl","https://media.synyx.de/uploads/2019/04/screenshot-from-2018-05-04-17-22-18-768x432.png",[3469,16032,16034],{"id":16033},"das-zweite-lehrjahr","Das zweite Lehrjahr",[18,16036,16037],{},"Im zweiten Lehrjahr wurde ich für Kundenprojekte eingearbeitet.",[18,16039,16040],{},"Bevor ich am Kundenprojekt loslegen durfte, sollte ich noch einiges über Javascript und die Arbeit in einem Team lernen.",[18,16042,16043],{},"Ziel des Übungsprojektes war es Snake als eine Web Applikation zu entwickeln.",[18,16045,16046],{},[1794,16047],{"alt":16048,"src":16049},"Snake Web Applikation","https://media.synyx.de/uploads/2019/04/Snake-Pascal-Ochs-768x432.png",[18,16051,16052],{},"Nachdem das Projekt abgeschlossen wurde, kam ich in mein erstes Team.",[18,16054,16055],{},"Durch die Projekte lernte ich viel darüber, was es bedeutet, in einem Team zu arbeiten.",[18,16057,16058],{},"Auch der Umgang mit Kunden, welcher für mich Neuland war, wurde mir Schritt für Schritt beigebracht.",[3469,16060,16062],{"id":16061},"das-dritte-lehrjahr","Das dritte Lehrjahr",[18,16064,16065],{},"Im dritten Lehrjahr kam ich in das Admin Team.",[18,16067,16068],{},"Bei synyx wird Wert darauf gelegt, dass ein Azubi auch mal die andere Seite kennengelernt, in meinem Fall das Admin\nTeam.",[18,16070,16071],{},"Dabei kam ich viel mit der technischen Infrastruktur des Unternehmens in Berührung.",[18,16073,16074],{},"Durch die Zeit bei den Admins kam auch die Idee zu meinem Abschlussprojekt namens “Synlan”. Die Idee war es eine\nSoftware zu entwickeln, welche die Suche nach einem Netzwerkgerät vereinfachen soll.",[18,16076,16077],{},[1794,16078],{"alt":16079,"src":16080},"Software zur Suche nach Netzwerkgeräten","https://media.synyx.de/uploads/2018/05/Netzwekger%C3%A4tesuche-768x432.png",[18,16082,16083],{},"Durch die gute Vorbereitung auf die Prüfung und die gute Unterstützung meiner Arbeitskollegen schloss ich im Juni meine\nAusbildung erfolgreich ab.",{"title":48,"searchDepth":86,"depth":86,"links":16085},[16086,16087,16088],{"id":16005,"depth":86,"text":16006},{"id":16033,"depth":86,"text":16034},{"id":16061,"depth":86,"text":16062},[614],"2018-05-04T10:14:04","Ich bin nun bereits seit fast einem Jahr ausgelernt und möchte euch ein bisschen über die drei jährige Ausbildung bei\\nsynyx berichten.","https://synyx.de/blog/meine-ausbildung-bei-synyx/",{},"/blog/meine-ausbildung-bei-synyx",{"title":15983,"description":15993},"blog/meine-ausbildung-bei-synyx",[],"Ich bin nun bereits seit fast einem Jahr ausgelernt und möchte euch ein bisschen über die drei jährige Ausbildung bei synyx berichten.","lB3mCCc6SVfIKT9pkyynhwApqUEo-W5QQuaWRcWPccQ",{"id":16101,"title":16102,"author":16103,"body":16104,"category":16270,"date":16271,"description":16272,"extension":617,"link":16273,"meta":16274,"navigation":499,"path":16275,"seo":16276,"slug":16108,"stem":16277,"tags":16278,"teaser":16282,"__hash__":16283},"blog/blog/breakout-session-how-to-prototype-your-enterprise-project-hackathon-like.md","Breakout Session – how to prototype your enterprise project hackathon-like",[3920],{"type":11,"value":16105,"toc":16263},[16106,16109,16112,16118,16122,16129,16132,16136,16139,16142,16145,16148,16153,16156,16159,16162,16168,16172,16175,16181,16184,16187,16190,16193,16196,16199,16205,16209,16212,16232,16238,16243,16246,16249,16253,16260],[14,16107,16102],{"id":16108},"breakout-session-how-to-prototype-your-enterprise-project-hackathon-like",[18,16110,16111],{},"This is the story of my team creating something awesome within one day. It begins in November of 2017 at “Hack your\nOffice”, a 24-hour hackathon hosted in cooperation by my employer synyx and our customer dm-drogerie markt. Although\nit was an excellent hackathon, this is not the day I am refering to but it was on this day when the idea was born.\nSeveral of my team members from dm where participating in the hackathon, even Matthäus – one of our product owners –\njoined us. He didn’t contribute anything to the code but he was absorbed in the electrifying atmosphere of everybody\nbeing excited to hack something together. The amazing thing about hackathons is that everybody has the intrinsic\nmotivation to be creative and to work hard to produce something awesome in the short time that is available, while\nhaving fun! Matthäus formed the vision to experience something similar with our own, regular development team from the\ndm office.",[18,16113,16114],{},[1794,16115],{"alt":16116,"src":16117},"Logo Hack Your Office","https://media.synyx.de/uploads/2019/04/HACKYOUROFFICE-768x1024.jpg",[3469,16119,16121],{"id":16120},"the-vision","The Vision",[18,16123,16124,16125,16128],{},"The vision was plain and simple: Create a working POC-like product that ",[27,16126,16127],{},"adds real value and runs in production","\nwithin a single day while working in a hackathon-like atmosphere.",[18,16130,16131],{},"On this day we would not work in our usual office but together in a remote location, focussing as a team on this one\ngoal alone. We called it “breakout session”. Luckily we had a suitable use case in the pipeline. The digital receipt\nsystem of dm (“e-Bon”), that was reaching its end-of-life in 2018 for several reasons, had to be reimplemented. We\ndefined the ambitious goal that within a day we should be able to walk downstairs to the real dm store with our phone,\nactually buy something and see the genuine receipt created by the check-out counter displayed in our dm customer\naccount on our phone. Everything with production systems and production data.",[3469,16133,16135],{"id":16134},"preparation-for-bonbon","Preparation for BonBon",[18,16137,16138],{},"Although it was intended as a one-day thing we didn’t want to go in blindly. Some preparation was necessary to reduce\nthe risk of failure in our one-day adventure.",[18,16140,16141],{},"First we made up a small concept about basic things like where the data had to come from, what system our product will\nbe running on, which systems would have to talk to each other. The actual business use case was worked out in more\ndetail by our product owners.",[18,16143,16144],{},"We knew we would be developing a new microservice so we needed a system to run it on. At dm there is a provisioning\nplatform in place that can pull up a fully configured virtual machine cluster on multiple stages including firewall\nrules, load balancing and everything within half an hour. However we did this beforehand because experience tells us\nthat this really cool technology doesn’t always run smoothly on first try due to its massive complexity.",[18,16146,16147],{},"The receipt data from the ~9000 checkout counters of all dm stores in europe is stored in real time on some central\nbackend system so we prepared a route piping the data in real time into a topic on one of our Apache Kafka clusters. We\nlimited the data to the last two days, which should be more than enough for our POC.",[18,16149,16150],{},[1794,16151],{"alt":12664,"src":16152},"https://media.synyx.de/uploads/2019/04/json.jpg",[18,16154,16155],{},"We assembled the team for our breakout session having cross-functionality in mind as we had to master tasks in backend\ndevelopment, data processing, operations and mobile development on that day. Our regular development team (usually in\ncharge of the customer backend of dm) formed the backbone of the breakout team. We already incorporate backend expertise\nand extensive knowledge in operations and many areas of data processing thanks to our devops culture. Unfortunately we\nare a bit thin on frontend and mobile development so we asked colleagues from the mobile team to join us. One guy from\nanalytics helped us setting up Kafka and the server operations team was (as always) on stand by in the office and\ninformed about our endeavour in case anything complicated would go wrong with the infrastructure.",[18,16157,16158],{},"Finally we needed a location to retreat to. One of my teammates arranged three rooms at the office of his employer\ndiva-e Netpioneer, which is beautifully located at the city park in Karlsruhe – quickly accessible by bike, train or\ncar for all participants. He also made reservations for lunch at the nearby pizza place – one more thing of importance\nthat we would not have to bother about on the breakout day.",[18,16160,16161],{},"The discussion about the upcoming solution’s name was held some day during lunch. We called it BonBon.",[18,16163,16164],{},[1794,16165],{"alt":16166,"src":16167},"Bonbon","https://media.synyx.de/uploads/2019/04/bonbon-768x512.jpg",[3469,16169,16171],{"id":16170},"the-session","The Session",[18,16173,16174],{},"Finally the day arrived on a Wednesday in March. Everbody was hyped about it, though some of us a bit more sceptically\nhyped. Ten developers, two product owners, two interested guests from the business department and one scrum master were\ngathering in the kitchen at diva-e, having the first of countless coffees and enjoying breakfast pretzels eager to\nabuse our keyboards for some dirty hacking. Our product owners started the session at 9:00 with a short kick-off\nintroducing the details of the use case and we quickly forged the requirements into small user stories that would\neventually add up to the desired POC.",[18,16176,16177],{},[1794,16178],{"alt":16179,"src":16180},"Whiteboard mit Post-its","https://media.synyx.de/uploads/2019/04/board_gimp2.jpg",[18,16182,16183],{},"Twenty minutes in the user stories were ready and the signal to commence the hacking was given. Suddenly the excitement\nunloaded in a stream of productivity! Small teams were vibrantly working to put the pieces together. Creating\nrepositories, initializing a Spring Boot app, testing out infrastructure all around within the first few minutes! Thanks\nto modern development tools the results came in quickly. Within one hour the first API was useable in a freshly created\nBackend Service. Shortly after the new born iPhone app was capable to authenticate users at the checkout counter via\nQR-code. Before lunch the Kafka data trickeled in at the backend. A rudimentary build and release process was in place.\nThis didn’t feel like work, it was the hackathon atmosphere transferred to our everyday activity.",[18,16185,16186],{},"The mode we were working in was mainly in small teams of 2-3 developers tackling the different tasks in pair\nprogramming. Every hour we did a quick stand up to sync our progress. Small successes were celebrated, problems\nannounced to find a fast solution using the creative power of the whole team. The product owners where always within\nreach, researching business details, answering arising questions and giving feedback on the progress. Our scrum master\nwas scurrying around the team during development enabling communication, removing impediments, moderating stand-ups,\ngiving impulses.",[18,16188,16189],{},"Unfortunately the lunch break did not work out that well. Visiting a pizza place with a group of 15 unexpectedly turned\nout to take a lot longer than anticipated. A huge chunk of our precious time and focus was lost to some delicious slices\nof Italian culinary art.",[18,16191,16192],{},"During the time between lunch and the contemplated end at 17:00 we managed to develop almost everything that was\nnecessary to complete our goal. There was one problem left with processing the huge amount of real time data and one\nconnectivity problem between the app and the prod backend. Some team members committed to two more hours of problem\nsolving which payed off big time at the end of the day!",[18,16194,16195],{},"Around 19:00 a colleague went downstairs to the local dm store and got some apple-cinnamon cereal. He went to the\ncounter and held his phone to the QR Code scanner to let the cash identify his account. After payment he opened the\nBonBon app and the receipt of the purchase was displayed with article description, product pictures, prices and\neverything. Achievement unlocked!",[18,16197,16198],{},"Unfortunately we missed the opportunity to take a picture of this moment but the receipt in the final app prototype\nlooked like this:",[18,16200,16201],{},[1794,16202],{"alt":16203,"src":16204},"App-Beispiel","https://media.synyx.de/uploads/2018/04/app.jpg",[3469,16206,16208],{"id":16207},"hacking-around-problems","Hacking around problems",[18,16210,16211],{},"To enable this quick success we had to make our hands a little dirty by cutting corners on otherwise indispensable\npractices of our everyday work. (Except security, of course. Access to the APIs and the data was secured the whole\ntime.) The whole day we were running in full-on prototype-POC mode. We agreed in advance that all produced code had to\nwork quickly and didn’t have to be beautiful or readable at all. Tests were omitted from the beginning. Copy-paste from\nother projects or Stackoverflow for quick results was encouraged. Upcoming obstacles were circumnavigated with the\nquickest workaround instead of looking for the “correct” solution:",[577,16213,16214,16217,16220,16223,16226,16229],{},[580,16215,16216],{},"Connectivity from the app to the BonBon production system was created last minute with some obscure temporary routing\nthrough the release gateway into the DMZ.",[580,16218,16219],{},"Deployment was done by copying the jar artifact to the production vm “on foot”.",[580,16221,16222],{},"The receipt data was stored in memory – without backup. We just left out the persistence layer to save time.",[580,16224,16225],{},"The huge amount of data accumulated in 2 days hit us unexpectedly. We just shrugged it off and hoped the system\nperformance would endure the load.",[580,16227,16228],{},"Debugging problems by frantically adding new logs on the new production system was common practice",[580,16230,16231],{},"… and some more",[18,16233,16234],{},[1794,16235],{"alt":16236,"src":16237},"Teamarbeit","https://media.synyx.de/uploads/2018/04/team.jpg",[18,16239,16240],{},[1794,16241],{"alt":48,"src":16242},"https://synyx.de/blog/2018-04-17-breakout-session/team.jpg",[18,16244,16245],{},"Operating this way we ended up with a working proof of concept covering everything we aimed for on this day, which was a\nhuge success! But to be clear: The thing we produced is obviously far from being actually production ready. Some parts\nof the code need refactoring to meet our quality standards. Test coverage has to be provided everywhere on all layers of\nthe test pyramid. Data has to be persisted and resilience measures have to be taken to achieve acceptable robustness of\nthe solution. A proper deployment process has to be established, maybe with containerization. Continous integration and\ncontinous delivery have to be provided. The app has to be refurbished, approved and published. And so on.",[18,16247,16248],{},"Some aspects of the electronic receipt use case were not possible to implement on the breakout day – like the original\nidea to avoid paper waste for the receipt. To stop the checkout counter from printing the receipt we would have to\nchange and deploy the software running on it, which is maintained by another team, rolled out countrywide and is not\nintegrated into a CD lifecycle – impossible to achieve in one day.",[3469,16250,16252],{"id":16251},"the-aftermath","The aftermath",[18,16254,16255,16256,16259],{},"Ultimately the day turned out to be exceptionally valuable both as team building excercise and as an effective method of\nstarting a project. We proved our idea to be feasable in a real production example. We have a working code base, working\nartifacts and infrastructure, that can be built upon and expanded. This will be pursued in the form of normal backlog\nitems during our usual sprint-to-sprint routine. The team gained a decent boost of motivation and team spirit – not\nonly the developers but also the product owners, who worked in support of the team and the use case the whole day, and\nour scrum master, who enabled focus and kept our spirits high with his subtle (",[573,16257,16258],{},"cough",") positive nature.",[18,16261,16262],{},"We perceived the breakout session experiment as a successful, wholesome experience and can recommend it as method for\nPOCs, project starts, feature kick-offs to every team that wants to try something new.",{"title":48,"searchDepth":86,"depth":86,"links":16264},[16265,16266,16267,16268,16269],{"id":16120,"depth":86,"text":16121},{"id":16134,"depth":86,"text":16135},{"id":16170,"depth":86,"text":16171},{"id":16207,"depth":86,"text":16208},{"id":16251,"depth":86,"text":16252},[4494,613,614],"2018-04-17T11:22:24","This is the story of my team creating something awesome within one day. It begins in November of 2017 at “Hack your\\nOffice”, a 24-hour hackathon hosted in cooperation by my employer synyx and our customer dm-drogerie markt. Although\\nit was an excellent hackathon, this is not the day I am refering to but it was on this day when the idea was born.\\nSeveral of my team members from dm where participating in the hackathon, even Matthäus – one of our product owners –\\njoined us. He didn’t contribute anything to the code but he was absorbed in the electrifying atmosphere of everybody\\nbeing excited to hack something together. The amazing thing about hackathons is that everybody has the intrinsic\\nmotivation to be creative and to work hard to produce something awesome in the short time that is available, while\\nhaving fun! Matthäus formed the vision to experience something similar with our own, regular development team from the\\ndm office.","https://synyx.de/blog/breakout-session-how-to-prototype-your-enterprise-project-hackathon-like/",{},"/blog/breakout-session-how-to-prototype-your-enterprise-project-hackathon-like",{"title":16102,"description":16111},"blog/breakout-session-how-to-prototype-your-enterprise-project-hackathon-like",[4494,16279,16280,16281],"hackathon","poc","prototyping","This is the story of my team creating something awesome within one day. It begins in November of 2017 at 'Hack your Office', a 24-hour hackathon hosted in cooperation by my employer synyx and our customer dm-drogerie markt. Although it was an excellent hackathon, this is not the day I am refering to but it was on this day when the idea was born. Several of my team members from dm where participating in the hackathon, even Matthäus - one of our product owners - joined us.","Blcw4uT2FNpf2rgpclc4clsllmntm5TBcVUMzvt5oRY",{"id":16285,"title":16286,"author":16287,"body":16289,"category":16732,"date":16733,"description":16734,"extension":617,"link":16735,"meta":16736,"navigation":499,"path":16737,"seo":16738,"slug":16293,"stem":16740,"tags":16741,"teaser":16744,"__hash__":16745},"blog/blog/an-image-slideshow-shortcode-for-hugo.md","An Image Slideshow Shortcode For Hugo",[16288],"sommer",{"type":11,"value":16290,"toc":16730},[16291,16294,16303,16306,16309,16312,16317,16320,16323,16367,16370,16533,16536,16539,16542,16545,16678,16681,16687,16693,16699,16705,16711,16717,16723,16728],[14,16292,16286],{"id":16293},"an-image-slideshow-shortcode-for-hugo",[18,16295,16296,16297,16302],{},"Creating static web sites with ",[585,16298,16301],{"href":16299,"rel":16300},"http://gohugo.io/",[589],"Hugo"," is fun and fast but providing a convenient shortcode to\nsmoothly cross-fade an unknown number of images in a blogpost gets a bit tricky… So let’s go!",[18,16304,16305],{},"Shortcodes are Hugo template snippets which can be used inside a markdown document with optional named or unamed\nparameters.",[18,16307,16308],{},"The snippet is for example called slide.html and has to be placed in a folder called shortcodes in the layout directory\nof the Hugo site.",[18,16310,16311],{},"To slide some images we need to know the folder’s location. So the shortcode in the markdown document will look like\nthis:",[18,16313,16314],{},[50,16315,16316],{},"{{``\u003C slide \"/assets/img/\">``}}",[18,16318,16319],{},"The shortcode itself starts with reading out the parameter and 2 constants defining the fade-in time and the number of\nseconds for how long an image is visible. The localFolder may require some string manipulations to match the local\ndirectory.",[18,16321,16322],{},"Read the folder, count the number of files in it and calculate the duration of the whole css animation.",[43,16324,16326],{"className":288,"code":16325,"language":290,"meta":48,"style":48},"{{ $fadein := 2 }}\n{{ $visible := 4 }}\n{{ $param := .Get 0 }}\n{{ $localFolder := printf \"/static%s/\" $param }}\n\n{{ $files := sort (readDir $localFolder) }}\n{{ $numberOfFiles := len $files }}\n{{ $animationDuration := mul (add $fadein $visible) $numberOfFiles }}\n",[50,16327,16328,16333,16338,16343,16348,16352,16357,16362],{"__ignoreMap":48},[53,16329,16330],{"class":55,"line":56},[53,16331,16332],{},"{{ $fadein := 2 }}\n",[53,16334,16335],{"class":55,"line":86},[53,16336,16337],{},"{{ $visible := 4 }}\n",[53,16339,16340],{"class":55,"line":126},[53,16341,16342],{},"{{ $param := .Get 0 }}\n",[53,16344,16345],{"class":55,"line":163},[53,16346,16347],{},"{{ $localFolder := printf \"/static%s/\" $param }}\n",[53,16349,16350],{"class":55,"line":186},[53,16351,500],{"emptyLinePlaceholder":499},[53,16353,16354],{"class":55,"line":221},[53,16355,16356],{},"{{ $files := sort (readDir $localFolder) }}\n",[53,16358,16359],{"class":55,"line":242},[53,16360,16361],{},"{{ $numberOfFiles := len $files }}\n",[53,16363,16364],{"class":55,"line":273},[53,16365,16366],{},"{{ $animationDuration := mul (add $fadein $visible) $numberOfFiles }}\n",[18,16368,16369],{},"Now create the slider div, iterate through the files and generate an img tag for each file.",[43,16371,16373],{"className":288,"code":16372,"language":290,"meta":48,"style":48}," \u003Cstyle>\n .slider {\n padding-bottom: 70%;\n width: 100%;\n height: 0;\n position: relative;\n }\n .slider img {\n width: 100%;\n height: auto;\n position: absolute;\n opacity: 0;\n animation: slide infinite {{$animationDuration}}s;\n }\n\n {{ $x := div 100.0 $animationDuration }}\n {{ $p0 := 0 }}\n {{ $p1 := mul $x $fadein }}\n {{ $p2 := mul $x (add $fadein $visible) }}\n {{ $p3 := mul $x (add (add $fadein $visible) $fadein) }}\n\n @keyframes slide {\n {{ $p0 }}% { opacity: 0; }\n {{ $p1 }}% { opacity: 1; }\n {{ $p2 }}% { opacity: 1; }\n {{ $p3 }}% { opacity: 0; }\n }\n\n {{ range $index, $value := $files }}\n {{ $delay := mul (add $fadein $visible) $index }}\n .slider img:nth-child({{add $index 1}}){animation-delay:{{$delay}}s;}\n {{ end }}\n\u003C/style>\n",[50,16374,16375,16380,16385,16390,16395,16400,16405,16409,16414,16418,16423,16428,16433,16438,16442,16446,16451,16456,16461,16466,16471,16475,16480,16485,16490,16495,16500,16504,16508,16513,16518,16523,16528],{"__ignoreMap":48},[53,16376,16377],{"class":55,"line":56},[53,16378,16379],{}," \u003Cstyle>\n",[53,16381,16382],{"class":55,"line":86},[53,16383,16384],{}," .slider {\n",[53,16386,16387],{"class":55,"line":126},[53,16388,16389],{}," padding-bottom: 70%;\n",[53,16391,16392],{"class":55,"line":163},[53,16393,16394],{}," width: 100%;\n",[53,16396,16397],{"class":55,"line":186},[53,16398,16399],{}," height: 0;\n",[53,16401,16402],{"class":55,"line":221},[53,16403,16404],{}," position: relative;\n",[53,16406,16407],{"class":55,"line":242},[53,16408,860],{},[53,16410,16411],{"class":55,"line":273},[53,16412,16413],{}," .slider img {\n",[53,16415,16416],{"class":55,"line":279},[53,16417,16394],{},[53,16419,16420],{"class":55,"line":496},[53,16421,16422],{}," height: auto;\n",[53,16424,16425],{"class":55,"line":503},[53,16426,16427],{}," position: absolute;\n",[53,16429,16430],{"class":55,"line":509},[53,16431,16432],{}," opacity: 0;\n",[53,16434,16435],{"class":55,"line":515},[53,16436,16437],{}," animation: slide infinite {{$animationDuration}}s;\n",[53,16439,16440],{"class":55,"line":521},[53,16441,860],{},[53,16443,16444],{"class":55,"line":527},[53,16445,500],{"emptyLinePlaceholder":499},[53,16447,16448],{"class":55,"line":533},[53,16449,16450],{}," {{ $x := div 100.0 $animationDuration }}\n",[53,16452,16453],{"class":55,"line":539},[53,16454,16455],{}," {{ $p0 := 0 }}\n",[53,16457,16458],{"class":55,"line":545},[53,16459,16460],{}," {{ $p1 := mul $x $fadein }}\n",[53,16462,16463],{"class":55,"line":4941},[53,16464,16465],{}," {{ $p2 := mul $x (add $fadein $visible) }}\n",[53,16467,16468],{"class":55,"line":4949},[53,16469,16470],{}," {{ $p3 := mul $x (add (add $fadein $visible) $fadein) }}\n",[53,16472,16473],{"class":55,"line":4957},[53,16474,500],{"emptyLinePlaceholder":499},[53,16476,16477],{"class":55,"line":4966},[53,16478,16479],{}," @keyframes slide {\n",[53,16481,16482],{"class":55,"line":4973},[53,16483,16484],{}," {{ $p0 }}% { opacity: 0; }\n",[53,16486,16487],{"class":55,"line":4978},[53,16488,16489],{}," {{ $p1 }}% { opacity: 1; }\n",[53,16491,16492],{"class":55,"line":4984},[53,16493,16494],{}," {{ $p2 }}% { opacity: 1; }\n",[53,16496,16497],{"class":55,"line":5001},[53,16498,16499],{}," {{ $p3 }}% { opacity: 0; }\n",[53,16501,16502],{"class":55,"line":5007},[53,16503,860],{},[53,16505,16506],{"class":55,"line":5016},[53,16507,500],{"emptyLinePlaceholder":499},[53,16509,16510],{"class":55,"line":5021},[53,16511,16512],{}," {{ range $index, $value := $files }}\n",[53,16514,16515],{"class":55,"line":5027},[53,16516,16517],{}," {{ $delay := mul (add $fadein $visible) $index }}\n",[53,16519,16520],{"class":55,"line":5042},[53,16521,16522],{}," .slider img:nth-child({{add $index 1}}){animation-delay:{{$delay}}s;}\n",[53,16524,16525],{"class":55,"line":5048},[53,16526,16527],{}," {{ end }}\n",[53,16529,16530],{"class":55,"line":5055},[53,16531,16532],{},"\u003C/style>\n",[18,16534,16535],{},"The last part is the css animation.",[18,16537,16538],{},"All images will get an opacity of 0 and an infinite animation with a keyframe rule binding.",[18,16540,16541],{},"Before we define the keyframe rule we calculate some percentages for it. If you are not familiar with these keyframe\ncalculations the code may not explain everything but at least may give you a hint on how the percentages are calculated.",[18,16543,16544],{},"The individual animation delay for every image is the last step to fade one image into the next one.",[43,16546,16548],{"className":288,"code":16547,"language":290,"meta":48,"style":48},"\n .slider {\n padding-bottom: 70%;\n width: 100%;\n height: 0;\n position: relative;\n }\n .slider img {\n width: 100%;\n height: auto;\n position: absolute;\n opacity: 0;\n animation: slide infinite {{$animationDuration}}s;\n }\n\n {{ $x := div 100.0 $animationDuration }}\n {{ $p0 := 0 }}\n {{ $p1 := mul $x $fadein }}\n {{ $p2 := mul $x (add $fadein $visible) }}\n {{ $p3 := mul $x (add (add $fadein $visible) $fadein) }}\n\n @keyframes slide {\n {{ $p0 }}% { opacity: 0; }\n {{ $p1 }}% { opacity: 1; }\n {{ $p2 }}% { opacity: 1; }\n {{ $p3 }}% { opacity: 0; }\n }\n\n {{ range $index, $value := $files }}\n {{ $delay := mul (add $fadein $visible) $index }}\n .slider img:nth-child({{add $index 1}}){animation-delay:{{$delay}}s;}\n {{ end }}\n\n",[50,16549,16550,16554,16558,16562,16566,16570,16574,16578,16582,16586,16590,16594,16598,16602,16606,16610,16614,16618,16622,16626,16630,16634,16638,16642,16646,16650,16654,16658,16662,16666,16670,16674],{"__ignoreMap":48},[53,16551,16552],{"class":55,"line":56},[53,16553,500],{"emptyLinePlaceholder":499},[53,16555,16556],{"class":55,"line":86},[53,16557,16384],{},[53,16559,16560],{"class":55,"line":126},[53,16561,16389],{},[53,16563,16564],{"class":55,"line":163},[53,16565,16394],{},[53,16567,16568],{"class":55,"line":186},[53,16569,16399],{},[53,16571,16572],{"class":55,"line":221},[53,16573,16404],{},[53,16575,16576],{"class":55,"line":242},[53,16577,860],{},[53,16579,16580],{"class":55,"line":273},[53,16581,16413],{},[53,16583,16584],{"class":55,"line":279},[53,16585,16394],{},[53,16587,16588],{"class":55,"line":496},[53,16589,16422],{},[53,16591,16592],{"class":55,"line":503},[53,16593,16427],{},[53,16595,16596],{"class":55,"line":509},[53,16597,16432],{},[53,16599,16600],{"class":55,"line":515},[53,16601,16437],{},[53,16603,16604],{"class":55,"line":521},[53,16605,860],{},[53,16607,16608],{"class":55,"line":527},[53,16609,500],{"emptyLinePlaceholder":499},[53,16611,16612],{"class":55,"line":533},[53,16613,16450],{},[53,16615,16616],{"class":55,"line":539},[53,16617,16455],{},[53,16619,16620],{"class":55,"line":545},[53,16621,16460],{},[53,16623,16624],{"class":55,"line":4941},[53,16625,16465],{},[53,16627,16628],{"class":55,"line":4949},[53,16629,16470],{},[53,16631,16632],{"class":55,"line":4957},[53,16633,500],{"emptyLinePlaceholder":499},[53,16635,16636],{"class":55,"line":4966},[53,16637,16479],{},[53,16639,16640],{"class":55,"line":4973},[53,16641,16484],{},[53,16643,16644],{"class":55,"line":4978},[53,16645,16489],{},[53,16647,16648],{"class":55,"line":4984},[53,16649,16494],{},[53,16651,16652],{"class":55,"line":5001},[53,16653,16499],{},[53,16655,16656],{"class":55,"line":5007},[53,16657,860],{},[53,16659,16660],{"class":55,"line":5016},[53,16661,500],{"emptyLinePlaceholder":499},[53,16663,16664],{"class":55,"line":5021},[53,16665,16512],{},[53,16667,16668],{"class":55,"line":5027},[53,16669,16517],{},[53,16671,16672],{"class":55,"line":5042},[53,16673,16522],{},[53,16675,16676],{"class":55,"line":5048},[53,16677,16527],{},[18,16679,16680],{},"The following shortcode in action has an additional JavaScript navigation and some prefixed css properties to support a\nwider range of browsers.",[18,16682,16683],{},[1794,16684],{"alt":16685,"src":16686},"Synema Logo Leinwand","https://media.synyx.de/uploads/2019/03/01_synema-768x512.jpg",[18,16688,16689],{},[1794,16690],{"alt":16691,"src":16692},"Synema Buffet","https://media.synyx.de/uploads/2019/03/IMG_5784-768x512.jpg",[18,16694,16695],{},[1794,16696],{"alt":16697,"src":16698},"Snapschot vom Synema event","https://media.synyx.de/uploads/2019/03/IMG_5834-768x512.jpg",[18,16700,16701],{},[1794,16702],{"alt":16703,"src":16704},"Synema Kino eingang","https://media.synyx.de/uploads/2019/03/IMG_5835-768x512.jpg",[18,16706,16707],{},[1794,16708],{"alt":16709,"src":16710},"Synema Star Wars Impression","https://media.synyx.de/uploads/2019/03/IMG_5862-768x512.jpg",[18,16712,16713],{},[1794,16714],{"alt":16715,"src":16716},"Publikum beim Synema event","https://media.synyx.de/uploads/2019/03/IMG_5847-768x512.jpg",[18,16718,16719],{},[1794,16720],{"alt":16721,"src":16722},"Thomas Kraft beim Synema event","https://media.synyx.de/uploads/2019/03/IMG_5954-768x512.jpg",[18,16724,16725],{},[1794,16726],{"alt":48,"src":16727},"https://media.synyx.de/uploads/2019/03/IMG_6016-768x512.jpg",[607,16729,989],{},{"title":48,"searchDepth":86,"depth":86,"links":16731},[],[613,614],"2018-04-12T11:45:46","Creating static web sites with Hugo is fun and fast but providing a convenient shortcode to\\nsmoothly cross-fade an unknown number of images in a blogpost gets a bit tricky… So let’s go!","https://synyx.de/blog/an-image-slideshow-shortcode-for-hugo/",{},"/blog/an-image-slideshow-shortcode-for-hugo",{"title":16286,"description":16739},"Creating static web sites with Hugo is fun and fast but providing a convenient shortcode to\nsmoothly cross-fade an unknown number of images in a blogpost gets a bit tricky… So let’s go!","blog/an-image-slideshow-shortcode-for-hugo",[16742,16743],"css","hugo","Creating static web sites with Hugo is fun and fast but providing a convenient shortcode to smoothly cross-fade an unknown number of images in a blogpost gets a bit tricky… So let’s go!","-zIyT5c6EfwcvonPd1c3lRBKIjuDg5Z-B0BHOQAqfzg",{"id":16747,"title":16748,"author":16749,"body":16751,"category":17558,"date":17559,"description":17560,"extension":617,"link":17561,"meta":17562,"navigation":499,"path":17563,"seo":17564,"slug":16755,"stem":17565,"tags":17566,"teaser":17572,"__hash__":17573},"blog/blog/using-travis-ci-to-deploy-to-maven-repositories-and-github-releases.md","Using Travis CI to deploy to Maven repositories and GitHub Releases",[16750],"larrasz",{"type":11,"value":16752,"toc":17547},[16753,16756,16759,16763,16776,16801,16807,16837,16862,17039,17043,17050,17104,17108,17119,17123,17151,17243,17247,17254,17301,17320,17333,17337,17343,17354,17367,17452,17456,17459,17465,17499,17506,17509,17512,17545],[14,16754,16748],{"id":16755},"using-travis-ci-to-deploy-to-maven-repositories-and-github-releases",[18,16757,16758],{},"This post outlines the steps needed to simultaneously deploy to Maven repositories and to GitHub Releases. Every time a\ntagged commit is pushed, a Travis CI build will be triggered automatically and start the release process. This blog post\nuses Sonatype Nexus as an example for a Maven repository manager.",[3469,16760,16762],{"id":16761},"preparing-github-releases","Preparing GitHub Releases",[18,16764,16765,16766,16771,16772,16775],{},"Sergey Mashkov has written a ",[585,16767,16770],{"href":16768,"rel":16769},"https://github.com/cy6erGn0m/github-release-plugin",[589],"Maven plugin"," that allows us to create\na new release on our project’s releases page and upload our build artifacts to a release. The following sections\ndescribe how we need to configure our ",[50,16773,16774],{},"pom.xml"," in order to use this plugin.",[18,16777,16778,16779,16782,16783,16786,16787,16790,16791,16794,16795,16800],{},"The plugin uses the ",[50,16780,16781],{},"scm"," settings to find out for which project the new release should be created. Right now, there’s\nstill a bug in the plugin which restricts the format for our git URIs. The only working format is\n",[50,16784,16785],{},"scm:git:git@github.com:...",". Neither ",[50,16788,16789],{},"scm:git:https://github.com/...","nor ",[50,16792,16793],{},"scm:git:ssh://git@github.com/...","work, but\na ",[585,16796,16799],{"href":16797,"rel":16798},"https://github.com/cy6erGn0m/github-release-plugin/pull/2",[589],"pull request"," has been created that adds this\nfunctionality.",[18,16802,16803,16804,16806],{},"So add an ",[50,16805,16781],{},"section to your pom that looks like this:",[43,16808,16810],{"className":11245,"code":16809,"language":11247,"meta":48,"style":48},"\u003Cscm>\n \u003Curl>https://github.com/example/project\u003C/url>\n \u003Cconnection>scm:git:git@github.com:example/project.git\u003C/connection>\n \u003CdeveloperConnection>scm:git:git@github.com:example/project.git\u003C/developerConnection>\n\u003C/scm>\n\n\n",[50,16811,16812,16817,16822,16827,16832],{"__ignoreMap":48},[53,16813,16814],{"class":55,"line":56},[53,16815,16816],{},"\u003Cscm>\n",[53,16818,16819],{"class":55,"line":86},[53,16820,16821],{}," \u003Curl>https://github.com/example/project\u003C/url>\n",[53,16823,16824],{"class":55,"line":126},[53,16825,16826],{}," \u003Cconnection>scm:git:git@github.com:example/project.git\u003C/connection>\n",[53,16828,16829],{"class":55,"line":163},[53,16830,16831],{}," \u003CdeveloperConnection>scm:git:git@github.com:example/project.git\u003C/developerConnection>\n",[53,16833,16834],{"class":55,"line":186},[53,16835,16836],{},"\u003C/scm>\n",[18,16838,16839,16840,16845,16846,16849,16850,16855,16856,16861],{},"The second step is to include the plugin in our pom. Right now the plugin is only available\nfrom ",[585,16841,16844],{"href":16842,"rel":16843},"http://dl.bintray.com/cy6ergn0m/maven",[589],"bintray.com"," so we need to add it as a plugin repository. We only want to\ncreate a new release on GitHub when we are building a new release. Hence we configure the plugin in an extra release\nprofile section. This leads to the plugin being executed only if Maven is started with ",[50,16847,16848],{},"-Prelease","and only if the deploy\ngoal is invoked. For more information on how to configure the plugin options please refer to\nits ",[585,16851,16854],{"href":16852,"rel":16853},"https://github.com/cy6erGn0m/github-release-plugin#plugin-configuration-options",[589],"documentation"," and\nthe ",[585,16857,16860],{"href":16858,"rel":16859},"https://synyx.de/blog/2018-01-24-travisci-github-releases/?page=3#pitfalls",[589],"pitfalls"," below.",[43,16863,16865],{"className":11245,"code":16864,"language":11247,"meta":48,"style":48},"\u003Cprofiles>\n ...\n \u003Cprofile>\n \u003Cid>release\u003C/id>\n \u003CpluginRepositories>\n \u003CpluginRepository>\n \u003Cid>bintray-cy6ergn0m-maven\u003C/id>\n \u003Cname>bintray-plugins\u003C/name>\n \u003Curl>http://dl.bintray.com/cy6ergn0m/maven\u003C/url>\n \u003C/pluginRepository>\n \u003C/pluginRepositories>\n \u003Cbuild>\n \u003Cplugins>\n \u003Cplugin>\n \u003CgroupId>cy.github\u003C/groupId>\n \u003CartifactId>github-release-plugin\u003C/artifactId>\n \u003Cversion>0.5.1\u003C/version>\n \u003Cconfiguration>\n \u003CtagName>${project.version}\u003C/tagName>\n \u003CreleaseTitle>${project.artifactId}-${project.version}\u003C/releaseTitle>\n \u003CserverId>github\u003C/serverId>\n \u003C/configuration>\n \u003Cexecutions>\n \u003Cexecution>\n \u003Cgoals>\n \u003Cgoal>gh-upload\u003C/goal>\n \u003C/goals>\n \u003Cphase>deploy\u003C/phase>\n \u003C/execution>\n \u003C/executions>\n \u003C/plugin>\n \u003C/plugins>\n \u003C/build>\n \u003C/profile>\n\u003C/profiles>\n",[50,16866,16867,16872,16876,16881,16886,16891,16896,16901,16906,16911,16916,16921,16926,16931,16936,16941,16946,16951,16955,16960,16965,16970,16974,16979,16984,16989,16994,16999,17004,17009,17014,17019,17024,17029,17034],{"__ignoreMap":48},[53,16868,16869],{"class":55,"line":56},[53,16870,16871],{},"\u003Cprofiles>\n",[53,16873,16874],{"class":55,"line":86},[53,16875,322],{},[53,16877,16878],{"class":55,"line":126},[53,16879,16880],{}," \u003Cprofile>\n",[53,16882,16883],{"class":55,"line":163},[53,16884,16885],{}," \u003Cid>release\u003C/id>\n",[53,16887,16888],{"class":55,"line":186},[53,16889,16890],{}," \u003CpluginRepositories>\n",[53,16892,16893],{"class":55,"line":221},[53,16894,16895],{}," \u003CpluginRepository>\n",[53,16897,16898],{"class":55,"line":242},[53,16899,16900],{}," \u003Cid>bintray-cy6ergn0m-maven\u003C/id>\n",[53,16902,16903],{"class":55,"line":273},[53,16904,16905],{}," \u003Cname>bintray-plugins\u003C/name>\n",[53,16907,16908],{"class":55,"line":279},[53,16909,16910],{}," \u003Curl>http://dl.bintray.com/cy6ergn0m/maven\u003C/url>\n",[53,16912,16913],{"class":55,"line":496},[53,16914,16915],{}," \u003C/pluginRepository>\n",[53,16917,16918],{"class":55,"line":503},[53,16919,16920],{}," \u003C/pluginRepositories>\n",[53,16922,16923],{"class":55,"line":509},[53,16924,16925],{}," \u003Cbuild>\n",[53,16927,16928],{"class":55,"line":515},[53,16929,16930],{}," \u003Cplugins>\n",[53,16932,16933],{"class":55,"line":521},[53,16934,16935],{}," \u003Cplugin>\n",[53,16937,16938],{"class":55,"line":527},[53,16939,16940],{}," \u003CgroupId>cy.github\u003C/groupId>\n",[53,16942,16943],{"class":55,"line":533},[53,16944,16945],{}," \u003CartifactId>github-release-plugin\u003C/artifactId>\n",[53,16947,16948],{"class":55,"line":539},[53,16949,16950],{}," \u003Cversion>0.5.1\u003C/version>\n",[53,16952,16953],{"class":55,"line":545},[53,16954,11560],{},[53,16956,16957],{"class":55,"line":4941},[53,16958,16959],{}," \u003CtagName>${project.version}\u003C/tagName>\n",[53,16961,16962],{"class":55,"line":4949},[53,16963,16964],{}," \u003CreleaseTitle>${project.artifactId}-${project.version}\u003C/releaseTitle>\n",[53,16966,16967],{"class":55,"line":4957},[53,16968,16969],{}," \u003CserverId>github\u003C/serverId>\n",[53,16971,16972],{"class":55,"line":4966},[53,16973,11610],{},[53,16975,16976],{"class":55,"line":4973},[53,16977,16978],{}," \u003Cexecutions>\n",[53,16980,16981],{"class":55,"line":4978},[53,16982,16983],{}," \u003Cexecution>\n",[53,16985,16986],{"class":55,"line":4984},[53,16987,16988],{}," \u003Cgoals>\n",[53,16990,16991],{"class":55,"line":5001},[53,16992,16993],{}," \u003Cgoal>gh-upload\u003C/goal>\n",[53,16995,16996],{"class":55,"line":5007},[53,16997,16998],{}," \u003C/goals>\n",[53,17000,17001],{"class":55,"line":5016},[53,17002,17003],{}," \u003Cphase>deploy\u003C/phase>\n",[53,17005,17006],{"class":55,"line":5021},[53,17007,17008],{}," \u003C/execution>\n",[53,17010,17011],{"class":55,"line":5027},[53,17012,17013],{}," \u003C/executions>\n",[53,17015,17016],{"class":55,"line":5042},[53,17017,17018],{}," \u003C/plugin>\n",[53,17020,17021],{"class":55,"line":5048},[53,17022,17023],{}," \u003C/plugins>\n",[53,17025,17026],{"class":55,"line":5055},[53,17027,17028],{}," \u003C/build>\n",[53,17030,17031],{"class":55,"line":5063},[53,17032,17033],{}," \u003C/profile>\n",[53,17035,17036],{"class":55,"line":5072},[53,17037,17038],{},"\u003C/profiles>\n",[3469,17040,17042],{"id":17041},"preparing-for-maven-releases","Preparing for Maven releases",[18,17044,17045,17046,17049],{},"If you don’t already have a repository where you want to deploy to, you need to create a release and a snapshot\nrepository and add them to ",[50,17047,17048],{},"distributionManagement",".You might also want to create a separate user that has access only\nto your target repositories. This user will be used to upload the releases.",[43,17051,17053],{"className":11245,"code":17052,"language":11247,"meta":48,"style":48},"\u003CdistributionManagement>\n \u003Crepository>\n \u003Cid>oss\u003C/id>\n \u003Curl>https://nexus.example.com/content/repositories/oss-releases\u003C/url>\n \u003C/repository>\n \u003CsnapshotRepository>\n \u003Cid>oss\u003C/id>\n \u003Curl>https://nexus.example.com/content/repositories/oss-snapshots\u003C/url>\n \u003C/snapshotRepository>\n\u003C/distributionManagement>\n",[50,17054,17055,17060,17065,17070,17075,17080,17085,17089,17094,17099],{"__ignoreMap":48},[53,17056,17057],{"class":55,"line":56},[53,17058,17059],{},"\u003CdistributionManagement>\n",[53,17061,17062],{"class":55,"line":86},[53,17063,17064],{}," \u003Crepository>\n",[53,17066,17067],{"class":55,"line":126},[53,17068,17069],{}," \u003Cid>oss\u003C/id>\n",[53,17071,17072],{"class":55,"line":163},[53,17073,17074],{}," \u003Curl>https://nexus.example.com/content/repositories/oss-releases\u003C/url>\n",[53,17076,17077],{"class":55,"line":186},[53,17078,17079],{}," \u003C/repository>\n",[53,17081,17082],{"class":55,"line":221},[53,17083,17084],{}," \u003CsnapshotRepository>\n",[53,17086,17087],{"class":55,"line":242},[53,17088,17069],{},[53,17090,17091],{"class":55,"line":273},[53,17092,17093],{}," \u003Curl>https://nexus.example.com/content/repositories/oss-snapshots\u003C/url>\n",[53,17095,17096],{"class":55,"line":279},[53,17097,17098],{}," \u003C/snapshotRepository>\n",[53,17100,17101],{"class":55,"line":496},[53,17102,17103],{},"\u003C/distributionManagement>\n",[3469,17105,17107],{"id":17106},"putting-it-all-together","Putting it all together",[18,17109,17110,17111,17114,17115,17118],{},"So far we have configured the GitHub release plugin to deploy our artifacts to the GitHub Releases page and setup Maven\nreleases. Now it’s time to glue the parts together. In order to do this we have to create a ",[50,17112,17113],{},"settings.xml","for use with\nMaven, a ",[50,17116,17117],{},".travis.yml"," that manages our Travis CI builds and we have to configure some environment variables in Travis\nCI itself. Furthermore we need a small shell script that orchestrates our release.",[649,17120,17122],{"id":17121},"maven-settings","Maven settings",[18,17124,17125,17126,17128,17129,17132,17133,17136,17137,17140,17141,17144,17145,17150],{},"Create a new ",[50,17127,17113],{},"file in your repository, e.g in a ",[50,17130,17131],{},".travis/","directory. The content of this file should look\nlike the following snippet. The ",[50,17134,17135],{},"\u003Cserver>","ids have to match the ids in ",[50,17138,17139],{},"\u003CdistributionManagement>","and the ",[50,17142,17143],{},"\u003CserverId>","of\nthe GitHub release plugin exactly. Do not use static credentials here! You don’t want everyone who stumbles upon your\nrepository on GitHub to have write access to your Nexus/Artifactory and GitHub. We will use Travis CI’s capability to\ninject environment variables into builds;\nthe ",[585,17146,17149],{"href":17147,"rel":17148},"https://synyx.de/blog/2018-01-24-travisci-github-releases/?page=3#configuring-travis-ci-itself",[589],"environment variables","\nwill be configured soon.",[43,17152,17154],{"className":11245,"code":17153,"language":11247,"meta":48,"style":48},"\u003Csettings xmlns=\"http://maven.apache.org/SETTINGS/1.0.0\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://maven.apache.org/SETTINGS/1.0.0\n http://maven.apache.org/xsd/settings-1.0.0.xsd\">\n \u003Cservers>\n \u003Cserver>\n \u003Cid>oss\u003C/id>\n \u003Cusername>${env.NEXUS_USERNAME}\u003C/username>\n \u003Cpassword>${env.NEXUS_PASSWORD}\u003C/password>\n \u003C/server>\n \u003Cserver>\n \u003Cid>github\u003C/id>\n \u003Cusername>${env.GITHUB_USERNAME}\u003C/username>\n \u003Cpassword>${env.GITHUB_TOKEN}\u003C/password>\n \u003C/server>\n \u003C/servers>\n\n\u003C/settings>\n",[50,17155,17156,17161,17166,17171,17176,17181,17186,17191,17196,17201,17206,17210,17215,17220,17225,17229,17234,17238],{"__ignoreMap":48},[53,17157,17158],{"class":55,"line":56},[53,17159,17160],{},"\u003Csettings xmlns=\"http://maven.apache.org/SETTINGS/1.0.0\"\n",[53,17162,17163],{"class":55,"line":86},[53,17164,17165],{}," xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n",[53,17167,17168],{"class":55,"line":126},[53,17169,17170],{}," xsi:schemaLocation=\"http://maven.apache.org/SETTINGS/1.0.0\n",[53,17172,17173],{"class":55,"line":163},[53,17174,17175],{}," http://maven.apache.org/xsd/settings-1.0.0.xsd\">\n",[53,17177,17178],{"class":55,"line":186},[53,17179,17180],{}," \u003Cservers>\n",[53,17182,17183],{"class":55,"line":221},[53,17184,17185],{}," \u003Cserver>\n",[53,17187,17188],{"class":55,"line":242},[53,17189,17190],{}," \u003Cid>oss\u003C/id>\n",[53,17192,17193],{"class":55,"line":273},[53,17194,17195],{}," \u003Cusername>${env.NEXUS_USERNAME}\u003C/username>\n",[53,17197,17198],{"class":55,"line":279},[53,17199,17200],{}," \u003Cpassword>${env.NEXUS_PASSWORD}\u003C/password>\n",[53,17202,17203],{"class":55,"line":496},[53,17204,17205],{}," \u003C/server>\n",[53,17207,17208],{"class":55,"line":503},[53,17209,17185],{},[53,17211,17212],{"class":55,"line":509},[53,17213,17214],{}," \u003Cid>github\u003C/id>\n",[53,17216,17217],{"class":55,"line":515},[53,17218,17219],{}," \u003Cusername>${env.GITHUB_USERNAME}\u003C/username>\n",[53,17221,17222],{"class":55,"line":521},[53,17223,17224],{}," \u003Cpassword>${env.GITHUB_TOKEN}\u003C/password>\n",[53,17226,17227],{"class":55,"line":527},[53,17228,17205],{},[53,17230,17231],{"class":55,"line":533},[53,17232,17233],{}," \u003C/servers>\n",[53,17235,17236],{"class":55,"line":539},[53,17237,500],{"emptyLinePlaceholder":499},[53,17239,17240],{"class":55,"line":545},[53,17241,17242],{},"\u003C/settings>\n",[649,17244,17246],{"id":17245},"release-script","Release script",[18,17248,17249,17250,17253],{},"We need a small shell script that orchestrates our releases. This script sets the correct version, creates a release and\nuploads it to our Maven repository and to GitHub. To release the correct version the",[50,17251,17252],{},"TRAVIS_TAG"," environment variable\nwill be used. Travis CI uses this variable to inject the value of the git tag into the build.",[43,17255,17257],{"className":11245,"code":17256,"language":11247,"meta":48,"style":48},"#!/usr/bin/env bash\n\nset -e\n\necho \"Ensuring that pom matches $TRAVIS_TAG\"\n./mvnw org.codehaus.mojo:versions-maven-plugin:2.5:set -DnewVersion=$TRAVIS_TAG\n\necho \"Uploading to oss repo and GitHub\"\n./mvnw deploy --settings .travis/settings.xml -DskipTests=true --batch-mode --update-snapshots -Prelease\n",[50,17258,17259,17264,17268,17273,17277,17282,17287,17291,17296],{"__ignoreMap":48},[53,17260,17261],{"class":55,"line":56},[53,17262,17263],{},"#!/usr/bin/env bash\n",[53,17265,17266],{"class":55,"line":86},[53,17267,500],{"emptyLinePlaceholder":499},[53,17269,17270],{"class":55,"line":126},[53,17271,17272],{},"set -e\n",[53,17274,17275],{"class":55,"line":163},[53,17276,500],{"emptyLinePlaceholder":499},[53,17278,17279],{"class":55,"line":186},[53,17280,17281],{},"echo \"Ensuring that pom matches $TRAVIS_TAG\"\n",[53,17283,17284],{"class":55,"line":221},[53,17285,17286],{},"./mvnw org.codehaus.mojo:versions-maven-plugin:2.5:set -DnewVersion=$TRAVIS_TAG\n",[53,17288,17289],{"class":55,"line":242},[53,17290,500],{"emptyLinePlaceholder":499},[53,17292,17293],{"class":55,"line":273},[53,17294,17295],{},"echo \"Uploading to oss repo and GitHub\"\n",[53,17297,17298],{"class":55,"line":279},[53,17299,17300],{},"./mvnw deploy --settings .travis/settings.xml -DskipTests=true --batch-mode --update-snapshots -Prelease\n",[18,17302,17303,17304,17307,17308,17311,17312,17315,17316,17319],{},"The script first sets the ",[50,17305,17306],{},"\u003Cversion>","in the pom exactly to our git tag’s value. So your tag always matches the version\nyou want to release, e.g. ",[50,17309,17310],{},"1.0","or ",[50,17313,17314],{},"1.5.1",". The second part creates the release. We need to reference the Maven settings\nin our repository here so that Travis CI has access rights to the Maven repositories and GitHub Releases. The important\npart here is to activate the",[50,17317,17318],{},"release","profile. This tells Maven to not only create and upload a Maven release but also to\ncreate a new GitHub Release.",[18,17321,17322,17323,17326,17327,17329,17330,5993],{},"Name this script ",[50,17324,17325],{},"release.sh",", put it inside the ",[50,17328,17131],{},"directory and make it executable (",[50,17331,17332],{},"chmod +x",[649,17334,17336],{"id":17335},"build-configuration","Build configuration",[18,17338,17339,17340,17342],{},"Travis CI uses a file named ",[50,17341,17117],{},"at the root of a GitHub repository. The snipped contains the necessary steps.",[18,17344,17345,17346,17349,17350,17353],{},"In a normal build we just want to execute a simple ",[50,17347,17348],{},"clean verify",". The ",[50,17351,17352],{},"verify","goal will execute unit and integration\ntests. To make subsequent builds faster, we want to cache the m2 repositories during builds.",[18,17355,17356,17357,17359,17360,17363,17364,986],{},"The most important part is the deploy section. Here we configure Travis CI to run the ",[50,17358,17325],{},"script if and only if\na tag has been pushed (",[50,17361,17362],{},"tags: true",") on the repo ",[50,17365,17366],{},"example/project",[43,17368,17370],{"className":11245,"code":17369,"language":11247,"meta":48,"style":48},"sudo: false\nlanguage: java\njdk:\n - oraclejdk8\nscript: ./mvnw clean verify\ncache:\n directories:\n - $HOME/.m2\ndeploy:\n provider: script\n script: .travis/release.sh\n skip_cleanup: true\n on:\n repo: example/project\n tags: true\n jdk: oraclejdk8\n",[50,17371,17372,17377,17382,17387,17392,17397,17402,17407,17412,17417,17422,17427,17432,17437,17442,17447],{"__ignoreMap":48},[53,17373,17374],{"class":55,"line":56},[53,17375,17376],{},"sudo: false\n",[53,17378,17379],{"class":55,"line":86},[53,17380,17381],{},"language: java\n",[53,17383,17384],{"class":55,"line":126},[53,17385,17386],{},"jdk:\n",[53,17388,17389],{"class":55,"line":163},[53,17390,17391],{}," - oraclejdk8\n",[53,17393,17394],{"class":55,"line":186},[53,17395,17396],{},"script: ./mvnw clean verify\n",[53,17398,17399],{"class":55,"line":221},[53,17400,17401],{},"cache:\n",[53,17403,17404],{"class":55,"line":242},[53,17405,17406],{}," directories:\n",[53,17408,17409],{"class":55,"line":273},[53,17410,17411],{}," - $HOME/.m2\n",[53,17413,17414],{"class":55,"line":279},[53,17415,17416],{},"deploy:\n",[53,17418,17419],{"class":55,"line":496},[53,17420,17421],{}," provider: script\n",[53,17423,17424],{"class":55,"line":503},[53,17425,17426],{}," script: .travis/release.sh\n",[53,17428,17429],{"class":55,"line":509},[53,17430,17431],{}," skip_cleanup: true\n",[53,17433,17434],{"class":55,"line":515},[53,17435,17436],{}," on:\n",[53,17438,17439],{"class":55,"line":521},[53,17440,17441],{}," repo: example/project\n",[53,17443,17444],{"class":55,"line":527},[53,17445,17446],{}," tags: true\n",[53,17448,17449],{"class":55,"line":533},[53,17450,17451],{}," jdk: oraclejdk8\n",[649,17453,17455],{"id":17454},"configuring-travis-ci-itself","Configuring Travis CI itself",[18,17457,17458],{},"Now we need to teach Travis CI the values of the environment variables used in our Maven settings. To do this navigate\nto the Travis CI settings for your project:",[18,17460,17461],{},[1794,17462],{"alt":17463,"src":17464},"travis environment","https://media.synyx.de/uploads/2018/01/travis-environment-768x282.png",[18,17466,17467,17468,17471,17472,17475,17476,17481,17482,17471,17485,17488,17489,17492,17493,17498],{},"Add ",[50,17469,17470],{},"NEXUS_USER","and ",[50,17473,17474],{},"NEXUS_PASSWORD","for your\nnewly ",[585,17477,17480],{"href":17478,"rel":17479},"https://synyx.de/blog/2018-01-24-travisci-github-releases/?page=3#preparing-maven-releases",[589],"created user",". You\nalso need to configure ",[50,17483,17484],{},"GITHUB_USERNAME",[50,17486,17487],{},"GITHUB_TOKEN",". But even though the field is called password, what your\nreally want to configure here is your ",[27,17490,17491],{},"GitHub API token",". Otherwise, the GitHub release plugin will not be able to\nupload artifacts. You can obtain your personal access token ",[585,17494,17497],{"href":17495,"rel":17496},"https://github.com/settings/tokens",[589],"here",". The token needs\naccess to the repo scope.",[18,17500,17501,17502,17505],{},"And that’s it. Now you can simply create a new tag in your repository (",[50,17503,17504],{},"git tag -a 1.1 -m \"Release 1.1\"","), push it to\nGitHub and Travis CI will trigger the release process. Happy releasing!",[3469,17507,17508],{"id":16860},"Pitfalls",[18,17510,17511],{},"Some advice so that you do not encounter the same problems we did:",[577,17513,17514,17523,17535,17538],{},[580,17515,17516,17517,17519,17520],{},"Do not forget to make ",[50,17518,17325],{},"executable otherwise the Travis CI build will fail with a rather unhelpful message:\n",[50,17521,17522],{},"Script failed with status 127.",[580,17524,17525,17526,17529,17530,17532,17533,986],{},"The ",[50,17527,17528],{},"serverId","in the GitHub release plugin’s configuration refers to a ",[50,17531,17135],{},"entry in Maven’s ",[50,17534,17113],{},[580,17536,17537],{},"Do not be tempted to use your GitHub account password to configure the server settings for the GitHub release plugin.\nEven though the field is called password it’s really an API token that is needed here.",[580,17539,17540,17541,17544],{},"Do not change the value of ",[50,17542,17543],{},"\u003CtagName>","when configuring the GitHub release plugin. Using anything different from the\nproject’s version (i.e. the git tag’s value), will lead to recursive release builds. This happens because the release\nplugin will create and push a new tag if it does not already exist. Pushing a tag invokes another Travis CI build\nwhich will create a new tag and so on.",[607,17546,989],{},{"title":48,"searchDepth":86,"depth":86,"links":17548},[17549,17550,17551,17557],{"id":16761,"depth":86,"text":16762},{"id":17041,"depth":86,"text":17042},{"id":17106,"depth":86,"text":17107,"children":17552},[17553,17554,17555,17556],{"id":17121,"depth":126,"text":17122},{"id":17245,"depth":126,"text":17246},{"id":17335,"depth":126,"text":17336},{"id":17454,"depth":126,"text":17455},{"id":16860,"depth":86,"text":17508},[613,614],"2018-01-24T12:05:58","This post outlines the steps needed to simultaneously deploy to Maven repositories and to GitHub Releases. Every time a\\ntagged commit is pushed, a Travis CI build will be triggered automatically and start the release process. This blog post\\nuses Sonatype Nexus as an example for a Maven repository manager.","https://synyx.de/blog/using-travis-ci-to-deploy-to-maven-repositories-and-github-releases/",{},"/blog/using-travis-ci-to-deploy-to-maven-repositories-and-github-releases",{"title":16748,"description":16758},"blog/using-travis-ci-to-deploy-to-maven-repositories-and-github-releases",[17567,17568,290,17569,17570,17571],"artifactory","github","maven","nexus","travisci","This post outlines the steps needed to simultaneously deploy to Maven repositories and to GitHub Releases. Every time a tagged commit is pushed, a Travis CI build will be triggered automatically and start the release process. This blog post uses Sonatype Nexus as an example for a Maven repository manager. Preparing GitHub Releases Sergey Mashkov has written a Maven plugin that allows us to create a new release on our project’s releases page and upload our build artifacts to a release.","2TPRgpLddHBxZy1b9W1YaqOnatHf0HzZXEjowW2rwB4",{"id":17575,"title":17576,"author":17577,"body":17578,"category":18941,"date":18942,"description":18943,"extension":617,"link":18944,"meta":18945,"navigation":499,"path":18946,"seo":18947,"slug":17582,"stem":18948,"tags":18949,"teaser":18950,"__hash__":18951},"blog/blog/implementing-a-waiting-component-with-user-experience-in-mind.md","Implementing a waiting component with user experience in mind",[6623],{"type":11,"value":17579,"toc":18936},[17580,17583,17586,17592,17610,17635,17643,17647,17650,17722,17736,17900,17915,17921,17925,17928,17934,17939,17942,17964,18167,18170,18195,18267,18282,18338,18357,18443,18471,18475,18478,18517,18520,18545,18555,18610,18619,18625,18633,18655,18756,18768,18933],[14,17581,17576],{"id":17582},"implementing-a-waiting-component-with-user-experience-in-mind",[18,17584,17585],{},"Giving fast feedback to users has been improved by single page applications over the request response cycle. However,\nthere is one serious downside with this approach. Elements are popping out of the wild on various sections everytime.\nParticular data loading indicated by a waiting animation is affected with this phenomenon. In this blog I’d like to\npresent you our solution of a UI component that takes care about delaying the rendering of the animation.",[18,17587,17588,17591],{},[27,17589,17590],{},"Disclaimer:"," we’re using React in our frontend (without server side rendering). In case you don’t know React: React\nprovides lifecycle hooks for UI components like",[577,17593,17594,17599,17604],{},[580,17595,17596],{},[50,17597,17598],{},"render",[580,17600,17601],{},[50,17602,17603],{},"willUpdate",[580,17605,17606,17607],{},"or .",[50,17608,17609],{},"didUpdate",[18,17611,17612,17613,17616,17617,17620,17621,17623,17624,15767,17626,17628,17629,17634],{},"These hooks can be used to do internal stuff your component requires to be rendered correctly. React components can\neither be updated with changing ",[50,17614,17615],{},"properties","or updating ",[50,17618,17619],{},"state",". Properties are actually the public API of the\ncomponent. The",[50,17622,17619],{},", however, is the antagonist which can only be updated by the component itself. Changing\n",[50,17625,17615],{},[50,17627,17619],{}," triggers specific lifecycle hooks and finally a rerendering of the component. Don’t hesitate to\nread the ",[585,17630,17633],{"href":17631,"rel":17632},"https://reactjs.org/docs/rendering-elements.html",[589],"react docs"," for more detail.",[18,17636,17637,17638,986],{},"tl;dr source code is available ",[585,17639,17642],{"href":17640,"rel":17641},"https://github.com/bseber/waiting",[589],"on github",[3469,17644,17646],{"id":17645},"loading-or-not-loading","loading or not loading",[18,17648,17649],{},"At first we have to satisfy the basic need. The user must get feedback whether we’re loading data currently or not. The\nmost simple component takes a boolean property that reflects the current state.",[43,17651,17653],{"className":9734,"code":17652,"language":9736,"meta":48,"style":48},"class Waiting extends React.Component {\n render() {\n return this.props.loading ? \u003Cdiv>loading...\u003C/div> : null;\n }\n}\n",[50,17654,17655,17674,17681,17714,17718],{"__ignoreMap":48},[53,17656,17657,17659,17662,17664,17667,17669,17672],{"class":55,"line":56},[53,17658,9743],{"class":389},[53,17660,17661],{"class":59}," Waiting",[53,17663,9749],{"class":389},[53,17665,17666],{"class":59}," React",[53,17668,986],{"class":82},[53,17670,17671],{"class":59},"Component",[53,17673,8543],{"class":82},[53,17675,17676,17679],{"class":55,"line":86},[53,17677,17678],{"class":59}," render",[53,17680,9762],{"class":82},[53,17682,17683,17686,17688,17691,17694,17697,17699,17702,17704,17707,17709,17712],{"class":55,"line":126},[53,17684,17685],{"class":389}," return",[53,17687,2186],{"class":89},[53,17689,17690],{"class":82},".props.loading ",[53,17692,17693],{"class":389},"?",[53,17695,17696],{"class":82}," \u003C",[53,17698,9562],{"class":9586},[53,17700,17701],{"class":82},">loading...\u003C/",[53,17703,9562],{"class":9586},[53,17705,17706],{"class":82},"> ",[53,17708,7317],{"class":389},[53,17710,17711],{"class":89}," null",[53,17713,1727],{"class":82},[53,17715,17716],{"class":55,"line":163},[53,17717,9855],{"class":82},[53,17719,17720],{"class":55,"line":186},[53,17721,282],{"class":82},[18,17723,17724,17725,17728,17729,17731,17732,17735],{},"This component can now be used in our App. The loading info is visible as long as the",[50,17726,17727],{},"loading"," flag is set to ",[50,17730,408],{}," and\nhidden as soon as the flag is toggled.",[50,17733,17734],{},"MyDataView"," is just another component that takes care about rendering the data.",[43,17737,17739],{"className":9734,"code":17738,"language":9736,"meta":48,"style":48},"class MyApp extends React.Component {\n // initialState\n // no data existent and we're loading currently\n state = {\n data: null,\n loading: true\n };\n\n renderData() {\n return this.state.data ? : null;\n }\n\n render() {\n return (\n \u003Cdiv>\n\n {this.renderData()}\n \u003C/div>\n );\n }\n}\n",[50,17740,17741,17758,17763,17768,17777,17787,17795,17800,17804,17811,17829,17833,17837,17843,17850,17859,17863,17878,17887,17892,17896],{"__ignoreMap":48},[53,17742,17743,17745,17748,17750,17752,17754,17756],{"class":55,"line":56},[53,17744,9743],{"class":389},[53,17746,17747],{"class":59}," MyApp",[53,17749,9749],{"class":389},[53,17751,17666],{"class":59},[53,17753,986],{"class":82},[53,17755,17671],{"class":59},[53,17757,8543],{"class":82},[53,17759,17760],{"class":55,"line":86},[53,17761,17762],{"class":1867}," // initialState\n",[53,17764,17765],{"class":55,"line":126},[53,17766,17767],{"class":1867}," // no data existent and we're loading currently\n",[53,17769,17770,17773,17775],{"class":55,"line":163},[53,17771,17772],{"class":8553}," state",[53,17774,1245],{"class":389},[53,17776,8543],{"class":82},[53,17778,17779,17782,17785],{"class":55,"line":186},[53,17780,17781],{"class":82}," data: ",[53,17783,17784],{"class":89},"null",[53,17786,9889],{"class":82},[53,17788,17789,17792],{"class":55,"line":221},[53,17790,17791],{"class":82}," loading: ",[53,17793,17794],{"class":89},"true\n",[53,17796,17797],{"class":55,"line":242},[53,17798,17799],{"class":82}," };\n",[53,17801,17802],{"class":55,"line":273},[53,17803,500],{"emptyLinePlaceholder":499},[53,17805,17806,17809],{"class":55,"line":279},[53,17807,17808],{"class":59}," renderData",[53,17810,9762],{"class":82},[53,17812,17813,17815,17817,17820,17822,17825,17827],{"class":55,"line":496},[53,17814,17685],{"class":389},[53,17816,2186],{"class":89},[53,17818,17819],{"class":82},".state.data ",[53,17821,17693],{"class":389},[53,17823,17824],{"class":389}," :",[53,17826,17711],{"class":89},[53,17828,1727],{"class":82},[53,17830,17831],{"class":55,"line":503},[53,17832,9855],{"class":82},[53,17834,17835],{"class":55,"line":509},[53,17836,500],{"emptyLinePlaceholder":499},[53,17838,17839,17841],{"class":55,"line":515},[53,17840,17678],{"class":59},[53,17842,9762],{"class":82},[53,17844,17845,17847],{"class":55,"line":521},[53,17846,17685],{"class":389},[53,17848,17849],{"class":82}," (\n",[53,17851,17852,17855,17857],{"class":55,"line":527},[53,17853,17854],{"class":82}," \u003C",[53,17856,9562],{"class":9586},[53,17858,9605],{"class":82},[53,17860,17861],{"class":55,"line":533},[53,17862,500],{"emptyLinePlaceholder":499},[53,17864,17865,17868,17870,17872,17875],{"class":55,"line":539},[53,17866,17867],{"class":82}," {",[53,17869,9837],{"class":89},[53,17871,986],{"class":82},[53,17873,17874],{"class":59},"renderData",[53,17876,17877],{"class":82},"()}\n",[53,17879,17880,17883,17885],{"class":55,"line":545},[53,17881,17882],{"class":82}," \u003C/",[53,17884,9562],{"class":9586},[53,17886,9605],{"class":82},[53,17888,17889],{"class":55,"line":4941},[53,17890,17891],{"class":82}," );\n",[53,17893,17894],{"class":55,"line":4949},[53,17895,9855],{"class":82},[53,17897,17898],{"class":55,"line":4957},[53,17899,282],{"class":82},[18,17901,17902,17903,17908,17909,17911,17912,17914],{},"One benefit of this solution is that we now have a reusable component. We don’t have to care about the visualisation\nstuff anymore at every place. It could render the div element with a static text or it could render some more advanced\ncss animation. For instance we could change the loading animation to use this\nawesome ",[585,17904,17907],{"href":17905,"rel":17906},"https://codepen.io/dissimulate/pen/vlfyA",[589],"codepen"," with refactoring the",[50,17910,7878],{}," component implementation only.\nConsumers of the ",[50,17913,7878],{}," component wouldn’t have to be touched.",[18,17916,17917,17918,17920],{},"A second benefit is the really simple implementation of the ",[50,17919,7878],{}," component. Even without knowing React or\nJavaScript in detail you quickly see that a div or nothing is rendered.",[3469,17922,17924],{"id":17923},"pretend-not-loading-when-its-fast","pretend not loading when it’s fast",[18,17926,17927],{},"The next step is user experience improvement. We don’t want to render the loading text",[18,17929,17930,17931,17933],{},"when the ",[50,17932,17727],{}," flag is toggled back to false within 100ms.",[6653,17935,17936],{},[18,17937,17938],{},"0.1 second is about the limit for having the user feel that the system is reacting instantaneously, meaning that no\nspecial feedback is necessary except to display the result.",[18,17940,17941],{},"Jakob Nielsen",[18,17943,17944,17945,17947,17948,17951,17952,17955,17956,17959,17960,17963],{},"To keep changes small let us first map the loading property value to the internal component state. React takes care\nabout calling ",[50,17946,17598],{}," when either new properties are given or state is changed with ",[50,17949,17950],{},"setState",". So in the constructor\nwe’re mapping the original loading flag to render the initially intended state. Let’s say the ",[573,17953,17954],{},"yep, we’re currently\nloading"," state. Soon afterwards the property will eventually swap to ",[573,17957,17958],{},"nop, we’re finished loading",". This can be\nintercepted by the ",[50,17961,17962],{},"componentWillReceiveProps"," lifecycle hook . Just like in the constructor we’re mapping the property\nto the internal state.",[43,17965,17967],{"className":9734,"code":17966,"language":9736,"meta":48,"style":48},"class Waiting extends React.Component {\n+ constructor(props) {\n+ super();\n+ this.state = { loading: props.loading };\n+ }\n+\n+ componentWillReceiveProps(nextProps) {\n+ if (nextProps.loading !== this.props.loading) {\n+ this.setState({ loading: nextProps.loading });\n+ }\n+ }\n+\n render() {\n- return this.props.loading ? \u003Cdiv>loading...\u003C/div> : null;\n+ return this.state.loading ? \u003Cdiv>loading...\u003C/div> : null;\n }\n}\n",[50,17968,17969,17985,18001,18010,18024,18030,18035,18049,18066,18080,18086,18092,18096,18102,18130,18159,18163],{"__ignoreMap":48},[53,17970,17971,17973,17975,17977,17979,17981,17983],{"class":55,"line":56},[53,17972,9743],{"class":389},[53,17974,17661],{"class":59},[53,17976,9749],{"class":389},[53,17978,17666],{"class":59},[53,17980,986],{"class":82},[53,17982,17671],{"class":59},[53,17984,8543],{"class":82},[53,17986,17987,17990,17993,17995,17998],{"class":55,"line":86},[53,17988,17989],{"class":389},"+",[53,17991,17992],{"class":389}," constructor",[53,17994,1067],{"class":82},[53,17996,17997],{"class":8553},"props",[53,17999,18000],{"class":82},") {\n",[53,18002,18003,18005,18008],{"class":55,"line":126},[53,18004,17989],{"class":389},[53,18006,18007],{"class":89}," super",[53,18009,9806],{"class":82},[53,18011,18012,18014,18016,18019,18021],{"class":55,"line":163},[53,18013,17989],{"class":389},[53,18015,9767],{"class":89},[53,18017,18018],{"class":82},".state ",[53,18020,390],{"class":389},[53,18022,18023],{"class":82}," { loading: props.loading };\n",[53,18025,18026,18028],{"class":55,"line":186},[53,18027,17989],{"class":389},[53,18029,9855],{"class":82},[53,18031,18032],{"class":55,"line":221},[53,18033,18034],{"class":389},"+\n",[53,18036,18037,18039,18042,18044,18047],{"class":55,"line":242},[53,18038,17989],{"class":389},[53,18040,18041],{"class":59}," componentWillReceiveProps",[53,18043,1067],{"class":82},[53,18045,18046],{"class":8553},"nextProps",[53,18048,18000],{"class":82},[53,18050,18051,18053,18055,18058,18061,18063],{"class":55,"line":273},[53,18052,17989],{"class":389},[53,18054,8855],{"class":389},[53,18056,18057],{"class":82}," (nextProps.loading ",[53,18059,18060],{"class":389},"!==",[53,18062,2186],{"class":89},[53,18064,18065],{"class":82},".props.loading) {\n",[53,18067,18068,18070,18073,18075,18077],{"class":55,"line":279},[53,18069,17989],{"class":389},[53,18071,18072],{"class":89}," this",[53,18074,986],{"class":82},[53,18076,17950],{"class":59},[53,18078,18079],{"class":82},"({ loading: nextProps.loading });\n",[53,18081,18082,18084],{"class":55,"line":496},[53,18083,17989],{"class":389},[53,18085,860],{"class":82},[53,18087,18088,18090],{"class":55,"line":503},[53,18089,17989],{"class":389},[53,18091,9855],{"class":82},[53,18093,18094],{"class":55,"line":509},[53,18095,18034],{"class":389},[53,18097,18098,18100],{"class":55,"line":515},[53,18099,17678],{"class":59},[53,18101,9762],{"class":82},[53,18103,18104,18106,18108,18110,18112,18114,18116,18118,18120,18122,18124,18126,18128],{"class":55,"line":521},[53,18105,4812],{"class":389},[53,18107,17685],{"class":389},[53,18109,2186],{"class":89},[53,18111,17690],{"class":82},[53,18113,17693],{"class":389},[53,18115,17696],{"class":82},[53,18117,9562],{"class":9586},[53,18119,17701],{"class":82},[53,18121,9562],{"class":9586},[53,18123,17706],{"class":82},[53,18125,7317],{"class":389},[53,18127,17711],{"class":89},[53,18129,1727],{"class":82},[53,18131,18132,18134,18136,18138,18141,18143,18145,18147,18149,18151,18153,18155,18157],{"class":55,"line":527},[53,18133,17989],{"class":389},[53,18135,17685],{"class":389},[53,18137,2186],{"class":89},[53,18139,18140],{"class":82},".state.loading ",[53,18142,17693],{"class":389},[53,18144,17696],{"class":82},[53,18146,9562],{"class":9586},[53,18148,17701],{"class":82},[53,18150,9562],{"class":9586},[53,18152,17706],{"class":82},[53,18154,7317],{"class":389},[53,18156,17711],{"class":89},[53,18158,1727],{"class":82},[53,18160,18161],{"class":55,"line":533},[53,18162,9855],{"class":82},[53,18164,18165],{"class":55,"line":539},[53,18166,282],{"class":82},[18,18168,18169],{},"So far we’ve gained nothing but complexity /o",[18,18171,18172,18173,18175,18176,18178,18179,18181,18182,18185,18186,18188,18189,18191,18192,986],{},"Now to the interesting part. As soon as the",[50,18174,7878],{}," component receives new properties we’re starting a timeout to\nupdate the internal state with a delay of 100ms. Remember react calls",[50,18177,17598],{},"on property changes as well as on state\nchanges. So",[50,18180,17598],{}," is called two times now actually. The first time it renders the same as previously ",[573,18183,18184],{},"nop, we’re not\nloading",". After 100ms",[50,18187,17950],{}," is called which triggers the second ",[50,18190,17598],{},"cycle ",[573,18193,18194],{},"yep, we’re loading",[43,18196,18198],{"className":288,"code":18197,"language":290,"meta":48,"style":48},"class Waiting extends React.Component {\n constructor() { ... }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.loading !== this.props.loading) {\n+ window.clearTimeout(this._loadingTimeout);\n+ this._loadingTimeout = window.setTimeout(() => {\n this.setState({ loading: nextProps.loading });\n+ }, 100);\n }\n\n render() { ... }\n }\n}\n",[50,18199,18200,18205,18210,18214,18219,18224,18229,18234,18239,18244,18249,18253,18258,18263],{"__ignoreMap":48},[53,18201,18202],{"class":55,"line":56},[53,18203,18204],{},"class Waiting extends React.Component {\n",[53,18206,18207],{"class":55,"line":86},[53,18208,18209],{}," constructor() { ... }\n",[53,18211,18212],{"class":55,"line":126},[53,18213,500],{"emptyLinePlaceholder":499},[53,18215,18216],{"class":55,"line":163},[53,18217,18218],{}," componentWillReceiveProps(nextProps) {\n",[53,18220,18221],{"class":55,"line":186},[53,18222,18223],{}," if (nextProps.loading !== this.props.loading) {\n",[53,18225,18226],{"class":55,"line":221},[53,18227,18228],{},"+ window.clearTimeout(this._loadingTimeout);\n",[53,18230,18231],{"class":55,"line":242},[53,18232,18233],{},"+ this._loadingTimeout = window.setTimeout(() => {\n",[53,18235,18236],{"class":55,"line":273},[53,18237,18238],{}," this.setState({ loading: nextProps.loading });\n",[53,18240,18241],{"class":55,"line":279},[53,18242,18243],{},"+ }, 100);\n",[53,18245,18246],{"class":55,"line":496},[53,18247,18248],{}," }\n",[53,18250,18251],{"class":55,"line":503},[53,18252,500],{"emptyLinePlaceholder":499},[53,18254,18255],{"class":55,"line":509},[53,18256,18257],{}," render() { ... }\n",[53,18259,18260],{"class":55,"line":515},[53,18261,18262],{}," }\n",[53,18264,18265],{"class":55,"line":521},[53,18266,282],{},[18,18268,18269,18270,18273,18274,18277,18278,18281],{},"But wait, what’s happening now when the loading property is swapped the other way around from ",[573,18271,18272],{},"yep"," to ",[573,18275,18276],{},"nop","? Remember\nthe implementation of ",[50,18279,18280],{},"MyApp"," from above?",[43,18283,18285],{"className":288,"code":18284,"language":290,"meta":48,"style":48},"class MyApp extends React.Component {\n // ...\n render() {\n return (\n \u003Cdiv>\n\n {this.renderData()}\n \u003C/div>\n );\n }\n}\n",[50,18286,18287,18292,18297,18302,18307,18312,18316,18321,18326,18330,18334],{"__ignoreMap":48},[53,18288,18289],{"class":55,"line":56},[53,18290,18291],{},"class MyApp extends React.Component {\n",[53,18293,18294],{"class":55,"line":86},[53,18295,18296],{}," // ...\n",[53,18298,18299],{"class":55,"line":126},[53,18300,18301],{}," render() {\n",[53,18303,18304],{"class":55,"line":163},[53,18305,18306],{}," return (\n",[53,18308,18309],{"class":55,"line":186},[53,18310,18311],{}," \u003Cdiv>\n",[53,18313,18314],{"class":55,"line":221},[53,18315,500],{"emptyLinePlaceholder":499},[53,18317,18318],{"class":55,"line":242},[53,18319,18320],{}," {this.renderData()}\n",[53,18322,18323],{"class":55,"line":273},[53,18324,18325],{}," \u003C/div>\n",[53,18327,18328],{"class":55,"line":279},[53,18329,17891],{},[53,18331,18332],{"class":55,"line":496},[53,18333,9855],{},[53,18335,18336],{"class":55,"line":503},[53,18337,282],{},[18,18339,18340,18341,18343,18344,18347,18348,18351,18352,18354,18355,986],{},"The",[50,18342,7878],{}," component receives the updated loading flag ",[573,18345,18346],{},"false"," and delays it’s internal rendering while\n",[50,18349,18350],{},"this.renderData()"," renders the actual data. So the loading info is shortly visible amongst the data. Fortunately this\ncan be fixed easily. We just have to update immediately when the ",[50,18353,17727],{}," property is set to ",[573,18356,18346],{},[43,18358,18360],{"className":288,"code":18359,"language":290,"meta":48,"style":48},"class Waiting extends React.Component {\n constructor() { ... }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.loading !== this.props.loading) {\n window.clearTimeout(this._loadingTimeout);\n+ if (nextProps.loading) {\n this._loadingTimeout = window.setTimeout(() => {\n this.setState({ loading: nextProps.loading });\n }, 100);\n+ } else {\n+ this.setState({ loading: false });\n+ }\n }\n }\n\n render() { ... }\n}\n",[50,18361,18362,18366,18370,18374,18378,18382,18387,18392,18397,18402,18407,18412,18417,18422,18426,18430,18434,18439],{"__ignoreMap":48},[53,18363,18364],{"class":55,"line":56},[53,18365,18204],{},[53,18367,18368],{"class":55,"line":86},[53,18369,18209],{},[53,18371,18372],{"class":55,"line":126},[53,18373,500],{"emptyLinePlaceholder":499},[53,18375,18376],{"class":55,"line":163},[53,18377,18218],{},[53,18379,18380],{"class":55,"line":186},[53,18381,18223],{},[53,18383,18384],{"class":55,"line":221},[53,18385,18386],{}," window.clearTimeout(this._loadingTimeout);\n",[53,18388,18389],{"class":55,"line":242},[53,18390,18391],{},"+ if (nextProps.loading) {\n",[53,18393,18394],{"class":55,"line":273},[53,18395,18396],{}," this._loadingTimeout = window.setTimeout(() => {\n",[53,18398,18399],{"class":55,"line":279},[53,18400,18401],{}," this.setState({ loading: nextProps.loading });\n",[53,18403,18404],{"class":55,"line":496},[53,18405,18406],{}," }, 100);\n",[53,18408,18409],{"class":55,"line":503},[53,18410,18411],{},"+ } else {\n",[53,18413,18414],{"class":55,"line":509},[53,18415,18416],{},"+ this.setState({ loading: false });\n",[53,18418,18419],{"class":55,"line":515},[53,18420,18421],{},"+ }\n",[53,18423,18424],{"class":55,"line":521},[53,18425,860],{},[53,18427,18428],{"class":55,"line":527},[53,18429,9855],{},[53,18431,18432],{"class":55,"line":533},[53,18433,500],{"emptyLinePlaceholder":499},[53,18435,18436],{"class":55,"line":539},[53,18437,18438],{}," render() { ... }\n",[53,18440,18441],{"class":55,"line":545},[53,18442,282],{},[18,18444,18445,18446,18449,18450,18452,18453,18455,18456,18458,18459,18464,18465,12740,18468,12114],{},"Now we’ve gained a good user experience by not displaying the loading info if the loading property is toggled from ",[573,18447,18448],{},"yay","\nback to ",[573,18451,18276],{}," within 100ms. There is no flickering anymore o/ However, we’ve payed with some complexity in the\n",[50,18454,7878],{}," component and even have async stuff happening there. So testing consumers of the ",[50,18457,7878],{}," component could be\nconfusing. But in my opinion the better user experience is worth the complexity and tests should be fine as long\nas ",[585,18460,18463],{"href":18461,"rel":18462},"https://reactjs.org/docs/shallow-renderer.html",[589],"shallowRendering"," is used. Otherwise we have to use the timemachine\nfeature of the testing library (e.g. jest provides ",[50,18466,18467],{},"jest.useFakeTimers()",[50,18469,18470],{},"jest.runTimersToTime(100)",[3469,18472,18474],{"id":18473},"improved-handling-of-data-rendering","improved handling of data rendering",[18,18476,18477],{},"Currently we have a waiting component that takes care about delaying the loading info. But the consumer is still\nresponsible to check itself whether the data is available and should be rendered or not.",[43,18479,18481],{"className":9734,"code":18480,"language":9736,"meta":48,"style":48},"renderData() {\n return this.state.data\n ?\n : null;\n}\n",[50,18482,18483,18489,18499,18504,18513],{"__ignoreMap":48},[53,18484,18485,18487],{"class":55,"line":56},[53,18486,17874],{"class":59},[53,18488,9762],{"class":82},[53,18490,18491,18494,18496],{"class":55,"line":86},[53,18492,18493],{"class":389}," return",[53,18495,2186],{"class":89},[53,18497,18498],{"class":82},".state.data\n",[53,18500,18501],{"class":55,"line":126},[53,18502,18503],{"class":389}," ?\n",[53,18505,18506,18509,18511],{"class":55,"line":163},[53,18507,18508],{"class":389}," :",[53,18510,17711],{"class":89},[53,18512,1727],{"class":82},[53,18514,18515],{"class":55,"line":186},[53,18516,282],{"class":82},[18,18518,18519],{},"However, my collegues and my humble self could live with this redundancy actually. It is explicit and the waiting\ncomponent wouldn’t be bloated with more features and complexity. But in our project we had the following issue (amongst\nsome others…)",[18,18521,18522,18523,18525,18526,18529,18530,18533,18534,18537,18538,18540,18541,18544],{},"Given",[50,18524,17734],{},"renders a list of items with a headline and other eye candy stuff. It takes care about rendering a ",[573,18527,18528],{},"no\ndata"," info banner when the given list is empty. The default ",[50,18531,18532],{},"this.state.data"," value is an empty array instead of\nundefined or null to avoid the notorious ",[50,18535,18536],{},"Cannot read property XXX of undefined",". Then the code snippet above results in\nalways rendering ",[50,18539,17734],{}," and therefore the ",[573,18542,18543],{},"no data"," info banner (empty array is a truthy expression).",[18,18546,18547,18548,18550,18551,18554],{},"The unwanted ",[573,18549,18543],{}," info banner could be avoided by adding the ",[50,18552,18553],{},"this.state.loading"," flag to the condition. But that’s\nnot really satisfying since this adds more complexity which even will be copied and pasted into other components.",[43,18556,18558],{"className":9734,"code":18557,"language":9736,"meta":48,"style":48},"renderData() {\n return (this.state.data && !this.state.loading)\n ?\n : null;\n}\n",[50,18559,18560,18566,18594,18598,18606],{"__ignoreMap":48},[53,18561,18562,18564],{"class":55,"line":56},[53,18563,17874],{"class":59},[53,18565,9762],{"class":82},[53,18567,18568,18570,18572,18574,18576,18579,18582,18584,18587,18589,18591],{"class":55,"line":86},[53,18569,18493],{"class":389},[53,18571,9785],{"class":82},[53,18573,9837],{"class":89},[53,18575,17819],{"class":82},[53,18577,18578],{"class":389},"&",[53,18580,18581],{"class":82},"amp;",[53,18583,18578],{"class":389},[53,18585,18586],{"class":82},"amp; ",[53,18588,13333],{"class":389},[53,18590,9837],{"class":89},[53,18592,18593],{"class":82},".state.loading)\n",[53,18595,18596],{"class":55,"line":126},[53,18597,18503],{"class":389},[53,18599,18600,18602,18604],{"class":55,"line":163},[53,18601,18508],{"class":389},[53,18603,17711],{"class":89},[53,18605,1727],{"class":82},[53,18607,18608],{"class":55,"line":186},[53,18609,282],{"class":82},[18,18611,18612,18613,18615,18616,18618],{},"Furthermore… remember the actual challenge we tried to solve with the ",[50,18614,7878],{},"component which delays the rendering of\nthe loading info? Exactly, we wanted to avoid flickering and displaying the loading info when the data is received\nwithin 100ms. Now we’ve added this again for ",[50,18617,17734],{},". The component will be unmounted and mounted within 42ms for\ninstance. The new data is visible but all eye candy around the data list (like the headline) is gone and rerendered\nwithin one blink of an eye.",[18,18620,18621,18622,18624],{},"So let’s improve the ",[50,18623,7878],{},"component to handle the rendering of it’s children. We have two react techniques to\nimplement this:",[577,18626,18627,18630],{},[580,18628,18629],{},"render props",[580,18631,18632],{},"function as child",[18,18634,18635,18636,18639,18640,18642,18643,18646,18647,12740,18649,18651,18652,18654],{},"Both are the same actually. The ",[573,18637,18638],{},"render prop"," pattern uses a function passed as component property to render something.\nThe ",[573,18641,18632],{}," pattern is… well… the same. ",[50,18644,18645],{},"children"," is just an additional property of a React component. The\ndifference between ",[573,18648,18629],{},[573,18650,18632],{}," is the syntax. Personally I prefer ",[573,18653,18629],{}," since this\nis more explicit and doesn’t leave room of misconception for people not knowing React and JSX in detail.",[43,18656,18658],{"className":9734,"code":18657,"language":9736,"meta":48,"style":48},"class RenderProps extends React.Component {\n render() {\n return this.renderData()} />;\n }\n}\n\nclass FunctionAsChild extends React.Component {\n render() {\n return {() => this.renderData()};\n }\n}\n",[50,18659,18660,18677,18683,18706,18710,18714,18718,18735,18741,18748,18752],{"__ignoreMap":48},[53,18661,18662,18664,18667,18669,18671,18673,18675],{"class":55,"line":56},[53,18663,9743],{"class":389},[53,18665,18666],{"class":59}," RenderProps",[53,18668,9749],{"class":389},[53,18670,17666],{"class":59},[53,18672,986],{"class":82},[53,18674,17671],{"class":59},[53,18676,8543],{"class":82},[53,18678,18679,18681],{"class":55,"line":86},[53,18680,17678],{"class":59},[53,18682,9762],{"class":82},[53,18684,18685,18687,18690,18692,18694,18697,18700,18703],{"class":55,"line":126},[53,18686,17685],{"class":389},[53,18688,18689],{"class":89}," this",[53,18691,986],{"class":82},[53,18693,17874],{"class":59},[53,18695,18696],{"class":82},"()} ",[53,18698,18699],{"class":389},"/&",[53,18701,18702],{"class":8553},"gt",[53,18704,18705],{"class":82},";;\n",[53,18707,18708],{"class":55,"line":163},[53,18709,9855],{"class":82},[53,18711,18712],{"class":55,"line":186},[53,18713,282],{"class":82},[53,18715,18716],{"class":55,"line":221},[53,18717,500],{"emptyLinePlaceholder":499},[53,18719,18720,18722,18725,18727,18729,18731,18733],{"class":55,"line":242},[53,18721,9743],{"class":389},[53,18723,18724],{"class":59}," FunctionAsChild",[53,18726,9749],{"class":389},[53,18728,17666],{"class":59},[53,18730,986],{"class":82},[53,18732,17671],{"class":59},[53,18734,8543],{"class":82},[53,18736,18737,18739],{"class":55,"line":273},[53,18738,17678],{"class":59},[53,18740,9762],{"class":82},[53,18742,18743,18745],{"class":55,"line":279},[53,18744,17685],{"class":389},[53,18746,18747],{"class":82}," {() => this.renderData()};\n",[53,18749,18750],{"class":55,"line":496},[53,18751,9855],{"class":82},[53,18753,18754],{"class":55,"line":503},[53,18755,282],{"class":82},[18,18757,18758,18759,18761,18762,18764,18765,986],{},"The first step is to extend the ",[50,18760,7878],{},"component with a render property. Instead of returning ",[50,18763,17784],{},"when data is not\nloading we have to call ",[50,18766,18767],{},"this.props.render",[43,18769,18771],{"className":9734,"code":18770,"language":9736,"meta":48,"style":48},"class Waiting extends React.Component {\n constructor() { ... }\n\n componentWillReceiveProps(nextProps) { ... }\n\n+ renderContent() {\n+ return this.state.loading ? \u003Cdiv>loading...\u003C/div> : this.props.render();\n+ }\n+\n render() {\n- return this.state.loading ? \u003Cdiv>loading...\u003C/div> : null;\n+ return this.renderContent();\n }\n}\n",[50,18772,18773,18789,18801,18805,18820,18824,18833,18866,18872,18876,18882,18910,18925,18929],{"__ignoreMap":48},[53,18774,18775,18777,18779,18781,18783,18785,18787],{"class":55,"line":56},[53,18776,9743],{"class":389},[53,18778,17661],{"class":59},[53,18780,9749],{"class":389},[53,18782,17666],{"class":59},[53,18784,986],{"class":82},[53,18786,17671],{"class":59},[53,18788,8543],{"class":82},[53,18790,18791,18793,18796,18799],{"class":55,"line":86},[53,18792,17992],{"class":389},[53,18794,18795],{"class":82},"() { ",[53,18797,18798],{"class":389},"...",[53,18800,18262],{"class":82},[53,18802,18803],{"class":55,"line":126},[53,18804,500],{"emptyLinePlaceholder":499},[53,18806,18807,18809,18811,18813,18816,18818],{"class":55,"line":163},[53,18808,18041],{"class":59},[53,18810,1067],{"class":82},[53,18812,18046],{"class":8553},[53,18814,18815],{"class":82},") { ",[53,18817,18798],{"class":389},[53,18819,18262],{"class":82},[53,18821,18822],{"class":55,"line":186},[53,18823,500],{"emptyLinePlaceholder":499},[53,18825,18826,18828,18831],{"class":55,"line":221},[53,18827,17989],{"class":389},[53,18829,18830],{"class":59}," renderContent",[53,18832,9762],{"class":82},[53,18834,18835,18837,18839,18841,18843,18845,18847,18849,18851,18853,18855,18857,18859,18862,18864],{"class":55,"line":242},[53,18836,17989],{"class":389},[53,18838,17685],{"class":389},[53,18840,2186],{"class":89},[53,18842,18140],{"class":82},[53,18844,17693],{"class":389},[53,18846,17696],{"class":82},[53,18848,9562],{"class":9586},[53,18850,17701],{"class":82},[53,18852,9562],{"class":9586},[53,18854,17706],{"class":82},[53,18856,7317],{"class":389},[53,18858,2186],{"class":89},[53,18860,18861],{"class":82},".props.",[53,18863,17598],{"class":59},[53,18865,9806],{"class":82},[53,18867,18868,18870],{"class":55,"line":273},[53,18869,17989],{"class":389},[53,18871,9855],{"class":82},[53,18873,18874],{"class":55,"line":279},[53,18875,18034],{"class":389},[53,18877,18878,18880],{"class":55,"line":496},[53,18879,17678],{"class":59},[53,18881,9762],{"class":82},[53,18883,18884,18886,18888,18890,18892,18894,18896,18898,18900,18902,18904,18906,18908],{"class":55,"line":503},[53,18885,4812],{"class":389},[53,18887,17685],{"class":389},[53,18889,2186],{"class":89},[53,18891,18140],{"class":82},[53,18893,17693],{"class":389},[53,18895,17696],{"class":82},[53,18897,9562],{"class":9586},[53,18899,17701],{"class":82},[53,18901,9562],{"class":9586},[53,18903,17706],{"class":82},[53,18905,7317],{"class":389},[53,18907,17711],{"class":89},[53,18909,1727],{"class":82},[53,18911,18912,18914,18916,18918,18920,18923],{"class":55,"line":509},[53,18913,17989],{"class":389},[53,18915,17685],{"class":389},[53,18917,2186],{"class":89},[53,18919,986],{"class":82},[53,18921,18922],{"class":59},"renderContent",[53,18924,9806],{"class":82},[53,18926,18927],{"class":55,"line":515},[53,18928,9855],{"class":82},[53,18930,18931],{"class":55,"line":521},[53,18932,282],{"class":82},[607,18934,18935],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":48,"searchDepth":86,"depth":86,"links":18937},[18938,18939,18940],{"id":17645,"depth":86,"text":17646},{"id":17923,"depth":86,"text":17924},{"id":18473,"depth":86,"text":18474},[613,614],"2017-12-14T12:28:51","Giving fast feedback to users has been improved by single page applications over the request response cycle. However,\\nthere is one serious downside with this approach. Elements are popping out of the wild on various sections everytime.\\nParticular data loading indicated by a waiting animation is affected with this phenomenon. In this blog I’d like to\\npresent you our solution of a UI component that takes care about delaying the rendering of the animation.","https://synyx.de/blog/implementing-a-waiting-component-with-user-experience-in-mind/",{},"/blog/implementing-a-waiting-component-with-user-experience-in-mind",{"title":17576,"description":17585},"blog/implementing-a-waiting-component-with-user-experience-in-mind",[],"Giving fast feedback to users has been improved by single page applications over the request response cycle. However, there is one serious downside with this approach. Elements are popping out of the wild on various sections everytime. Particular data loading indicated by a waiting animation is affected with this phenomenon. In this blog I’d like to present you our solution of a UI component that takes care about delaying the rendering of the animation.","McgKfmY5KyiZhLIHs5tLcAtXDXJuUH3jp9wYxZq7gns",{"id":18953,"title":18954,"author":18955,"body":18957,"category":19033,"date":19034,"description":19035,"extension":617,"link":19036,"meta":19037,"navigation":499,"path":19038,"seo":19039,"slug":18961,"stem":19040,"tags":19041,"teaser":19043,"__hash__":19044},"blog/blog/die-unrealistische-vision-die-dann-doch-irgendwie-funktioniert.md","Die unrealistische Vision – die dann doch irgendwie funktioniert",[18956],"ferstl",{"type":11,"value":18958,"toc":19031},[18959,18962,18965,18968,18971,18974,18994,18997,19000,19003,19019,19022,19025,19028],[14,18960,18954],{"id":18961},"die-unrealistische-vision-die-dann-doch-irgendwie-funktioniert",[18,18963,18964],{},"Ich kann mich nicht mehr so 100% erinnern – aber irgendwann vor 2014 planten wir den Umzug in neue Räumlichkeiten. Raus\naus dem Altbau – rein in ein Bürogebäude – Neues Netzwerk, mehr Internet als wir jemals bräuchten.",[18,18966,18967],{},"Natürlich stellte sich auch die Frage, wie wir unsere neuen Arbeitsplätze ausstatten. Auf jeden Fall irgendwie “agil”\nwie man es heute nennen würde – War-Rooms müssten sein, und am besten können sich jederzeit Gruppen zusammensetzen um\nzusammen schnell was zu hacken.",[18,18969,18970],{},"Doch etwas später holte uns dann doch die Realität ein…",[18,18972,18973],{},"Die Planungen waren vielversprechend:",[577,18975,18976,18979,18982,18985,18988,18991],{},[580,18977,18978],{},"Telefonanlage -> kann man sich mit seiner Nummer anmelden. ✔",[580,18980,18981],{},"Die Telefonanlage kann auch VoIP für das Handy anbieten ✔",[580,18983,18984],{},"Dockingstationen -> wenigstens für die Windows/Linux User gleich ✔",[580,18986,18987],{},"Wi-Fi haben wir ja schon. ✔",[580,18989,18990],{},"Für den persönlichen Krempel (eigene Tastatur etc.) wird es einen kleinen Spind geben (der ja eh vorgeschrieben ist).\n✔",[580,18992,18993],{},"Für Wired-Ethernet gibt es IEEE 802.1X ✔",[18,18995,18996],{},"Läuft also? Weit gefehlt.",[18,18998,18999],{},"Kurz vor dem Umzug hat $Laptop_hersteller neue Dockingstationen herausgebracht, verschiedene User haben einen Monitor\nhochkant, manche haben ein Standtelefon – die Mobile Entwickler haben mehrere Handys – andere Teams haben\nSpezialhardware vom Kunden die sich nicht “einfach mal so” auf- und abbauen lässt – und IEEE 802.1X hat genug “Stoff\ninne” um mehrere Jahre mit einem Standup-Comedyprogramm durch die Veranstaltungshallen der Nation zu tingeln. Und das\nWi-Fi war den Anforderungen natürlich auch nicht gewachsen.",[18,19001,19002],{},"Das Ergebnis:",[577,19004,19005,19013,19016],{},[580,19006,19007,19008],{},"Jeder kann sich überall hinsetzen und Arbeiten ✖\n",[577,19009,19010],{},[580,19011,19012],{},"Schnelle “agile” Teambildung ✖",[580,19014,19015],{},"Per Wi-Fi kann man bequem mit den Laptops arbeiten ✖",[580,19017,19018],{},"Das Wi-Fi reicht zum Telefonieren ✖",[18,19020,19021],{},"Ein paar (3) Wi-Fi Projekte später und weiterer Fragmentierung der Laptop-Infrastruktur (jeder darf sich aussuchen\nwas er will) kommen wir dennoch langsam der ursprünglichen Idee näher.",[18,19023,19024],{},"Wie? Wir haben einfach angefangen Rollen an die Schreibtische zu schrauben. So hat zwar jeder noch “seinen”\nSchreibtisch – mit all der nötigen und unnötigen Hardware die sich darauf so mit der Zeit ansammelt – aber wenn man mal\nschnell Umziehen will, oder einen Tag mit einem Team zusammen sitzen will – dann rollt man einfach rüber.",[18,19026,19027],{},"Vielleicht war die Planung der ursprünglichen Vision für die “variablen Arbeitsplätze” zu technisch und nicht\npragmatisch genug. Aber alleine dadurch das man die Vision doch im Hinterkopf hatte, hat sich im Endeffekt eine Lösung\nergeben an die am Anfang einfach niemand gedacht hat.",[18,19029,19030],{},"Was ich versuche für mich mitzunehmen – es lohnt sich an eine Vision zu glauben – auch wenn diese unerreichbar\nerscheint.",{"title":48,"searchDepth":86,"depth":86,"links":19032},[],[614],"2017-11-17T14:40:12","Ich kann mich nicht mehr so 100% erinnern – aber irgendwann vor 2014 planten wir den Umzug in neue Räumlichkeiten. Raus\\naus dem Altbau – rein in ein Bürogebäude – Neues Netzwerk, mehr Internet als wir jemals bräuchten.","https://synyx.de/blog/die-unrealistische-vision-die-dann-doch-irgendwie-funktioniert/",{},"/blog/die-unrealistische-vision-die-dann-doch-irgendwie-funktioniert",{"title":18954,"description":18964},"blog/die-unrealistische-vision-die-dann-doch-irgendwie-funktioniert",[4494,3122,19042],"vision","Ich kann mich nicht mehr so 100% erinnern - aber irgendwann vor 2014 planten wir den Umzug in neue Räumlichkeiten. Raus aus dem Altbau - rein in ein Bürogebäude - Neues Netzwerk, mehr Internet als wir jemals bräuchten.","h4zsI9rULxXOa91wTO4Kcmy185QCU5z8mYDX2zxqajI",{"id":19046,"title":19047,"author":19048,"body":19050,"category":19179,"date":19180,"description":19181,"extension":617,"link":19182,"meta":19183,"navigation":499,"path":19184,"seo":19185,"slug":19054,"stem":19187,"tags":19188,"teaser":19189,"__hash__":19190},"blog/blog/das-barcamp-pforzheim-2017.md","Das Barcamp Pforzheim 2017",[10931,19049],"ulrich",{"type":11,"value":19051,"toc":19171},[19052,19055,19068,19074,19079,19088,19091,19095,19101,19104,19110,19116,19119,19123,19137,19141,19144,19148,19151,19155,19158,19162,19165],[14,19053,19047],{"id":19054},"das-barcamp-pforzheim-2017",[18,19056,19057,19058,19063,19064,19067],{},"Am 03.11. und 04.11.2017 fand das erste Barcamp in Pforzheim statt. Veranstaltungsort war\ndas ",[585,19059,19062],{"href":19060,"rel":19061},"http://www.emma-pf.de/",[589],"Kreativzentrum Emma",". Das Emma bietet viel Platz und angenehme Räumlichkeiten für ein\nOpenspace Event. Die große Aula hat ausreichend Platz für alle Teilnehmer zur Begrüßung, und eine große Leinwand für die\n",[27,19065,19066],{},"#bcpf2017"," – Twitterwall. Ein angeschlossener Raum für Frühstück und Mittagessen ist ein idealer Ort für ausgeprägte\nKommunikation. Und natürlich lassen wir uns als synyxer solch ein Ereignis in unmittelbaren Nähe nicht entgehen. Ein\nkleine Delegation bestehend aus Stephan Ulrich, Frederick Meseck und Christian Mennerich hat sich als aufgemacht, um\nzumindest einen Tag lang dabei sein zu können. Wir haben dabei auch die Gelegenheit genutzt, eine eigene Session\nanzubieten.",[18,19069,19070],{},[1794,19071],{"alt":19072,"src":19073},"Präsentation Barcamp Pforzheim","https://media.synyx.de/uploads/2019/04/pforzheim-Barcamp2017-1-768x432.jpg",[18,19075,19076],{},[1794,19077],{"alt":19072,"src":19078},"https://media.synyx.de/uploads/2019/04/pforzheim-Barcamp2017-2-768x432.jpg",[18,19080,19081,19082,19087],{},"Die Sessions fanden in fünf weiteren gut ausgestatteten Meetingräumen statt. Spannend war, dass unter den circa 100\nTeilnehmern sehr viele Barcamp-Neulinge zugegen waren. Nach der obligatorischen Vorstellungsrunde und den\nSessionangeboten ging es (fast) pünktlich los. Trotz des hohen Anteils an Barcamp-Newbies waren alle Slots ausgefüllt\nund die ",[585,19083,19086],{"href":19084,"rel":19085},"https://app.konferenz.guide/index.html?seite=sessionList&event=bcpf17",[589],"Sessions des ersten Tages"," waren\nvielfältig und thematisch breit gestreut . An dieser Stelle vorab ein Dankeschön für die tolle Organisation und die\nvielen großartigen Diskussionen!",[18,19089,19090],{},"Exemplarisch berichten wir hier kurz und knapp (in chronologischer Reihenfolge) über die Sitzungen, an denen wir\nteilnehmen konnten.",[3469,19092,19094],{"id":19093},"sessionslot-1-fachwissen-verdient-farbe","Sessionslot 1 – Fachwissen verdient Farbe",[18,19096,19097],{},[1794,19098],{"alt":19099,"src":19100},"No SQL Plakat","https://media.synyx.de/uploads/2019/04/no_sql_plakat-768x1087.jpg",[18,19102,19103],{},"Unser Session-Angebot “Fachwissen verdient Farbe – Illustrierte Poster-Stories statt langweiliger Vorträge” fand viel\nAnklang bei den Anwesenden. Wir haben unsere Idee präsentiert, wie wir bei synyx seit einiger Zeit versuchen, komplexe\nund komplizierte Inhalte aufzubereiten. Statt der üblichen Slidedecks mit vielen Aufzählungen setzen wir auf die\nErstellung eines Plakats, das eine Geschichte erzählt. Mittels einer Javascript Bibliothek werden im einen Browser dann\nZoomstufen festgelegt, und die so festgelegten Ausschnitte bilden die Folien des Vortrags. Wir entwickeln diese Art der\nVortragspräsentation in enger Zusammenarbeit zwischen Designer und dem Vortragendem. Diese Art der Vortragsgestaltung\nstößt auch auf großen IT-Tagungen wie der JAX, den Frankfurter IT-Tagen oder dem JavaForumNord auf reges Interesse.\nStephan hat die Herausforderungen aus Sicht des Designers herausgestellt, während Freddy und Christian bereits\nVortragserfahrung mit dieser Technik haben und aus der Sicht des Vortragenden berichteten. Exemplarisch haben wir\ngezeigt, wie viel Aufwand es ist, bis eine Szene des Vortrags seine endgültige Gestalt hat.",[18,19105,19106],{},[1794,19107],{"alt":19108,"src":19109},"resilience Plakat","https://media.synyx.de/uploads/2019/04/resilience_small-768x1086.jpg",[18,19111,19112],{},[1794,19113],{"alt":19114,"src":19115},"scribble","https://media.synyx.de/uploads/2019/04/scribble1-768x543.jpg",[18,19117,19118],{},"Insbesondere die gestalterischen Herausforderungen wurden mit anwesenden Designern ausgiebig besprochen. Einige\nTeilnehmer konnten sich direkt vorstellen, wie ein Plakat im eigenen Unternehmen einen Mehrwert bietet kann gegenüber\nder bisherigen Art, Inhalte intern und extern zu kommunizieren. In Zukunft soll bei synyx ein Tooling entstehen und\nunter einer Open Source Lizenz veröffentlicht werden, dass die Entwicklung von Vortragspostern gut unterstützt. Die\nDiskussion war spannend, und für uns war es interessant und lehrreich, unsere Ideen mit nicht-ITlern zu teilen.",[3469,19120,19122],{"id":19121},"sessionslot-2-design-von-der-stange","Sessionslot 2 – Design von der Stange",[18,19124,19125,19126,99,19131,19136],{},"Jochen Baumann hat eine Sitzung angeboten zu Design von der Stange, um die Nutzung von und\nErfahrungen ",[585,19127,19130],{"href":19128,"rel":19129},"https://99designs.de",[589],"99design",[585,19132,19135],{"href":19133,"rel":19134},"https://www.designcrowd.com/",[589],"Design Crowd"," und ähnlichen Portalen zu\ndiskutieren. Trotz unterschiedlicher Erfahrungen herrschte doch Einigkeit darüber, dass sich Design nicht einfach\noutsourcen lässt. Gute und vor allem homogene Designkonzepte leben von der Interaktion zwischen Designer und Kunde, und\nindividuelle Beratung wird auch in Zukunft ein Schlüssel sein für erfolgreiche Konzepte. Hier spielt auch eine große\nRolle, wie gut ein Designer ein Gespür entwickeln kann für die Bedürfnisse seiner Kunden, eine Qualifikation, die in der\nAusbildung der Designer an den Hochschulen oftmals noch zu kurz kommt.",[3469,19138,19140],{"id":19139},"sessionslot-3-künstliche-intelligenz-einführung-ausblick","Sessionslot 3 – Künstliche Intelligenz – Einführung & Ausblick",[18,19142,19143],{},"Carsten Kraus hat eine sehr schöne und gut allgemein verständliche Einführung in die Welt der künstlichen Intelligenz\ngehalten. Die harte Statistik hat er minimal gehalten und gut motiviert die Funktionsweise und Interpretiertbarkeit\nneuronaler Netze erklärt. Als bekennender Go-Spieler hat er großen Respekt vor der Leistungsfähigkeit heutiger Rechner\ngezeigt, nachdem der erste Computer Go erlernt und mehrere Großmeister geschlagen hat. Die Diskussionen in dieser\nSitzung sind dem Thema angebracht auch philosophisch geworden, wobei Carsten sich als jemand bekannt hat, der den\nMaschinen “echte” Intelligenz zugesteht. Aufgrund des exponentiellen Lernverhaltens von Computern hat er die Vermutung,\ndass Computer bereits in wenigen Jahrzehnten intelligenter sein können als Menschen. Was allerdings Intelligenz und vor\nallem “intelligenter sein” genau bedeuten, dass war ein Teil der Diskussion, über den natürlich kein Konsens gefunden\nwerden konnte. Aber sehr spannend ist das Thema allemal, und es wird uns auch in Zukunft alle berühren.",[3469,19145,19147],{"id":19146},"sessionslot-3-wie-kann-pforzheim-schöner-werden","Sessionslot 3 – Wie kann Pforzheim schöner werden?",[18,19149,19150],{},"In einer etwas kleineren Runde kamen etwa 10 Teilnehmer zusammen um darüber zu sprechen, was es wohl braucht um das\nPforzheimer Stadtbild anschaulicher zu machen. Interessant waren bereits die Erfahrungsberichte der Diskutierenden. Von\nalt-eingesessenen bis hin zu frisch-zugezogenen schilderten die Teilnehmer nicht nur ihre eigenen Eindrücke bezüglich\nPforzheim und Umgebung: “Hässlich”, “monoton” oder “veraltet” sind Worte die der Goldstadt oftmals entgegenschlagen. Wer\njetzt glaubt diese Session sei in Schwarzmalerei verfallen, irrt sich. Die barcamp-Runde war sich schnell einig: Es\ngibt sie, die schönen Ecken im Pforzheimer Raum, sowohl in der Stadt selbst als auch im grünen Umland. Doch was können\nwir tun um diese Perlen herauszuarbeiten oder generell ersichtlicher zu machen? Um sich dieser Frage zu nähern, bat\nSession-Leiterin Stefanie alle Teilnehmer, stichwortartig Verbesserungsvorschläge auf Post-Its zu schreiben, welche im\nAnschluss besprochen wurden. Trockene Theorie ohne greifbare Ergebnisse? Weit gefehlt! Die Session hat Menschen\nzusammengeführt die sich bereits für eine Aufwertung des Stadtbilds engagieren oder dies zukünftig tun wollen. Es wurden\nTelefonnummern und Kontakte getauscht, Ideen zusammengeführt und Pläne geschmiedet – für ein schöneres Pforzelona!",[3469,19152,19154],{"id":19153},"sessionslot-4-agilität-in-der-praxis-bei-komplexen-produkten","Sessionslot 4 – Agilität in der Praxis bei komplexen Produkten",[18,19156,19157],{},"In kleiner Runde hat Margit darüber gesprochen, wie die agile Vorgehensweise bei der Produktion von komplexen Produkten\nzu verstehen ist. Als Beispiel diente die Herstellung eines Autos, mit allen Facetten der Produktionslinie, von der Idee\nbis hin zur tatsächlichen Produktion und allen Beteiligten, von Designer und Ingenieuren über Teilzuliefereren bis hin\nzum Vertrieb. In der Diskussion wurde klar, dass die in der agilen Welt verwendeten Begriffe, insbesondere der der\nVision, nicht immer gleich interpretiert werden, und zu allen Diskussionen immer auch Begriffsklärung gehört. Weiter\nstellt der Umgang mit komplexen Strukturen eine Herausforderung dar, insbesondere starre Hierarchien erschweren die\nkonsequente Anwendung agiler Methoden. Zur Zeit scheint es so, so wurde in der kleinen Runde festgehalten, dass es keine\nallgemein anerkannten Techniken gibt, diese Komplexität in den Griff zu bekommen. Die Sinnhaftigkeit, auch diese\nkomplexen Probleme agil anzugehen, wurde aber generell bejaht, und wir hoffen, hier in Zukunft viele positive Beispiele\nzu finden.",[3469,19159,19161],{"id":19160},"bis-zum-nächsten-mal","Bis zum nächsten Mal",[18,19163,19164],{},"Abschließend ein herzliches Dankeschön an alle Teilnehmer für das tolle Event, und das Orgateam für die gute Arbeit. Wir\nvon synyx werden nächstes Jahr sicherlich wieder dabei sein, und können uns auch gut vorstellen uns als Sponsoren zu\nbeteiligen.",[18,19166,19167],{},[1794,19168],{"alt":19169,"src":19170},"Drei Synyxer","https://media.synyx.de/uploads/2017/11/drei-synyxer-768x1044.jpg",{"title":48,"searchDepth":86,"depth":86,"links":19172},[19173,19174,19175,19176,19177,19178],{"id":19093,"depth":86,"text":19094},{"id":19121,"depth":86,"text":19122},{"id":19139,"depth":86,"text":19140},{"id":19146,"depth":86,"text":19147},{"id":19153,"depth":86,"text":19154},{"id":19160,"depth":86,"text":19161},[12068,614],"2017-11-16T15:30:46","Am 03.11. und 04.11.2017 fand das erste Barcamp in Pforzheim statt. Veranstaltungsort war\\ndas Kreativzentrum Emma. Das Emma bietet viel Platz und angenehme Räumlichkeiten für ein\\nOpenspace Event. Die große Aula hat ausreichend Platz für alle Teilnehmer zur Begrüßung, und eine große Leinwand für die\\n#bcpf2017 – Twitterwall. Ein angeschlossener Raum für Frühstück und Mittagessen ist ein idealer Ort für ausgeprägte\\nKommunikation. Und natürlich lassen wir uns als synyxer solch ein Ereignis in unmittelbaren Nähe nicht entgehen. Ein\\nkleine Delegation bestehend aus Stephan Ulrich, Frederick Meseck und Christian Mennerich hat sich als aufgemacht, um\\nzumindest einen Tag lang dabei sein zu können. Wir haben dabei auch die Gelegenheit genutzt, eine eigene Session\\nanzubieten.","https://synyx.de/blog/das-barcamp-pforzheim-2017/",{},"/blog/das-barcamp-pforzheim-2017",{"title":19047,"description":19186},"Am 03.11. und 04.11.2017 fand das erste Barcamp in Pforzheim statt. Veranstaltungsort war\ndas Kreativzentrum Emma. Das Emma bietet viel Platz und angenehme Räumlichkeiten für ein\nOpenspace Event. Die große Aula hat ausreichend Platz für alle Teilnehmer zur Begrüßung, und eine große Leinwand für die\n#bcpf2017 – Twitterwall. Ein angeschlossener Raum für Frühstück und Mittagessen ist ein idealer Ort für ausgeprägte\nKommunikation. Und natürlich lassen wir uns als synyxer solch ein Ereignis in unmittelbaren Nähe nicht entgehen. Ein\nkleine Delegation bestehend aus Stephan Ulrich, Frederick Meseck und Christian Mennerich hat sich als aufgemacht, um\nzumindest einen Tag lang dabei sein zu können. Wir haben dabei auch die Gelegenheit genutzt, eine eigene Session\nanzubieten.","blog/das-barcamp-pforzheim-2017",[],"Am 03.11. und 04.11.2017 fand das erste Barcamp in Pforzheim statt. Veranstaltungsort war das Kreativzentrum Emma. Das Emma bietet viel Platz und angenehme Räumlichkeiten für ein Openspace Event. Die große Aula hat ausreichend Platz für alle Teilnehmer zur Begrüßung, und eine große Leinwand für die #bcpf2017 – Twitterwall. Ein angeschlossener Raum für Frühstück und Mittagessen ist ein idealer Ort für ausgeprägte Kommunikation. Und natürlich lassen wir uns als synyxer solch ein Ereignis in unmittelbaren Nähe nicht entgehen.","5856c5g7cJuuOplcCw76cS5ZX00SzfwYT-X9qdHrSWQ",{"id":19192,"title":19193,"author":19194,"body":19197,"category":19296,"date":19297,"description":19298,"extension":617,"link":19299,"meta":19300,"navigation":499,"path":19301,"seo":19302,"slug":19201,"stem":19304,"tags":19305,"teaser":19306,"__hash__":19307},"blog/blog/devoxx4kids-oktober-2017.md","Devoxx4Kids Oktober 2017",[19195,19196],"herbold","schneider",{"type":11,"value":19198,"toc":19290},[19199,19202,19209,19212,19215,19218,19221,19224,19232,19238,19241,19250,19256,19260,19268,19273],[14,19200,19193],{"id":19201},"devoxx4kids-oktober-2017",[18,19203,19204,19205,19208],{},"Am 21.10.2017 fand die siebte Devoxx4Kids in der ",[585,19206,13248],{"href":13246,"rel":19207},[589]," in Karlsruhe statt,\nwelche bei Groß und Klein für sehr viel Spaß sorgte. Auch dieses Jahr waren wir mit 30 Kindern und 19 Mentoren voll\nbesetzt. Hierbei waren 11 Mädchen mit dabei, was uns sehr gefreut hat.",[3469,19210,3685],{"id":19211},"workshops",[18,19213,19214],{},"Wie auch bereits bei den letzten zwei Devoxx4Kids, haben wir uns wieder für drei Workshops mit je 90 Minuten\nentschlossen. Die Kinder hatten dadurch mehr Zeit pro Workshop und wurden nicht schon nach einer Stunde aus ihrer\nAufgabe gerissen.",[18,19216,19217],{},"Um für ein wenig mehr Abwechslung in den Workshops zu sorgen, haben wir gleich zwei neue Workshops für die Kinder\nvorbereitet. In einem der neuen Workshops konnten die Kinder mit der Open Source Musiksoftware ‘Sonic Pi’ ihren\nRaspberry Pi in ein DJ Pult verwandeln. Beim zweiten neuen Workshop wurden die Kinder zu kleinen Spieleentwicklern und\nkonnten mit ‘Scratch’ ein eigenes Halloweenspiel programmieren.",[3469,19219,6919],{"id":19220},"sonic-pi",[18,19222,19223],{},"Zu Beginn des Workshops haben wir die Grundlagen erlernt. Einzelne Töne, Tonfolgen und Schleifen mit kraftvollen Beats\nwurden ausprobiert. Zum Schluss durften die Kids reihum ihre Musik der Gruppe vorspielen. Es hat den Kids und uns sehr\nviel Spaß gemacht, deshalb wird dieser Workshop mit den anderen zwei vermutlich im nächsten Frühjahr wieder auf dem Plan\nstehen.",[18,19225,19226,19227,19231],{},"Wer nun selbst Musik programmieren möchte, kann sich ",[585,19228,6919],{"href":19229,"rel":19230},"http://sonic-pi.net",[589]," kostenfrei herunterladen.",[18,19233,19234],{},[1794,19235],{"alt":19236,"src":19237},"devoxx4kids 2017","https://media.synyx.de/uploads/2019/04/devoxx4kids2017nov-768x512.jpg",[3469,19239,6895],{"id":19240},"scratch",[18,19242,3316,19243,19246,19247,13341],{},[585,19244,6895],{"href":3563,"rel":19245},[589]," Workshop gingen die Kinder auf eine Schatzsuche im Halloweengewand. Die Kinder\nentwickelten von der Geschichte des Spiels, über dessen Leveldesign bis hin zum Finale ihr ganz eigenes Spiel. Wie alle\nunsere Workshops ist auch dieser auf ",[585,19248,3573],{"href":6904,"rel":19249},[589],[18,19251,19252],{},[1794,19253],{"alt":19254,"src":19255},"devoxx4kids Scratch 2017","https://media.synyx.de/uploads/2019/04/devoxx4kids2017_nov_scratch-768x512.jpg",[3469,19257,19259],{"id":19258},"mindstorms","Mindstorms",[18,19261,19262,19263,19267],{},"Ein altbekannter Workshop, welcher uns die letzten Jahre begleitet und immer weiter entwickelt wurde ist\nunser ",[585,19264,19266],{"href":3571,"rel":19265},[589],"Lego Mindstorms Workshop",". Bei diesem Workshop\ndurften die Kinder ihrem Roboter Leben einhauchen. Den Kindern wurden mehrere Aufgaben gestellt, welche sie mit der\nProgrammierung ihres Roboters intelligent lösen mussten. Zum Beispiel mussten sie das Verhalten eines\nRoboterstaubsaugers nachbilden und auf bestimmte äußere Merkmale im Raum reagieren.",[18,19269,19270],{},[1794,19271],{"alt":19266,"src":19272},"https://media.synyx.de/uploads/2019/04/devoxx4kids_nov_2017_Mindstorm-768x512.jpg",[18,19274,19275,19276,19279,19280,19285,19286,19289],{},"Vielen Dank an unsere Mentoren, den Kindern, der ",[585,19277,13248],{"href":13246,"rel":19278},[589]," zum Bereitstellen der\nRäumlichkeiten sowie\nder ",[585,19281,19284],{"href":19282,"rel":19283},"https://www.dm.de/arbeiten-und-lernen/arbeiten-bei-dm/filiadata-c534052.html",[589],"IT-Tochter Filiadata"," von DM\nund ",[585,19287,3122],{"href":13320,"rel":19288},[589]," für ihr Sponsoring.",{"title":48,"searchDepth":86,"depth":86,"links":19291},[19292,19293,19294,19295],{"id":19211,"depth":86,"text":3685},{"id":19220,"depth":86,"text":6919},{"id":19240,"depth":86,"text":6895},{"id":19258,"depth":86,"text":19259},[3747,614],"2017-11-02T14:02:50","Am 21.10.2017 fand die siebte Devoxx4Kids in der Karlshochschule in Karlsruhe statt,\\nwelche bei Groß und Klein für sehr viel Spaß sorgte. Auch dieses Jahr waren wir mit 30 Kindern und 19 Mentoren voll\\nbesetzt. Hierbei waren 11 Mädchen mit dabei, was uns sehr gefreut hat.","https://synyx.de/blog/devoxx4kids-oktober-2017/",{},"/blog/devoxx4kids-oktober-2017",{"title":19193,"description":19303},"Am 21.10.2017 fand die siebte Devoxx4Kids in der Karlshochschule in Karlsruhe statt,\nwelche bei Groß und Klein für sehr viel Spaß sorgte. Auch dieses Jahr waren wir mit 30 Kindern und 19 Mentoren voll\nbesetzt. Hierbei waren 11 Mädchen mit dabei, was uns sehr gefreut hat.","blog/devoxx4kids-oktober-2017",[3747],"Am 21.10.2017 fand die siebte Devoxx4Kids in der Karlshochschule in Karlsruhe statt, welche bei Groß und Klein für sehr viel Spaß sorgte. Auch dieses Jahr waren wir mit 30 Kindern und 19 Mentoren voll besetzt. Hierbei waren 11 Mädchen mit dabei, was uns sehr gefreut hat. Workshops Wie auch bereits bei den letzten zwei Devoxx4Kids, haben wir uns wieder für drei Workshops mit je 90 Minuten entschlossen.","0HMMrv1kjTc3sQg4bG6Qlg9nPrgZqXFNkXCjrU5GBT8",{"id":19309,"title":19310,"author":19311,"body":19313,"category":19465,"date":19466,"description":19467,"extension":617,"link":19468,"meta":19469,"navigation":499,"path":19470,"seo":19471,"slug":19317,"stem":19472,"tags":19473,"teaser":19478,"__hash__":19479},"blog/blog/how-we-ended-up-using-bdd.md","How we ended up using BDD",[19312],"weigel",{"type":11,"value":19314,"toc":19458},[19315,19318,19321,19325,19328,19332,19335,19339,19342,19346,19386,19392,19398,19404,19410,19412,19415,19424,19426],[14,19316,19310],{"id":19317},"how-we-ended-up-using-bdd",[18,19319,19320],{},"It was not our primary goal to use Behaviour Driven Development (BDD) in the project at a customer, but while finding\nand optimizing our agile software development process we recognized that we established the building blocks of BDD. It\nworks quite well and offers a lot of space and flexibility for our future plans, switching our architecture to\nmicroservices.",[649,19322,19324],{"id":19323},"the-project-setup","The project setup",[18,19326,19327],{},"But let us start at the beginning of the project. We started on a green field project but had to embed in a system\ncontext with established interfaces and many third party services as we had to replace a legacy system. Also as a newly\nformed team consisting of internal and external employees we had to find our team spirit and embed into the existing\norganizational structure. With at least one dedicated Product Owner (PO) and a dedicated Scrum Master we started as a\nteam of 7 people. We are one of multiple Scrum teams in an organization sector. The operations team is (still) in\nanother sector and the domain experts or Functional Owner (FO) even in another building. On the one hand it makes\ncommunication on domain topics harder, on the other hand with this setting we had a lot of liberties to build, release\nand deploy whenever we want. Noticing that other teams organized their cyclic release as part of their scrum process\nevery two weeks our way to deploy after feature complete, seemed to be unconventional to others.",[649,19329,19331],{"id":19330},"trust-as-prerequisite-to-keep-liberties-in-development-process","Trust as prerequisite to keep liberties in development process",[18,19333,19334],{},"As time went by we had our first deployment to production. We have been consuming other services and vice versa. While\nmore features were added, the complexity and the amount of deployments to production increased. Our POs’ confidence in\nour unconventional release and deploy process decreased, perhaps feeling that the project got out of hand. Of course we\nsent announcement E-Mails to relevant stakeholders, but somehow we had not built up enough trust yet and our POs still\nhad the desire to make manual tests on the release stage. So we started to create charts of all processes together with\nour POs as part of our development process just before talking about the user story in our refinement. It was and still\nis helpful for two reasons. On the one hand it was creating a format the whole team understands as it was simplifying\nthe process and serving as documentation. On the other hand it was serving as kind of a contract, which we as devs and\nthe POs were committed to. Also we arranged that our POs wrote acceptance tests for the use case. With those newly\nintroduced methods in our development process, confidence and trust increased and we kept our way of releasing and\ndeploying after the feature is “Definition of Done” ready during the sprint.",[649,19336,19338],{"id":19337},"tests-turn-from-verification-to-specification","Tests turn from verification to specification",[18,19340,19341],{},"Again time went by and as the FOs are sitting in another building and in contrast to our POs are feeling the need of\nmanual tests, again the question for a fixed deployment-plan arose. Newly implemented features and more dependencies to\nother teams strengthened the need. To hold on to our flexibility and to keep deploying during our sprint we introduced a\nprocess called “3 Amigo Testing”. Before a story accomplishes the “Definition of Ready” and is thereby ready for our\nrefinement the tests have to be written together with our FOs, our POs and us (one of the devs). Thereby tests turn from\nverification to specification no matter at which level: unit, integration or system integration! In addition the\ndiscussion not only improves the communication between the business and the technical team, it also helps to understand\nthe complexity and the pitfalls early which results in a better estimation.",[649,19343,19345],{"id":19344},"time-to-grasp-the-nettle","Time to grasp the nettle",[18,19347,19348,19349,19354,19355,19360,19361,6159,19366,6159,19371,6159,19376,6159,19381,19385],{},"Technically that means you need an abstraction on top of your automated tests. Behaviour tests should always be written\nfrom a customer’s point of view and describe the acceptance criteria of a use case. Important is, that you use a\nbusiness readable language like ",[585,19350,19353],{"href":19351,"rel":19352},"https://github.com/cucumber/cucumber/wiki/Gherkin",[589],"gherkin",". It describes a test in the\nform of an initial state (“given”), an action (“when”) and a final state (“then”) which is common in the BDD context. By\nthat you have a description of a finite state machine which gives you the ability to describe a feature integrally. It\ndoes not matter at which level of the testing pyramide the actual implementation of the test is settled. A defined\nrequirement may be implemented at unit level as well as at system integration level. We\nuse ",[585,19356,19359],{"href":19357,"rel":19358},"https://cucumber.io/",[589],"cucumber"," because it meets the aforementioned requirements and because of existing knowledge\nand easy integration in our ecosystem. It is easy to use with the spring framework and gives us pretty jenkins\nreportings loved by our POs. But it is\nonly ",[585,19362,19365],{"href":19363,"rel":19364},"http://lettuce.it/",[589],"one",[585,19367,19370],{"href":19368,"rel":19369},"http://spockframework.org/",[589],"of",[585,19372,19375],{"href":19373,"rel":19374},"http://robotframework.org/",[589],"many",[585,19377,19380],{"href":19378,"rel":19379},"http://jbehave.org/",[589],"possible",[585,19382,8493],{"href":19383,"rel":19384},"http://www.thucydides.info/#/",[589],".\nFinally we recognized, that we established the building blocks of BDD:",[18,19387,19388,19391],{},[27,19389,19390],{},"Define tests beforehand"," – The specification of tests takes place before talking about the story in the refinement.",[18,19393,19394,19397],{},[27,19395,19396],{},"Use ubiquitous language"," – Defining the behaviour together with our POs and FOs we use a common language to avoid\nmisunderstandings.",[18,19399,19400,19403],{},[27,19401,19402],{},"Express all requirements in high-level business terms from the customer point of view"," – The tests serve as the\nacceptance criteria of the story describing the next business value to deliver. Therefore it is defined from the\ncustomer’s perspective.",[18,19405,19406,19409],{},[27,19407,19408],{},"Accessible to all stakeholders"," – The tests, which now serve as documentation, are accessible to all stakeholders via\na reporting plugin provided by our continuous integration tool.",[649,19411,4147],{"id":4146},[18,19413,19414],{},"With that said we built up not only the technical prerequisite to eliminate all manual tests but also gained trust and\nare now ready for continuous deployment. In addition our testsuite turns out to be a helpful backbone for our ongoing\nproject of splitting a monolith into microservices.",[18,19416,19417,19418,19423],{},"If u want to know more about the project join us for our ",[585,19419,19422],{"href":19420,"rel":19421},"https://synyx.de/events/17_08_jugka_microservices_andi/",[589],"talk","\nat Java User Group Karlsruhe!",[18,19425,4173],{},[577,19427,19428,19434,19440,19446,19452],{},[580,19429,19430],{},[585,19431,19432],{"href":19432,"rel":19433},"https://www.agilealliance.org/glossary/bdd",[589],[580,19435,19436],{},[585,19437,19438],{"href":19438,"rel":19439},"https://dannorth.net/introducing-bdd/",[589],[580,19441,19442],{},[585,19443,19444],{"href":19444,"rel":19445},"https://martinfowler.com/bliki/GivenWhenThen.html",[589],[580,19447,19448],{},[585,19449,19450],{"href":19450,"rel":19451},"http://www.agiletestingframework.com/atf/testing/behavior-driven-development-bdd/",[589],[580,19453,19454],{},[585,19455,19456],{"href":19456,"rel":19457},"https://en.wikipedia.org/wiki/Behavior-driven_development",[589],{"title":48,"searchDepth":86,"depth":86,"links":19459},[19460,19461,19462,19463,19464],{"id":19323,"depth":126,"text":19324},{"id":19330,"depth":126,"text":19331},{"id":19337,"depth":126,"text":19338},{"id":19344,"depth":126,"text":19345},{"id":4146,"depth":126,"text":4147},[613,614],"2017-07-31T14:13:17","It was not our primary goal to use Behaviour Driven Development (BDD) in the project at a customer, but while finding\\nand optimizing our agile software development process we recognized that we established the building blocks of BDD. It\\nworks quite well and offers a lot of space and flexibility for our future plans, switching our architecture to\\nmicroservices.","https://synyx.de/blog/how-we-ended-up-using-bdd/",{},"/blog/how-we-ended-up-using-bdd",{"title":19310,"description":19320},"blog/how-we-ended-up-using-bdd",[19474,19475,10083,19476,19477],"bdd","behaviour","driven","trust","It was not our primary goal to use Behaviour Driven Development (BDD) in the project at a customer, but while finding and optimizing our agile software development process we recognized that we established the building blocks of BDD. It works quite well and offers a lot of space and flexibility for our future plans, switching our architecture to microservices. The project setup But let us start at the beginning of the project.","yImgzxEzR7UHl6fIsRCGniHr2xISKHBeIlBhI5IqQOs",{"id":19481,"title":19482,"author":19483,"body":19484,"category":19573,"date":19574,"description":19575,"extension":617,"link":19576,"meta":19577,"navigation":499,"path":19578,"seo":19579,"slug":19580,"stem":19581,"tags":19582,"teaser":19583,"__hash__":19584},"blog/blog/kommunikation-im-realitaetscheck.md","Kommunikation im Realitätscheck",[10932],{"type":11,"value":19485,"toc":19568},[19486,19489,19492,19503,19506,19510,19513,19516,19519,19522,19526,19529,19532,19536,19539,19542],[14,19487,19482],{"id":19488},"kommunikation-im-realitätscheck",[18,19490,19491],{},"Kommunikation ist allgegenwärtig und findet zu jeder Zeit statt. Schon Paul Watzlawick formulierte 1969 das bekannte\nAxiom: “Man kann nicht nicht kommunizieren.” Er macht dadurch deutlich, dass sich die Kommunikation wie die Luft zum\nAtmen verhält – sie umgibt uns überall, ist unausweichlich und essentiell zum Leben. Jeden Tag aufs Neue, sowohl privat\nals auch beruflich, wird uns dieser Umstand bewusst. Doch was passiert mit der Kommunikation, wenn…",[5899,19493,19494,19497,19500],{},[580,19495,19496],{},"…sie nur noch als Mittel zum Zweck dient?",[580,19498,19499],{},"…die Beziehungsebene tabu ist und jegliche Interaktion zum alleinigen Austausch von Sachinformationen verkommt?",[580,19501,19502],{},"…für Konfliktpotentiale kein Raum zur Entfaltung bereit steht?",[18,19504,19505],{},"Eines ist sicher: dies hat Auswirkungen. Wie stark diese zum Teil sein können, soll das folgende Beispiel zeigen:",[3469,19507,19509],{"id":19508},"flug-173-von-portland-oregon","Flug 173 von Portland, Oregon",[18,19511,19512],{},"Melburn McBroom war ein launenhafter Chef. Seine Mitarbeiter fühlten sich durch ihn eingeschüchtert. Dieses angespannte\nVerhältnis zwischen Vorgesetzten und Mitarbeitern hätte in einem klassischen Betrieb wohl kaum spürbare Folgen.\nVermutlich wäre die Stimmung schlecht und die Produktivität würde leiden. Jedoch in der Situation von Melburn McBroom\nkam es 1978 in Portland, Oregon, zu einer Katastrophe. Denn McBroom war als einer der erfahrensten Flugkapitäne der\nUnited Airlines des Fluges 173 mit seiner ebenfalls erfahrenen Crew von New York nach Portland unterwegs. Zum Zeitpunkt\ndes Abflugs waren in der Douglas DC-8 189 Personen an Board. Beim Anflug des Zielflughafens in Oregon wurde im Flugzeug\nein lauter Schlag vernommen. Es folgten Vibrationen und Bewegungen um die vertikale Achse. Um dem Problem auf die Spur\ngehen zu können, wurde der Anflug vorerst abgebrochen. Die Crew fand derweilen bei der Ursachenforschung heraus, dass\nKomplikationen beim Ausfahren des rechten Fahrwerks aufgetreten waren. Denn eine grüne Kontrollleuchte hätte das\nkorrekte Ausfahren des rechten Fahrwerks im Cockpit bestätigen müssen. Während sich die Crew mit dem Tower darüber\nberaten hatte, welche Maßnahmen getroffen werden müssten, um das Problem mit dem Fahrwerk zu beheben, bemerkte die Crew,\ndass eine Landung wegen Treibstoffmangels unausweichlich werden würde. Daraufhin wurden die Passagiere auf eine\nNotlandung vorbereitet und der Landeanflug eingeleitet. Der Treibstoffmangel führte jedoch dazu, dass mehrere Turbinen\nausfielen und das Flugzeug nicht mehr in der Lage war die Landebahn zu erreichen. In letzter Konsequenz stürzte das\nFlugzeug in ein nahegelegenes Waldstück von Portland ab. Bei diesem Unglück starben 10 Menschen.",[18,19514,19515],{},"Im Anschluss an die Untersuchung des Unfallhergangs stellte sich heraus, dass der Mechanismus für das Einfahren des\nFahrwerks durch Korrosion beschädigt war. Aus Sicherheitsgründen wird bei solch einer Fehlfunktion ein Freifall des\nFahrwerks automatisch eingeleitet, um bei einer Landung zur Verfügung zu stehen. Dieser Freifall verursachte auch den\nlauten Schlag, der im Flugzeug gehört werden konnte. Unglücklicherweise ist dabei aber der Sensor beschädigt worden, der\nein grünes Aufleuchten der Kontrollleuchte zur Bestätigung des ausgefahrenen Fahrwerks im Cockpit dienen sollte. Die\nCrew ging somit davon aus, dass ihnen zur Landung das rechte Fahrwerk fehlen würde. Tatsächlich führte jedoch das\nausgefahrene Fahrwerk zu einem erhöhten Luftwiderstand, welcher den Treibstoffverbrauch stark ansteigen ließ. Weder das\nFahrwerk noch der Treibstoffverbrauch hätten zum Absturz führen müssen. Denn die Crew machte den Kapitän McBroom darauf\naufmerksam, dass der Treibstoff rapide abgenommen hatte. Dieser war jedoch so sehr vertieft, die Störung zu beheben,\ndass er auf die Ratschläge der Crew nicht reagierte. Die Crew konnte sich trotz erkanntem Risiko nicht gegen den\nlaunenhaften Kapitän durchsetzen.",[18,19517,19518],{},"Letztlich war der Absturz die Folge aus einer schlechten Zusammenarbeit, unter erschwerten Bedingungen, zwischen der\nCrew und dem Kapitän, nicht jedoch die technischen bzw. fliegerischen Fähigkeiten der Beteiligten. Die internationale\nLuftfahrt zog Konsequenzen aus diesem Unglück. Daraufhin wurde die Ausbildung für Flugkapitäne weitreichend verändert.\nEin neuer Standard, Crew Resource Management (CRM), wurde eingeführt. Hierbei liegt der Fokus auf die nicht-technischen\nFertigkeiten (Kooperation, Führungsverhalten, Entscheidungsfindung, Kommunikation) der gesamten Crew. Diese sollen\nverbessert werden, um Flugunfälle aufgrund menschlichen Versagens vorzubeugen.",[18,19520,19521],{},"Welche Lehren lassen sich aus diesem Beispiel für andere berufliche Kontexte ziehen?",[3469,19523,19525],{"id":19524},"lehren-aus-dem-flugzeugabsturz","Lehren aus dem Flugzeugabsturz",[18,19527,19528],{},"Aus beruflicher Sicht gehören Konflikte, Missverständnisse und Probleme zum normalen Alltag. Selten erfahren sie jedoch\nso eine dramatische Realitätsprüfung wie in dem obigen Beispiel. Die Auswirkung sind meist subtiler. Sie zeigen sich\nanfangs durch eine schlechte Stimmung oder fehlendes Engagement im Unternehmen. Mitarbeiter sind nicht mehr bereit\nzusätzliche Energie in die Arbeit zu investieren. Die Kompromissbereitschaft sinkt. Wird dafür kein Bewusstsein\ngeschaffen und in die Kommunikation gebracht, beginnt die Abwärtsspirale. Durch das fehlende Engagement geht die\nMotivation völlig verloren, es häufen sich Fehler und die Performance von Mitarbeitern und Teams nimmt ab. Werden auch\ndiese Warnsignale missachtet, könnten Kundenbeziehungen stark leiden, der Produktabsatz fallen und Mitarbeiter\nkündigen (Goleman 1997). Aber soweit muss es nicht kommen. Wie auch in der Geschichte vom Flug 173, lohnt es sich, wenn\ndie Kommunikation mehr in den Mittelpunkt rückt. Dies lässt sich zum Einen dadurch ermöglichen, dass Bewusstsein über\nKommunikation zu einem festen Bestandteil in Ausbildungen wird. Zum Anderen indem wichtige Aspekte der Kommunikation im\nberuflichen Alltag mehr Raum bekommen. Kommunikation lebt nicht nur durch den Austausch von Sachinformationen oder\nFakten. Jeder Kommunikation haftet eine Beziehungsebene an (Schulz von Thun 1981, Watzlawick 1969). Diese sagt etwas\nüber das Verhältnis zwischen zwei Menschen aus, wie sie zueinander stehen, was zwischen ihnen erlaubt ist und was nicht.\nIm täglichen Umgang steht jedoch der Sachinhalt im Vordergrund. Zahlreiche Meetings und Diskussionen finden über\nfachliche Themen statt. Die Beziehungsebene wird dabei oftmals ausgeblendet oder tabuisiert, obwohl sie immer Teil der\nKommunikation ist. Sie wird häufig als “der Elefant im Raum”, über den keiner sprechen will, wahrgenommen oder entlädt\nihre Energie in offenen Konflikten. Wird die Beziehungsebene jedoch als Teil der Kommunikation wertgeschätzt und in\ndiese integriert, kann dieser Zwickmühle begegnet werden. Am einfachsten, indem gezielt über die Beziehungsebene\ngesprochen wird. Hierfür kann ein regelmäßiges, moderiertes Meeting in Form von Metakommunikation oder einer\nRetrospektive nützlich sein. Die Sinnhaftigkeit ergibt sich aus den Inhalten: Konflikte klären und proaktiv die\nZusammenarbeit verbessern.",[18,19530,19531],{},"Dies ist eine Möglichkeit die Kommunikation im Unternehmen zu pflegen. Eine weitere ist mit einer kulturellen\nVeränderung verbunden. Hierfür bedarf es einer zusätzlichen Rolle im Unternehmen, die sich mit viel Begeisterung\nlangfristig für eine aktive Entwicklung zum offenen und ehrlichen Dialog einsetzt. Diese Rolle muss sich folglich um die\nMeetingkultur (respektvoller Umgang im gemeinsamen Dialog) kümmern, bei Konflikten unterstützen, ermutigen, Fehler als\nLernfelder wahrnehmen, Bewusstsein für unterschiedliche Bedürfnisse schaffen und ein Miteinander vorleben.",[3469,19533,19535],{"id":19534},"zu-guter-letzt","Zu guter Letzt…",[18,19537,19538],{},"Es gibt zahlreiche Wege dafür zu sorgen, dass Kommunikation nicht zum Mittel zum Zweck verkommt. Aus meiner Sicht führt\njedoch kein Weg daran vorbei, die Zusammenarbeit und Beziehungsebene regelmäßig zu reflektieren. Der kulturelle Wandel,\nder mit einer neuen Erfahrung durch ein offenes und ehrliches Miteinander einhergeht, benötigt seine Zeit. Während\ndieser Entwicklung empfehle ich, Mitarbeiter immer wieder einzuladen und zu ermutigen diese neue Erfahrung zu machen.\nDadurch kann es gelingen, dass neue Verhaltens- und Kommunikationsmuster entstehen, die ein sinnvolles Diskutieren auf\nder Beziehungsebene erlauben. Zum Abschluss möchte ich darauf hinweisen, dass keine dieser Möglichkeiten die Lösung\naller Probleme darstellt. Konflikte, Missverständnisse oder Probleme werden deswegen nicht ausbleiben. Aber der Umgang\nmiteinander wird menschlicher. Tief bleibende Verletzungen und innere Kündigungen können somit reduziert werden.",[18,19540,19541],{},"PS: Das CRM-Training ist mittlerweile gesetzlich vorgeschrieben und muss regelmäßig aufgefrischt werden. Das CRM kommt\nbereits auch außerhalb der Luftfahrt zum Einsatz, zum Beispiel in der Medizin um Behandlungsfehler zu vermeiden.\nBesonders betonen möchte ich den Umstand, dass bei der Mehrzahl der Unfalluntersuchungen von Flugzeugabstürzen\nfestgestellt wurde, dass meist nicht ein Mangel an fachlicher Kompetenz, sondern ein Mangel an sozialer Kompetenz\nvorherrschend war. Zitierte Quellen und weiterführende Literatur:",[577,19543,19544,19547,19555,19558,19561],{},[580,19545,19546],{},"Paul Watzlawick, Janet H. Beavin, Don D. Jackson: Menschliche Kommunikation – Formen, Störungen, Paradoxien. Huber,\nBern 1969 (12. unveränd. Aufl. 2011), ISBN 3456834578",[580,19548,19549,19550],{},"The Nation; When Moods Affect Safety: Communication in a Cockpit Means a Lot a Few Miles Up, The New York Times\n1994,",[585,19551,19554],{"href":19552,"rel":19553},"http://www.nytimes.com/1994/06/26/weekinreview/nation-when-moods-affect-safety-communication-cockpit-means-lot-few-miles-up.html",[589],"(http://www.nytimes.com/1994/06/26/weekinreview/nation-when-moods-affect-safety-communication-cockpit-means-lot-few-miles-up.html)",[580,19556,19557],{},"Daniel Goleman: EQ. Emotionale Intelligenz. Deutscher Taschenbuch Verlag 1997, ISBN 3-423-36020-8",[580,19559,19560],{},"Friedemann Schulz von Thun: Miteinander reden: Störungen und Klärungen. Psychologie der zwischenmenschlichen\nKommunikation. Rowohlt, Reinbek 1981, ISBN 3-499-17489-8.",[580,19562,19563,19564],{},"Informationen zum Crew Resource Management Training (CRM): ",[585,19565,19566],{"href":19566,"rel":19567},"http://www.crewresourcemanagement.net",[589],{"title":48,"searchDepth":86,"depth":86,"links":19569},[19570,19571,19572],{"id":19508,"depth":86,"text":19509},{"id":19524,"depth":86,"text":19525},{"id":19534,"depth":86,"text":19535},[614],"2017-07-28T14:19:08","Kommunikation ist allgegenwärtig und findet zu jeder Zeit statt. Schon Paul Watzlawick formulierte 1969 das bekannte\\nAxiom: “Man kann nicht nicht kommunizieren.” Er macht dadurch deutlich, dass sich die Kommunikation wie die Luft zum\\nAtmen verhält – sie umgibt uns überall, ist unausweichlich und essentiell zum Leben. Jeden Tag aufs Neue, sowohl privat\\nals auch beruflich, wird uns dieser Umstand bewusst. Doch was passiert mit der Kommunikation, wenn…","https://synyx.de/blog/kommunikation-im-realitaetscheck/",{},"/blog/kommunikation-im-realitaetscheck",{"title":19482,"description":19491},"kommunikation-im-realitaetscheck","blog/kommunikation-im-realitaetscheck",[],"Kommunikation ist allgegenwärtig und findet zu jeder Zeit statt. Schon Paul Watzlawick formulierte 1969 das bekannte Axiom: “Man kann nicht nicht kommunizieren.” Er macht dadurch deutlich, dass sich die Kommunikation wie die Luft zum Atmen verhält - sie umgibt uns überall, ist unausweichlich und essentiell zum Leben. Jeden Tag aufs Neue, sowohl privat als auch beruflich, wird uns dieser Umstand bewusst. Doch was passiert mit der Kommunikation, wenn… …sie nur noch als Mittel zum Zweck dient?","WujAolrUeRFdVjQz791dfVh3bHlZE7FPBDvMAmXAZSE",{"id":19586,"title":19587,"author":19588,"body":19589,"category":19702,"date":19703,"description":19596,"extension":617,"link":19704,"meta":19705,"navigation":499,"path":19706,"seo":19707,"slug":19593,"stem":19708,"tags":19709,"teaser":19710,"__hash__":19711},"blog/blog/decentralized-team-passwords-with-keepass-and-syncthing.md","Decentralized team passwords with Keepass and Syncthing",[12538],{"type":11,"value":19590,"toc":19696},[19591,19594,19597,19600,19603,19606,19626,19629,19633,19640,19649,19653,19660,19663,19666,19670,19677,19680,19686,19690,19693],[14,19592,19587],{"id":19593},"decentralized-team-passwords-with-keepass-and-syncthing",[18,19595,19596],{},"At synyx we constantly try to improve the quality of the work of the Operations team.",[18,19598,19599],{},"We found we were missing certain security requirements. Although we were already using ssh-key-authentication for all\nour linux-servers, we still had some devices and assets lying around, that were (only) accessible with the\nvendor-assigned default credentials.",[18,19601,19602],{},"Sadly it’s impossible to use key-authentication for all devices and some appliances don’t allow for creation of\nmultiple personalized accounts with admin rights. Sometimes it can also come in handy to have a user/password fallback\nin case you can’t access the machine with your ssh keys. Therefore we decided we could improve our security by replacing\nthe default credentials with strong passwords that won’t be reused. Since those passwords would have to be known to 7\npeople, we had to find a way to share them without the need to manually update everytime someone provided or changed any\ndata.",[18,19604,19605],{},"We evaluated multiple tools under certain criteria:",[577,19607,19608,19611,19614,19617,19620,19623],{},[580,19609,19610],{},"encrypted password container",[580,19612,19613],{},"automatic sync on updates from others",[580,19615,19616],{},"simple configuration",[580,19618,19619],{},"decentralized sharing (no single point of failure)",[580,19621,19622],{},"Open Source software preferred",[580,19624,19625],{},"run on Linux, MacOS and probably Windows",[18,19627,19628],{},"We came up with a solution involving a keepass2 password container and Syncthing, a decentralized file sync framework.",[649,19630,19632],{"id":19631},"keepass","Keepass",[18,19634,19635,19639],{},[585,19636,19632],{"href":19637,"rel":19638},"http://keepass.info",[589]," is an encrypted database for storing sensitive information like\nuser/password-credentials and notes.",[18,19641,19642,19643,19648],{},"We quickly figured that we’d have to use a keepass2-compatible container to allow usage on all required OSs. Debian and\nUbuntu offer official packages for keepass2, MacOS users can use ",[585,19644,19647],{"href":19645,"rel":19646},"https://github.com/keepassx/keepassx",[589],"keepassX",", a\nport also available for Debian/Ubuntu. Aside of the client choice we run a pretty “standard” container with a single\nmaster password known to all admins. As of today, keepass containers can be encrypted with a (single) key. Admins can be\ngiven this key instead or in addition to the master password. Make sure you never share the key with the container!",[649,19650,19652],{"id":19651},"syncthing","Syncthing",[18,19654,19655,19659],{},[585,19656,19652],{"href":19657,"rel":19658},"https://syncthing.net",[589]," is a tool that allows you to share and synchronize files with multiple devices that\nform a cluster. All traffic between devices is encrypted with TLS1.2. It is typically installed as a service on every\ndevice. You can add other devices by specific ID. Once a device comes online it broadcasts a discovery announcement\npackage on the local network (multicast on ipv6). Devices that have been “introduced by Device-ID” authenticate to\neach other to allow index comparison and possible updates. To allow for synchronization outside of the local network,\nits is possible to set up global device search through a discovery server. To relay actual traffic (syncing files) you\ncan setup a syncthing relay-server or use existing servers. It is also possible to run and connect to other syncthing\ndevices through SOCKS5 proxies.",[18,19661,19662],{},"Syncthing also allows you to keep a history of changes, so you have a fallback if someone accidently breaks the\ncontainer.",[18,19664,19665],{},"Devices can be configured to be an “introducer”. New devices added to an introducer get shared to the whole group of\nlinked devices. This prevents you from adding all new Device-IDs manually.",[649,19667,19669],{"id":19668},"our-setup","Our setup",[18,19671,19672,19673],{},"We manage syncthing and keepass installations through puppet, and also provision the admin cluster config with all the\nDevice-IDs automatically. There are two utility servers in the cluster that are always on to provide the share in case\nno admin laptop is reachable and someone misses updates. We also run an instance in the Datacenter in case an admin\nforgets his laptop ",[1794,19674],{"alt":19675,"src":19676},"trollface","https://synyx.de/assets/blog/trollface_logo.png",[18,19678,19679],{},"I tried to visualize the setup here, with every device being able to talk to every other device that has been added to\nthe cluster.",[18,19681,19682],{},[1794,19683],{"alt":19684,"src":19685},"relay and discovery servers Erklärung","https://media.synyx.de/uploads/2019/04/syncthing-768x407.png",[649,19687,19689],{"id":19688},"conclusions","Conclusions",[18,19691,19692],{},"The setup is really easy to create and test. Syncthing works out of the box and brings an easy-to-use web-GUI in case\nyou just want to test and not do any fancy configmanagement. It’s not only useful to share the keepass container but can\nalso be used to share any file that you want “offline” on your computer, like contingency plan documentation, cheat\nsheets and a cat pictures.",[18,19694,19695],{},"You should run syncthing in the background so your container gets updated immediately after someone changes something or\nadds new information. Everyone’s keepass app should be kept up to date to avoid version mismatches. You don’t have time\nto fix that during emergency when you need the container.",{"title":48,"searchDepth":86,"depth":86,"links":19697},[19698,19699,19700,19701],{"id":19631,"depth":126,"text":19632},{"id":19651,"depth":126,"text":19652},{"id":19668,"depth":126,"text":19669},{"id":19688,"depth":126,"text":19689},[9235,614],"2017-07-12T14:22:34","https://synyx.de/blog/decentralized-team-passwords-with-keepass-and-syncthing/",{},"/blog/decentralized-team-passwords-with-keepass-and-syncthing",{"title":19587,"description":19596},"blog/decentralized-team-passwords-with-keepass-and-syncthing",[],"At synyx we constantly try to improve the quality of the work of the Operations team. We found we were missing certain security requirements. Although we were already using ssh-key-authentication for all our linux-servers, we still had some devices and assets lying around, that were (only) accessible with the vendor-assigned default credentials. Sadly it’s impossible to use key-authentication for all devices and some appliances don’t allow for creation of multiple personalized accounts with admin rights.","nTgDYDlTDuKaa9v6JclHpy2buRG7rfQlVJteioy0LKs",{"id":19713,"title":19714,"author":19715,"body":19717,"category":19835,"date":19836,"description":19837,"extension":617,"link":19838,"meta":19839,"navigation":499,"path":19840,"seo":19841,"slug":19721,"stem":19842,"tags":19843,"teaser":19844,"__hash__":19845},"blog/blog/software-zum-anfassen-ein-nachmittag-in-der-ideenschmiede.md","Software zum Anfassen – Ein Nachmittag in der Ideenschmiede",[19716],"kraft",{"type":11,"value":19718,"toc":19833},[19719,19722,19725,19728,19731,19737,19743,19749,19752,19755,19758,19764,19770,19775,19778,19781,19786,19792,19797,19802,19805,19808,19813,19818,19827,19830],[14,19720,19714],{"id":19721},"software-zum-anfassen-ein-nachmittag-in-der-ideenschmiede",[18,19723,19724],{},"Am Mittwoch den 22. März durften wir bei synyx einen ganzen Bus voller Kunden zu einer Art internen Hausmesse begrüßen.\nWir hatten uns für diesen Tag vorgenommen, einmal ganz plastisch und “begreifbar” die Software-Entwicklung und die von\nuns für den Kunden realisierten Projekte zu zeigen.",[18,19726,19727],{},"Seit über 6 Jahren arbeiten wir nun schon für die Contargo GmbH & Co. KG als IT-Dienstleister. In dieser Zeit sind\ngemeinsam jede Menge Tools und Softwareprojekte entstanden, welche die tägliche Arbeit auf einem Container Terminal\nunterstützen. Es war nun an der Zeit all das nun einmal im großen Zusammenspiel und wirklich zum Anfassen zu zeigen.",[18,19729,19730],{},"Aufgeteilt in handliche Gruppen und mit einem persönlichen Betreuer versehen wurde bei uns im synyx Büro einmal ein\nkompletter Überblick der Contargo Softwarelösungen vorgestellt, an denen synyx mitarbeiten durfte. In sechs\nverschiendenen Stationen wurde viel gelacht und viele wissenswerte Informationen an die Frau bzw. an den Mann gebracht.",[18,19732,19733],{},[1794,19734],{"alt":19735,"src":19736},"Software zum Anfassen","https://media.synyx.de/uploads/2019/04/SWZA1.jpg",[18,19738,19739],{},[1794,19740],{"alt":19741,"src":19742},"Unterhaltung im Synyx Wohnzimmer","https://media.synyx.de/uploads/2019/04/SWZA2.jpg",[18,19744,19745],{},[1794,19746],{"alt":19747,"src":19748},"Billardecke Heiterkeit","https://media.synyx.de/uploads/2019/04/SWZA3.jpg",[18,19750,19751],{},"Man konnte den Ehrgeiz unserer Teams spüren, mit welchem sie Tag für Tag an Software für die Contargo arbeiten und es\ngab auf Seiten unserer Besucher auch den ein oder anderen AHA Effekt. Dieser Nachmittag hat sichtlich dazu beigetragen,\nein umfassenderes gegenseitiges Verständnis zwischen Kunde und Dienstleister zu erzeugen.",[18,19753,19754],{},"Beginnend mit der großen Contargo-System-Vision, also dem “Wo wollen wir hin?” wurden anhand eines riesigen über 6m\nlangen Plots die einzelnen Subsysteme dargestellt und die Verbindungen und Schnittstellen anhand der Prozesse\nvisualisiert. So konnte ein umfassendes “Big Picture” etabliert werden, welches danach anhand einzelner ausgewählten\nSysteme verfeinert wurde.",[18,19756,19757],{},"Da wir Software ausschliesslich mit agilen Entwicklungsmethodiken erstellen, war der logische nächste Stop ein kurzer\nVortrag über Agilität, die verschiedenen Projektrollen und wie das alles zusammenspielt in der täglichen Arbeit für die\nContargo.",[18,19759,19760],{},[1794,19761],{"alt":19762,"src":19763},"Logistik Modell","https://media.synyx.de/uploads/2019/04/SWZA5.jpg",[18,19765,19766],{},[1794,19767],{"alt":19768,"src":19769},"Contargo Terminal","https://media.synyx.de/uploads/2019/04/SWZA6.jpg",[18,19771,19772],{},[1794,19773],{"alt":19735,"src":19774},"https://media.synyx.de/uploads/2019/04/SWZA4.jpg",[18,19776,19777],{},"Im der dritten Session gab es dann auch endlich richtig was zum Anfassen. Hier wurde die Ankunft an einem Terminal\nsimuliert und die dann anlaufenden Prozesse und Arbeitsschritte visualisiert. Hier bekamen die Teilnehmer dann auch\neinen richtigen Container (im H0 Format) in die Hand und durften diesen Container über ein Self Checkin Terminal selbst\nanmelden.",[18,19779,19780],{},"In der vierten Session war dann unser Sahnestückchen des Nachmittags versteckt, das detailgetreu nachgebaute Cosynux\nContainer Terminal mit Zug- Binnenschiff- und LKW-Anbindung. Hier wurde der komplette Prozess der Anlieferung eines\nContainers über die Abholung eines leeren Containers bis hin zur Verladung auf ein Binnenschiff von Hand nachgespielt\nund dabei die Unterstützung des gesamten Ablaufes durch die Software präsentiert. Das Containerstapeln hat allen\nBeteiligten sichtlich Spaß gemacht und hier wurde auch sehr viel gelacht.",[18,19782,19783],{},[1794,19784],{"alt":19762,"src":19785},"https://media.synyx.de/uploads/2019/04/SWZA7.jpg",[18,19787,19788],{},[1794,19789],{"alt":19790,"src":19791},"Begutachtung Logistikmodell","https://media.synyx.de/uploads/2019/04/SWZA8.jpg",[18,19793,19794],{},[1794,19795],{"alt":19762,"src":19796},"https://media.synyx.de/uploads/2019/04/SWZA9.jpg",[18,19798,19799],{},[1794,19800],{"alt":19735,"src":19801},"https://media.synyx.de/uploads/2019/04/SWZA10-768x512.jpg",[18,19803,19804],{},"Nach einem kurzen Stop an unserem Billard-Tisch und unserer Diner-Ecke wurde dann das Contargo Real-Time Monitoring\neinzelner Produktivsysteme gezeigt. Das beeindruckende 6-Monitor Setup gibt nicht nur einen guten Überblick über alle\nwichtigen Kennwerte in Echtzeit, sondern erlaubt es auch, frühzeitig auf entstehende Probleme einzugehen und diese zu\nbeseitigen, bevor sie zu ernsten Problemen werden.",[18,19806,19807],{},"Weil Software nur Spaß macht, wenn sie nicht nur gut aussieht, sondern sich auch innovativ und umkompliziert bedienen\nlässt, ist UX Driven Design eine tolle Sache. Warum das auch die Contargo so sieht und wie alle Tools über einen\ngemeinschaftlichen Anwendungs-Rahmen zusammen passen wurde von unserem User-Experience Evangelist sehr anschaulich\nerläutert.",[18,19809,19810],{},[1794,19811],{"alt":19735,"src":19812},"https://media.synyx.de/uploads/2019/04/SWZA11.jpg",[18,19814,19815],{},[1794,19816],{"alt":19735,"src":19817},"https://media.synyx.de/uploads/2019/04/SWZA12.jpg",[18,19819,19820,19821,19826],{},"Die letzte Station befasste sich mit Routings und Preisfindung. Das von Contargo frei zur Verfügung gestellte\nIRIS ",[585,19822,19825],{"href":19823,"rel":19824},"https://github.com/Contargo/iris/",[589],"(https://github.com/Contargo/iris)"," findet den besten Weg für einen Container\nzu seinem Zielort. Ein flexibles Preismodell rundet das ganze ab, so dass am Ende des Weges nicht nur der Container beim\nKunden steht, sondern auch eine optimale Abrechnung gewähleistet ist.",[18,19828,19829],{},"Da es viele interessierte Rückfragen von den Besuchern gab, ging die ganze Präsentation ein wenig länger als geplant und\nam Ende waren auch alle ganz schön geschafft, aber glücklich. Wir synyxer, dass wir es geschafft haben, einen gut\nverständlichen Überblick über unsere Arbeitsweise zu bieten und die Contargianer, dass sie die Möglichkeit hatten, mal\nganz tief in die Entstehung Ihrer Software rein zu schauen.",[18,19831,19832],{},"Als Fazit bleibt ganz viel gegenseitiges Verständnis und ein gutes Gefühl, einen verlässichen Partner an der Seite zu\nhaben. Danke liebe Contargo und auf die nächsten sechs Jahre!",{"title":48,"searchDepth":86,"depth":86,"links":19834},[],[614],"2017-06-13T14:39:40","Am Mittwoch den 22. März durften wir bei synyx einen ganzen Bus voller Kunden zu einer Art internen Hausmesse begrüßen.\\nWir hatten uns für diesen Tag vorgenommen, einmal ganz plastisch und “begreifbar” die Software-Entwicklung und die von\\nuns für den Kunden realisierten Projekte zu zeigen.","https://synyx.de/blog/software-zum-anfassen-ein-nachmittag-in-der-ideenschmiede/",{},"/blog/software-zum-anfassen-ein-nachmittag-in-der-ideenschmiede",{"title":19714,"description":19724},"blog/software-zum-anfassen-ein-nachmittag-in-der-ideenschmiede",[],"Am Mittwoch den 22. März durften wir bei synyx einen ganzen Bus voller Kunden zu einer Art internen Hausmesse begrüßen. Wir hatten uns für diesen Tag vorgenommen, einmal ganz plastisch und “begreifbar” die Software-Entwicklung und die von uns für den Kunden realisierten Projekte zu zeigen.","NJYQCiEuvIJfcWnBSo5q11LVww-25N3MZgwhj4Vdvgs",{"id":19847,"title":19848,"author":19849,"body":19850,"category":20265,"date":20266,"description":20267,"extension":617,"link":20268,"meta":20269,"navigation":499,"path":20270,"seo":20271,"slug":19854,"stem":20272,"tags":20273,"teaser":20278,"__hash__":20279},"blog/blog/the-struggle-with-hazelcast-queue-persistence.md","The struggle with Hazelcast queue persistence",[3920],{"type":11,"value":19851,"toc":20252},[19852,19855,19858,19862,19865,19873,19876,19893,19908,19914,19918,19926,19929,19932,19936,19939,19942,20019,20023,20026,20029,20032,20035,20044,20048,20051,20062,20067,20070,20073,20077,20080,20166,20170,20173,20176,20179,20182,20186,20189,20192,20207,20210,20214,20217,20226,20230,20233,20236,20250],[14,19853,19848],{"id":19854},"the-struggle-with-hazelcast-queue-persistence",[18,19856,19857],{},"In this blog I will outline why we used Hazelcast for queueing messages in-memory distributed over a cluster and how we\nachieved higher resilience by persisting the queue’s content. I will explain the pitfalls and difficulties that we\nencountered and how I constantly switched between praising and condemning Hazelcast.",[3469,19859,19861],{"id":19860},"the-problem-to-solve","The problem to solve",[18,19863,19864],{},"I’m currently working in a project for a large customer data backend. The prod system consists of a load balanced\ncluster of five VMs each running two Tomcat instances hosting our application. The deployment process performs an A/B\nswitching between the Tomcats on each node to achieve zero downtime. The application has to handle a lot of incoming\ndata and updates and communicates with a lot of external services. At one point we felt the need for a queueing\nmechanism for two reasons:",[5899,19866,19867,19870],{},[580,19868,19869],{},"Enabling controlled asynchronous processing of tasks inside the application. Example: A synchronous user request\nqueues follow-up tasks to be processed later by another part of the application so the request can deliver the\nresponse quicker to the user.",[580,19871,19872],{},"Queueing and retrying failed calls to external systems for higher resilience",[18,19874,19875],{},"We gathered the following core requirements for the queueing mechanism:",[577,19877,19878,19881,19884,19887,19890],{},[580,19879,19880],{},"Embedded into the application. Using a potentially failing external system would defeat reason 2",[580,19882,19883],{},"Distributed over the cluster. Due to the nature of our data import mechanism one node creates a lot of tasks and the\ncluster should work together to process the tasks.",[580,19885,19886],{},"Resistant to system failure. The queued data is critical – so when one node or even the whole cluster goes down the\ndata should be preserved",[580,19888,19889],{},"Performance. Due to the amount of processed data the solution has to be fast.",[580,19891,19892],{},"Low complexity and easy maintainability. “Keep it simple” is a key ambition for everything that we use or build.",[18,19894,19895,19896,19901,19902,19907],{},"After a short evaluation phase these requirements led us to the conclusion that ",[585,19897,19900],{"href":19898,"rel":19899},"https://hazelcast.org/",[589],"Hazelcast","\nmight be the solution of our problem. It can be embedded as library, its core feature is distributed data structures\nlike maps and queues, it is known to be lightning fast and easy to use. Also it offers backup- and recovery mechanisms\nas well as the possibility to implement persistence for the data structures. And\nit’s ",[585,19903,19906],{"href":19904,"rel":19905},"https://github.com/hazelcast/hazelcast",[589],"open source",", yay!",[18,19909,19910],{},[1794,19911],{"alt":19912,"src":19913},"Logo hazelcast","https://media.synyx.de/uploads/2019/04/hazelcast_logo_small-768x185.png",[3469,19915,19917],{"id":19916},"the-easy-part-divide-and-queue","The easy part – divide and queue",[18,19919,19920,19921,19925],{},"The first implementation of the Hazelcast queue in our application was a piece of cake. Following\nthe ",[585,19922,16854],{"href":19923,"rel":19924},"http://docs.hazelcast.org/docs/3.8.2/manual/html-single/index.html",[589]," we only needed two dependencies\nin our pom.xml, some properties in our application config and one Spring config class and voilà: The distributed\nin-memory queue was ready to use in the code just like every other Java BlockingQueue implementation.",[18,19927,19928],{},"In the first tests we realized how great Hazelcast works. Every queued item was available on all nodes in an instant and\nwe could shut down and restart nodes at will without losing data. The only thing that was a bit trickier was to get\nHazelcast’s network configuration right so the cluster finds its nodes during an A/B deployment without adding nodes\nthat should NOT belong to the cluster.",[18,19930,19931],{},"I will not go into detail on this “easy part” because this blog post should concentrate on the difficulties. All in all\nwe were in awe of Hazelcast’s smoothness at this point.",[3469,19933,19935],{"id":19934},"the-hard-part-persist-the-shit-out-of-it","The hard part – persist the shit out of it",[18,19937,19938],{},"So far, so good. We already managed to meet 90% of our requirements. The last 10% should’t be that difficult, right?\nPfffff let’s just do it!",[18,19940,19941],{},"We wanted to make the data resilient against the improbable event of an outage of the whole cluster. So the data in the\ncluster should be backed up in some kind of persistence and be recovered when the cluster reboots. Hazelcast offers an\nabstract solution for this problem, namely the QueueStore interface. You can implement the interface with every\npersisting technology that you want, add some configuration and all queued data will be mirrored into the data store and\nbe recovered after an eventual downtime.",[43,19943,19945],{"className":288,"code":19944,"language":290,"meta":48,"style":48},"public interface QueueStore\u003CT> {\n\n void store(Long key, T value);\n\n void storeAll(Map\u003CLong, T> map);\n\n void delete(Long key);\n\n void deleteAll(Collection\u003CLong> keys);\n\n T load(Long key);\n\n Map\u003CLong, T> loadAll(Collection\u003CLong> keys);\n\n Set\u003CLong> loadAllKeys();\n}\n",[50,19946,19947,19952,19956,19961,19965,19970,19974,19979,19983,19988,19992,19997,20001,20006,20010,20015],{"__ignoreMap":48},[53,19948,19949],{"class":55,"line":56},[53,19950,19951],{},"public interface QueueStore\u003CT> {\n",[53,19953,19954],{"class":55,"line":86},[53,19955,500],{"emptyLinePlaceholder":499},[53,19957,19958],{"class":55,"line":126},[53,19959,19960],{}," void store(Long key, T value);\n",[53,19962,19963],{"class":55,"line":163},[53,19964,500],{"emptyLinePlaceholder":499},[53,19966,19967],{"class":55,"line":186},[53,19968,19969],{}," void storeAll(Map\u003CLong, T> map);\n",[53,19971,19972],{"class":55,"line":221},[53,19973,500],{"emptyLinePlaceholder":499},[53,19975,19976],{"class":55,"line":242},[53,19977,19978],{}," void delete(Long key);\n",[53,19980,19981],{"class":55,"line":273},[53,19982,500],{"emptyLinePlaceholder":499},[53,19984,19985],{"class":55,"line":279},[53,19986,19987],{}," void deleteAll(Collection\u003CLong> keys);\n",[53,19989,19990],{"class":55,"line":496},[53,19991,500],{"emptyLinePlaceholder":499},[53,19993,19994],{"class":55,"line":503},[53,19995,19996],{}," T load(Long key);\n",[53,19998,19999],{"class":55,"line":509},[53,20000,500],{"emptyLinePlaceholder":499},[53,20002,20003],{"class":55,"line":515},[53,20004,20005],{}," Map\u003CLong, T> loadAll(Collection\u003CLong> keys);\n",[53,20007,20008],{"class":55,"line":521},[53,20009,500],{"emptyLinePlaceholder":499},[53,20011,20012],{"class":55,"line":527},[53,20013,20014],{}," Set\u003CLong> loadAllKeys();\n",[53,20016,20017],{"class":55,"line":533},[53,20018,282],{},[649,20020,20022],{"id":20021},"difficulty-1-how-to-persist","Difficulty #1: How to persist?",[18,20024,20025],{},"After the initial euphoria it began to dawn on us that implementing the Queue Store interface obviously meant choosing\nsome technology to persist data (d’uh). Unfortunately Hazelcast does not offer some kind of default implementation that\nyou just roll with if you want to try it out.",[18,20027,20028],{},"Well ok, how about our database? We did not want to do that at this time. We expected it to be slow and our project has\na history of database-managed queues that didn’t work that well.",[18,20030,20031],{},"The next thing that came in mind was the file system of our application servers. This actually seemed like a viable\nsolution as the queue entries passed to the QueueStore interface are in key-value format and there already are several\nlibraries providing a file-based key-value store.",[18,20033,20034],{},"So the evaluation train departed again and passed several solutions capable of storing key-value pairs in files like\nBerkeley DB, Map DB, Banana DB(!?) and some others.",[18,20036,20037,20038,20043],{},"In the end the train stopped at ",[585,20039,20042],{"href":20040,"rel":20041},"https://github.com/OpenHFT/Chronicle-Map",[589],"ChronicleMap",", an off-heap in-memory map\nthat is mirrored to a file and promises consistency and insane speed. The embedded library is developed by a team of\nprofessionals and supports file access by multiple JVM instances at the same time, which is crucial for our A/B\ndeployment. Long story short: We implemented the ChronicleMap QueueStore and the first local tests delivered the desired\nresults: A Hazelcast cluster with a huge amount of queued data got shutdown completely and restarted again and the data\nwas still there!",[649,20045,20047],{"id":20046},"obstacle-2-i-am-the-persistence-master","Obstacle #2: I am the persistence Master!",[18,20049,20050],{},"The first test on a production-like system with a cluster of multiple VMs seemed promising. After every simulated\ncluster downtime the data was still there. But looking closely at the files written by ChronicleMap we noticed a strange\nthing. Only on one node of the cluster the file size changed, on the other nodes the files got created but stayed on the\nsame size of only a few KB. What was the meaning of this? Why are not all nodes backing up their data? And how was it\npossible for them to recover their data without the file backup?",[18,20052,20053,20054,20057,20058,20061],{},"After some more research we discovered a sentence in the Hazelcast documentation of the ",[27,20055,20056],{},"map"," persistence that was\nmissing in the documentation of the ",[27,20059,20060],{},"queue"," persistence. It says:",[6653,20063,20064],{},[18,20065,20066],{},"NOTE: Data store needs to be a centralized system that is accessible from all Hazelcast members. Persistence to a\nlocal file system is not supported.",[18,20068,20069],{},"Aaaahrgs! That explained the observed behavior! The cluster assumes that all nodes access the same data store and\ndetermines one node to be some kind of persistence master that writes and reads all data from the store for the whole\ncluster! Further tests showed that it seems pretty unpredictable which node becomes the persistence master. If the nodes\nare not restarted in exactly the same order after every deployment it could happen that a different node is assigned\npersistence master and does not recover the data from the previous persistence master. The data would be lost – even\nwithout a cluster downtime. To prevent this we had to provide a centralized data store!",[18,20071,20072],{},"The situation was not critical as the persistence implementation had not been merged to master yet – but admittedly we\nwere in some kind of frustration mode at that point and the first reflex was to centralize the ChroniclaMap file so we\ndid not have to change the implementation again. After hard negotiations our ops team grudgingly provided us with a test\nsystem of multiple VMs all accessing the same file on a NFS share. As expected it worked, but it didn’t feel right. We\ndecided to run a long term test with production-like data and to decide afterwards if the solution is good enough to be\nrolled out on production.",[649,20074,20076],{"id":20075},"stumbling-block-3-configuring-the-queuestore","Stumbling block #3: Configuring the QueueStore",[18,20078,20079],{},"This was only a minor issue but it added up with the uneasy mood that we had about our solution at that point. The\nHazelcast queue is configured programmatically via a Spring Configuration Class. During our development we noticed that\nneither of our configuration changes to the queue persistence seemed to have any effect. It turned out that the\nQueueStore only accepts strings as configuration parameters which it not obvious at the first glance when using a\njava.util.Properties object to pass the properties, which accepts Object as type.",[43,20081,20083],{"className":288,"code":20082,"language":290,"meta":48,"style":48},"// no Strings - does not work\nQueueStoreConfig queueStoreConfig = new QueueStoreConfig();\nqueueStoreConfig.setEnabled(true);\nProperties properties = new Properties();\nproperties.put(\"binary\", true);\nproperties.put(\"memory-limit\", 0);\nproperties.put(\"bulk-load\", 4L);\nqueueStoreConfig.setProperties(properties);\nqueueStoreConfig.setStoreImplementation(new ChronicleMapQueueStore());\n\n// Strings - does work\nQueueStoreConfig queueStoreConfig = new QueueStoreConfig();\nqueueStoreConfig.setEnabled(true);\nqueueStoreConfig.setProperty(\"binary\", \"false\");\nqueueStoreConfig.setProperty(\"memory-limit\", \"0\");\nqueueStoreConfig.setProperty(\"bulk-load\", \"4\");\nqueueStoreConfig.setStoreImplementation(new ChronicleMapQueueStore());\n",[50,20084,20085,20090,20095,20100,20105,20110,20115,20120,20125,20130,20134,20139,20143,20147,20152,20157,20162],{"__ignoreMap":48},[53,20086,20087],{"class":55,"line":56},[53,20088,20089],{},"// no Strings - does not work\n",[53,20091,20092],{"class":55,"line":86},[53,20093,20094],{},"QueueStoreConfig queueStoreConfig = new QueueStoreConfig();\n",[53,20096,20097],{"class":55,"line":126},[53,20098,20099],{},"queueStoreConfig.setEnabled(true);\n",[53,20101,20102],{"class":55,"line":163},[53,20103,20104],{},"Properties properties = new Properties();\n",[53,20106,20107],{"class":55,"line":186},[53,20108,20109],{},"properties.put(\"binary\", true);\n",[53,20111,20112],{"class":55,"line":221},[53,20113,20114],{},"properties.put(\"memory-limit\", 0);\n",[53,20116,20117],{"class":55,"line":242},[53,20118,20119],{},"properties.put(\"bulk-load\", 4L);\n",[53,20121,20122],{"class":55,"line":273},[53,20123,20124],{},"queueStoreConfig.setProperties(properties);\n",[53,20126,20127],{"class":55,"line":279},[53,20128,20129],{},"queueStoreConfig.setStoreImplementation(new ChronicleMapQueueStore());\n",[53,20131,20132],{"class":55,"line":496},[53,20133,500],{"emptyLinePlaceholder":499},[53,20135,20136],{"class":55,"line":503},[53,20137,20138],{},"// Strings - does work\n",[53,20140,20141],{"class":55,"line":509},[53,20142,20094],{},[53,20144,20145],{"class":55,"line":515},[53,20146,20099],{},[53,20148,20149],{"class":55,"line":521},[53,20150,20151],{},"queueStoreConfig.setProperty(\"binary\", \"false\");\n",[53,20153,20154],{"class":55,"line":527},[53,20155,20156],{},"queueStoreConfig.setProperty(\"memory-limit\", \"0\");\n",[53,20158,20159],{"class":55,"line":533},[53,20160,20161],{},"queueStoreConfig.setProperty(\"bulk-load\", \"4\");\n",[53,20163,20164],{"class":55,"line":539},[53,20165,20129],{},[649,20167,20169],{"id":20168},"anxiety-4-no-transactions-obviously","Anxiety #4: No transactions – obviously",[18,20171,20172],{},"After testing our solution for a while, more and more scenarios of potential data loss popped into our mind. We’ve been\naware that neither Hazelcast nor ChronicleMap offer some kind of real transactions when writing to the file.\nTheoretically the persistence master could be killed off during a write operation and the file could be left in an\ninconsistent state. We tested this scenario with a manually corrupted file and it resulted in the unpleasant situation\nthat the ChronicleMap Spring bean could not be initialized, preventing the creation of the Spring ApplicationContext and\nconsequentially stopping the application startup – not good.",[18,20174,20175],{},"To feel safe about our solution we needed a transactional, central data store. Captain Obvious knocked on the door and\nsaid “Helloooo? Database?”.",[18,20177,20178],{},"We reconsidered this option again. The database is transactional, it is centralized and it does not count as external\nsystem because it is so essential for our application that when the database is down, the application is down anyway. It\nstill wouldn’t be a database managed queue because the queue still lies in-memory and the queueing mechanism is managed\nby Hazelcast. The database would be just a backup. Of course performance would be a potential issue but we were ready to\ngive it a try.",[18,20180,20181],{},"So finally we decided to change the QueueStore implementation to persist to a key-value table into our database.",[649,20183,20185],{"id":20184},"wtf-5-its-a-real-bug","WTF #5: It’s a real bug!",[18,20187,20188],{},"Feeling better with this persistence approach we pushed closer to a production release of the feature. But suddenly we\nhad massive performance difficulties with production-like data. Reading 1000 entries from the queue took several\nminutes! Was it the fault of the database? Was it really that slow?",[18,20190,20191],{},"After extensive analysis we found out that as a matter of fact it was a bug in the otherwise really robust and stable\nHazelcast. When using the drainTo(numberOfEntries) method to get data from the queue the data should be loaded from the\npersisted data in bulks of a configurable size calling the QueueStore.loadAll(listOfEntries) method once for every bulk.\nInstead loadAll() got called once for the first bulk and then once for every single following item, resulting in almost\nthe same number of database calls as the number of requested items.",[18,20193,20194,20195,20200,20201,20206],{},"I recently opened an ",[585,20196,20199],{"href":20197,"rel":20198},"https://github.com/hazelcast/hazelcast/issues/10621",[589],"issue"," for the bug including a\nsmall ",[585,20202,20205],{"href":20203,"rel":20204},"https://github.com/indyarni/hazelcastbugdemo",[589],"demo project",". The Hazelcast team reacted on the same day promising\nto fix it. One week later the issue was fixed and the fix to be released in the next version 3.9! Kudos to the\nHazelcast developers!",[18,20208,20209],{},"Until we are able to use 3.9 we solved the problem with a temporary workaround, setting the bulk size the same as the\nnumber of drained entries, resulting in only one bulk loaded at a time and only one database call per drain.",[649,20211,20213],{"id":20212},"_6-going-prod-finally-successful","(╯°□°)╯︵ ┻━┻ #6: Going Prod – finally successful?",[18,20215,20216],{},"Having cleared this last issue and experiencing no further problems or data loss on the test system for weeks we felt\nconfident to merge the persistence solution to master and go live with it. After the release we were relieved to see\nthat it just worked! Seemingly no problems, no data loss, no performance problems – the application became a lot faster\nand more resilient.",[18,20218,20219,20220,20225],{},"And here comes the “but”: But we sometimes still observe some (5-10) lost items from the in-memory queue after\nperforming a deployment on the cluster. That means that Hazelcast unexpectedly is not always able to synchronize the\ncluster in time when our deployment performs the A/B switch on one node after another. It is not a critical problem\nbecause the lost items can be manually recovered from the database but obviously we still intend to fix this issue. The\ncause is possibly ",[585,20221,20224],{"href":20222,"rel":20223},"https://github.com/hazelcast/hazelcast/issues/5444",[589],"this issue"," that has been fixed in Hazelcast\n3.7. Problem is, we rolled out 3.6.3 on production which is incompatible with 3.7 and newer versions, which means\nto update Hazelcast we would need a cluster downtime…. AAAAAHRG – the story continues 🙂",[3469,20227,20229],{"id":20228},"final-words","Final words",[18,20231,20232],{},"Those were only the most dominant of the many challenges we encountered while implementing this solution. Others were\ne.g. problems with Spring transaction handling when Hazelcast internally opened new threads to call the persistence\ninterface, analyzing different causes of data loss, etc, etc….",[18,20234,20235],{},"After this Odyssey we can draw some conclusions:",[577,20237,20238,20241,20244,20247],{},[580,20239,20240],{},"Hazelcast is a great tool! It’s fun to work with, the core features work reaaaally well and I would use it again.",[580,20242,20243],{},"However the non-core functionalities (like queue persistence) require some effort to get them working in a complex\nenvironment.",[580,20245,20246],{},"When using a new tool you should read the documentation carefully and try to understand how it really works!",[580,20248,20249],{},"If you really want to understand how Hazelcast works it’s not enough to read the documentation carefully 😉",[607,20251,989],{},{"title":48,"searchDepth":86,"depth":86,"links":20253},[20254,20255,20256,20264],{"id":19860,"depth":86,"text":19861},{"id":19916,"depth":86,"text":19917},{"id":19934,"depth":86,"text":19935,"children":20257},[20258,20259,20260,20261,20262,20263],{"id":20021,"depth":126,"text":20022},{"id":20046,"depth":126,"text":20047},{"id":20075,"depth":126,"text":20076},{"id":20168,"depth":126,"text":20169},{"id":20184,"depth":126,"text":20185},{"id":20212,"depth":126,"text":20213},{"id":20228,"depth":86,"text":20229},[613,614],"2017-06-09T14:50:15","In this blog I will outline why we used Hazelcast for queueing messages in-memory distributed over a cluster and how we\\nachieved higher resilience by persisting the queue’s content. I will explain the pitfalls and difficulties that we\\nencountered and how I constantly switched between praising and condemning Hazelcast.","https://synyx.de/blog/the-struggle-with-hazelcast-queue-persistence/",{},"/blog/the-struggle-with-hazelcast-queue-persistence",{"title":19848,"description":19857},"blog/the-struggle-with-hazelcast-queue-persistence",[20274,20275,20276,20277],"cluster","hazelcast","persistence","resilience","In this blog I will outline why we used Hazelcast for queueing messages in-memory distributed over a cluster and how we achieved higher resilience by persisting the queue’s content. I will explain the pitfalls and difficulties that we encountered and how I constantly switched between praising and condemning Hazelcast. The problem to solve I’m currently working in a project for a large customer data backend. The prod system consists of a load balanced cluster of five VMs each running two Tomcat instances hosting our application.","qoLs1ff6I5-z82eh57RtHIy3wXq0OEZ5qLCROZHwoyo",{"id":20281,"title":20282,"author":20283,"body":20284,"category":20356,"date":20357,"description":20358,"extension":617,"link":20359,"meta":20360,"navigation":499,"path":20361,"seo":20362,"slug":20288,"stem":20363,"tags":20364,"teaser":20365,"__hash__":20366},"blog/blog/karlsruher-entwicklertage-2017-conference-day.md","Karlsruher Entwicklertage 2017 – Conference Day",[12538],{"type":11,"value":20285,"toc":20347},[20286,20289,20292,20295,20299,20302,20306,20309,20313,20316,20320,20323,20327,20330,20334,20337,20341,20344],[14,20287,20282],{"id":20288},"karlsruher-entwicklertage-2017-conference-day",[18,20290,20291],{},"Am 22.5. habe ich zum ersten Mal die Karlsruher Entwicklertage besucht. Insgesamt war die Veranstaltung gut\norganisiert, man bekam schnell und unkompliziert seine Badge und die obligatorische Info-Tüte. Es gab eine große\nAuswahl an verschiedenen Talks, die auf 6 parallele Tracks aufgeteilt waren. Die einzelnen Tracks wurden unter anderem\nvon einigen Usergroups wie z.B. der Java Usergroup, der .NET-Usergroup und dem lokalen OWASP-Chapter organisiert.\nDanke an die ehrenamtlichen Helfer für das Engageme",[18,20293,20294],{},"Hier meine Eindrücke der Talks, die ich besucht habe:",[649,20296,20298],{"id":20297},"sinn-und-nutzen-von-restful-hypermedia-apis","Sinn und Nutzen von RESTful-Hypermedia-APIs",[18,20300,20301],{},"Kai Tödter gab in seiner Keynote eine Einführung in REST und Hypermedia, und stellte verschiedene Frameworks vor, mit\nderen Hilfe entsprechende Schnittstellen in Java und .NET implementiert werden können. Die Ausrichtung war sehr\ndetailliert und technisch, mehr ein kompletter Vortrag als eine Keynote. Obwohl ich bei synyx schon mit Hypermedia und\nSpring HATEOAS in Berührung gekommen bin, war es interessant einige Grundlagen und Architektur-Überlegungen zu sehen.",[649,20303,20305],{"id":20304},"ops-for-developers-monitoring-mit-prometheus-für-java-entwickler","Ops for Developers – Monitoring mit Prometheus für Java Entwickler",[18,20307,20308],{},"Trotz meiner Vorerfahrung mit InfluxDB, Prometheus und Grafana ist es für mich immer ein Zugewinn, neue Talks zum Thema\nMonitoring und Metriken zu hören. Nach einer kurzen Einführung zeigte Alexander Schwarz an einfachen Beispielen, wie man\nin verschiedenen Frameworks Metric-Endpoints bereitstellen kann, um sie mit Prometheus zu scrapen. Zusätzlich erklärte\ner wie man entsprechende Auswertungen in Prometheus bzw. passende Dashboards mit Grafana erzeugen kann, um Schlüsse über\nAuslastung und Laufzeitdaten aus seiner Anwendung zu ziehen.",[649,20310,20312],{"id":20311},"security-requirements-im-software-development-lifecycle","Security Requirements im Software Development Lifecycle",[18,20314,20315],{},"Daniel Kefer und René Reuter stellten ihr Tool SecurityRat (Security Requirement Automation Tool) vor, das unter anderem\nauch als OWASP-Projekt anerkannt und unterstützt wird. Mit SecurityRat lassen sich Security-Requirements auf laufende\nund neue Software-Projekte abbilden. Aus einem Katalog von Requirements werden durch die Auswahl bestimmter Kriterien\nsicherheitsrelevante Tasks und TODOs vorgeschlagen und lassen sich automatisch als JIRA-Tickets in der entsprechenden\nSW-Projekt-Queue abbilden. Im Vordergrund steht hier die Zeitersparnis, da in viele Firmen die\nSecurity-Verantwortlichen für mehrere Projekte verantwortlich sind. Durch die Abstraktion von Standardarbeiten wie dem\nAnlegen von Tickets und dem Erstellen von Checklisten werden diese entlastet. Im weiteren gaben sie einen Ausblick auf\nihr neues Tool SecurityCat (Security Compliance and Automated Testing), das als Teil der Continuous Integration\nToolchain Sicherheitstests durchführen soll.",[649,20317,20319],{"id":20318},"security-baselines-für-web-applikationen-in-der-praxis-oder-wieviel-sicherheit-darfs-denn-sein","Security Baselines für Web-Applikationen in der Praxis oder: „Wieviel Sicherheit darf’s denn sein?“",[18,20321,20322],{},"Ingo Hanke zeigte die Schwierigkeit auf, Kunden einen Mindeststandard an IT-Sicherheit als Teil der Dienstleistung zu\nverkaufen. Zentrales Argument war es, eine nachhaltige Lösung und Verbesserung für den Kunden zu schaffen. Da die\nBSI-Empfehlungen für die Basissicherheit in Unternehmen für viele Kleinunternehmer seiner Meinung nach nicht machbar\nsind, erklärte er, welche Grundsicherungsmaßnahmen er empfiehlt und mit den Kunden eruiert. Er verwendet hierzu eine Art\nBaukastenprinzip, um Gefahrenquellen in den Unternehmen zu evaluieren und entsprechende Maßnahmen anzubieten. Seiner\nErfahrung nach haben viele Firmen keine Vorstellung und Vorkehrungen im Bereich IT-Sicherheit und können hier durch\ngeringen Aufwand großen Nutzen erzielen. Aus seinem Talk gingen u.a. die Empfehlung hervor, mit neuen Kunden einen\n2-stündigen Workshop zu machen, bei dem unbedingt ein Entscheider dabeisein sollte. Zusätzlich empfiehlt er der\nSoftware-Branche, Sicherheitsmaßnahmen in ihren Dienstleistungen einzupreisen und im Zweifelsfall auf Billig-Projekte\nzu verzichten.",[649,20324,20326],{"id":20325},"sicher-in-die-cloud-mit-angular-2-und-spring-boot","Sicher in die Cloud mit Angular 2 und Spring Boot",[18,20328,20329],{},"Andreas Falk zeigte in einem sehr beispiellastigen Vortrag die Gefahren bzw. Anfälligkeiten von modernen\nWebapplikationen am Beispiel von Angular2 als Frontend mit Springboot im Backend. Themen waren hier unter anderem die\nverschiedenen Schnittstellen, die das jeweilige Framework anbietet, und wie die implizite Absicherung z.b. in Angular2\ngegen Angriffe wie Cross-Site-Scripting (XSS) und Cross-Site-Request-Forgery (CSRF) funktioniert. Der Vortrag\norientierte sich am OWASP Top10 Projekt (Version 2017 RC1). Andreas erklärte anschaulich, welche Implikationen die in\nder Top10 aufgeführten Risiken mit sich bringen.",[649,20331,20333],{"id":20332},"löschen-löschen-löschen","Löschen? Löschen. Löschen!",[18,20335,20336],{},"Volker Hammer referierte über Datenschutz und die notwendigen Pflichten von Service-Anbietern bei der Datenhaltung und\n-Vernichtung. Am Beispiel von TollCollect wurde gezeigt, welche Aufwände anfallen können, bis ein Standard entwickelt\nwerden kann, der als DIN-Norm anerkannt wird. In einem Konglomerat aus mehreren großen deutschen Firmen ist in 11\nJahren die DIN 66398 “Leitlinie zur Entwicklung eines Löschkonzepts mit Ableitung von Löschfristen für personenbezogene\nDaten“ entstanden. Neben der Beschreibung waren hier auch die Erkenntnisse interessant, die man bei der Erstellung der\nNorm und dem Festlegen der Löschkonzepte erkannt hat, u.a. die Vereinfachung der Datenhaltung und -Sicherung.",[649,20338,20340],{"id":20339},"keynote-software-engineering-the-roots","Keynote: Software Engineering – the roots",[18,20342,20343],{},"In der Abschluss-Keynote sprach Fath Al-Fatish über die Aufwände in der Softwareentwicklung, die zu über 50% in der\nWartung liegen und beklagte die mangelnde Aus- und Weiterbildung der Softwareentwickler. Auf spassige Art erklärte er\ndie Problematik in der Aussensicht der Branche aufgrund von fehlendem Verständniss und Interesse an Nachhaltigkeit. In\nseinem Beitrag verwies er auf Arbeitsweisen und Verbesserungspotential. Innerlich habe ich mich an dieser Stelle leider\ngefragt, was in vielen anderen Betrieben schiefgeht, und habe mich hier bei allen Argumenten und Lösungsvorschlägen\ninnerlich gefreut , da ich alles positive bei synyx wiederfinde.",[18,20345,20346],{},"Insgesamt eine empfehlenswerte Konferenz, nicht mein letzter Besuch!",{"title":48,"searchDepth":86,"depth":86,"links":20348},[20349,20350,20351,20352,20353,20354,20355],{"id":20297,"depth":126,"text":20298},{"id":20304,"depth":126,"text":20305},{"id":20311,"depth":126,"text":20312},{"id":20318,"depth":126,"text":20319},{"id":20325,"depth":126,"text":20326},{"id":20332,"depth":126,"text":20333},{"id":20339,"depth":126,"text":20340},[613,614],"2017-05-23T14:57:28","Am 22.5. habe ich zum ersten Mal die Karlsruher Entwicklertage besucht. Insgesamt war die Veranstaltung gut\\norganisiert, man bekam schnell und unkompliziert seine Badge und die obligatorische Info-Tüte. Es gab eine große\\nAuswahl an verschiedenen Talks, die auf 6 parallele Tracks aufgeteilt waren. Die einzelnen Tracks wurden unter anderem\\nvon einigen Usergroups wie z.B. der Java Usergroup, der .NET-Usergroup und dem lokalen OWASP-Chapter organisiert.\\nDanke an die ehrenamtlichen Helfer für das Engageme","https://synyx.de/blog/karlsruher-entwicklertage-2017-conference-day/",{},"/blog/karlsruher-entwicklertage-2017-conference-day",{"title":20282,"description":20291},"blog/karlsruher-entwicklertage-2017-conference-day",[],"Am 22.5. habe ich zum ersten Mal die Karlsruher Entwicklertage besucht. Insgesamt war die Veranstaltung gut organisiert, man bekam schnell und unkompliziert seine Badge und die obligatorische Info-Tüte. Es gab eine große Auswahl an verschiedenen Talks, die auf 6 parallele Tracks aufgeteilt waren. Die einzelnen Tracks wurden unter anderem von einigen Usergroups wie z.B. der Java Usergroup, der .NET-Usergroup und dem lokalen OWASP-Chapter organisiert. Danke an die ehrenamtlichen Helfer für das Engageme","yL6rqaMobpSi3DAnvXOcesuCqY6XUSrTSNz27zUGzfg",{"id":20368,"title":20369,"author":20370,"body":20371,"category":20524,"date":20525,"description":48,"extension":617,"link":20526,"meta":20527,"navigation":499,"path":20528,"seo":20529,"slug":20530,"stem":20531,"tags":20532,"teaser":20535,"__hash__":20536},"blog/blog/von-profis-lernen-heisst-siegen-lernen.md","Von Profis lernen heißt siegen lernen",[6623,19049],{"type":11,"value":20372,"toc":20515},[20373,20376,20398,20401,20414,20417,20420,20424,20427,20430,20434,20437,20440,20444,20447,20450,20453,20457,20460,20463,20467,20470,20476,20479,20483,20486,20489,20493,20496,20501,20504,20509,20512],[14,20374,20369],{"id":20375},"von-profis-lernen-heißt-siegen-lernen",[6653,20377,20378,20383,20388,20393],{},[18,20379,20380],{},[573,20381,20382],{},"Der nächste Sprint steht an… Wir treffen uns am Dienstag Morgen um 10:00 Uhr zum Refinement. Es gilt noch einige\nThemen fachlich genauer zu hinterfragen. Auch technische Grundlagen müssen noch geklärt werden.",[18,20384,20385],{},[573,20386,20387],{},"Abends geht’s zum Fußballtraining. Der Trainer hält erst einmal einen 15 minütigen Vortrag über das letzte Spiel am\nSonntag. Dann fängt er auch noch an über das nächste Spiel zu reden wie wichtig das sei… Ich will doch nur kicken.\nVerteil endlich die Leibchen!",[18,20389,20390],{},[573,20391,20392],{},"Mittwoch morgen unter der Dusche gehe ich nochmal die technischen Themen des Refinements durch. Mir fällt auf, dass\nunser Ansatz wohl nur bedingt funktioniert und habe eine alternative Idee. Glück gehabt… Man wär das ärgerlich gewesen\ndas erst zu bemerken, nachdem ein Tag Entwicklung investiert wurde. Im Büro angekommen setze ich mir erst einmal eine\nTimebox von einer Stunde und evaluiere eine Bibliothek.",[18,20394,20395],{},[573,20396,20397],{},"Donnerstag dann wieder Fußballtraining. Der Trainer kommt später. Steckt noch im Stau bekomme ich in der Kabine\ngesagt. Wir krallen uns die Bälle, legen sie auf die Strafraumlinie und ballern das Runde ins Eckige. Als der Trainer\ndann kommt machen wir zum Aufwärmen wieder dieses Passspiel-Laufweg-Dingens. Als ob das was bringen würde.",[18,20399,20400],{},"“Von Sportlern lernen heißt siegen lernen”. Dieser Spruch ist mehr oder weniger jedem geläufig. Die einleitende\nAnekdote löst bei so mancher Person vielleicht noch weitere Erinnerungen aus. Aus diesem Winkel betrachtet, erfordert\nder eben erwähnte Spruch vermutlich eine Überholung. Viel treffender wäre an dieser Stelle: “Vom Berufsleben lernen\nheißt siegen lernen”.",[18,20402,20403,20404,20407,20408,20410,20411,20413],{},"Das ",[573,20405,20406],{},"ich"," ist froh nicht gleich in die Tastatur gehauen, sondern vorerst geplant zu haben. Das ",[573,20409,20406],{}," setzt sich\ndiszipliniert eine Timebox um neue Technologien zu evaluieren. Das selbe ",[573,20412,20406],{}," jedoch, will “einfach nur kicken”,\nanstatt das eigene Spiel und das des Teams mit spezifischen Trainingseinheiten zu verbessern.",[18,20415,20416],{},"Vergleicht man die Sportart Fussball mit dem Beruf der Softwareentwicklung, zeigen sich interessante Analogien auf. Im\nfolgenden werden einige dieser Analogien beleuchtet und regen hoffentlich zum Denken an. Ähnliches schon erlebt? Gibt es\nweitere Analogien? Stimmt gar nicht!",[18,20418,20419],{},"Falls nicht bekannt sein sollte, was wir im Berufsalltag so tun, helfen die Analogien vielleicht einen Eindruck zu\nbekommen.",[3469,20421,20423],{"id":20422},"wenns-nicht-läuft-ist-immer-der-trainer-zuerst-am-pranger","Wenns nicht läuft ist immer der Trainer zuerst am Pranger",[18,20425,20426],{},"Der “Trainer” als Alibi Verantwortlicher. Es ist immer einfacher eine einzelne Person los zu werden, als das komplette\nTeam im Hintergrund.",[18,20428,20429],{},"In Firmen und Unternehmen geht es oftmals ähnlich von statten: Führungskräfte und Projektleiter werden ausgetauscht,\nwenn das Projektziel gefährdet ist. Unter neuer Führung geht es in die entgegengesetzte Richtung weiter, in der Hoffnung\nnun alles besser zu machen. Die bereits vorhandenen Probleme lassen sich auf diese Weise aber nicht zwangsläufig\nbeseitigen. Probleme können auch im Team, als auch im Umfeld verankert sein.",[3469,20431,20433],{"id":20432},"ballbesitz-9010-und-keine-tore","Ballbesitz 90:10 und keine Tore",[18,20435,20436],{},"Kurzpassspiel, optimale Raumausnutzung, keine Fehlpässe. Für Taktik Liebhaber und Trainer sicherlich ein Leckerbissen.\nDoch nach 90 Minuten gewinnt die Mannschaft mit den meist erzielten Toren. Bei aller Leidenschaft und Liebe gewinnt am\nEnde das Ergebnis.",[18,20438,20439],{},"Auf ähnlich Art und Weise vertieft man sich auch gerne mal in ein Code Refactoring. Es soll ja keiner kommen und sagen\ndass hier könnte gegebenenfalls unter gewissen Umständen manchmal zu einem Bug oder einem Missverständnis führen. Es\nwerden so lange Codefragmente in andere Komponenten verschoben bis der eigene Zufriedensheitgrad erreicht wird. Am Ende\ndes Tages zählt jedoch der Mehrwert seitens des Anwenders.",[3469,20441,20443],{"id":20442},"guardiola-vs-ancelotti-taktische-vorgaben-vs-laissez-faire","Guardiola vs Ancelotti (taktische Vorgaben vs Laissez-faire)",[18,20445,20446],{},"Guardiola und Ancelotti zählen aktuell beide zu den erfolgreichsten Trainern der Welt. Ihre Herangehensweisen und\nFührungsstile könnten jedoch kaum unterschiedlicher sein. Während Guardiola für millimetergenaue Laufwege und exakte\ntaktische Vorgaben bekannt ist, pflegt und befürwortet Ancelotti eher den Laissez-faire Stil.",[18,20448,20449],{},"In der Softwareentwicklung erinnert das z. B. an Besprechungen und deren Ablauf. Wir haben für das Refinement 60 Minuten\nangesetzt. Also sollten auch alle Themen innerhalb dieser Zeit besprochen sein. Zur Not fallen niedrig priorisierte\nThemen runter. Man hat schließlich noch andere Themen denen man sich zuwenden muss!",[18,20451,20452],{},"Oder vielleicht doch mal vom Fahrplan abweichen und das Refinement spontan verlängern, da gegen Ende eine interessante\nDiskussion entstanden ist?",[3469,20454,20456],{"id":20455},"beidfüßig-und-alleskönner-oder-doch-einen-arjen-robben","Beidfüßig und Alleskönner oder doch einen Arjen Robben?",[18,20458,20459],{},"Arjen Robben ist im Fußball recht einzigartig. Er spielt offensiv auf der rechten Außenbahn, macht immer die gleiche\nFinte, ist linksfuß und hat den rechten Fuß nur, damit er beim laufen nicht umfällt. Auf anderen Positionen ist er lange\nnicht so effektiv. Dennoch ist er so wichtig für das Bayern Spiel, weil er Effizienz und das entscheidende Momentum mit\nbringt.",[18,20461,20462],{},"In der Softwareentwicklung kann man Robben das T-Modell gegenüber stellen. Dieses beschreibt spezialisiertes\nFachwissen (vertikaler Strich) und allgemeines Grundlagenwissen (horizontaler Strich). Es gibt in einem Team z. B.\njemanden der vorwiegend Interesse am Betrieb hat und jemanden der seinen Schwerpunkt in der Frontend Entwicklung hat.\nBeide können bei Abwesenheit des anderen aber auch dessen Arbeit erledigen. So hat man im Normalfall immer den Experten\ngriffbereit und der Experte darf auch mal Urlaub machen, ohne dass alles in seinem Bereich stehen bleibt.",[3469,20464,20466],{"id":20465},"freistoß-spray-torlinientechnik-videobeweis","Freistoß-Spray, Torlinientechnik, Videobeweis, …",[18,20468,20469],{},"Das anfangs belächelte Freistoß-Spray verhindert das nachträgliche Verschieben des Balles. Die anfangs umstrittene\nTorlinientechnik verhindert Millionenverluste wegen menschlichen Fehlentscheidungen. Der immer noch umstrittene\nVideobeweis wird spielentscheidende Fehlentscheidungen zumindest dezimieren.",[18,20471,20472,20473,986],{},"In der Softwareentwicklung müssen wir genauso am Ball bleiben (sind wir nich alle ein bisschen Fußball? 🙂 ). Themen wie\nz. B. Betrieb mit Containern dürfen natürlich kritisch hinterfragt werden. Virtuelle Maschinen tuns ja auch, richtig?\nOder komplizierte Frontend Build Tools. Zum erstellen eines Bundles reicht doch\n",[50,20474,20475],{},"cat awesomeStuff-001.js >> app.bundle.js",[18,20477,20478],{},"Insbesondere in unserer Branche gilt es lernbeständig zu sein, stetig neue Methoden und Technologien zu evaluieren und\nauch mutig zu sein diese schrittweise zu etablieren.",[3469,20480,20482],{"id":20481},"barcelona-ist-kein-barcelona-wenn-messi-nicht-spielt","Barcelona ist kein Barcelona wenn Messi nicht spielt",[18,20484,20485],{},"Messi ist unbestritten einer der besten Fußballprofis des Planeten. Seine Aktionen und seine Anwesenheit bringt dem\nSpiel seines Teams den entscheidenden Vorteil. In Zahlen ausgedrückt hat die Argentinische Nationalmannschaft in der\nQualifikation zu Weltmeisterschaft 2018 mit Messi 6 Spiele bestritten und 5 gewonnen, ohne Messi 7 Spiele bestritten und\nnur 1 gewonnen. Das entspricht einer Siegquote von 83% (mit Messi) zu 14% (ohne Messi).",[18,20487,20488],{},"Dieses Thema lässt sich auf Teamarbeit im allgemeinen abbilden. Bezieht man sich auf den Ausfall eines Teammitglieds\nspricht man gerne vom sogenannten Truck Faktor. Wie viele Leute können vom Truck ausgeknockt werden, ohne den\nProjekterfolg zu gefährden. Finde eigentlich nur ich das etwas makaber?!? Naja, auf jeden fall darf der Erfolg nicht von\neiner Person abhängen. Bei uns gilt z. B. die Regel: kein Projekt wird mehr alleine bestritten. So steht einem drei\nWochenurlaub im Normalfall nichts entgegen, da die Last auf die Kollegen verteilt werden kann.",[3469,20490,20492],{"id":20491},"wieso-wechselt-der-denn-jetzt-den-besten-spieler-aus","“Wieso wechselt der denn jetzt den besten Spieler aus?!”",[18,20494,20495],{},"Steht man im Stadion kann man nicht immer alle Trainerentscheidungen nachvollziehen. “Wieso spielt der mit dreier\nKette?!”, “Wieso fängt der ausgerechnet mit dieser Startelf an?!”, “Wieso wechselt der den denn jetzt aus?!”. Nach dem\nSpiel stellt sich dann vielleicht heraus, dass jener bester Spieler eine leichte Verletzung hatte.",[18,20497,20498],{},[27,20499,20500],{},"Perspektivenwechsel / Empathie",[18,20502,20503],{},"Oft ist es hilfreich mal kurz durchzuatmen, einen Schritt zurück zu gehen und zu beobachten. Bei der Anforderungsanalyse\nz. B. hat es sich bewährt sogenannte Personas zu erstellen. Eine Persona ist die Beschreibung eines fiktiven Charakters\ndem die Software das Leben vereinfachen soll. Anhand der Persona kann das Team sich z. B. auf dessen Bedürfnisse\nfokussieren, statt mit noch mehr Vermutungen auch andere Möglichkeiten abzudecken.",[6653,20505,20506],{},[18,20507,20508],{},"“Von Sportlern lernen heißt siegen lernen”wird zu“Von Profis lernen heißt siegen lernen”",[18,20510,20511],{},"Profis im Sport haben alle etwas gemeinsames. Das gewisse Etwas weshalb sie erfolgreich wurden und weiterhin bleiben.\nSei es im Teamsport oder auch im Einzelsport (Tennis, Leichtathletik, …). Wir können viel von Ihnen lernen, bestimmt.\nAber auch Sportler können von uns lernen. Professionellen Softwareentwicklern, Agile Coaches und generell Teams im\nBerufsleben. In beide Richtungen lassen sich Analogien bilden. Probiert es aus. Experimentiert.",[18,20513,20514],{},"Und bleibt am Ball 😉",{"title":48,"searchDepth":86,"depth":86,"links":20516},[20517,20518,20519,20520,20521,20522,20523],{"id":20422,"depth":86,"text":20423},{"id":20432,"depth":86,"text":20433},{"id":20442,"depth":86,"text":20443},{"id":20455,"depth":86,"text":20456},{"id":20465,"depth":86,"text":20466},{"id":20481,"depth":86,"text":20482},{"id":20491,"depth":86,"text":20492},[614],"2017-05-04T12:33:31","https://synyx.de/blog/von-profis-lernen-heisst-siegen-lernen/",{},"/blog/von-profis-lernen-heisst-siegen-lernen",{"title":20369,"description":48},"von-profis-lernen-heisst-siegen-lernen","blog/von-profis-lernen-heisst-siegen-lernen",[20533,10083,20534],"analogien","profisport","Der nächste Sprint steht an… Wir treffen uns am Dienstag Morgen um 10:00 Uhr zum Refinement. Es gilt noch einige Themen fachlich genauer zu hinterfragen. Auch technische Grundlagen müssen noch…","vic-ozc1OThUJSebUDBMCTXgtICWalJTj6v7retM5z0",{"id":20538,"title":20539,"author":20540,"body":20541,"category":20828,"date":20829,"description":20830,"extension":617,"link":12111,"meta":20831,"navigation":499,"path":20832,"seo":20833,"slug":20545,"stem":20835,"tags":20836,"teaser":20840,"__hash__":20841},"blog/blog/urlaubsverwaltung-die-geschichte-eines-open-source-projekts.md","Urlaubsverwaltung – Die Geschichte eines Open Source Projekts",[11916],{"type":11,"value":20542,"toc":20816},[20543,20546,20553,20567,20570,20573,20577,20580,20587,20600,20604,20614,20624,20628,20635,20639,20656,20669,20682,20686,20704,20712,20716,20727,20730,20734,20741,20745,20752,20756,20765,20769,20775,20784,20791,20795,20798],[14,20544,20539],{"id":20545},"urlaubsverwaltung-die-geschichte-eines-open-source-projekts",[18,20547,20548,20549],{},"Nach fast 6 Jahren hat das Open Source Projekt,\ndie ",[585,20550,20552],{"href":12006,"rel":20551},[589],"synyx Urlaubsverwaltung",[577,20554,20555,20558,20561,20564],{},[580,20556,20557],{},"70 offene Issues",[580,20559,20560],{},"194 gelöste Issues",[580,20562,20563],{},"2207 Commits",[580,20565,20566],{},"99 Releases",[18,20568,20569],{},"Stand heute, 26. April 2017",[18,20571,20572],{},"…und eine kleine Geschichte, die durchaus erzählenswert ist und auch ein bisschen meine eigene Geschichte spiegelt.",[3469,20574,20576],{"id":20575},"die-geburtsstunde-der-urlaubsverwaltung","Die Geburtsstunde der Urlaubsverwaltung",[18,20578,20579],{},"Alles begann damit, dass ich mein Studium der Biowissenschaften schmiss und bei synyx einstieg. Quasi ohne jegliche\nVorkenntnisse in Programmierung begann ich im August 2011 mit einer Ausbildung zur Fachinformatikerin für\nAnwendungsentwicklung – was im Nachhinein betrachtet von beiden Seiten irgendwie ziemlich mutig war 😀 In allerlei\nÜbungsprojekten eignete ich mir Wissen in objektorientierter Programmierung im Allgemeinen und Java im Speziellen an.",[18,20581,20582,20583,20586],{},"Im Oktober 2011 wurde es dann an der Zeit für ein ",[573,20584,20585],{},"“richtiges”"," Projekt. Zum damaligen Zeitpunkt wurde Urlaub bei synyx\nnoch ganz altmodisch in Papierform beantragt und genehmigt. Dieser Prozess sollte in Software abgebildet werden, um uns\nallen das Beantragen von Urlaub zu vereinfachen.",[18,20588,20589,20590,20593,20594,20599],{},"Am ",[27,20591,20592],{},"20. Oktober 2011"," erfolgte\nder ",[585,20595,20598],{"href":20596,"rel":20597},"https://github.com/synyx/urlaubsverwaltung/commit/d194f12e3d6344495cc73c240f58a6d18bca8b83",[589],"erste Commit"," – dies\nwar die Geburtsstunde der Urlaubsverwaltung.",[3469,20601,20603],{"id":20602},"das-erste-krabbeln","Das erste Krabbeln",[18,20605,20589,20606,20609,20610,20613],{},[27,20607,20608],{},"5. März 2012"," ging die erste Version der Urlaubsverwaltung ",[27,20611,20612],{},"live",". Diese erste Version beinhaltete die\ngrundlegenden Anforderungen ohne viel Schnickschnack. Benutzer (Mitarbeiter) konnten Urlaub beantragen und Benutzer mit\nSonderrechten (Chefs) konnten ihn genehmigen bzw. ablehnen.",[18,20615,20616,20617,20620,20621,12114],{},"Durch den relativ schnellen Live-Gang mit den grundlegenden Features konnten Bugs früh behoben (",[573,20618,20619],{},"“Oh, an den Fall hab\nich ja beim Testen und Durchklicken gar nicht gedacht”",") und die Benutzbarkeit der Features zügig optimiert werden (\n",[573,20622,20623],{},"“Stimmt, das ist eigentlich ganz schön umständlich und unübersichtlich”",[3469,20625,20627],{"id":20626},"ein-projekt-lernt-laufen","Ein Projekt lernt laufen",[18,20629,20630,20631,20634],{},"In kurzer Zeit hatten wir eine benutzbare Software, die den Prozess in Papierform abgelöst hatte. Anfangs erfolgte die\nUrlaubsbeantragung sowohl analog als auch digital, d.h. man beantragte Urlaub über die Urlaubsverwaltung und passte\nanschließend noch den Chef mit Papier und Kugelschreiber ab. Im ",[27,20632,20633],{},"Juni 2012"," trauten wir uns dann endgültig, den *\n*Papierkrieg aufzugeben** und die Urlaubsbeantragung nur noch über die Software durchzuführen.",[3469,20636,20638],{"id":20637},"ein-projekt-zieht-in-die-welt-hinaus","Ein Projekt zieht in die Welt hinaus",[18,20640,20641,20642,20647,20648,20651,20652,20655],{},"Aufgrund eines ",[585,20643,20646],{"href":20644,"rel":20645},"https://synyx.de/2012/11/urlaubsverwaltung-was-hat-sich-getan/",[589],"Blog-Posts"," kamen im ",[27,20649,20650],{},"Juni 2013","\nrelativ zeitgleich die ",[27,20653,20654],{},"ersten Anfragen"," zur Urlaubsverwaltung. Es gab also noch mehr Unternehmen, die dasselbe\nProblem zu lösen hatten.",[18,20657,20658,20659,20662,20663,6159,20666,986],{},"Wir entschlossen uns das Projekt als Open Source zur freien Nutzung zur Verfügung zu stellen. Es wurden noch einige\nkleine Anpassungen vorgenommen und schließlich die Urlaubsverwaltung am ",[27,20660,20661],{},"18. Juli 2013","\nauf ",[585,20664,3573],{"href":12006,"rel":20665},[589],[27,20667,20668],{},"veröffentlicht",[18,20670,20671,20672,10118,20677,12114],{},"Relativ zeitgleich zog auch ich in die Welt hinaus und durfte in den ersten Kundenprojekten arbeiten. Dadurch reduzierte\nsich die Weiterentwicklung an der Urlaubsverwaltung vorerst. Natürlich gab es immer wieder neue Anforderungen zu lösen,\num unseren Prozess noch weiter zu optimieren, aber es handelte sich meist nur um kleinere Features. Viel Feinschliff\nmachte ich in meiner 20%-Weiterbildungszeit oder probierte (für mich) neue Technologien einfach in der\nUrlaubsverwaltung aus (\nz.B. ",[585,20673,20676],{"href":20674,"rel":20675},"https://synyx.de/2012/06/scheduling-and-asynchronous-execution-with-spring/",[589],"Spring Scheduled",[585,20678,20681],{"href":20679,"rel":20680},"https://synyx.de/2012/05/how-to-monitor-and-manage-your-java-application-with-jmx/",[589],"JMX",[3469,20683,20685],{"id":20684},"umstyling-von-außen-und-von-innen","Umstyling – von außen und von innen",[18,20687,3316,20688,20691,20692,20697,20698,20703],{},[27,20689,20690],{},"Oktober 2014"," stand für synyx der ",[585,20693,20696],{"href":20694,"rel":20695},"https://synyx.de/2014/09/wir-ziehen-um/",[589],"Umzug"," ins neue Büro an. Die Woche,\ndie ich aufgrunddessen im Home Office verbrachte, nutzte ich für\nzahlreiche ",[585,20699,20702],{"href":20700,"rel":20701},"https://synyx.de/2014/10/urlaubsverwaltung-goes-mobile/",[589],"Umgestaltungsarbeiten"," an der Urlaubsverwaltung.\nIch glaube, aus dieser Zeit stammen meine meisten nächtlichen Commits 😀 Während sich synyx ein neues Gewand in Form\neines neuen Büros anzog, tat es auch die Urlaubsverwaltung in Form einer verbesserten Oberfläche. Nun war es möglich,\nUrlaub auf einem Smartphone Browser zu beantragen, ohne die Krise zu kriegen.",[18,20705,20706,20707,20711],{},"Da wir immer wieder E-Mails mit Fragen bzgl. Installation und Konfiguration erhielten, entschlossen wir uns im *\n*Oktober 2015**, die Urlaubsverwaltung auf ",[585,20708,13144],{"href":20709,"rel":20710},"https://projects.spring.io/spring-boot/",[589]," umzustellen. Dies\nbrachte einige Vereinfachungen in der Konfiguration und erleichterte interessierten Unternehmen die Nutzung der\nUrlaubsverwaltung.",[3469,20713,20715],{"id":20714},"ein-projekt-wird-erwachsen","Ein Projekt wird erwachsen",[18,20717,20718,20719,20722,20723,20726],{},"Ab ",[27,20720,20721],{},"2015"," bekamen wir ",[27,20724,20725],{},"vermehrt Anfragen"," zu Anpassungswünschen in der Urlaubsverwaltung. Es gab sogar Unternehmen,\ndie bereit waren für die gewünschten Anpassungen zu bezahlen. Wir hatten mehrere kleine Aufträge zur Umsetzung von\nFeatures, von denen wir annahmen, dass auch andere Unternehmen davon profitieren würden.",[18,20728,20729],{},"Leider stellte sich nach einigen Aufträgen heraus, dass wir immer nur einen Kompromiss umsetzen konnten. Die Anfragen\nund erforderlichen Anpassungen waren meist sehr spezifisch auf einen Kunden zugeschnitten. Einen Mittelweg zu finden,\nder sowohl den eindeutigen Kundenwunsch, als auch die potenziellen Wünsche aller anderen Benutzer der Urlaubsverwaltung\nzufriedenstellt – und dazu noch in das vorhandene Budget passt, war einfach nicht möglich. Oft haben wir ein Auge\nzugedrückt und den Mehraufwand auf unsere Kappe genommen. Als reines Dienstleistungsunternehmen ist das auf lange Sicht\nnatürlich nicht machbar.",[3469,20731,20733],{"id":20732},"weniger-ist-manchmal-mehr","Weniger ist manchmal mehr",[18,20735,20736,20737,20740],{},"Wir kamen zu dem Punkt, an dem wir uns die Frage stellen mussten: ",[27,20738,20739],{},"Wie soll es mit der Urlaubsverwaltung weitergehen?","\nIn einer Task Force von freiwilligen Interessierten besprachen wir die Möglichkeiten zur weiteren Strategie.",[1217,20742,20744],{"id":20743},"sollen-wir-weiterhin-als-dienstleister-agieren-und-individuelle-wünsche-umsetzen","Sollen wir weiterhin als Dienstleister agieren und individuelle Wünsche umsetzen?",[18,20746,20747,20748,20751],{},"Wir waren uns einig, dass dies theoretisch möglich wäre, aber sinnvollerweise dann nur als Fork der Hauptversion\ngeschehen sollte. Wir wollten künftig vermeiden, dass spezielle Sonderwünsche in die Hauptversion einfließen und deren\nWart- und Erweiterbarkeit verschlechterten. Dies würde allerdings bedeuten, dass wir Support für unterschiedliche\nVersionen leisten müssten. Eine ",[573,20749,20750],{},"“Nebenbei-Entwicklung”"," der Urlaubsverwaltung, wie sie bisher zeitgleich zu unserem\neigentlichen Kundengeschäft betrieben wurde, wäre dann realistisch betrachtet nicht mehr sinnvoll machbar.",[1217,20753,20755],{"id":20754},"sollen-wir-die-urlaubsverwaltung-als-produkt-sehen-und-vermehrt-zeit-in-die-produktentwicklung-stecken-eventuell-als-cloudlösung","Sollen wir die Urlaubsverwaltung als Produkt sehen und vermehrt Zeit in die Produktentwicklung stecken, eventuell als Cloudlösung?",[18,20757,20758,20759,20764],{},"Nach Evaluierung der Marktlage, was bereits verfügbare Lösungen, deren Preise und in Frage kommende Kundengruppen\nanbelangt, kamen wir zu dem Schluss, dass wir uns geschäftlich lieber anderweitig orientieren und die **synyx\nUrlaubsverwaltung nur noch (wie ursprünglich) als ",[585,20760,20763],{"href":20761,"rel":20762},"https://synyx.de/open-source/",[589],"Open Source"," Projekt betreiben wollen.\n**",[3469,20766,20768],{"id":20767},"ist-das-der-tod-eines-projekts","Ist das der Tod eines Projekts?",[18,20770,20771,20772,986],{},"Die Geschichte der Urlaubsverwaltung endet hier sicherlich noch nicht. Aber das Projekt hat einen Status erreicht, in\ndem es (meistens) stabil läuft und viele typische Anforderungen erfüllt. Es wird sicherlich immer wieder das ein oder\nandere neue Feature geben, aber wir haben für uns beschlossen: ",[573,20773,20774],{},"back to the roots, weniger ist manchmal mehr",[18,20776,20777,20778,20783],{},"Neue Anfragen leiten wir nun an einen von\nuns ",[585,20779,20782],{"href":20780,"rel":20781},"http://www.andre-janus.de/",[589],"gebrieften freiberuflichen Softwareentwickler"," weiter. Er steht für entsprechende\nSupport- und Anpassungsaufträge gerne zur Verfügung. Erscheinen die Anpassungen für alle Benutzer der Urlaubsverwaltung\nsinnvoll, können diese problemlos mittels eines Pull Requests in die Hauptversion einfließen",[18,20785,20786,20787,20790],{},"Denn das ist ja das Coole an unserer Open Source Urlaubsverwaltung: man kann sie nicht nur ",[573,20788,20789],{},"as it is"," kostenfrei nutzen,\nsondern sie auch für eigene Zwecke modifizieren und diese angepasste Version nutzen.",[649,20792,20794],{"id":20793},"und-meine-geschichte","Und meine Geschichte?",[18,20796,20797],{},"Die endet hier sicherlich auch noch nicht. Aber ich bin erst einmal raus. Im Dezember 2016 bin ich Mutter geworden und\nhabe seither ein neues Projekt 🙂",[18,20799,20800,20801,20806,20807,20810,20811,20815],{},"Seitdem ist ",[585,20802,20805],{"href":20803,"rel":20804},"https://github.com/honnel",[589],"Daniel Hammann"," der Hauptansprechpartner für die Urlaubsverwaltung als Open\nSource Projekt von synyx. Auf ",[585,20808,3573],{"href":12006,"rel":20809},[589],"\nbin ",[585,20812,20406],{"href":20813,"rel":20814},"https://github.com/fraulyoner",[589]," momentan ein eher stiller Beobachter.",{"title":48,"searchDepth":86,"depth":86,"links":20817},[20818,20819,20820,20821,20822,20823,20824,20825],{"id":20575,"depth":86,"text":20576},{"id":20602,"depth":86,"text":20603},{"id":20626,"depth":86,"text":20627},{"id":20637,"depth":86,"text":20638},{"id":20684,"depth":86,"text":20685},{"id":20714,"depth":86,"text":20715},{"id":20732,"depth":86,"text":20733},{"id":20767,"depth":86,"text":20768,"children":20826},[20827],{"id":20793,"depth":126,"text":20794},[614],"2017-04-27T09:12:00","Nach fast 6 Jahren hat das Open Source Projekt,\\ndie synyx Urlaubsverwaltung",{},"/blog/urlaubsverwaltung-die-geschichte-eines-open-source-projekts",{"title":20539,"description":20834},"Nach fast 6 Jahren hat das Open Source Projekt,\ndie synyx Urlaubsverwaltung","blog/urlaubsverwaltung-die-geschichte-eines-open-source-projekts",[20837,3122,20838,20839],"open-source","urlaub","urlaubsverwaltung","Nach fast 6 Jahren hat das Open Source Projekt, die synyx Urlaubsverwaltung 70 offene Issues 194 gelöste Issues 2207 Commits 99 Releases Stand heute, 26. April 2017 …und eine kleine…","sqByx995rAv-g0KvNPE3uIElakRwwEpLi0nwRHAg1sI",{"id":20843,"title":20844,"author":20845,"body":20846,"category":20902,"date":20903,"description":20904,"extension":617,"link":20905,"meta":20906,"navigation":499,"path":20907,"seo":20908,"slug":20850,"stem":20909,"tags":20910,"teaser":20913,"__hash__":20914},"blog/blog/synyx-went-wild.md","synyx went wild!",[19049],{"type":11,"value":20847,"toc":20900},[20848,20851,20854,20857,20862,20865,20870,20873,20876,20881,20884,20889,20892],[14,20849,20844],{"id":20850},"synyx-went-wild",[18,20852,20853],{},"Früh klingelte der Wecker am Freitag morgen. Deutlicher früher als gewohnt, doch bevor der erste Alarmton zur Höchstform\nauflaufen konnte, war ich bereits hellwach – synyxCamp! Am Office angelangt bot sich ein Bild, das an jugendliche\nKlassenfahrten erinnerte: Euphorisch-aufgeregte Leute huschen von hier nach da, packen ein paar letzte Sachen,\nschleppen allerlei Kisten Richtung Fahrstuhl und scherzen dabei über das Bevorstehende. Noch nicht im Bus angelangt –\nhatten wir unser Büro und den Alltag bereits hinter uns gelassen. Die Routine wich an diesem Morgen zurück, verdrängt\nvon Spannung und Vorfreude.",[18,20855,20856],{},"Nach etwas mehr als einer Stunde Fahrt war das Ziel erreicht. Wir erspähten unsere Unterkunft auf einer sonnigen\nLichtung, umringt von den charakteristischen Nadelbäumen des Schwarzwalds. Die Feuchtigkeit der vergangenen Nacht ließ\ndas Gras auf der anliegenden Wiese glitzern – Natur pur. Innerhalb des Hotels erwartete uns bereits ein ausgiebiges\nFrühstücksbuffet, das dem synyx-eigenen frühstyxx in Nichts nach Stand: deftige Speisen, frisches Obst und Gemüse,\nSäfte, Kaffee und etliche Teesorten.",[18,20858,20859],{},[1794,20860],{"alt":48,"src":20861},"https://media.synyx.de/uploads//2017/04/frueh1.jpg",[18,20863,20864],{},"Nach ausreichender Stärkung, widmeten wir uns dem organisatorischen Teil. Viele interessante Themen-Vorschläge fanden\nden Weg an unsere Camp-Timetable: Kotlin-Hacking Sessions; eine Devoxx4Kids-Gruppe näherte sich dem Trend IoT; das\nhauseigene Buchungstool erhielt neue Features. Doch wer glaubt, dass wir uns ausschließlich reinen IT-Themen zugewandt\nhaben, begibt sich auf den Holzweg – das Marketing-Team gewährte Interessierten beispielsweise eine Übersicht in der\nWelt der Wortschöpfungen; die Geschäftsführung eröffnete uns einen tiefen Einblick in die 15-jährige Firmengeschichte.\nSo sprinteten wir enthusiastisch von Workshop zu Workshop durch den Arbeitstag, der lediglich vom gemeinsamen\nMittagessen unterbrochen wurde.",[18,20866,20867],{},[1794,20868],{"alt":48,"src":20869},"https://media.synyx.de/uploads//2017/04/timetable2.jpg",[18,20871,20872],{},"Als sich die Sonne gemächlich verabschiedete, näherten sich auch die letzten Sessions ihrem Ende. Stolz und erfüllt von\nden Ergebnissen des ersten Tages, steuerten wir das gut-bürgerliche Buffet an, das den Grundstein für einen gemeinsamen\nAbend legte. Bei Wein, Bier und Brettspielen resümierten wir den ersten Camp-Tag, sprachen über den Schwarzwald und\nallerhand persönliche Dinge.",[18,20874,20875],{},"Der folgende Tag begrüßte uns erneut mit kräftigem Sonnenschein und wir starteten mit vollem Elan in den zweiten Teil\nunseres Camp-Aufenthalts. Die Themenvielfalt erstreckte sich auch an diesem Tag weit über das Gebiet der Informatik\nhinaus, was einige synyxer nutzten um Erfahrungen und Eindrücke aus anderen Tätigkeitsbereichen zu sammeln. Mit\nwertvollen Erkenntnissen und unzähligen neuen Zeilen Code im Gepäck, läuteten wir am Abend eine feucht-fröhliche Runde\nein. Die urig-eingerichtete Kellerbar des Hotels bot uns den optimalen Rahmen um das erste synyxCamp gebührend zu\nfeiern.",[18,20877,20878],{},[1794,20879],{"alt":48,"src":20880},"https://media.synyx.de/uploads//2017/04/draussen3.jpg",[18,20882,20883],{},"Mit dem ein oder anderen Kater im Schlepptau, ging es am Sonntag Vormittag zurück nach Karlsruhe in die Gartenstraße.\nNachdem unsere Hardware wieder im Büro verstaut war, gesellten sich ein paar synyxer auf der Terrasse zusammen, um\nnochmals Revue passieren zu lassen. So ließen wir ein ereignisreiches Wochenende ausklingen, das seinen Erwartungen mehr\nals gerecht wurde. Wir haben gehackt, gecodet, organisiert, diskutiert, argumentiert und präsentiert – zusammen\ngegessen, gelacht, getrunken, Paraglider bestaunt, Frisbee gespielt und die Sonne genossen. Das erste synyxCamp hat ein\nFeuer geschürt, das sich nicht löschen lässt und zukünftig weiter angeheizt werden will.",[18,20885,20886],{},[1794,20887],{"alt":48,"src":20888},"https://media.synyx.de/uploads//2017/04/fly4.jpg",[18,20890,20891],{},"So… let‘s go wild again synyx! 😉",[18,20893,20894,20895,13333],{},"Noch mehr synyxCamp gibt es in diesem ",[585,20896,20899],{"href":20897,"rel":20898},"https://youtu.be/TaQ-9muog-E",[589],"Video",{"title":48,"searchDepth":86,"depth":86,"links":20901},[],[614],"2017-04-13T15:37:30","Früh klingelte der Wecker am Freitag morgen. Deutlicher früher als gewohnt, doch bevor der erste Alarmton zur Höchstform\\nauflaufen konnte, war ich bereits hellwach – synyxCamp! Am Office angelangt bot sich ein Bild, das an jugendliche\\nKlassenfahrten erinnerte: Euphorisch-aufgeregte Leute huschen von hier nach da, packen ein paar letzte Sachen,\\nschleppen allerlei Kisten Richtung Fahrstuhl und scherzen dabei über das Bevorstehende. Noch nicht im Bus angelangt –\\nhatten wir unser Büro und den Alltag bereits hinter uns gelassen. Die Routine wich an diesem Morgen zurück, verdrängt\\nvon Spannung und Vorfreude.","https://synyx.de/blog/synyx-went-wild/",{},"/blog/synyx-went-wild",{"title":20844,"description":20853},"blog/synyx-went-wild",[12068,9788,20911,20912],"synyxcamp","synyxgoeswild","Früh klingelte der Wecker am Freitag morgen. Deutlicher früher als gewohnt, doch bevor der erste Alarmton zur Höchstform auflaufen konnte, war ich bereits hellwach – synyxCamp! Am Office angelangt bot…","RNVXhW0_TjmfdTf7DhiOlskdXcRDd75bcCpQHOCofVo",{"id":20916,"title":20917,"author":20918,"body":20919,"category":21013,"date":21014,"description":21015,"extension":617,"link":21016,"meta":21017,"navigation":499,"path":21018,"seo":21019,"slug":20923,"stem":21020,"tags":21021,"teaser":21022,"__hash__":21023},"blog/blog/synyx-at-the-fosdem-2017.md","synyx at the FOSDEM 2017",[3444],{"type":11,"value":20920,"toc":21011},[20921,20925,20931,20936,20939,20942,20945,20951,20959,20968,20974,20980,20986,20992,20998,21005,21008],[14,20922,20924],{"id":20923},"synyx-at-the-fosdem-2017","synyx at the FOSDEM 2017",[18,20926,20927,20928],{},"As a part of our annual budget we decided to visit the ",[27,20929,20930],{},"Free and Open Source Developers’ European Meeting (FOSDEM).",[18,20932,20933],{},[27,20934,20935],{},"What is FOSDEM?",[18,20937,20938],{},"It’s is a free, community-driven developer event at the ULB Solbosch Campus, Brussel. It was first held in 2001 and has\nsince been growing. Besides the main track where speakers can introduce their projects or hold talks in separate rooms\nthere were a bunch of developer rooms, workshops and certification possibilities.",[18,20940,20941],{},"As an sysadmin trainee I found myself enjoying all this new input on my first business trip. All of the speakers I\ntalked to were very open and helpful.",[18,20943,20944],{},"Some of the most interesting talks I’ve attended were:",[18,20946,20947,20950],{},[27,20948,20949],{},"Daniel Stenberg"," held an interesting and funny talk about the history of curl and how it became such an important\ntool. He also talked about the future of the projects, problems and risks.",[18,20952,20953,20958],{},[585,20954,20957],{"href":20955,"rel":20956},"https://fosdem.org/2017/schedule/event/curl/",[589],"Link"," to the talk.",[18,20960,20961,6159,20964,20967],{},[27,20962,20963],{},"Vesna",[27,20965,20966],{},"Manojlovic",", Community Builder at RIPE NCC, talked about Ethics in Network Measurements. She explained why\nthe field is political and how we should act to keep the internet, programming and technology ethically sound. In my\nopinion one of the talks everybody in IT should see.",[18,20969,20970,20958],{},[585,20971,20957],{"href":20972,"rel":20973},"https://fosdem.org/2017/schedule/event/network_measurement_ethics/",[589],[18,20975,20976,20979],{},[27,20977,20978],{},"Hanno Böck","s talk “Is the Linux Desktop less secure than Windows 10?” examined the vulnerabilities of the Linux\nDesktop and how the Super Mario soundtrack can own your system. Besides the possible attack points he talked about ways\nto fix it and asked the community to help.",[18,20981,20982,20958],{},[585,20983,20957],{"href":20984,"rel":20985},"https://fosdem.org/2017/schedule/event/linux_desktop_versus_windows10/",[589],[18,20987,20988,20991],{},[27,20989,20990],{},"Andrew Savchenko"," gave a gentle overview of “Quantum computing and post-quantum cryptography”. The risk for our\ncryptography and how we can possibly safely encrypt data in the future. As an interesting talk about a very complicated\ntopic, the “gentle overview” turned out to be very complex.",[18,20993,20994,20958],{},[585,20995,20957],{"href":20996,"rel":20997},"https://fosdem.org/2017/schedule/event/quantum/",[589],[18,20999,21000,21001,986],{},"There were many more talks on various topics including some interesting lightning talks I invite you to explore and\ndiscuss, found ",[585,21002,17497],{"href":21003,"rel":21004},"https://fosdem.org/2017/schedule/",[589],[18,21006,21007],{},"I’d like to thank everybody involved in the FOSDEM organization, speakers, synyx and my coworkers who also went there.",[18,21009,21010],{},"Can’t wait for the next FOSDEM in 2018 with you!",{"title":48,"searchDepth":86,"depth":86,"links":21012},[],[614],"2017-02-15T07:26:11","As a part of our annual budget we decided to visit the Free and Open Source Developers’ European Meeting (FOSDEM).","https://synyx.de/blog/synyx-at-the-fosdem-2017/",{},"/blog/synyx-at-the-fosdem-2017",{"title":20917,"description":21015},"blog/synyx-at-the-fosdem-2017",[],"As a part of our annual budget we decided to visit the Free and Open Source Developers’ European Meeting (FOSDEM). What is FOSDEM? It’s is a free, community-driven developer…","OqpQMQa3RdFPtrwqiccPSOt2laHSq7WIXWagzlzomqg",{"id":21025,"title":21026,"author":21027,"body":21029,"category":21107,"date":21108,"description":21109,"extension":617,"link":21110,"meta":21111,"navigation":499,"path":21112,"seo":21113,"slug":21033,"stem":21114,"tags":21115,"teaser":21116,"__hash__":21117},"blog/blog/lichtschwerterundso-und-wieder-geht-es-mit-synyx-ins-kino.md","#lichtschwerterundso – und wieder geht es mit synyx ins Kino",[21028],"karrasz",{"type":11,"value":21030,"toc":21105},[21031,21034,21037,21040,21043,21046,21053,21060,21065,21070,21075,21080,21085,21090,21095,21100],[14,21032,21026],{"id":21033},"lichtschwerterundso-und-wieder-geht-es-mit-synyx-ins-kino",[18,21035,21036],{},"Nachdem wir nach unserem synema letztes Jahr so viel positives Feedback erhalten haben, war klar, dass wir das\nwiederholen wollen. Passend, dass wieder ein Star Wars Film, dieses mal “ROGUE ONE: A STAR WARS STORY”, seine Premiere\nim Dezember feierte. Dieses mal konnten wir unser Event in der kultigen, wunderschönen Schauburg ausrichten.",[18,21038,21039],{},"Am Freitag, den 16.12. starteten wir um 18 Uhr mit Brezeln, Brownies und ein paar Kaltgetränken. Nach dem\nCome-Together konnte es losgehen. Janine, Agile Coach bei synyx, begrüßte das Publikum und den Überraschungsgast des\nAbends: Prinzessin Leia! Was für eine Sensation 🙂 Und das war längst nicht alles. Denn auch Leia hatte eine Überraschung\nim Gepäck: 5 Lego Star Wars Sets! Diese wurden nach dem Film unter den Gästen verlost.",[18,21041,21042],{},"Zum Abschluss des Abends wurde noch das ein oder andere Getränk bei netten Gesprächen zu sich genommen. Es war ein\ngelungenes Event und ein toller Abend, oder? Und wer weiß, nächstes Jahr startet Stars Wars 8…..",[18,21044,21045],{},"Auf unserem YouTube Kanal gibt es dazu noch 2 Videos:",[18,21047,21048],{},[585,21049,21052],{"href":21050,"rel":21051},"https://youtu.be/u3xhhAKC8X4",[589],"synema – Film",[18,21054,21055],{},[585,21056,21059],{"href":21057,"rel":21058},"https://youtu.be/KcnyHnS2i_s",[589],"synema – Das Interview",[18,21061,21062],{},[1794,21063],{"alt":48,"src":21064},"https://media.synyx.de/uploads//2016/12/IMG_5938.jpg",[18,21066,21067],{},[1794,21068],{"alt":48,"src":21069},"https://media.synyx.de/uploads//2016/12/IMG_5847.jpg",[18,21071,21072],{},[1794,21073],{"alt":48,"src":21074},"https://media.synyx.de/uploads//2016/12/IMG_5970.jpg",[18,21076,21077],{},[1794,21078],{"alt":48,"src":21079},"https://media.synyx.de/uploads//2016/12/IMG_5862.jpg",[18,21081,21082],{},[1794,21083],{"alt":48,"src":21084},"https://media.synyx.de/uploads//2016/12/IMG_5954.jpg",[18,21086,21087],{},[1794,21088],{"alt":48,"src":21089},"https://media.synyx.de/uploads//2016/12/IMG_5780.jpg",[18,21091,21092],{},[1794,21093],{"alt":48,"src":21094},"https://media.synyx.de/uploads//2016/12/IMG_5826.jpg",[18,21096,21097],{},[1794,21098],{"alt":48,"src":21099},"https://media.synyx.de/uploads//2016/12/IMG_5764.jpg",[18,21101,21102],{},[1794,21103],{"alt":48,"src":21104},"https://media.synyx.de/uploads//2016/12/IMG_5815.jpg",{"title":48,"searchDepth":86,"depth":86,"links":21106},[],[614],"2016-12-22T12:52:21","Nachdem wir nach unserem synema letztes Jahr so viel positives Feedback erhalten haben, war klar, dass wir das\\nwiederholen wollen. Passend, dass wieder ein Star Wars Film, dieses mal “ROGUE ONE: A STAR WARS STORY”, seine Premiere\\nim Dezember feierte. Dieses mal konnten wir unser Event in der kultigen, wunderschönen Schauburg ausrichten.","https://synyx.de/blog/lichtschwerterundso-und-wieder-geht-es-mit-synyx-ins-kino/",{},"/blog/lichtschwerterundso-und-wieder-geht-es-mit-synyx-ins-kino",{"title":21026,"description":21036},"blog/lichtschwerterundso-und-wieder-geht-es-mit-synyx-ins-kino",[],"Nachdem wir nach unserem synema letztes Jahr so viel positives Feedback erhalten haben, war klar, dass wir das wiederholen wollen. Passend, dass wieder ein Star Wars Film, dieses mal “ROGUE…","1RRnQ_LCBE_1xUYjBrDJky6jJwxjddF0bxXidpoYYCQ",{"id":21119,"title":21120,"author":21121,"body":21123,"category":21353,"date":21354,"description":21355,"extension":617,"link":21356,"meta":21357,"navigation":499,"path":21358,"seo":21359,"slug":21127,"stem":21361,"tags":21362,"teaser":21368,"__hash__":21369},"blog/blog/android-installing-multiple-variations-of-the-same-app-on-one-device.md","Android: Installing multiple variations of the same app on one device",[21122],"knell",{"type":11,"value":21124,"toc":21348},[21125,21128,21137,21140,21144,21147,21150,21257,21260,21264,21267,21273,21277,21280,21340,21343,21346],[14,21126,21120],{"id":21127},"android-installing-multiple-variations-of-the-same-app-on-one-device",[18,21129,21130,21131,21136],{},"This post is bit of a follow up to my last post on how\nto ",[585,21132,21135],{"href":21133,"rel":21134},"https://synyx.de/2016/08/android-building-apks-for-different-environments-using-build-types-and-product-flavors/",[589],"build an app for multiple environments and local development using build types and product flavors",".\nWe will focus on how to install multiple of the resulting APKs on a single device.",[18,21138,21139],{},"Given the scenario that we use some hardware devices for development, but we also use those devices to review our\nprogress over the last weeks with our customers. We don’t want to uninstall / reinstall the app every time, as this\nwould also mean to lose all data (if we use the debug certificate for our development and the release certificate for\naccessing actual systems like discribed in the previous post). So we’d like to install both, the debug APK and the APK\nfor a test / demo environment on one device. How can we achieve that?",[3469,21141,21143],{"id":21142},"modifiying-the-applicationid","Modifiying the applicationId",[18,21145,21146],{},"To install the app multiple times, you have to provide a unique applicationId to every instance you want to install.",[18,21148,21149],{},"You can do that with the ‘applicationIdSuffix’ property in the buildTypes:",[43,21151,21155],{"className":21152,"code":21153,"language":21154,"meta":48,"style":48},"language-groovy shiki shiki-themes github-light github-dark"," buildTypes {\n debug{\n applicationIdSuffix \".debug\";\n ...\n }\n local{\n applicationIdSuffix \".local\";\n ...\n }\n tst{ // build types may not start with 'test'\n applicationIdSuffix \".test\";\n ...\n }\n stage{\n applicationIdSuffix \".stage\";\n ...\n }\n release {\n // for releases we want to keep the original applicationId\n ...\n }\n }\n\n","groovy",[50,21156,21157,21162,21167,21172,21177,21181,21186,21191,21195,21199,21204,21209,21213,21217,21222,21227,21231,21235,21240,21245,21249,21253],{"__ignoreMap":48},[53,21158,21159],{"class":55,"line":56},[53,21160,21161],{}," buildTypes {\n",[53,21163,21164],{"class":55,"line":86},[53,21165,21166],{}," debug{\n",[53,21168,21169],{"class":55,"line":126},[53,21170,21171],{}," applicationIdSuffix \".debug\";\n",[53,21173,21174],{"class":55,"line":163},[53,21175,21176],{}," ...\n",[53,21178,21179],{"class":55,"line":186},[53,21180,12898],{},[53,21182,21183],{"class":55,"line":221},[53,21184,21185],{}," local{\n",[53,21187,21188],{"class":55,"line":242},[53,21189,21190],{}," applicationIdSuffix \".local\";\n",[53,21192,21193],{"class":55,"line":273},[53,21194,21176],{},[53,21196,21197],{"class":55,"line":279},[53,21198,12898],{},[53,21200,21201],{"class":55,"line":496},[53,21202,21203],{}," tst{ // build types may not start with 'test'\n",[53,21205,21206],{"class":55,"line":503},[53,21207,21208],{}," applicationIdSuffix \".test\";\n",[53,21210,21211],{"class":55,"line":509},[53,21212,21176],{},[53,21214,21215],{"class":55,"line":515},[53,21216,12898],{},[53,21218,21219],{"class":55,"line":521},[53,21220,21221],{}," stage{\n",[53,21223,21224],{"class":55,"line":527},[53,21225,21226],{}," applicationIdSuffix \".stage\";\n",[53,21228,21229],{"class":55,"line":533},[53,21230,21176],{},[53,21232,21233],{"class":55,"line":539},[53,21234,12898],{},[53,21236,21237],{"class":55,"line":545},[53,21238,21239],{}," release {\n",[53,21241,21242],{"class":55,"line":4941},[53,21243,21244],{}," // for releases we want to keep the original applicationId\n",[53,21246,21247],{"class":55,"line":4949},[53,21248,21176],{},[53,21250,21251],{"class":55,"line":4957},[53,21252,12898],{},[53,21254,21255],{"class":55,"line":4966},[53,21256,860],{},[18,21258,21259],{},"Apply the changes, and the different buildTypes APKs may now co-exist on a device.",[3469,21261,21263],{"id":21262},"which-is-which","Which is which?",[18,21265,21266],{},"Now that we have installed the same app multiple times… how can we know on the first look, which of the apps is for\nwhich environment?",[18,21268,21269],{},[1794,21270],{"alt":21271,"src":21272},"demo1","https://media.synyx.de/uploads//2016/08/demo1-300x133.png",[3469,21274,21276],{"id":21275},"setting-the-activity-titles","Setting the Activity titles",[18,21278,21279],{},"To ensure we can also distinguish the different environments inside the app, we can append the environment from the\nBuildConfig to our Activity titles:",[43,21281,21283],{"className":288,"code":21282,"language":290,"meta":48,"style":48},"public class DemoActivity extends AppCompatActivity {\n @Override\n protected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n updateTitle();\n }\n private void updateTitle() {\n if(!\"PROD\".equals(BuildConfig.ENVIRONMENT)){\n setTitle(BuildConfig.ENVIRONMENT + \" \" + getTitle());\n }\n }\n}\n",[50,21284,21285,21290,21294,21299,21304,21309,21313,21318,21323,21328,21332,21336],{"__ignoreMap":48},[53,21286,21287],{"class":55,"line":56},[53,21288,21289],{},"public class DemoActivity extends AppCompatActivity {\n",[53,21291,21292],{"class":55,"line":86},[53,21293,15609],{},[53,21295,21296],{"class":55,"line":126},[53,21297,21298],{}," protected void onCreate(Bundle savedInstanceState) {\n",[53,21300,21301],{"class":55,"line":163},[53,21302,21303],{}," super.onCreate(savedInstanceState);\n",[53,21305,21306],{"class":55,"line":186},[53,21307,21308],{}," updateTitle();\n",[53,21310,21311],{"class":55,"line":221},[53,21312,860],{},[53,21314,21315],{"class":55,"line":242},[53,21316,21317],{}," private void updateTitle() {\n",[53,21319,21320],{"class":55,"line":273},[53,21321,21322],{}," if(!\"PROD\".equals(BuildConfig.ENVIRONMENT)){\n",[53,21324,21325],{"class":55,"line":279},[53,21326,21327],{}," setTitle(BuildConfig.ENVIRONMENT + \" \" + getTitle());\n",[53,21329,21330],{"class":55,"line":496},[53,21331,12898],{},[53,21333,21334],{"class":55,"line":503},[53,21335,860],{},[53,21337,21338],{"class":55,"line":509},[53,21339,282],{},[18,21341,21342],{},"Maybe you’ll want to write the code for updating the title a bit cleaner, but that’s it for the example 😉",[18,21344,21345],{},"Please let me hear your opinion about this approach in the comments!",[607,21347,989],{},{"title":48,"searchDepth":86,"depth":86,"links":21349},[21350,21351,21352],{"id":21142,"depth":86,"text":21143},{"id":21262,"depth":86,"text":21263},{"id":21275,"depth":86,"text":21276},[614],"2016-12-01T12:31:19","This post is bit of a follow up to my last post on how\\nto build an app for multiple environments and local development using build types and product flavors.\\nWe will focus on how to install multiple of the resulting APKs on a single device.","https://synyx.de/blog/android-installing-multiple-variations-of-the-same-app-on-one-device/",{},"/blog/android-installing-multiple-variations-of-the-same-app-on-one-device",{"title":21120,"description":21360},"This post is bit of a follow up to my last post on how\nto build an app for multiple environments and local development using build types and product flavors.\nWe will focus on how to install multiple of the resulting APKs on a single device.","blog/android-installing-multiple-variations-of-the-same-app-on-one-device",[5834,21363,21364,21365,21366,21367],"apk","build-types","buildtypes","device","environments","This post is bit of a follow up to my last post on how to build an app for multiple environments and local development using build types and product flavors. We…","OjJCSIxdBQyitqKpOhNdC_mLAJijF1bQEV7GlZ7dshs",{"id":21371,"title":21372,"author":21373,"body":21375,"category":21440,"date":21441,"description":21442,"extension":617,"link":21443,"meta":21444,"navigation":499,"path":21445,"seo":21446,"slug":21379,"stem":21447,"tags":21448,"teaser":21456,"__hash__":21457},"blog/blog/transformation-oder-neuaufbau.md","Transformation oder Neuaufbau?",[21374],"rueckert",{"type":11,"value":21376,"toc":21438},[21377,21380,21383,21386,21393,21396,21399,21406,21409,21412,21415,21422,21425,21432,21435],[14,21378,21372],{"id":21379},"transformation-oder-neuaufbau",[18,21381,21382],{},"Viele – es sind leider noch zu wenige! – etablierte Unternehmen erkennen mittlerweile, dass heute andere\nMarktbedingungen vorherrschen und sie nicht mehr so weitermachen können wie bisher. Ihnen fehlt die Fähigkeit sich\nschnell an neue Marktanforderungen anzupassen und schneller neue Produkte, Dienstleistungen oder gar Innovationen an den\nMarkt zu bringen.",[18,21384,21385],{},"Die Gründe dafür? Sie haben mehr oder weniger große technische, organisatorische und innovative Schulden aufgebaut.\nTechnische Schulden und das Bewusstsein dafür gibt es schon länger. Sie haben in der Vergangenheit nur nicht so weh\ngetan. Das Geschäft lief trotzdem. Ok, hier und da hat man gemerkt, dass eine Erneuerung der IT notwendig wäre, aber der\nSchmerz war nicht so groß. Diese Zeiten sind vorbei. Plötzlich sind da Branchenfremde Unternehmen im eigenen Markt aktiv\nund diese Newcomer gewinnen immer mehr Marktanteile mit ihren IT-getriebenen Geschäftsmodellen.",[6653,21387,21388],{},[18,21389,21390],{},[573,21391,21392],{},"„Wir müssen uns komplett neu erfinden, zu einem agilen, flexiblen und innovativen Unternehmen transformieren!“.",[18,21394,21395],{},"Das Verständnis für die Wichtigkeit und Wertschöpfung der IT rückt nun endlich in den Vordergrund. Man wird sich\nbewusst, wenn man nicht den Anschluss verlieren will, muss man seine IT erneuern und näher ans Business bringen. Nur mit\nder IT alleine ist es nicht getan. Um digitale Geschäftsmodelle zu entwickeln und neue Innovationen zu kreieren braucht\nes Zeit, den Blick über den Tellerrand hinaus und vor allem muss man neue Wege gehen. Dies passt so ganz und gar nicht\nzu den meisten bestehenden Organisationsformen, Strukturen und Kulturen der „alten“ Unternehmen. Sie sind auf Effizienz\ngetrimmt. Ihre Prozesse sind auf den optimalen Ablauf des bestehenden Geschäftsmodells ausgerichtet. Alles muss nach\nPlan laufen. In die Zukunft planen funktioniert aber immer weniger, wenn diese sich immer schneller wandelt.",[18,21397,21398],{},"Wie kann man geschäftlich aufholen? Wie schafft man es, neue digitale Produkte, Dienstleistungen oder gar neue\nGeschäftsmodelle zu entwickeln? Wie innovativ und erfolgreich werden? Die Antwort vieler Unternehmer darauf ist: „Wir\nmüssen uns komplett neu erfinden, zu einem agilen, flexiblen und innovativen Unternehmen transformieren!“. Im Ergebnis\nmuss es so sein, nur ob eine Transformation des bestehenden Unternehmens der erste und richtige Weg ist, mag ich\nzumindest bezweifeln.",[6653,21400,21401],{},[18,21402,21403],{},[573,21404,21405],{},"Der Abbau der organisatorischen und prozessualen Schuld ist nicht so einfach durch Zeit und Geld zu erschlagen.",[18,21407,21408],{},"Ich denke schon eine Weile darüber nach, was es für ein klassisches Unternehmen bedeutet sich zu transformieren. Je\nlänger ich darüber nachdenke, umso weniger halte ich es für den richtigen Weg, sondern bleibe häufiger bei einem\nalternativen Vorgehen hängen – einem Neuaufbau eines oder mehrerer Unternehmen neben dem bestehenden. Aber schauen wir\nuns doch einmal an, was es bedeuten würde, wenn sich ein klassisches Unternehmen vornimmt sich zu transformieren.",[18,21410,21411],{},"Angefangen beim Abbau der technologischen Schuld. Der Abbau kostet Zeit und Geld. Das ist definitiv machbar. Der Abbau\nder organisatorischen und prozessualen Schuld ist nicht so einfach durch Zeit und Geld zu erschlagen. Hier stehen große\nVeränderungen bei Mitarbeitern, Hierarchien, bisherigen Handlungs- und Denkmustern, persönlichen Zielvereinbarungen,\nPositionen im Unternehmen, ja gar bei den Aufgaben der Unternehmensführung an. Klassische Hierarchien,\nTop-Down-Ansätze und Command and Control sind von gestern und müssen mehr Selbstorganisation und flexibler\nZusammenarbeit weichen. Kommunikation auf Augenhöhe ist erwünscht. Das sind viele und sehr, sehr hohe Hürden, die\nüberwunden werden wollen. Das erfordert nicht nur einen organisatorischen sondern auch einen kulturellen Wandel.",[18,21413,21414],{},"Das klingt stark nach einer Herkulesaufgabe, mit einer ungewissen Zukunft vor Augen. Und zuletzt helfen die ganzen\nAnstrengungen einer Unternehmenstransformation nicht, wenn man nicht in der Lage ist innovativer zu werden. Innovation\nhängt wiederum ganz stark von den Menschen ab, die im Unternehmen tätig sind. Sind das kreative Menschen? Hat man\nKreativität, Offenheit und Querdenkern einen hohen Stellenwert bei Personalentscheidungen beigemessen? Oder hat man doch\neher Spezialisten mit linearem Lebenslauf und genau den notwendigen Fähigkeiten für die fachlichen Anforderungen der\nvorhandenen Prozesse, den Vorzug gegeben? War es möglich bzw. sogar gewünscht Dinge auszuprobieren, Fehler zu machen und\ndaraus zu lernen oder war es bisher eher so, dass Fehler auf Teufel komm raus vermieden werden mussten? Sprechen die\nvergangen Personalentscheidungen und die Mitarbeiterentwicklung eher für oder gegen Innovationsvorhaben?",[6653,21416,21417],{},[18,21418,21419],{},[573,21420,21421],{},"Mit einer Transformation und deren Konsequenzen stört man die laufenden Prozesse und gefährdet damit das bisherige\nGeschäftsmodell, welches aktuell Einnahmen sichert und Stabilität bringt.",[18,21423,21424],{},"Die meist vorherrschenden technischen, organisatorischen und innovativen Schulden sind in meinen Augen eine denkbar\nschlechte Voraussetzung für eine Transformation hin zu einem agilen, schnellen und innovativen Unternehmen. Die\nvorhandenen Prozesse sind auf das bestehende Geschäft ausgerichtet. Mit einer Transformation und deren Konsequenzen\nstört man die laufenden Prozesse und gefährdet damit das bisherige Geschäftsmodell, welches aktuell Einnahmen sichert\nund Stabilität bringt. Eine Transformation stellt demnach auch in finanzieller Hinsicht ein hohes Risiko dar. Nämlich\nwenn die Qualität oder der Output aufgrund von Veränderungen, Missstimmungen oder sonstiger “Nebenwirkungen” leiden.\nAber es wird nicht nur das bestehende Geschäft negativ beeinflusst, sondern auch das parallel neu aufzubauende Geschäft\nkann negativ tangiert werden. Wenn es viele Abhängigkeiten zu der bisherigen und wenig agilen Unternehmensorganisation\ngibt, kann ich mir die erfolgreiche Entwicklung eines neuen Geschäftsmodells innerhalb bestehender Strukturen nicht\nvorstellen, sonst gäbe es doch diese bereits schon, wenn nicht genau das im Wege stünde.",[6653,21426,21427],{},[18,21428,21429],{},[573,21430,21431],{},"Das bestehende Unternehmen dient dem Neuen als Investor, und sorgt für die notwendige Liquidität.",[18,21433,21434],{},"Ich sehe hier viele Risiken, aber nur wenige Chancen. Viel eher sehe ich die Chance, neben dem bestehenden, ein oder\nmehrere neue Unternehmen mit neuem Geschäftsmodell und flexibler Organisation, sowie vielfältigen und breit\naufgestellten Menschen aufzubauen. Und dies, ohne die Abhängigkeiten der bestehenden Unternehmensorganisation! Das\nbestehende Unternehmen dient dem Neuen als Investor, und sorgt für die notwendige Liquidität. Dabei wird der\nLebenszyklus des bestehenden Unternehmens mindestens so lange verlängert, bis das neue Unternehmen selbstständig\nbestehen kann. Wenn dies geschafft ist, kann man sich überlegen wie man mit dem „alten“ Unternehmen umgeht. Man kann es\nnach und nach abwickeln oder jetzt eine Transformation angehen, welche wiederum durch das neu geschaffenen Unternehmen\nfinanziert wird.",[18,21436,21437],{},"Aber egal welchen Weg man beschreitet, man sollte sich bewusst sein, dass hinter einem Unternehmen immer Menschen\nstehen. Und in diesem Fall sollte man den Menschen aus dem alten Unternehmen dafür danken, dass auch sie den Neuaufbau\nermöglicht haben. Dies sollte von vornherein als konkretes Ziel in der ganzen Strategie berücksichtigt werden. Mit dem\nbewussten Ziel des „Zurückgebens“ wäre ein positiver und motivierender Ausblick für die Zukunft geschaffen. Das ist ein\nKonzept, welches für mich schlüssig ist und dem ich mehr Erfolgschancen gebe, als einer Transformation um jeden Preis.",{"title":48,"searchDepth":86,"depth":86,"links":21439},[],[614],"2016-11-29T16:12:43","Viele – es sind leider noch zu wenige! – etablierte Unternehmen erkennen mittlerweile, dass heute andere\\nMarktbedingungen vorherrschen und sie nicht mehr so weitermachen können wie bisher. Ihnen fehlt die Fähigkeit sich\\nschnell an neue Marktanforderungen anzupassen und schneller neue Produkte, Dienstleistungen oder gar Innovationen an den\\nMarkt zu bringen.","https://synyx.de/blog/transformation-oder-neuaufbau/",{},"/blog/transformation-oder-neuaufbau",{"title":21372,"description":21382},"blog/transformation-oder-neuaufbau",[21449,21450,6810,21451,21452,21453,21454,21455],"augenhoehe","change-management","disruption","newwork","start-up","strategie","transformation","Viele – es sind leider noch zu wenige! – etablierte Unternehmen erkennen mittlerweile, dass heute andere Marktbedingungen vorherrschen und sie nicht mehr so weitermachen können wie bisher. Ihnen fehlt die…","YwFLRK-amaEQ2KJrnB9yaO80dhdgHKiJgA6YlwGr2rk",{"id":21459,"title":21460,"author":21461,"body":21462,"category":21526,"date":21527,"description":48,"extension":617,"link":21528,"meta":21529,"navigation":499,"path":21530,"seo":21531,"slug":21532,"stem":21533,"tags":21534,"teaser":21535,"__hash__":21536},"blog/blog/eindruecke-von-der-w-jax-2016.md","Eindrücke von der W-JAX 2016",[21374],{"type":11,"value":21463,"toc":21524},[21464,21467,21473,21482,21488,21501,21507,21521],[14,21465,21460],{"id":21466},"eindrücke-von-der-w-jax-2016",[18,21468,21469],{},[1794,21470],{"alt":21471,"src":21472},"\"headerwjax\"","https://media.synyx.de/uploads//2016/11/headerwjax-2.jpg",[18,21474,21475,21476,21481],{},"Zwischen dem 07. und 11.11.2016 trafen sich mehr als 100 Speaker auf der ",[585,21477,21480],{"href":21478,"rel":21479},"https://jax.de/",[589],"W-JAX"," in München und\nhaben rund um Java, Architektur und Software-Innovation ihr Bestes gegeben. synyx war einer der Sponsoren auf der\nW-JAX und ich durfte uns als Ansprechpartner vor Ort vertreten.",[18,21483,21484],{},[1794,21485],{"alt":21486,"src":21487},"\"sponsor\"","https://media.synyx.de/uploads//2016/11/sponsor-1.jpg",[18,21489,21490,21491,21496,21497,986],{},"Mich haben besonders die Talks rund um die Digitale Transformation interessiert. Mit meinem Shirt „LETS AUTOMATE THE\nSHIT OUT OF IT“. War ich für den Talk von ",[585,21492,21495],{"href":21493,"rel":21494},"https://twitter.com/ufried",[589],"Uwe Friedrichsen"," von codecentric zu „DevOps is\nnot enough – Embedding DevOps in a broader Context“ passend angezogen. Auch wenn der Titel für den ein oder anderen noch\nnichts mit der Transformation von Unternehmen zu tun haben will, hat Uwe Friedrichsen genau das aufgezeigt. Devops ist\nein ganz klarer Treiber für eine Transformation und beeinflusst diese maßgeblich. Vorausgesetzt der Wille ist da, sich\ndarauf einzulassen. Die Slides dazu finden\nsich ",[585,21498,10117],{"href":21499,"rel":21500},"http://de.slideshare.net/ufried/devops-is-not-enough-embedding-devops-in-a-broader-context",[589],[18,21502,21503],{},[1794,21504],{"alt":21505,"src":21506},"\"LetsAutomateTheShitOutOfIT\"","https://media.synyx.de/uploads//2016/11/letsautomatetheshit-e1479307946593.jpg",[18,21508,21509,21510,21515,21516,21520],{},"Weiter haben mir die Einblicke von ",[585,21511,21514],{"href":21512,"rel":21513},"https://twitter.com/onkelkodi",[589],"Konstantin Diener"," in sein Unternehmen cosee und über\ndie Entwicklung von einer klassisch hierarchischen Unternehmensorganisation hin zu einem Modell von mehr\nSelbstorganisation gefallen. Er hat mit eindrücklichen Beispielen aufgezeigt, wie sich die klassische Management-Denke\nund Hierarchie negativ auf Softwarearchitektur, Betrieb und die Flexibilität des Unternehmens ausgewirkt und im\nGegensatz dazu, wie sich Verantwortung Übergeben positiv auf die Kultur und das Unternehmen ausgewirkt\nhaben. ",[585,21517,12027],{"href":21518,"rel":21519},"https://kdiener.medium.com/vortrag-wie-cloud-technologien-das-unternehmen-ver%C3%A4ndern-5d84bd2fedb0",[589],"\ngeht es zu den Slides.",[18,21522,21523],{},"In den 2 Tagen auf der W-JAX konnte ich einige interessante Eindrücke mitnehmen. Und wer weiß, vielleicht sieht man\nsich mal von der anderen Seite des Rednerpults.",{"title":48,"searchDepth":86,"depth":86,"links":21525},[],[614],"2016-11-15T09:30:49","https://synyx.de/blog/eindruecke-von-der-w-jax-2016/",{},"/blog/eindruecke-von-der-w-jax-2016",{"title":21460,"description":48},"eindruecke-von-der-w-jax-2016","blog/eindruecke-von-der-w-jax-2016",[],"Zwischen dem 07. und 11.11.2016 trafen sich mehr als 100 Speaker auf der W-JAX in München und haben rund um Java, Architektur und Software-Innovation ihr Bestes gegeben. synyx war einer…","k_ezp4JYWbeZhyY31x9elGR-yuOWABhKKpApPFvKNgM",{"id":21538,"title":21539,"author":21540,"body":21542,"category":21582,"date":21583,"description":21584,"extension":617,"link":21585,"meta":21586,"navigation":499,"path":21587,"seo":21588,"slug":21546,"stem":21589,"tags":21590,"teaser":21591,"__hash__":21592},"blog/blog/synyx-sommerfeyerey-2016.md","synyx-Sommerfeyerey 2016",[21541],"fuchs",{"type":11,"value":21543,"toc":21580},[21544,21547,21550,21553,21556,21559,21565,21568,21571,21574],[14,21545,21539],{"id":21546},"synyx-sommerfeyerey-2016",[18,21548,21549],{},"synyx ist in den letzten Jahren nicht nur bezüglich der Mitarbeiterzahl beträchtlich gewachsen. Auch privat hat sich bei\nden synyxern viel verändert: Einige von uns haben geheiratet und sind Eltern geworden. Das Unterschreiben von\nGlückwunschkarten und das Besorgen von Geschenken ist derzeit Teil unseres Firmenalltags, an den wir uns schon fast\ngewöhnt haben. Mehrere neue Mitarbeiter und auch ein paar “alte Hasen” haben bereits Kinder, sodass die Alterspanne des\nsynyx-Nachwuchses von “neugeboren und sowas von zum Knuddeln” bis zu “Hilfe – Pupertät – und trotzdem noch zum\nKnuddeln” reicht. Die meisten Kinder sind jedoch im Kleinkind- und Kindergartenalter. Und all diese Kinder sollten bei\nunserer diesjährigen Sommerfeyerey am 8. Oktober ganz besonders auf ihre Kosten kommen.",[18,21551,21552],{},"Als Location hatten wir uns das Radhaus in Rüppurr ausgesucht. Dort gibt es, neben einer gemütlichen Hütte und einer\ngroßen Terrasse, eine weitläufige Wiese. Darauf befindet sich ein kleiner Spielplatz und es ist noch genügend Platz zum\nRennen und Toben für alle. Aber wir wären nicht synyx, wenn wir einfach nur rennen und toben würden…",[18,21554,21555],{},"Die Bewegungslustigen unter uns durften sich an Goofballz versuchen. Das sind aufblasbare, körpergroße Gummibälle zum\nReinschlüpfen. Kopf und Oberkörper sind durch den Ball geschützt und man hat genug Beinfreiheit, um wild durch die\nGegend zu rennen, Fußball zu spielen, mit anderen Spielern zusammenzurumpeln und sich dann auf dem Boden herumzukugeln.\nUnd das wurde ausgiebigst getan, wenn man denn vor Lachen überhaupt noch rennen konnte. Es macht übrigens auch sehr\ngroßen Spaß, einem Goofballz-Spiel einfach nur zuzuschauen :-).",[18,21557,21558],{},"Wir hatten aber auch ruhigere Spiele wie Kubb und Riesenmikado im Angebot und der Spielplatz wurde zum Austoben bestens\ngenutzt.",[18,21560,21561],{},[1794,21562],{"alt":21563,"src":21564},"\"Essen\"","https://media.synyx.de/uploads//2016/10/essen.jpg",[18,21566,21567],{},"Nicht nur das Vergnügungsangebot, auch der diesjährige Zeitrahmen war familienfreundlich gestaltet. Feierten wir in der\nVergangenheit oft ganze Nächte durch, so begannen wir in diesem Jahr schon am Nachmittag und machten es uns “nur” bis\nMitternacht in der Radhaushütte gemütlich. Aber der Reihe nach:",[18,21569,21570],{},"Um 16 Uhr gab es Sektempfang und Kinderdiscomusik mit Seifenblasenmaschine. Dann wurde bis 18 Uhr gespielt, getobt,\ngerannt, gekugelt, gelacht. Ab 18 Uhr waren dann kulinarische Vergnügungen angesagt – die Flammkuchenparty begann. Es\ngab ein abwechslungsreiches, mediterran angehauchtes Vorspeisenbuffet und im Anschluss verschiedenste Flammkuchen –\ndeftig und süß. Es wurde serviert bis alle satt waren. Von uns synyxern selbst zubereitete Nachtische schlossen das\ngemeinsame Abendessen ab, u.a. gab es srilankanischen Karamellpudding, verschiedene leckere Kuchen, … und das Mousse au\nChocolat unseres Chefs Thomas kam bei unseren Kindern ganz besonders gut an.",[18,21572,21573],{},"Zu guter Letzt ein herzliches Dankeschön an alle, die mitgeholfen haben, dieses Familienfest zu planen und zu gestalten.\nEs hat sich wieder einmal gezeigt, dass wir synyxer nicht nur super feiern können, sondern auch toll zusammenarbeiten\nund Ideen und Zeit einbringen, um auch außerhalb unseres gemeinsamen Arbeitsalltags eine schöne Zeit miteinander zu\nverbringen.",[18,21575,21576],{},[1794,21577],{"alt":21578,"src":21579},"\"Getränk\"","https://media.synyx.de/uploads//2016/10/getraenk.jpg",{"title":48,"searchDepth":86,"depth":86,"links":21581},[],[614],"2016-10-27T11:29:43","synyx ist in den letzten Jahren nicht nur bezüglich der Mitarbeiterzahl beträchtlich gewachsen. Auch privat hat sich bei\\nden synyxern viel verändert: Einige von uns haben geheiratet und sind Eltern geworden. Das Unterschreiben von\\nGlückwunschkarten und das Besorgen von Geschenken ist derzeit Teil unseres Firmenalltags, an den wir uns schon fast\\ngewöhnt haben. Mehrere neue Mitarbeiter und auch ein paar “alte Hasen” haben bereits Kinder, sodass die Alterspanne des\\nsynyx-Nachwuchses von “neugeboren und sowas von zum Knuddeln” bis zu “Hilfe – Pupertät – und trotzdem noch zum\\nKnuddeln” reicht. Die meisten Kinder sind jedoch im Kleinkind- und Kindergartenalter. Und all diese Kinder sollten bei\\nunserer diesjährigen Sommerfeyerey am 8. Oktober ganz besonders auf ihre Kosten kommen.","https://synyx.de/blog/synyx-sommerfeyerey-2016/",{},"/blog/synyx-sommerfeyerey-2016",{"title":21539,"description":21549},"blog/synyx-sommerfeyerey-2016",[],"synyx ist in den letzten Jahren nicht nur bezüglich der Mitarbeiterzahl beträchtlich gewachsen. Auch privat hat sich bei den synyxern viel verändert: Einige von uns haben geheiratet und sind Eltern…","UMRRWO_TWmFsycLmGW5yJHYqVm5CbZTuWtXwV1aEjZE",{"id":21594,"title":21595,"author":21596,"body":21598,"category":21684,"date":21685,"description":21686,"extension":617,"link":21687,"meta":21688,"navigation":499,"path":21689,"seo":21690,"slug":21602,"stem":21691,"tags":21692,"teaser":21696,"__hash__":21697},"blog/blog/agiles-arbeiten-als-dienstleister.md","Agiles Arbeiten als Dienstleister",[21597],"eifler",{"type":11,"value":21599,"toc":21682},[21600,21603,21606,21609,21614,21617,21622,21625,21630,21633,21638,21641,21644,21647,21650,21661,21664,21667,21670,21673,21676,21679],[14,21601,21595],{"id":21602},"agiles-arbeiten-als-dienstleister",[18,21604,21605],{},"“Agiles Arbeiten als Dienstleister – Eine besondere Herausforderung oder in letzter Konsequenz nicht möglich?” Diesen\nTitel haben wir als Aufhänger für die Scrum User Group in Karlsruhe am 5. Oktober gewählt. Als reines\nDienstleistungsunternehmen ist synyx im Alltag mit vielen Herausforderungen konfrontiert, die aus unserer Sicht oft\nspezifisch für das Projektgeschäft sind. Daher wollten Janine Bechtold und ich als Vertreter der ScrumMaster bei synyx\ndie User Group nutzen, um einige Kernprobleme, die unserer Meinung nach die Ursache für die Alltagsprobleme darstellen,\nin großer Runde zu diskutieren. Zum einen erhofften wir uns konkrete Lösungsansätze, zum anderen interessierte uns aber\nauch, wie groß tatsächlich der Unterschied zu anderen Arbeitskontexten, wie z.B. eigene Produktentwicklung oder interne\nIT ist. Denn wie die Leitfrage schon suggeriert, haben wir uns in der Tat schon oft gefragt, ob bestimmte Aspekte agilen\nArbeitens im Dienstleistungsbereich überhaupt umsetzbar sind.",[18,21607,21608],{},"In der Vorbereitung auf den Abend haben wir für uns fünf Kernthemen identifiziert, auf die wir uns fokussiert haben.\nAnhand von kurzen Beispielszenen haben Janine und ich jeweils die Problematik veranschaulicht um Impulse für die\nanschließende Diskussion zu geben:",[5899,21610,21611],{},[580,21612,21613],{},"Kein Verständnis für Intrinsische Motivation",[18,21615,21616],{},"Beispiel: Kunde hat keine Produktvision und beharrt auf Auftragserfüllung.",[5899,21618,21619],{"start":86},[580,21620,21621],{},"Interessenkonflikte beim Dienstleister",[18,21623,21624],{},"Beispiel: Ein Kundenauftrag könnte optimal mit einer Standardsoftware bedient werden, was aber dazu führen würde, dass\ndas Budget für die Beauftragung des Dienstleisters für Individualentwicklung nicht mehr genutzt wird.",[5899,21626,21627],{"start":126},[580,21628,21629],{},"Entscheidungskompetenz, Kontrolle & versteckte Hierachie",[18,21631,21632],{},"Beispiel: Team möchte eigene Design Ideen in neuer Software umsetzen, um die UX zu verbessern. Product Owner vom Kunden\nbesteht aber auf altem Design, weil seine direkten Vorgesetzten es so wünschen.",[5899,21634,21635],{"start":163},[580,21636,21637],{},"Crossfunktionalität – Zugriff/Verfügbarkeit von Fachexperten",[18,21639,21640],{},"Beispiel: Zusammenarbeit mit Anwendern aus der Fachabteilung würde für besseres Verständnis der User Stories führen.\nDiese sind aber für die Unterstützung eines externen Dienstleisters nicht verfügbar.",[18,21642,21643],{},"5.Wertekonflikt zwischen Dienstleister und Kunde",[18,21645,21646],{},"Beispiel: Das Entwicklerteam des Dienstleisters hat moralische Bedenken, weil die Umsetzung eines bestimmten Features\nden Endnutzer stark benachteiligen würde. Der Kunde macht mit diesem Feature aber großen Gewinn.",[18,21648,21649],{},"Aufgrund der Teilnehmerzahl haben wir uns in der Gruppe entschieden nur drei der Themen zu bearbeiten und sind daher mit\nfolgenden drei Fragen ins World Café gestartet:",[5899,21651,21652,21655,21658],{},[580,21653,21654],{},"Woher kommt die Motivation im Scrum Team beim Dienstleister?",[580,21656,21657],{},"Wieviel Entscheidungsfreiheit ist notwendig um eine gesunde Balance zwischen Selbstorganisation und Erfüllung des\nKundenwunsches zu gewährleisten.",[580,21659,21660],{},"Können Werte aus zwei verschiedenen Welten vereint werden und wenn ja, was braucht es dafür?",[18,21662,21663],{},"Uns war wichtig, dass am Ende des Abends jeder Teilnehmer etwas mitnimmt, das für die eigene Arbeit möglichst konkret\nanwendbar ist und dort Probleme löst. Daher will ich nicht versuchen die erarbeiteten Ergebnisse allgemein zusammen zu\nfassen sondern stelle hier nur dar, welche Erkenntnisse ich für mich selbst und meine Arbeit bei synyx aus dem Abend\nziehen konnte.",[18,21665,21666],{},"Vertrauen ist die Grundlage für eine gute Zusammenarbeit. Kompromisse einzugehen um ein gemeinsames Ziel zu erreichen,\nschafft Vertrauen und daraus wächst auf beiden Seiten die Bereitschaft für weitere Zugeständnisse. Hierbei ist der\nDienstleister in der Pflicht den ersten Schritt zu tun.",[18,21668,21669],{},"Gleichzeitig sollte der Dienstleister aber auch in der Lage sein, klar Position zu beziehen. Ich glaube, dass Menschen\ndie beste Arbeit machen, wenn sie einen Sinn in ihrer Arbeit sehen. Dieses Verständnis für intrinsische Motivation\nsollte beim Dienstleister existieren. Die eingegangenen Kompromisse bzw. die Zugeständnisse gegenüber dem Kunden dürfen\nnicht dazu führen, dass die Mitarbeiter die Motivation verlieren oder die Sinnhaftigkeit ihrer Arbeit anzweifeln. Wenn\ndie Mitarbeiter nur noch das nötigste machen oder gar kündigen, leidet nicht nur das Projekt des Kunden sondern auch der\nDienstleister selbst hat ernsthafte Probleme.",[18,21671,21672],{},"Als konkret anwendbares Beispiel um eine gemeinsame Motivation zu schaffen, könnte der Dienstleister etwa einen\nVisions-Workshop als essentiellen Bestandteil in jedem Projekt-Kickoff einplanen.",[18,21674,21675],{},"Es gibt viele Aspekte, die ein Team oder einzelne Mitarbeiter motiviert ihre Arbeit zu leisten. Beispielsweise der\nZusammenhalt mit den Kollegen, mit denen man vielleicht sogar befreundet ist. Oder Begeisterung für die Technik, die man\nin einem ansonsten weniger spannenden Projekt einsetzen darf. Gegebenenfalls ist es auch schlicht die Loyalität zum\neigenen Unternehmen, für dessen Fortbestand man auch zeitweise schlechte Projektbedingungen erträgt. In diesen Fällen\nmuss man sich allerdings bewusst machen, wie sich die Motivation des Mitarbeiters auf sein Handeln auswirkt.\nBegeisterung für die Erfüllung des Kundenwunsches ist nicht zwingend erforderlich, aber dann darf man auch keine\nHöchstleistung erwarten. Schließlich ist hier wieder der ScrumMaster in der Verantwortung im Team Gespräche über die\nunterschiedlichen Motivationen anzuregen. Somit hat das Team und insbesondere der Product Owner die Chance andere\nImpulse zu setzen um ggf. eine andere Fokussierung anzuregen.",[18,21677,21678],{},"Zusammenfassend nehme ich mit, dass wir Mut brauchen um für unsere Überzeugung einzustehen. Wenn wir daran glauben, dass\nintrinsisch motivierte Menschen ihre Arbeit besser machen und somit auch den Kunden glücklicher machen, müssen wir auch\nentsprechend handeln. Man sollte daher grundsätzlich jede Chance nutzen, um allen Beteiligten am Prozess die\nKonsequenzen ihres Handelns bewusst zu machen. Es ist die Aufgabe des ScrumMasters dem Ansprechpartner des Kunden zu\nspiegeln, wie sein Verhalten sich auf die Motivation des Entwicklungsteams und somit auf das Produkt auswirkt. Genau so\nmuss er dem Team spiegeln, wie sich ihr Verhalten auf das Vertrauen des Kunden in die Arbeit des Teams auswirkt.",[18,21680,21681],{},"Dann werden wir zwar immernoch viele Herausforderungen haben, aber dann ist aus meiner Sicht agiles Arbeiten auch im\nDienstleistungskontext möglich.",{"title":48,"searchDepth":86,"depth":86,"links":21683},[],[614],"2016-10-18T09:50:57","“Agiles Arbeiten als Dienstleister – Eine besondere Herausforderung oder in letzter Konsequenz nicht möglich?” Diesen\\nTitel haben wir als Aufhänger für die Scrum User Group in Karlsruhe am 5. Oktober gewählt. Als reines\\nDienstleistungsunternehmen ist synyx im Alltag mit vielen Herausforderungen konfrontiert, die aus unserer Sicht oft\\nspezifisch für das Projektgeschäft sind. Daher wollten Janine Bechtold und ich als Vertreter der ScrumMaster bei synyx\\ndie User Group nutzen, um einige Kernprobleme, die unserer Meinung nach die Ursache für die Alltagsprobleme darstellen,\\nin großer Runde zu diskutieren. Zum einen erhofften wir uns konkrete Lösungsansätze, zum anderen interessierte uns aber\\nauch, wie groß tatsächlich der Unterschied zu anderen Arbeitskontexten, wie z.B. eigene Produktentwicklung oder interne\\nIT ist. Denn wie die Leitfrage schon suggeriert, haben wir uns in der Tat schon oft gefragt, ob bestimmte Aspekte agilen\\nArbeitens im Dienstleistungsbereich überhaupt umsetzbar sind.","https://synyx.de/blog/agiles-arbeiten-als-dienstleister/",{},"/blog/agiles-arbeiten-als-dienstleister",{"title":21595,"description":21605},"blog/agiles-arbeiten-als-dienstleister",[4494,21693,21694,4505,21695],"dienstleistung","intrinsische-motivation","vertrauen","“Agiles Arbeiten als Dienstleister – Eine besondere Herausforderung oder in letzter Konsequenz nicht möglich?” Diesen Titel haben wir als Aufhänger für die Scrum User Group in Karlsruhe am 5. Oktober…","l1wvT4in5Te0QxLIzl6ygt2p8i5_SHBWD8-dUKrm0M8",{"id":21699,"title":21700,"author":21701,"body":21702,"category":22431,"date":22432,"description":22433,"extension":617,"link":22434,"meta":22435,"navigation":499,"path":22436,"seo":22437,"slug":21706,"stem":22438,"tags":22439,"teaser":22444,"__hash__":22445},"blog/blog/android-building-apks-for-different-environments-using-build-types-and-product-flavors.md","Android: Building APKs for different environments using build types and product flavors",[21122],{"type":11,"value":21703,"toc":22421},[21704,21707,21710,21713,21716,21730,21733,21768,21771,21775,21778,21781,21784,21787,21804,21808,21811,21814,21817,21820,21823,21826,21959,21962,21971,21975,21978,21981,21984,21988,21991,22027,22030,22033,22036,22115,22118,22121,22129,22132,22140,22144,22147,22171,22174,22216,22219,22222,22228,22262,22267,22309,22314,22372,22375,22381,22389,22391,22402,22405,22408,22416,22419],[14,21705,21700],{"id":21706},"android-building-apks-for-different-environments-using-build-types-and-product-flavors",[18,21708,21709],{},"Different build types in android can be used to build the same application with different configurations. This can be\npredefined config values like ‘debuggable’, but you can also define your own config values that will be accessible in\nyour application. This post will show you some ways in which you can use this functionality to easily build your app for\ndifferent environments of remote services and for better local development.",[3469,21711,21712],{"id":21364},"Build types:",[18,21714,21715],{},"Each android project comes with some default build types:",[577,21717,21718,21721,21724,21727],{},[580,21719,21720],{},"debug -> for development and debugging on devices",[580,21722,21723],{},"test -> for running unit tests",[580,21725,21726],{},"androidTest -> for running device tests",[580,21728,21729],{},"release -> for the actual release version of the app",[18,21731,21732],{},"A freshly created build.gradle, has the following build types defined:",[43,21734,21736],{"className":21152,"code":21735,"language":21154,"meta":48,"style":48},"\n buildTypes {\n release {\n minifyEnabled false\n proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n }\n }\n\n",[50,21737,21738,21742,21746,21750,21755,21760,21764],{"__ignoreMap":48},[53,21739,21740],{"class":55,"line":56},[53,21741,500],{"emptyLinePlaceholder":499},[53,21743,21744],{"class":55,"line":86},[53,21745,21161],{},[53,21747,21748],{"class":55,"line":126},[53,21749,21239],{},[53,21751,21752],{"class":55,"line":163},[53,21753,21754],{}," minifyEnabled false\n",[53,21756,21757],{"class":55,"line":186},[53,21758,21759],{}," proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n",[53,21761,21762],{"class":55,"line":221},[53,21763,12898],{},[53,21765,21766],{"class":55,"line":242},[53,21767,860],{},[18,21769,21770],{},"The default build types don’t need to be declared, but you can declare them in order to extend them with custom config.",[3469,21772,21774],{"id":21773},"different-environments","Different environments",[18,21776,21777],{},"Let’s say we are developing a web service and want users to interact with this service via our android app. We have\nmultiple environments for this service to be able to test it before deploying to production. Namely, we have a test\nsystem, a staging system, and a production system. We can also start this service on our local machine, to test the\nlocal changes we made on the service or the app.",[18,21779,21780],{},"Furthermore, we don’t want to be dependent on a remotely running system or on a locally running service, if we are only\nimproving the android app on parts that don’t interact with the web service.",[18,21782,21783],{},"In order to let some people test the application before releasing it, we want to be able to distribute versions for the\ntest and stage systems as a beta app via google play.",[18,21785,21786],{},"The above requirements result in the following build types:",[577,21788,21789,21792,21795,21798,21801],{},[580,21790,21791],{},"test system",[580,21793,21794],{},"stage system",[580,21796,21797],{},"production sytem -> we can just use the default release build type",[580,21799,21800],{},"local service",[580,21802,21803],{},"no service at all -> mocked services",[3469,21805,21807],{"id":21806},"different-urls-based-on-the-build-type","Different URLs based on the build type",[18,21809,21810],{},"The first three are the most trivial to achieve. The build types allow us to define custom fields (buildConfigField) for\nour application, which we can use to have a differnt URL for each of the environments. A buildConfigField receives 3\nparameters: the type of the field, the name of the field, and the value of the field. This field will then be put into a\nBuildConfig java class that is generated on build time.",[18,21812,21813],{},"Note, that the exact value of the buildConfigField is copied into the generated java class, so if we define Strings, we\nhave to put the double quotes around the String for it to be correct. So the values of the String buildConfigFields in\nthe build.gradle are wrapped by single quotes, as well as double quotes – single quotes for the gradle file and double\nquotes for the resulting java class.",[18,21815,21816],{},"The local service can be configured in a very similar way, we just can’t use a static URL or IP, since we want it to\npoint to the host of the developer that built the app, and not just a single host. Luckily, we can use some code in the\ngradle file 🙂 If we use ‘InetAddress.getLocalHost().getCanonicalHostName()’ in the build, we get the host that ran the\nbuild.",[18,21818,21819],{},"To be sure which app is currently running, we also put an ‘environment’ field to each build type, which can be appended\nto the title of the app (except for the release build) to avoid mistakenly testing on the wrong environment.",[18,21821,21822],{},"The builds for test, stage and production should be all built with the release certificate, since we want to upload them\nto the playstore.",[18,21824,21825],{},"With these additions applied, our builtTypes look like this:",[43,21827,21829],{"className":21152,"code":21828,"language":21154,"meta":48,"style":48},"\n buildTypes {\n local{\n debuggable true\n signingConfig signingConfigs.debug\n buildConfigField 'String', 'ENVIRONMENT', '\"LOCAL\"';\n buildConfigField 'String', 'API_URL', '\"http://'+ InetAddress.getLocalHost().getCanonicalHostName() + ':8080/\"';\n }\n tst{ // build types may not start with 'test'\n debuggable true\n signingConfig signingConfigs.release\n buildConfigField 'String', 'ENVIRONMENT', '\"TEST\"';\n buildConfigField 'String', 'API_URL', '\"https://my-service-test.mydomain/\"';\n }\n stage{\n debuggable true\n signingConfig signingConfigs.release\n buildConfigField 'String', 'ENVIRONMENT', '\"STAGE\"';\n buildConfigField 'String', 'API_URL', '\"https://my-service-stage.mydomain/\"';\n }\n release {\n debuggable false\n minifyEnabled false\n signingConfig signingConfigs.release\n proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n buildConfigField 'String', 'ENVIRONMENT', '\"PROD\"';\n buildConfigField 'String', 'API_URL', '\"https://my-service.mydomain/\"';\n }\n }\n\n",[50,21830,21831,21835,21839,21843,21848,21853,21858,21863,21867,21871,21875,21880,21885,21890,21894,21898,21902,21906,21911,21916,21920,21924,21929,21933,21937,21941,21946,21951,21955],{"__ignoreMap":48},[53,21832,21833],{"class":55,"line":56},[53,21834,500],{"emptyLinePlaceholder":499},[53,21836,21837],{"class":55,"line":86},[53,21838,21161],{},[53,21840,21841],{"class":55,"line":126},[53,21842,21185],{},[53,21844,21845],{"class":55,"line":163},[53,21846,21847],{}," debuggable true\n",[53,21849,21850],{"class":55,"line":186},[53,21851,21852],{}," signingConfig signingConfigs.debug\n",[53,21854,21855],{"class":55,"line":221},[53,21856,21857],{}," buildConfigField 'String', 'ENVIRONMENT', '\"LOCAL\"';\n",[53,21859,21860],{"class":55,"line":242},[53,21861,21862],{}," buildConfigField 'String', 'API_URL', '\"http://'+ InetAddress.getLocalHost().getCanonicalHostName() + ':8080/\"';\n",[53,21864,21865],{"class":55,"line":273},[53,21866,12898],{},[53,21868,21869],{"class":55,"line":279},[53,21870,21203],{},[53,21872,21873],{"class":55,"line":496},[53,21874,21847],{},[53,21876,21877],{"class":55,"line":503},[53,21878,21879],{}," signingConfig signingConfigs.release\n",[53,21881,21882],{"class":55,"line":509},[53,21883,21884],{}," buildConfigField 'String', 'ENVIRONMENT', '\"TEST\"';\n",[53,21886,21887],{"class":55,"line":515},[53,21888,21889],{}," buildConfigField 'String', 'API_URL', '\"https://my-service-test.mydomain/\"';\n",[53,21891,21892],{"class":55,"line":521},[53,21893,12898],{},[53,21895,21896],{"class":55,"line":527},[53,21897,21221],{},[53,21899,21900],{"class":55,"line":533},[53,21901,21847],{},[53,21903,21904],{"class":55,"line":539},[53,21905,21879],{},[53,21907,21908],{"class":55,"line":545},[53,21909,21910],{}," buildConfigField 'String', 'ENVIRONMENT', '\"STAGE\"';\n",[53,21912,21913],{"class":55,"line":4941},[53,21914,21915],{}," buildConfigField 'String', 'API_URL', '\"https://my-service-stage.mydomain/\"';\n",[53,21917,21918],{"class":55,"line":4949},[53,21919,12898],{},[53,21921,21922],{"class":55,"line":4957},[53,21923,21239],{},[53,21925,21926],{"class":55,"line":4966},[53,21927,21928],{}," debuggable false\n",[53,21930,21931],{"class":55,"line":4973},[53,21932,21754],{},[53,21934,21935],{"class":55,"line":4978},[53,21936,21879],{},[53,21938,21939],{"class":55,"line":4984},[53,21940,21759],{},[53,21942,21943],{"class":55,"line":5001},[53,21944,21945],{}," buildConfigField 'String', 'ENVIRONMENT', '\"PROD\"';\n",[53,21947,21948],{"class":55,"line":5007},[53,21949,21950],{}," buildConfigField 'String', 'API_URL', '\"https://my-service.mydomain/\"';\n",[53,21952,21953],{"class":55,"line":5016},[53,21954,12898],{},[53,21956,21957],{"class":55,"line":5021},[53,21958,860],{},[18,21960,21961],{},"After syncing the gradle file, we can access the URL in the java code through the BuildConfig class and don’t need any\ncode to differentiate between the environments, as this URL is based on the buildType that we selected.",[43,21963,21965],{"className":11460,"code":21964,"language":11462,"meta":48,"style":48},"BuildConfig.API_URL\n",[50,21966,21967],{"__ignoreMap":48},[53,21968,21969],{"class":55,"line":56},[53,21970,21964],{},[3469,21972,21974],{"id":21973},"mocked-services","Mocked Services",[18,21976,21977],{},"For the mocked services, I’ll provide you with two different approaches, which both have their upsides and downsides.",[18,21979,21980],{},"The first approach is to use more build types.",[18,21982,21983],{},"The second approach is using two product flavors.",[649,21985,21987],{"id":21986},"mocked-services-via-build-type","Mocked Services via build type",[18,21989,21990],{},"We add the config we need to the ‘debug’ buildType:",[43,21992,21994],{"className":21152,"code":21993,"language":21154,"meta":48,"style":48}," buildTypes {\n debug{\n buildConfigField 'String', 'ENVIRONMENT', '\"DEV\"';\n buildConfigField 'String', 'API_URL', '\"https://not.really.needed/\"';\n }\n ...\n }\n\n",[50,21995,21996,22000,22004,22009,22014,22018,22023],{"__ignoreMap":48},[53,21997,21998],{"class":55,"line":56},[53,21999,21161],{},[53,22001,22002],{"class":55,"line":86},[53,22003,21166],{},[53,22005,22006],{"class":55,"line":126},[53,22007,22008],{}," buildConfigField 'String', 'ENVIRONMENT', '\"DEV\"';\n",[53,22010,22011],{"class":55,"line":163},[53,22012,22013],{}," buildConfigField 'String', 'API_URL', '\"https://not.really.needed/\"';\n",[53,22015,22016],{"class":55,"line":186},[53,22017,12898],{},[53,22019,22020],{"class":55,"line":221},[53,22021,22022],{}," ...\n",[53,22024,22025],{"class":55,"line":242},[53,22026,860],{},[18,22028,22029],{},"As we’ve already defined the ‘environment’ as a buildConfigField, we can just use it in our code to decide whether we\nshould use the real service calls or the mocked services.",[18,22031,22032],{},"Personally, I like to use a custom Application class in order to provide singleton instances of the Services I use in an\nandroid app, so I’ll just use this approach to illustrate the use of the mocked services.",[18,22034,22035],{},"We create a DemoService interface with two implementations, one for calling the web api, and one mocked implementation,\nreturning only static data. Depending on the set ‘environment’, we use the appropriate implementation of the service.",[43,22037,22039],{"className":288,"code":22038,"language":290,"meta":48,"style":48},"public class DemoApplication extends Application {\n private DemoService demoService;\n public DemoService getDemoService() {\n if (demoService == null) {\n demoService = createDemoService();\n }\n return demoService;\n }\n private DemoService createDemoService() {\n if (\"DEV\".equals(BuildConfig.ENVIRONMENT)) {\n return new DemoServiceMockImpl();\n } else {\n return new DemoServiceWebApiImpl();\n }\n }\n}\n\n",[50,22040,22041,22046,22051,22056,22061,22066,22070,22075,22079,22084,22089,22094,22098,22103,22107,22111],{"__ignoreMap":48},[53,22042,22043],{"class":55,"line":56},[53,22044,22045],{},"public class DemoApplication extends Application {\n",[53,22047,22048],{"class":55,"line":86},[53,22049,22050],{}," private DemoService demoService;\n",[53,22052,22053],{"class":55,"line":126},[53,22054,22055],{}," public DemoService getDemoService() {\n",[53,22057,22058],{"class":55,"line":163},[53,22059,22060],{}," if (demoService == null) {\n",[53,22062,22063],{"class":55,"line":186},[53,22064,22065],{}," demoService = createDemoService();\n",[53,22067,22068],{"class":55,"line":221},[53,22069,12898],{},[53,22071,22072],{"class":55,"line":242},[53,22073,22074],{}," return demoService;\n",[53,22076,22077],{"class":55,"line":273},[53,22078,860],{},[53,22080,22081],{"class":55,"line":279},[53,22082,22083],{}," private DemoService createDemoService() {\n",[53,22085,22086],{"class":55,"line":496},[53,22087,22088],{}," if (\"DEV\".equals(BuildConfig.ENVIRONMENT)) {\n",[53,22090,22091],{"class":55,"line":503},[53,22092,22093],{}," return new DemoServiceMockImpl();\n",[53,22095,22096],{"class":55,"line":509},[53,22097,15629],{},[53,22099,22100],{"class":55,"line":515},[53,22101,22102],{}," return new DemoServiceWebApiImpl();\n",[53,22104,22105],{"class":55,"line":521},[53,22106,12898],{},[53,22108,22109],{"class":55,"line":527},[53,22110,860],{},[53,22112,22113],{"class":55,"line":533},[53,22114,282],{},[18,22116,22117],{},"With this approach, we have to make sure that the DemoApplication is the only place, where an instance of this service\nis created.",[18,22119,22120],{},"Upsides:",[577,22122,22123,22126],{},[580,22124,22125],{},"Easy configuration",[580,22127,22128],{},"Fast build speed (+1 build type = +1 APK to build)",[18,22130,22131],{},"Downsides:",[577,22133,22134,22137],{},[580,22135,22136],{},"We need to check the environment in the code",[580,22138,22139],{},"We ship the mock code in the production APK",[649,22141,22143],{"id":22142},"mocked-services-via-product-flavors","Mocked Services via product flavors",[18,22145,22146],{},"In this approach, instead of adding a new buildType, we add a build flavor:",[43,22148,22150],{"className":21152,"code":22149,"language":21154,"meta":48,"style":48}," productFlavors {\n webApi {}\n mock {}\n }\n\n",[50,22151,22152,22157,22162,22167],{"__ignoreMap":48},[53,22153,22154],{"class":55,"line":56},[53,22155,22156],{}," productFlavors {\n",[53,22158,22159],{"class":55,"line":86},[53,22160,22161],{}," webApi {}\n",[53,22163,22164],{"class":55,"line":126},[53,22165,22166],{}," mock {}\n",[53,22168,22169],{"class":55,"line":163},[53,22170,860],{},[18,22172,22173],{},"We can still use the application to provide a singleton of our service, but we don’t have to check the environment\nanymore, since with product flavors, we can place different implementations with the same filename in each product\nflavor.",[43,22175,22177],{"className":288,"code":22176,"language":290,"meta":48,"style":48},"public class DemoApplication extends Application {\n private DemoService demoService;\n public DemoService getDemoService() {\n if (demoService == null) {\n demoService = new DemoServiceImpl();\n }\n return demoService;\n }\n}\n\n",[50,22178,22179,22183,22187,22191,22195,22200,22204,22208,22212],{"__ignoreMap":48},[53,22180,22181],{"class":55,"line":56},[53,22182,22045],{},[53,22184,22185],{"class":55,"line":86},[53,22186,22050],{},[53,22188,22189],{"class":55,"line":126},[53,22190,22055],{},[53,22192,22193],{"class":55,"line":163},[53,22194,22060],{},[53,22196,22197],{"class":55,"line":186},[53,22198,22199],{}," demoService = new DemoServiceImpl();\n",[53,22201,22202],{"class":55,"line":221},[53,22203,12898],{},[53,22205,22206],{"class":55,"line":242},[53,22207,22074],{},[53,22209,22210],{"class":55,"line":273},[53,22211,860],{},[53,22213,22214],{"class":55,"line":279},[53,22215,282],{},[18,22217,22218],{},"We’ll put one DemoServiceImpl into the ‘src/main/webApi/’ directory and another one into the ‘src/main/mock/’ directory,\nas those directories represent the specific code for the product flavor.",[18,22220,22221],{},"Note that you can’t put two java classes, which have the same name, into main as well as into a product flavor. Java\nclasses can’t be overridden by product flavors, only resources can.",[18,22223,22224],{},[1794,22225],{"alt":22226,"src":22227},"productFlavors","https://media.synyx.de/uploads//2016/08/productFlavors-300x265.png",[43,22229,22231],{"className":288,"code":22230,"language":290,"meta":48,"style":48},"public interface DemoService {\n /**\n * @return list of stuff, may be empty\n */\n List\u003CString> getStuff();\n}\n\n",[50,22232,22233,22238,22243,22248,22253,22258],{"__ignoreMap":48},[53,22234,22235],{"class":55,"line":56},[53,22236,22237],{},"public interface DemoService {\n",[53,22239,22240],{"class":55,"line":86},[53,22241,22242],{}," /**\n",[53,22244,22245],{"class":55,"line":126},[53,22246,22247],{}," * @return list of stuff, may be empty\n",[53,22249,22250],{"class":55,"line":163},[53,22251,22252],{}," */\n",[53,22254,22255],{"class":55,"line":186},[53,22256,22257],{}," List\u003CString> getStuff();\n",[53,22259,22260],{"class":55,"line":221},[53,22261,282],{},[18,22263,22264],{},[27,22265,22266],{},"webApi:",[43,22268,22270],{"className":288,"code":22269,"language":290,"meta":48,"style":48},"public class DemoServiceImpl implements DemoService {\n @Override\n public List\u003CString> getStuff() {\n List\u003CString> stuff = new ArrayList\u003C>();\n // do web request and put the results into 'stuff'\n return stuff;\n }\n}\n\n",[50,22271,22272,22277,22281,22286,22291,22296,22301,22305],{"__ignoreMap":48},[53,22273,22274],{"class":55,"line":56},[53,22275,22276],{},"public class DemoServiceImpl implements DemoService {\n",[53,22278,22279],{"class":55,"line":86},[53,22280,15609],{},[53,22282,22283],{"class":55,"line":126},[53,22284,22285],{}," public List\u003CString> getStuff() {\n",[53,22287,22288],{"class":55,"line":163},[53,22289,22290],{}," List\u003CString> stuff = new ArrayList\u003C>();\n",[53,22292,22293],{"class":55,"line":186},[53,22294,22295],{}," // do web request and put the results into 'stuff'\n",[53,22297,22298],{"class":55,"line":221},[53,22299,22300],{}," return stuff;\n",[53,22302,22303],{"class":55,"line":242},[53,22304,860],{},[53,22306,22307],{"class":55,"line":273},[53,22308,282],{},[18,22310,22311],{},[27,22312,22313],{},"mock:",[43,22315,22317],{"className":288,"code":22316,"language":290,"meta":48,"style":48},"public class DemoServiceImpl implements DemoService {\n private static List\u003CString> stuff = new ArrayList\u003C>();\n public DemoServiceImpl() {\n stuff.add(\"foo\");\n stuff.add(\"bar\");\n stuff.add(\"baz\");\n }\n @Override\n public List\u003CString> getStuff() {\n return stuff;\n }\n}\n\n",[50,22318,22319,22323,22328,22333,22338,22343,22348,22352,22356,22360,22364,22368],{"__ignoreMap":48},[53,22320,22321],{"class":55,"line":56},[53,22322,22276],{},[53,22324,22325],{"class":55,"line":86},[53,22326,22327],{}," private static List\u003CString> stuff = new ArrayList\u003C>();\n",[53,22329,22330],{"class":55,"line":126},[53,22331,22332],{}," public DemoServiceImpl() {\n",[53,22334,22335],{"class":55,"line":163},[53,22336,22337],{}," stuff.add(\"foo\");\n",[53,22339,22340],{"class":55,"line":186},[53,22341,22342],{}," stuff.add(\"bar\");\n",[53,22344,22345],{"class":55,"line":221},[53,22346,22347],{}," stuff.add(\"baz\");\n",[53,22349,22350],{"class":55,"line":242},[53,22351,860],{},[53,22353,22354],{"class":55,"line":273},[53,22355,15609],{},[53,22357,22358],{"class":55,"line":279},[53,22359,22285],{},[53,22361,22362],{"class":55,"line":496},[53,22363,22300],{},[53,22365,22366],{"class":55,"line":503},[53,22367,860],{},[53,22369,22370],{"class":55,"line":509},[53,22371,282],{},[18,22373,22374],{},"For a class in the respective product flavor to be included in the class path of the project in the IDE (thus enabling\nall the nice and fancy IDE features for it), a build type that uses this product flavor needs to be selected. As you may\nhave noticed, each of the defined buildTypes is now present twice in the build types dropdown, once for each product\nflavor. This also means that if you build the app via ‘./gradlew build’, each of the buildTypes will be built once for\nevery product flavor, effectively doubling the build time. If you only selectively build single build types, this should\nbe no problem.",[18,22376,22377],{},[1794,22378],{"alt":22379,"src":22380},"buildTypes","https://media.synyx.de/uploads//2016/08/buildTypes-1-300x266.png",[577,22382,22383,22386],{},[580,22384,22385],{},"No code checks needed (for this usecase of product flavors)",[580,22387,22388],{},"Clean separation of release code and mock code",[18,22390,22131],{},[577,22392,22393,22396,22399],{},[580,22394,22395],{},"Configuration and development are a bit trickier",[580,22397,22398],{},"Slower build speed (For each product flavor, an APK for every buildType is built)",[580,22400,22401],{},"Compilation errors in currently unused flavors may go unnoticed, as the classes in unused flavors aren’t compiled",[649,22403,22404],{"id":11809},"That’s it",[18,22406,22407],{},"Which of the two methods you want to use, is up to you. I prefer the former approach, but in an app that makes more use\nof product flavors as of buildTypes, I’d use the latter one.",[18,22409,22410,22411,986],{},"More details on the build types and product flavors can be found in\nthe ",[585,22412,22415],{"href":22413,"rel":22414},"https://developer.android.com/studio/build/build-variants.html",[589],"official documentation",[18,22417,22418],{},"As always, feel free to share your questions, thoughts and better approaches in the comments 🙂",[607,22420,989],{},{"title":48,"searchDepth":86,"depth":86,"links":22422},[22423,22424,22425,22426],{"id":21364,"depth":86,"text":21712},{"id":21773,"depth":86,"text":21774},{"id":21806,"depth":86,"text":21807},{"id":21973,"depth":86,"text":21974,"children":22427},[22428,22429,22430],{"id":21986,"depth":126,"text":21987},{"id":22142,"depth":126,"text":22143},{"id":11809,"depth":126,"text":22404},[614],"2016-08-17T12:02:04","Different build types in android can be used to build the same application with different configurations. This can be\\npredefined config values like ‘debuggable’, but you can also define your own config values that will be accessible in\\nyour application. This post will show you some ways in which you can use this functionality to easily build your app for\\ndifferent environments of remote services and for better local development.","https://synyx.de/blog/android-building-apks-for-different-environments-using-build-types-and-product-flavors/",{},"/blog/android-building-apks-for-different-environments-using-build-types-and-product-flavors",{"title":21700,"description":21709},"blog/android-building-apks-for-different-environments-using-build-types-and-product-flavors",[5834,21364,22440,21365,8653,22441,22442,22443],"buildconfigfield","flavor","mock","product-flavor","Different build types in android can be used to build the same application with different configurations. This can be predefined config values like ‘debuggable’, but you can also define your…","6oUymYXTFf13mmfpUHQe3ZoLmEGJ1OWeQugBRA0ZGCs",{"id":22447,"title":22448,"author":22449,"body":22450,"category":22570,"date":22571,"description":48,"extension":617,"link":22572,"meta":22573,"navigation":499,"path":22574,"seo":22575,"slug":22454,"stem":22576,"tags":22577,"teaser":22580,"__hash__":22581},"blog/blog/feedback-nach-dem-bahn-modell.md","Feedback nach dem BAHN-Modell",[10932],{"type":11,"value":22451,"toc":22568},[22452,22455,22461,22464,22467,22470,22473,22484,22487,22490,22504,22507,22510,22513,22516,22519,22522,22525,22528,22535,22538,22541,22544,22547,22550,22553,22556,22559,22562],[14,22453,22448],{"id":22454},"feedback-nach-dem-bahn-modell",[18,22456,22457],{},[1794,22458],{"alt":22459,"src":22460},"\"IMG_4095\"","https://media.synyx.de/uploads//2016/08/IMG_4095-1.jpg",[18,22462,22463],{},"Die erste Assoziation mit dem Namen könnte nahelegen, dass im Folgenden ein Monolog über die Zuverlässigkeit oder\nPünktlichkeit der „Deutschen Bahn“ folgt. Jedoch handelt es sich stattdessen beim BAHN-Modell um ein einfaches\nFeedback-Modell, wobei BAHN für „Beobachtung, Auswirkung, Hintergrund und Nachfrage“ steht.",[18,22465,22466],{},"Bevor ich das BAHN-Modell näher erläutere, möchte ich zwei wichtige Fragen aufgreifen: Welche Bedeutung kommt dem\nFeedback im agilen Umfeld zu? Welche Fallstricke können beim Feedbackgeben auftreten?",[18,22468,22469],{},"Im agilen Kontext spielt Feedback eine besondere Rolle. Dabei geht es nicht alleine um das produktbezogene Feedback von\nKunden und Anwender in den Meetings. Sondern auch um das Feedback in den Retrospektiven und besonders in allen weiteren\nalltäglichen Situationen im Beruf. Denn im agilen Umfeld steht die Teamarbeit im Mittelpunkt. Das hat zur Folge, dass\nüberall dort, wo Menschen eng miteinander zusammenarbeiten, die Wahrscheinlichkeit höher ist, dass Konflikte auftreten\nkönnen. Sich gegenseitig Feedback zu geben, kann helfen diese Konflikte zu klären.",[18,22471,22472],{},"Beim konstruktiven Feedback gibt es einige Fallstricke zu beachten:",[5899,22474,22475,22478,22481],{},[580,22476,22477],{},"Der Feedbackempfänger sollte zuvor gefragt werden, ob er Feedback haben möchte. Denn möglicherweise ist dieser gerade\nnicht in der emotionalen Verfassung für Feedback.",[580,22479,22480],{},"Das Feedback sollte in einem passenden Rahmen erfolgen. Feedback auf dem Flur, zwischen „Tür und Angel“ kann dazu\nführen, dass dieses für den Empfänger wie ein Überfall wirkt. Damit der Empfänger sich nicht vorgeführt fühlt und die\nVertraulichkeit gewahrt bleibt, sollte konstruktives Feedback unter 4 Augen (bzw. den Beteiligten) stattfinden.",[580,22482,22483],{},"Damit das Wesentliche einer Botschaft ankommt, sollte das Feedback kurz und konkret sein. Das Feedback wird dann\nkonkret, wenn es sich auf einzelne Beispiele von Beobachtungen oder Gesprochenem bezieht. Eine klare Struktur des\nFeedbacks ohne Füllwörter und Wiederholungen ist kurz und verständlich.",[18,22485,22486],{},"Das BAHN-Modell:",[18,22488,22489],{},"Das BAHN-Modell ist ein Feedback-Modell unter vielen. Was es jedoch attraktiv und interessant macht, ist der einfache\nund klar strukturierte Aufbau:",[5899,22491,22492,22495,22498,22501],{},[580,22493,22494],{},"B = Beobachtung: der Feedbackgeber schildert anhand seiner Beobachtung oder einer Aussage, was ihm aufgefallen ist:\n„Mir ist aufgefallen, dass…“. Somit beginnt das Feedback mit einem konkreten Beispiel. Dem Empfänger wird an dieser\nStelle ermöglicht, falls von seiner Seite Einwände bestehen, einzuhaken. Vielleicht liegt eine Verwechselung oder ein\nMissverständnis in der Beobachtung vor.",[580,22496,22497],{},"A = Auswirkung: an dieser Stelle werden die eigenen Emotionen des Feedbackgebers im Zusammenhang mit der zuvor\nbeschriebenen Beobachtung adressiert: „In mir hat das ausgelöst…“. Der Empfänger erfährt somit etwas über die\nGefühlslage des Gegenübers. Dadurch bekommt das Feedback eine Gewichtung.",[580,22499,22500],{},"H = Hintergrund: hier findet eine Bedeutungsklärung statt: „warum erzähle ich dir das?“. Der Feedbackgeber macht\ndeutlich warum es ihm wichtig ist, das Feedback zu geben",[580,22502,22503],{},"N = Nachfrage: als letzter Punkt folgt eine Verständigungsfrage: „da mir deine Sichtweise wichtig ist, könntest du\ndir vorstellen, dass wir über … sprechen?“. Der Empfänger wird hierbei, auf respektvoller Art und Weise, zum\ngemeinsamen Dialog eingeladen. Er hat die Chance sich zu dem Gesagten zu äußern. Im Gegensatz zu anderen Modellen,\nfolgt keine konkrete Aufforderung oder ein Wunsch zu einer Verhaltensänderung.",[18,22505,22506],{},"Um das BAHN-Modell greifbarer zu machen, folgt ein Beispiel aus dem Arbeitsalltag:",[18,22508,22509],{},"(Der Einstieg in das Feedback-Modell)",[18,22511,22512],{},"Feedbackgeber: „Darf ich dir Feedback geben?“",[18,22514,22515],{},"Feedbackempfänger: „Ja.“",[18,22517,22518],{},"Feedbackgeber: „Mir ist in den letzten fünf bis sechs Meetings aufgefallen, dass du regelmäßig auf dein Handy schaust (\nBeobachtung). Das stört und verärgert mich (Auswirkung). Dadurch habe ich den Eindruck, dass einige wichtige Punkte an\ndir vorbei gehen. Da mir eine gute Zusammenarbeit mit dir am Herzen liegt, interessiert mich deine Sicht zu dem Thema (\nHintergrund). Könntest du dir vorstellen, dass wir über dieses Thema nochmal sprechen? (Nachfrage)“",[18,22520,22521],{},"(Der Ausstieg aus dem Feedback-Modell)",[18,22523,22524],{},"Feedbackempfänger: „Danke für das Feedback.“",[18,22526,22527],{},"Wie anhand des Beispiels zu sehen ist, beginnt das Feedback mit der Frage, ob Feedback in diesem Moment erwünscht ist.\nDer Empfänger könnte immer noch sagen, dass er jetzt keine Zeit mehr habe oder heute kein Feedback haben möchte. Es\nkönnte dann ein andere Termin vereinbart werden.",[18,22529,22530,22531,22534],{},"Der Feedbackgeber steigt anschließend mit einer konkreten Beobachtung in das Feedback ein. Dabei beschreibt er ein\nVerhalten, dass er in der Vergangenheit wahrgenommen hatte. Die Beobachtung sollte keine Wörter enthalten wie\n„immer/nie/jedes Mal/andauernd/ect. hast du…“. Denn dadurch könnte es sein das der Empfänger gedanklich abschweift oder\nsagt: „Nein. Das stimmt nicht.“ oder „Immer ist nicht zutreffend.“. Eine weitere Schwierigkeit in der Beobachtung\nbesteht darin, dass sie gar keine sein könnte. Oftmals wird anstatt einer Beobachtung eine Interpretation\ngenannt: „",[53,22532,22533],{},"…",", dass du aus Langeweile regelmäßig auf dein Handy schaust.“ Die „Langeweile“ ist eine Interpretation\neines beobachtbaren Verhaltens. Sie beruht lediglich auf der Deutung von verbaler und nonverbaler Kommunikation. Sie\nmuss jedoch nicht zutreffend sein. Sollte die Interpretation falsch sein, könnte der Feedbackempfänger direkt entgegnen,\ndass der Feedbackgeber falsch liegt. Oder er könnte verärgert sein: „Woher willst du wissen, ob mir langweilig war oder\nnicht?“. Das Feedbackgespräch wäre dann vermutlich zu Ende.",[18,22536,22537],{},"Die Auswirkung „das stört und verärgert mich“ schildert dem Empfänger welche Emotion die Beobachtung beim Feedbackgeber\nausgelöst hat. In der Regel wünschen sich beide einen respektvollen Umgang, ohne das einer von beiden sich ärgern muss.\nDer Empfänger reagiert daher zumeist überrascht und hört dem Feedbackgeber weiter zu.",[18,22539,22540],{},"Der darauf folgende Hintergrund macht dem Empfänger klar, welche Folgen sein Verhalten aus der Sicht („Dadurch habe ich\nden Eindruck“…) des Feedbackgebers haben könnte.",[18,22542,22543],{},"Mit der Betonung, dass dem Feedbackgeber die „Zusammenarbeit am Herzen liegt“, eröffnet er die Nachfrage mit der Bitte\num ein weiteres Gespräch.",[18,22545,22546],{},"Abschließend wird das Feedback-Modell mit „Danke für das Feedback.“ von Seiten des Empfängers beendet. Das „Danke“\nbezieht sich dabei auf den Mut, die Mühe und den Willen Feedback zu geben. Es impliziert jedoch keine Zustimmung zum\nInhalt.",[18,22548,22549],{},"Warum ist im BAHN-Modell keine Aufforderung oder Wunsch zur Verhaltensänderung enthalten?",[18,22551,22552],{},"Die Antwort liegt in der Frage, was das Ziel des Feedbackgebers ist. Möchte dieser in Erfahrung bringen, warum der\nEmpfänger regelmäßig sein Handy in den Meetings benutzt, dann wird er wahrscheinlich mit einer Aufforderung oder einem\nWunsch zur Verhaltensänderung weniger Erfolg haben. Denn es ist ein Unterschied, ob der Feedbackgeber fragt: „Könntest\ndu dir vorstellen, dass wir über dieses Thema nochmal sprechen?“ oder dem Empfänger sagt, wie er sich in Zukunft\nverhalten soll. Eine Nachfrage zeugt von Empathie, zeigt Interesse am Empfänger und eröffnet einen großen\nHandlungsspielraum. Möglicherweise liefert der Empfänger eine sinnvolle Begründung, wie: „Ich warte auf einen wichtigen\nAnruf, weil mein Kind im Krankenhaus liegt.“ oder „Mir ist tatsächlich langweilig, weil ich nichts zum Meeting beitragen\nkann.“. Beides sind wertvolle Informationen.",[18,22554,22555],{},"Eine Aufforderung hingegen lädt nicht zwangsläufig zum Dialog ein. Es könnte sogar sein, dass sich der Empfänger gerne\nerklärt hätte, aber durch das fehlende Interesse und Verständnis enttäuscht ist. Je nach Grund wird er der Aufforderung\nfolgen, oder eben nicht. Der Handlungsspielraum für Verbesserung der Zusammenarbeit wird dadurch kleiner. Wenn der\nFeedbackgeber jedoch zum Ziel hat so schnell wie möglich eine Verhaltensänderung zu erzielen, dann ist er eventuell\nnicht an den Gründen interessiert. Er kann sich diesen Punkt zeitlich sparen. Ob diese Strategie zum erwünschten\nErgebnis führt, steht auf einem anderen Blatt geschrieben.",[18,22557,22558],{},"Trotz der einfachen Struktur empfiehlt es sich zuvor das Modell mit Kollegen zu üben. Denn für den realen Einsatz kann\neine Routine im Umgang mit dem BAHN-Modell sehr hilfreich sein, um die oben genannten Fallstricke zu vermeiden.",[18,22560,22561],{},"Ich wünsche viel Spaß beim Feedback geben!",[18,22563,22564],{},[1794,22565],{"alt":22566,"src":22567},"\"IMG_4094\"","https://media.synyx.de/uploads//2016/08/IMG_4094-1.jpg",{"title":48,"searchDepth":86,"depth":86,"links":22569},[],[614],"2016-08-16T14:40:26","https://synyx.de/blog/feedback-nach-dem-bahn-modell/",{},"/blog/feedback-nach-dem-bahn-modell",{"title":22448,"description":48},"blog/feedback-nach-dem-bahn-modell",[22578,22579,4505,3122,3912],"agil","feedback","Die erste Assoziation mit dem Namen könnte nahelegen, dass im Folgenden ein Monolog über die Zuverlässigkeit oder Pünktlichkeit der „Deutschen Bahn“ folgt. Jedoch handelt es sich stattdessen beim BAHN-Modell um…","MKef7Q2qwsDtFACkiazT83kdEg4Y1PEmVU5T-KENlkg",{"id":22583,"title":22584,"author":22585,"body":22586,"category":23458,"date":23459,"description":22595,"extension":617,"link":23460,"meta":23461,"navigation":499,"path":23462,"seo":23463,"slug":22590,"stem":23464,"tags":23465,"teaser":23469,"__hash__":23470},"blog/blog/verstehen-und-verstanden-werden-das-gordon-modell-im-berufsleben.md","Verstehen und verstanden werden – Das Gordon-Modell im Berufsleben",[11916],{"type":11,"value":22587,"toc":23435},[22588,22591,22596,22599,22604,22607,22612,22626,22635,22638,22642,22645,22648,22653,22656,22661,22666,22669,22674,22679,22682,22687,22693,22696,22700,22710,22715,22718,22722,22737,22744,22749,22752,22755,22760,22770,22773,22778,22781,22791,22798,22804,22807,22835,22838,22842,22847,22850,22853,22856,22859,22862,22866,22869,22874,22885,22889,22906,22911,22914,22918,23040,23044,23053,23058,23061,23064,23079,23094,23099,23110,23116,23119,23148,23151,23156,23166,23171,23174,23179,23182,23187,23190,23195,23198,23202,23211,23216,23219,23222,23225,23292,23295,23299,23304,23310,23322,23329,23335,23340,23344,23347,23351,23358,23365,23372,23379],[14,22589,22584],{"id":22590},"verstehen-und-verstanden-werden-das-gordon-modell-im-berufsleben",[18,22592,22593],{},[27,22594,22595],{},"Wir alle haben Beziehungen.",[18,22597,22598],{},"Manche Beziehungen sind enger, etwa zu Familienangehörigen und Freunden, andere lockerer, etwa zu Arbeitskollegen oder\nNachbarn. Mit manchen Menschen unterhalte ich mich, lerne sie aber nie wirklich kennen.",[6653,22600,22601],{},[18,22602,22603],{},"Egal, ob ich Menschen nahe komme oder Abstand halte, ich habe eine Beziehung zu ihnen.",[18,22605,22606],{},"Kommunikation erlaubt uns, die Form unserer Beziehungen zu verändern. Durch gute Kommunikation verbessern wir\nBeziehungen, durch schlechte Kommunikation verschlechtern wir sie.",[18,22608,22609],{},[27,22610,22611],{},"Doch wodurch zeichnet sich gute und wodurch schlechte Kommunikation aus?",[18,22613,22614,22619,22620,22625],{},[585,22615,22618],{"href":22616,"rel":22617},"https://de.wikipedia.org/wiki/Thomas_Gordon_(Psychologe)",[589],"Thomas Gordon",", ein amerikanischer Psychologe, entwickelte\ndas sogenannte ",[585,22621,22624],{"href":22622,"rel":22623},"https://de.wikipedia.org/wiki/Gordon-Modell",[589],"Gordon-Modell",", ein Kommunikationsmodell zur Lösung von\nKonflikten.",[18,22627,22628,22629,22634],{},"In seinem\nBuch ",[585,22630,22633],{"href":22631,"rel":22632},"https://www.amazon.de/Familienkonferenz-L%C3%B6sung-Konflikten-zwischen-Eltern/dp/3453602323/ref=sr_1_1?ie=UTF8&qid=1468915359&sr=8-1&keywords=familienkonferenz",[589],"Familienkonferenz",",\ndas im Jahre 1970 erschien, beschreibt Gordon erstmals dieses Kommunikationsmodell zur Lösung von Konflikten zwischen\nEltern und Kind.",[18,22636,22637],{},"Das Gordon-Modell lässt sich jedoch auf jegliche Formen von Beziehungen anwenden, sowohl im privaten, als auch auch im\nberuflichen Bereich.",[3469,22639,22641],{"id":22640},"verhaltensfenster","Verhaltensfenster",[18,22643,22644],{},"Das Gordon-Modell bietet verschiedene Kommunikationswerkzeuge zur Lösung von Konflikten an. Welches Werkzeug wann\nsinnvoll ist, hängt dabei ganz von der Situation ab. Es ist wichtig zu erkennen, welcher der Beteiligten das Problem\nbesitzt, um zu entscheiden, was für die Situation angemessen ist.",[18,22646,22647],{},"Das sogenannte Verhaltensfenster veranschaulicht dies in drei unterschiedlichen Zuständen:",[18,22649,22650],{},[27,22651,22652],{},"Jemand anderes besitzt ein Problem",[18,22654,22655],{},"Mir geht es gut, ich kann aber wahrnehmen, dass jemand anderes ein Problem hat. Für mich ist das Problem nicht greifbar,\nes hat nichts mit mir zu tun und schadet mir nicht.",[18,22657,22658],{},[573,22659,22660],{},"Beispiel: Arbeitskollege erzählt, dass er sich vom Chef ungerecht behandelt fühlt.",[18,22662,22663],{},[27,22664,22665],{},"Problemfreie Zone",[18,22667,22668],{},"Keiner hat ein Problem.",[18,22670,22671],{},[573,22672,22673],{},"Beispiel: Arbeitskollege erzählt von seinem Sommerurlaub.",[18,22675,22676],{},[27,22677,22678],{},"Ich besitze ein Problem",[18,22680,22681],{},"Ich habe ein Problem, das mir schadet oder weh tut – und das liegt möglicherweise an der Verhaltensweise einer anderen\nPerson.",[18,22683,22684],{},[573,22685,22686],{},"Beispiel: Arbeitskollege surft öfters privat im Internet statt seine Arbeit zu erledigen, die dann an mir hängen\nbleibt.",[18,22688,22689],{},[1794,22690],{"alt":22691,"src":22692},"\"Verhaltensfenster\"","https://media.synyx.de/uploads//2016/07/verhaltensfenster4-1.png",[18,22694,22695],{},"Die oberen beiden Bereiche des Verhaltensfensters beinhalten Verhaltensweisen, die für mich akzeptabel sind, während der\nuntere Bereich die für mich nicht akzeptablen Verhaltensweisen enthält. Ob etwas als akzeptabel oder als nicht\nakzeptabel empfunden wird, kann sich allerdings je nach Kontext oder Zeit verändern.",[3469,22697,22699],{"id":22698},"aktives-zuhören","Aktives Zuhören",[6653,22701,22702,22705],{},[18,22703,22704],{},"In der zwischenmenschlichen Kommunikation geht es darum, zu verstehen und verstanden zu werden.",[18,22706,22707,22708],{},"– ",[573,22709,22618],{},[18,22711,22712],{},[27,22713,22714],{},"Wer ein Problem hat, empfindet negative Gefühle.",[18,22716,22717],{},"Nur diese Person besitzt diese Gefühle und Gedanken, daher kann nur er/sie dieses Problem lösen. Wenn man versucht die\nProbleme eines anderen zu lösen, signalisiert man demjenigen womöglich nur, dass man das Gegenüber für unfähig hält,\nselbst eine Lösung zu finden.",[649,22719,22721],{"id":22720},"beispiel","Beispiel",[6653,22723,22724,22727,22732],{},[18,22725,22726],{},"Gespräch zwischen zwei Kollegen beim Mittagessen:",[18,22728,22729],{},[573,22730,22731],{},"„XY hat vorhin einen Workshop gehalten zu dem neuen Framework, das wir demnächst in unserem neuen Projekt\nausprobieren wollen. Ich konnte nur schwer folgen und habe gefühlt die Hälfte nicht verstanden.“",[18,22733,22734],{},[573,22735,22736],{},"„Ja, es kann manchmal durchaus herausfordernd sein, XY zu folgen. Er kann teilweise echt hektisch sein. Aber warum\nhast du denn nicht einfach nachgefragt, wenn du etwas nicht verstanden hast?“",[18,22738,22739,22740,22743],{},"Einerseits erfährt derjenige mit dem Problem Zustimmung ",[573,22741,22742],{},"„Ja, es kann manchmal durchaus herausfordernd sein, XY zu\nfolgen“",", gleichzeitig aber wird er belehrt und darauf hingewiesen, warum er denn nicht einfach nachgefragt habe; als ob\ner nicht in der Lage sei, selbst auf diese Idee zu kommen.",[18,22745,22746],{},[27,22747,22748],{},"Hilfe zur Selbsthilfe",[18,22750,22751],{},"Besser ist es, wenn ich als Hörer versuche, meinem Gegenüber dabei zu helfen, seine Probleme selbst zu erkennen, zu\nanalysieren und eigene Lösungswege zu finden.",[18,22753,22754],{},"Ein Werkzeug dafür ist das aktive Zuhören. Dadurch wird Vertrauen und Zuwendung ausgedrückt und dem Problembesitzer\ndabei geholfen, sich selbst zu helfen und dadurch selbstbestimmter und unabhängiger zu werden.",[18,22756,22757],{},[27,22758,22759],{},"Verschlüsselte Botschaften",[18,22761,22762,22763,22766,22767,986],{},"Teilweise können Probleme ganz klar geäußert werden, durch Äußerungen wie ",[573,22764,22765],{},"„Das Geräusch hat mich erschreckt“"," oder\n",[573,22768,22769],{},"„Ich bin müde und deshalb nicht so gut drauf“",[18,22771,22772],{},"Manchmal können Gedanken und Gefühle aber nicht direkt mitgeteilt werden. Man kann beispielsweise traurig sein, aber\ndiese Erfahrung nicht sprachlich vermitteln. Je nach Gefühlszustand kann es schwierig sein, das innere Erleben in Worte\nzu fassen. Vielmehr ist das, was über Gedanken und Gefühle mitgeteilt wird dann eher als eine Art verschlüsselte\nBotschaft zu verstehen.",[18,22774,22775],{},[27,22776,22777],{},"Botschaften entschlüsseln",[18,22779,22780],{},"Hier kommt das aktive Zuhören zum Einsatz. Ich als Hörer habe die Aufgabe, die Botschaft zu entschlüsseln, indem ich\ndurch Wiedergabe des Gesagten in meinen eigenen Worten beim Sprecher nachfrage, ob ich die Botschaft richtig\nentschlüsselt habe. Dabei sind eigene Botschaften wie Urteile oder Ratschläge tunlichst zu vermeiden.",[18,22782,22783,22784,10118,22787,22790],{},"Wenn der Sinn richtig wiedergegeben wurde, wird der Sprecher zustimmen – und sei es nur durch ein kurzes ",[573,22785,22786],{},"„richtig“",[573,22788,22789],{},"„ja“"," – und fortfahren.",[18,22792,22793,22794,22797],{},"Wenn der Sinn nicht korrekt entschlüsselt wurde, wird der Sprecher korrigieren ",[573,22795,22796],{},"„Nein, ich meine eher …“"," und erst\ndanach fortfahren.",[18,22799,22800],{},[1794,22801],{"alt":22802,"src":22803},"\"Botschaften entschlüsseln\"","https://media.synyx.de/uploads//2016/07/entschluesseln.jpg",[649,22805,22721],{"id":22806},"beispiel-1",[6653,22808,22809,22811,22815,22820,22825,22830],{},[18,22810,22726],{},[18,22812,22813],{},[573,22814,22731],{},[18,22816,22817],{},[573,22818,22819],{},"„Meinst du, XY hat zu schnell geredet, sodass es dir schwer fiel, gedanklich zu folgen?“",[18,22821,22822],{},[573,22823,22824],{},"„Nein, eigentlich war der Workshop wirklich gut vorbereitet und XY hat sich alle Mühe gegeben, nicht zu hektisch zu\nsprechen. Es ist eher, dass ich schon länger nicht mehr mit dieser Programmiersprache zu tun hatte, die anderen\nWorkshop-Teilnehmer aber schon.“",[18,22826,22827],{},[573,22828,22829],{},"„Du hast Angst das neue Wissen nicht so schnell aufsaugen zu können wie deine Kollegen.“",[18,22831,22832],{},[573,22833,22834],{},"„Richtig. Ich fühle mich manchmal regelrecht abgehängt von meinen Kollegen. Ich habe mir schon länger vorgenommen,\nwieder mehr Fachliteratur zu lesen. In letzter Zeit habe ich das einfach zu sehr schleifen lassen. Ich sollte das neue\nFramework zum Anlass nehmen und wieder damit beginnen.“",[18,22836,22837],{},"In diesem Gespräch erfährt derjenige mit dem Problem Verständnis vom Zuhörer und findet gleichzeitig selbst zur Lösung\nseines Problems.",[649,22839,22841],{"id":22840},"best-practices","Best Practices",[18,22843,22844],{},[27,22845,22846],{},"Ich kann nur richtig zuhören…",[18,22848,22849],{},"… wenn ich aufmerksam bin. Ich kann nicht aufmerksam sein, wenn ich gerade eigentlich keine Zeit oder Lust zum Zuhören\nhabe.",[18,22851,22852],{},"… wenn ich den anderen annehmen kann wie er ist, ohne seine Aussagen direkt zu bewerten oder zu beurteilen.",[18,22854,22855],{},"… wenn ich still bin. Wenn ich gleichzeitig rede oder überlege, was ich als nächstes sage, kann ich nicht wirklich\nkonzentriert zuhören.",[18,22857,22858],{},"… wenn ich ernsthaft versuche mich in das Gesagte einzufühlen und die entschlüsselte Botschaft in meinen Worten\nzurückzumelden.",[18,22860,22861],{},"… wenn ich vermeide, den Retter zu spielen, indem ich dem Problembesitzer Lösungsvorschläge vorsetze.",[3469,22863,22865],{"id":22864},"türöffner-vs-kommunikationssperren","Türöffner vs. Kommunikationssperren",[18,22867,22868],{},"Um mit jemandem ins Gespräch zu kommen und mehr über ihn und seine Gedanken und Gefühle zu erfahren, sollten sogenannte\nTüröffner benutzt und Kommunikationssperren vermieden werden.",[18,22870,22871],{},[27,22872,22873],{},"Gespräche einleiten und fortführen",[18,22875,22876,22877,22880,22881,22884],{},"Türöffner sind offene Fragen, die nicht mit einem einfachen ",[573,22878,22879],{},"„Ja“"," oder ",[573,22882,22883],{},"„Nein“"," beantwortet werden können und dadurch\nein Gespräch initiieren.",[649,22886,22888],{"id":22887},"beispiele","Beispiele",[6653,22890,22891,22896,22901],{},[18,22892,22893],{},[573,22894,22895],{},"„Mich würde deine Meinung dazu interessieren.“",[18,22897,22898],{},[573,22899,22900],{},"„Stimmt etwas nicht?“",[18,22902,22903],{},[573,22904,22905],{},"„Was denkst du darüber?“",[18,22907,22908],{},[27,22909,22910],{},"Gespräche im Keim ersticken",[18,22912,22913],{},"Kommunikationssperren hingegen können den Gesprächspartner in die Defensive treiben oder das Gespräch direkt in\nSchweigen ersticken. Keine der Sperren vermittelt Verständnis für denjenigen, der das Problem hat.",[649,22915,22917],{"id":22916},"die-12-kommunikationssperren-nach-gordon","Die 12 Kommunikationssperren nach Gordon",[6653,22919,22920,22925,22930,22935,22940,22945,22950,22955,22960,22965,22970,22975,22980,22985,22990,22995,23000,23005,23010,23015,23020,23025,23030,23035],{},[18,22921,22922],{},[27,22923,22924],{},"Befehlen, Anordnen, Bestimmen",[18,22926,22927],{},[573,22928,22929],{},"„Das muss heute noch getan werden, da gibt es nichts zu diskutieren.“",[18,22931,22932],{},[27,22933,22934],{},"Drohen, Warnen",[18,22936,22937],{},[573,22938,22939],{},"„Wenn das bis nächste Woche nicht erledigt ist, dann haben wir ein Problem miteinander.“",[18,22941,22942],{},[27,22943,22944],{},"Moralisieren, Predigen",[18,22946,22947],{},[573,22948,22949],{},"„Stell dich nicht so an, da muss jeder mal durch.“",[18,22951,22952],{},[27,22953,22954],{},"Ratschläge erteilen, Lösungen vorgeben",[18,22956,22957],{},[573,22958,22959],{},"„Also an deiner Stelle würde ich ja …“",[18,22961,22962],{},[27,22963,22964],{},"Vorträge halten, belehren, Fakten liefern",[18,22966,22967],{},[573,22968,22969],{},"„Also eigentlich sind die Fakten ja folgendermaßen …“",[18,22971,22972],{},[27,22973,22974],{},"Urteile fällen, Vorwürfe machen, kritisieren",[18,22976,22977],{},[573,22978,22979],{},"„Das ist doch Schwachsinn, was du da sagst!“",[18,22981,22982],{},[27,22983,22984],{},"Loben, schmeicheln",[18,22986,22987],{},[573,22988,22989],{},"„Das kriegst du schon hin!“",[18,22991,22992],{},[27,22993,22994],{},"Beschimpfen, lächerlich machen",[18,22996,22997],{},[573,22998,22999],{},"„Tu doch nicht so, als ob du jetzt das erste Mal davon hörst!“",[18,23001,23002],{},[27,23003,23004],{},"Interpretieren, diagnostizieren, analysieren",[18,23006,23007],{},[573,23008,23009],{},"„Das sagst du doch jetzt nur, weil …“",[18,23011,23012],{},[27,23013,23014],{},"Trösten, Sympathie bekunden",[18,23016,23017],{},[573,23018,23019],{},"„Nimm dir das nicht so zu Herzen.“",[18,23021,23022],{},[27,23023,23024],{},"Forschen, fragen, verhören",[18,23026,23027],{},[573,23028,23029],{},"„Was hast du getan, um eine Lösung zu finden?“",[18,23031,23032],{},[27,23033,23034],{},"Zurückziehen, sarkastisch reagieren, ausweichen",[18,23036,23037],{},[573,23038,23039],{},"„Da musst du einfach drüber stehen. Komm, lass uns zusammen einen Kaffee holen gehen, dann kommst du auf andere\nGedanken.“",[3469,23041,23043],{"id":23042},"ich-botschaften","Ich-Botschaften",[6653,23045,23046,23049],{},[18,23047,23048],{},"Wenn ich möchte, dass andere Menschen mich verstehen, muss ich über mich selbst sprechen.",[18,23050,22707,23051],{},[573,23052,22618],{},[18,23054,23055],{},[27,23056,23057],{},"Wenn ich selbst ein Problem habe, bin ich in der Verantwortung, etwas zu unternehmen und die Person mit den für mich\nnicht akzeptablen Verhaltensweisen zu konfrontieren.",[18,23059,23060],{},"Ich muss genau beschreiben, welche Handlungen oder Äußerungen mir Probleme verursachen. Damit mein Gegenüber meine\nGedanken und Gefühle nachvollziehen kann, eignen sich Ich-Botschaften besser als Du-Botschaften. Einerseits bekomme\nich selbst mehr Klarheit über mich und meine Bedürfnisse, andererseits erfährt die konfrontierte Person etwas über meine\ntatsächlichen Bedürfnisse und Gefühle. Außerdem muss mein Gesprächspartner nicht in Verteidigungshaltung gehen, da er\nnicht angegriffen wird.",[649,23062,22888],{"id":23063},"beispiele-1",[6653,23065,23066,23071,23076],{},[18,23067,23068],{},[27,23069,23070],{},"Du-Botschaft",[18,23072,23073],{},[573,23074,23075],{},"„Du bist unhöflich“",[18,23077,23078],{},"Hier muss die konfrontierte Person mehr oder weniger raten, was genau ich als unhöflich in ihrem Verhalten empfinde.",[6653,23080,23081,23086,23091],{},[18,23082,23083],{},[27,23084,23085],{},"Ich-Botschaft",[18,23087,23088],{},[573,23089,23090],{},"„Wenn du mich unterbrichst und nicht ausreden lässt, habe ich das Gefühl, dass meine Teilnahme in diesem Meeting\nnicht erwünscht ist.“",[18,23092,23093],{},"Hier wird konkret beschrieben, was am Verhalten der konfrontierten Person als unhöflich empfunden wird.",[18,23095,23096],{},[27,23097,23098],{},"Eine Ich-Botschaft setzt sich aus folgenden drei Komponenten zusammen:",[5899,23100,23101,23104,23107],{},[580,23102,23103],{},"Eine neutrale, vorwurfsfreie Beschreibung, die keine Verallgemeinerungen oder Interpretationen enthält",[580,23105,23106],{},"Greifbare, konkrete Folgen des Verhaltens der konfrontierten Person für mich",[580,23108,23109],{},"Meine persönlichen Empfindungen angesichts der Situation",[18,23111,23112],{},[1794,23113],{"alt":23114,"src":23115},"\"Ich-Botschaft\"","https://media.synyx.de/uploads//2016/07/ich-botschaft.jpg",[649,23117,22721],{"id":23118},"beispiel-2",[6653,23120,23121,23129,23135,23140],{},[18,23122,23123,6159,23126],{},[573,23124,23125],{},"„Wenn du nicht pünktlich zum vereinbarten Termin erscheinst,",[53,23127,23128],{},"neutrale Beschreibung",[18,23130,23131,23134],{},[573,23132,23133],{},"müssen wir auf dich warten und können nicht pünktlich beginnen, weshalb der Termin dann länger dauert."," [greifbare",[6653,23136,23137],{},[18,23138,23139],{},"Wirkung]",[18,23141,23142,6159,23145],{},[573,23143,23144],{},"Da ich häufig Folgetermine habe, muss ich direkt zum nächsten Termin hetzen. Dadurch fühle ich mich oft in Stress\nversetzt.“",[53,23146,23147],{},"persönliche Empfindung",[649,23149,22841],{"id":23150},"best-practices-1",[18,23152,23153],{},[27,23154,23155],{},"Vermeiden von Verallgemeinerungen und Interpretationen",[18,23157,23158,23159,22880,23162,23165],{},"Beim Beschreiben von Verhalten sollte auf Verallgemeinerungen wie ",[573,23160,23161],{},"„immer“",[573,23163,23164],{},"„nie“"," verzichtet werden.\nInterpretationen oder Urteile sind ebenfalls fehl am Platz. Es geht darum, Verhaltensweisen so neutral wie möglich zu\nbeschreiben und sich darauf zu beschränken, was ich sehen und hören kann. Unverschämtheit, Nervosität oder schlechte\nLaune sind zum Beispiel keine Verhaltensweisen.",[18,23167,23168],{},[27,23169,23170],{},"Zeitnah und situationsbezogen klären",[18,23172,23173],{},"Die nicht akzeptablen Verhaltensweisen sollten zeitnah und situationsbezogen angesprochen werden. Viele negative\nEmotionen bei sich aufstauen zu lassen und die Person später mit mehreren Problemen auf einmal zu konfrontieren ist\nnicht hilfreich.",[18,23175,23176],{},[27,23177,23178],{},"Angemessene Ich-Botschaften",[18,23180,23181],{},"Ich-Botschaften müssen ehrlich und angemessen sein. Wenn ich eine zu nett formulierte Ich-Botschaft gebe, meine\nKörpersprache aber signalisiert, dass ich unheimlich wütend bin, ist die Ich-Botschaft nicht angemessen. Ebenfalls\nnicht angemessen ist eine Ich-Botschaft mit heftiger Übertreibung der persönlichen Empfindung über geringfügige\nEreignisse.",[18,23183,23184],{},[27,23185,23186],{},"Ärger ist kein primäres Gefühl",[18,23188,23189],{},"Wenn ich Ärger empfinde, sollte ich mich fragen, welche Emotion vor dem Ärger präsent war. Was geschah, bevor ich\närgerlich wurde? War ich erschreckt, enttäuscht, verletzt …? Ärger ist kein primäres Gefühl und kann als feindselig und\nvorwurfsvoll interpretiert werden. Dies wiederum kann dazu führen, dass die konfrontierte Person sich angegriffen fühlt\nund defensiv reagiert.",[18,23191,23192],{},[27,23193,23194],{},"Lösung offen halten",[18,23196,23197],{},"Eine Ich-Botschaft sollte keine Lösung enthalten, sondern dem Gegenüber die Chance geben, sein Verhalten selbst zu\nändern.",[3469,23199,23201],{"id":23200},"umschalten","Umschalten",[6653,23203,23204,23207],{},[18,23205,23206],{},"Wenn ich Hilfe haben will, muss ich auch bereit sein, Hilfe zu leisten.",[18,23208,22707,23209],{},[573,23210,22618],{},[18,23212,23213],{},[27,23214,23215],{},"Menschliche Beziehungen und menschliches Verhalten sind komplex.",[18,23217,23218],{},"Ich-Botschaften sind ein praktisches Werkzeug, um jemanden darüber zu informieren, dass sein Verhalten bei mir ein\nProblem hervorruft. Allerdings sind sie keine Garantie dafür, dass sich die konfrontierte Person auf der Stelle und\nbereitwillig ändert.",[18,23220,23221],{},"Die Mitteilung, dass das eigene Verhalten in irgendeiner Form nicht akzeptabel sei, kann ziemlich unerfreulich sein. In\ndiesem Fall muss ich umschalten, das heißt es darf mir nicht mehr darum gehen, mir selbst zu helfen, indem ich mein\nGegenüber konfrontiere, sondern ich muss meinem Gegenüber helfen, mit der Konfrontation umzugehen.",[649,23223,22721],{"id":23224},"beispiel-3",[6653,23226,23227,23230,23237,23243,23246,23252,23257,23262,23267,23272,23277,23282,23287],{},[18,23228,23229],{},"Ich warte seit drei Tagen auf eine E-Mail von meinem Arbeitskollegen mit Daten, die ich zur Erstellung einer\nwichtigen Präsentation brauche.",[18,23231,23232,23233,23236],{},"Ich konfrontiere ihn: ",[573,23234,23235],{},"„Du hast mir die E-Mail mit den Daten, die ich für die Präsentation brauche, noch nicht\ngeschickt. Ich warte nun schon seit drei Tagen darauf. Die Präsentation ist zwar erst nächste Woche, aber da ich vor\nsolchen wichtigen Präsentationen immer sehr aufgeregt bin, will ich mich zeitnah vorbereiten können. Daher versetzt es\nmich in Zeitdruck und Stress, dass ich die Daten von dir noch nicht habe.“"," (Konfrontation)",[18,23238,23239,23240],{},"Er entgegnet: ",[573,23241,23242],{},"„Ich dachte, es eilt nicht so sehr, aber wenn du dich so aufregst, kümmere ich sofort darum und lasse\ndir die Daten zukommen.“",[18,23244,23245],{},"Mein Gegenüber reagiert defensiv, das heißt plötzlich wird meine konfrontative Botschaft zum Problem für meinen\nKollegen. Wenn ich Unterstützung von ihm möchte, muss ich mich zunächst um ihn kümmern, indem ich empathisch zuhöre. Das\nbedeutet, ich schalte um von der Ich-Botschaft zum aktiven Zuhören.",[18,23247,23248,23251],{},[573,23249,23250],{},"„Du denkst, ich bin ungeduldig und nimmst mir das übel.“"," (Zuhören)",[18,23253,23254],{},[573,23255,23256],{},"„Naja, eigentlich hatte ich vor, mich heute darum zu kümmern, aber jetzt fühle ich mich gehetzt und dadurch in Stress\nversetzt.“",[18,23258,23259,23251],{},[573,23260,23261],{},"„Du hast das Gefühl, ich dränge dich zu etwas, das du sowieso tun wolltest.“",[18,23263,23264],{},[573,23265,23266],{},"„Richtig.“",[18,23268,23269,23236],{},[573,23270,23271],{},"„Ich habe von den anderen Kollegen bereits alle benötigten Daten erhalten und wollte spätestens bis Freitag mit der\nVorbereitung fertig werden. Da habe ich mich gewundert, dass ich deine E-Mail noch nicht habe.“",[18,23273,23274],{},[573,23275,23276],{},"„Ich hatte einfach viele Termine und bin schlicht und ergreifend noch nicht dazu gekommen.“",[18,23278,23279,23251],{},[573,23280,23281],{},"„Das verstehe ich. Wenn man selbst viel zu tun hat, kann das leicht passieren.“",[18,23283,23284],{},[573,23285,23286],{},"„Ich kümmere mich noch heute darum. Spätestens heute Abend hast du meine E-Mail mit den aufbereiteten Daten.“",[18,23288,23289],{},[573,23290,23291],{},"„Danke dir!“",[18,23293,23294],{},"Durch aktives Zuhören konnte die emotionale Temperatur des Gesprächspartners etwas heruntergekühlt und das Gespräch mit\neinem positiven Ausgang verlassen werden.",[3469,23296,23298],{"id":23297},"zusammenfassung","Zusammenfassung",[18,23300,23301],{},[27,23302,23303],{},"Wenn ich meine Beziehungen verbessern möchte, muss ich lernen…",[18,23305,23306,23307,12114],{},"… zu identifizieren, wer in einer Situation das Problem besitzt (",[585,23308,22641],{"href":23309},"#verhaltensfenster",[18,23311,23312,23313,23317,23318,12114],{},"… wie ich Gespräche einleiten und fortführen kann (",[585,23314,23316],{"href":23315},"#tueroffner","Türöffner",") und was ich vermeiden sollte, um\nGesprächsversuche nicht im Keim zu ersticken (",[585,23319,23321],{"href":23320},"#kommunikationssperren","Kommunikationssperren",[18,23323,23324,23325,12114],{},"… wie ich richtig zuhören kann (",[585,23326,23328],{"href":23327},"#aktives-zuhoeren","aktives Zuhören",[18,23330,23331,23332,12114],{},"… wie ich mich mitteilen kann, sodass andere mich verstehen (",[585,23333,23043],{"href":23334},"#ich-botschaften",[18,23336,23337],{},[1794,23338],{"alt":22691,"src":23339},"https://media.synyx.de/uploads//2016/07/verhaltensfenster5.png",[3469,23341,23343],{"id":23342},"anmerkung","Anmerkung",[18,23345,23346],{},"Das erweiterte Gordon-Modell enthält Werkzeuge zum Lösen von Bedürfnis- und Wertekonflikten. Um den Rahmen nicht zu\nsprengen wurden diese hier unbeachtet gelassen.",[3469,23348,23350],{"id":23349},"literatur","Literatur",[18,23352,23353],{},[585,23354,23357],{"href":23355,"rel":23356},"https://www.amazon.de/gp/product/3453602323/ref=s9_simh_gw_g14_i1_r?pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=desktop-1&pf_rd_r=N1SZ9K765608G0QW9H4E&pf_rd_t=36701&pf_rd_p=7fb339d7-1d6e-42de-9c12-dadc030ae13c&pf_rd_i=desktop",[589],"Familienkonferenz: Die Lösung von Konflikten zwischen Eltern und Kind",[18,23359,23360],{},[585,23361,23364],{"href":23362,"rel":23363},"https://www.amazon.de/gp/product/3453602331/ref=s9_simh_gw_g14_i2_r?pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=desktop-1&pf_rd_r=N1SZ9K765608G0QW9H4E&pf_rd_t=36701&pf_rd_p=7fb339d7-1d6e-42de-9c12-dadc030ae13c&pf_rd_i=desktop",[589],"Die Neue Familienkonferenz: Kinder erziehen ohne zu strafen",[18,23366,23367],{},[585,23368,23371],{"href":23369,"rel":23370},"https://www.amazon.de/gp/product/3608947086/ref=s9_simh_gw_g14_i5_r?pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=desktop-1&pf_rd_r=N1SZ9K765608G0QW9H4E&pf_rd_t=36701&pf_rd_p=7fb339d7-1d6e-42de-9c12-dadc030ae13c&pf_rd_i=desktop",[589],"Gute Beziehungen: Wie sie entstehen und stärker werden",[18,23373,23374],{},[585,23375,23378],{"href":23376,"rel":23377},"https://www.amazon.de/Managerkonferenz-Effektives-F%C3%BChrungstraining-Thomas-Gordon/dp/3453600002/ref=sr_1_1?ie=UTF8&qid=1468922876&sr=8-1&keywords=managerkonferenz",[589],"Managerkonferenz: Effektives Führungstraining",[18,23380,6985,23381,23386,23391,23396,23401,23406,23411,23416,23421,23426,23431],{},[585,23382,23385],{"href":23383,"rel":23384},"http://localhost:8080/blog/tags/aktives-zuhoeren/",[589],"aktives zuhören",[585,23387,23390],{"href":23388,"rel":23389},"http://localhost:8080/blog/tags/familienkonferenz/",[589],"familienkonferenz",[585,23392,23395],{"href":23393,"rel":23394},"http://localhost:8080/blog/tags/gewaltfreie-kommunikation/",[589],"gewaltfreie kommunikation",[585,23397,23400],{"href":23398,"rel":23399},"http://localhost:8080/blog/tags/gordon/",[589],"gordon",[585,23402,23405],{"href":23403,"rel":23404},"http://localhost:8080/blog/tags/gordon-modell/",[589],"gordon-modell",[585,23407,23410],{"href":23408,"rel":23409},"http://localhost:8080/blog/tags/ich-botschaft/",[589],"ich-botschaft",[585,23412,23415],{"href":23413,"rel":23414},"http://localhost:8080/blog/tags/kommunikation/",[589],"Kommunikation",[585,23417,23420],{"href":23418,"rel":23419},"http://localhost:8080/blog/tags/kommunikationssperren/",[589],"kommunikationssperren",[585,23422,23425],{"href":23423,"rel":23424},"http://localhost:8080/blog/tags/managerkonferenz/",[589],"managerkonferenz",[585,23427,23430],{"href":23428,"rel":23429},"http://localhost:8080/blog/tags/tueroeffner/",[589],"türöffner",[585,23432,22640],{"href":23433,"rel":23434},"http://localhost:8080/blog/tags/verhaltensfenster/",[589],{"title":48,"searchDepth":86,"depth":86,"links":23436},[23437,23438,23443,23447,23452,23455,23456,23457],{"id":22640,"depth":86,"text":22641},{"id":22698,"depth":86,"text":22699,"children":23439},[23440,23441,23442],{"id":22720,"depth":126,"text":22721},{"id":22806,"depth":126,"text":22721},{"id":22840,"depth":126,"text":22841},{"id":22864,"depth":86,"text":22865,"children":23444},[23445,23446],{"id":22887,"depth":126,"text":22888},{"id":22916,"depth":126,"text":22917},{"id":23042,"depth":86,"text":23043,"children":23448},[23449,23450,23451],{"id":23063,"depth":126,"text":22888},{"id":23118,"depth":126,"text":22721},{"id":23150,"depth":126,"text":22841},{"id":23200,"depth":86,"text":23201,"children":23453},[23454],{"id":23224,"depth":126,"text":22721},{"id":23297,"depth":86,"text":23298},{"id":23342,"depth":86,"text":23343},{"id":23349,"depth":86,"text":23350},[614],"2016-07-20T14:57:00","https://synyx.de/blog/verstehen-und-verstanden-werden-das-gordon-modell-im-berufsleben/",{},"/blog/verstehen-und-verstanden-werden-das-gordon-modell-im-berufsleben",{"title":22584,"description":22595},"blog/verstehen-und-verstanden-werden-das-gordon-modell-im-berufsleben",[23466,23390,23467,23400,23405,23410,9355,23420,23425,23468,22640],"aktives-zuhoeren","gewaltfreie-kommunikation","tueroeffner","Wir alle haben Beziehungen. Manche Beziehungen sind enger, etwa zu Familienangehörigen und Freunden, andere lockerer, etwa zu Arbeitskollegen oder Nachbarn. Mit manchen Menschen unterhalte ich mich, lerne sie aber nie…","RHa85ZTNg03OaLn9W6ZjdZpUq0vZSP0DnAGuvOgPMsc",{"id":23472,"title":23473,"author":23474,"body":23475,"category":23582,"date":23583,"description":23584,"extension":617,"link":23585,"meta":23586,"navigation":499,"path":23587,"seo":23588,"slug":23479,"stem":23589,"tags":23590,"teaser":23591,"__hash__":23592},"blog/blog/synyx-bei-den-entwicklertagen-in-karlsruhe.md","synyx bei den Entwicklertagen in Karlsruhe",[3920],{"type":11,"value":23476,"toc":23576},[23477,23480,23483,23487,23490,23496,23499,23502,23508,23511,23514,23517,23520,23526,23529,23533,23536,23551,23554,23558,23561,23564,23567],[14,23478,23473],{"id":23479},"synyx-bei-den-entwicklertagen-in-karlsruhe",[18,23481,23482],{},"Die Entwicklertage in unserer Heimatstadt sind schon seit Jahren ein sicherer Anker in unserem Konferenzkalender. Der\nVeranstalter Andrena hat auch dieses Jahr wieder die Entwicklergemeinde der Region herbeizitiert und drei synyx Kollegen\nsind dem Ruf gefolgt.",[3469,23484,23486],{"id":23485},"conference-day","Conference Day",[18,23488,23489],{},"Leider viel zu spät erreichte ich am Mittwoch die IHK in Karlsruhe, um in die Konferenz einzutauchen. Familiäre\nVerpflichtungen hatten mich daran gehindert, pünktlich zum Frühstück auf der Matte zu stehen. Egal – die Keynote lohnt\nsich doch meistens eh nicht, oder? Bei den netten Damen am Andrena Infostand bekam ich meine Erkennungsmarke und die\nübliche Konferenz-Kampfausrüstung bestehend aus Tasche, Stift, Block, Programmflyer. Schnell einen Kaffee und ein paar\nHäppchen gezogen und mit den Kollegen gesynct. Die erzählten mir gleich, wie toll die Keynote doch war. Prof. Dr.\nMichael Feindt hat mit anschaunlichen Beispielen eindrucksvoll beschrieben, wie er und sein Team mit Machine Learning\nden Einzelhandel bei der Warenbestellung unterstützen. Mist, jetzt ärgerte ich mich doch, es verpasst zu haben. Aber es\nwar ja noch nicht zu spät, sich auf die vielversprechenden Vorträge des Conference Day zu freuen!",[18,23491,23492],{},[1794,23493],{"alt":23494,"src":23495},"\"schlechtetests\"","https://media.synyx.de/uploads//2022/03/schlechtetests.png",[18,23497,23498],{},"In den sechs parallelen Tracks fand sich einiges solides wie die “10 goldenen Regeln für schlechte Tests” von Tilmann\nGlaser und Peter Fichtner, die aus ihrem reichhaltigen Erfahrungsschatz die häufigsten Pitfalls beim Schreiben von Tests\nteilten, und wie die JUnit5 Einführung von Johannes Link und Matthias Merdes, bei der man sich schonmal auf die neue\nVersion des verbreitetsten Testframeworks einstellen konnte. Eine erfrischende Abwechslung zu den codegefüllten Slides\nbot Christian Robert mit seinen Ideen und konkreten Vorschlägen, wie man ein glücklicher Entwickler wird! Seine\n“Happiness Patterns” helfen dabei, den grauen Entwickleralltag weniger grau zu gestalten und aus gewohnten\nVerhaltensmustern auszubrechen, um eine höhere Zufriedenheit bei seiner Arbeit zu erreichen.",[18,23500,23501],{},"Den Abschluss des Tages bildete Eberhard Wolf mit seiner Keynote von gewohnt hoher Qualität. Er stellte die kontroverse\nThese auf, dass Redundanz von Code und Daten im Falle von Microservices etwas Gutes sein kann. Seine gut auf den Punkt\ngebrachten Argumente konnten das Publikum davon überzeugen, dass er damit auch recht hat. Dabei betonte er aber auch,\ndass es sich sowohl bei der Entscheidung für Microservices als auch bei der Entscheidung für Redundanz nicht um eine\nSilver Bullet sondern immer um einen Tradeoff handelt, was eine der entscheidenden Messages seines Vortrags war.",[3469,23503,23505],{"id":23504},"agile-day",[27,23506,23507],{},"Agile Day",[18,23509,23510],{},"Fast pünktlich erreichte ich diesmal den Konferenzsaal Baden, in dem die Eröffnungskeynote des Agile Day stattfand.\nGunther Verheyen erzählte davon, was Scrum uns in der Vergangenheit brachte und in der Zukunft noch bringen wird und\nging dabei sehr viel auf Scrum Basics ein, die ich schon kannte – daher bevorzugte ich eine vorgezogene Kaffeepause, um\nerstmal den Akku voll zu machen.",[18,23512,23513],{},"Die Vorträge des Agile Day hatten wie schon letztes Jahr nur teilweise mit “Agile” zu tun, vermutlich ist es nicht so\neinfach, aus diesem Bereich genug Talks für einen ganzen Tag mit sechs parallelen Tracks an Land zu ziehen. Mir als\nEntwickler macht das aber natürlich nichts aus 😉",[18,23515,23516],{},"So schmuggelten sich beispielsweise David Burkhart und Max Bechtold mit ihren umfangreichen und sehr hilfreichen\nMethoden zur automatischen Architekturanalyse in den Agile Day als auch Mark Paluch, der mit Leidenschaft und hohem\nDetailgrad davon berichtete, wie er in 16 Stunden einen Gameboy-Klon gebaut hat.",[18,23518,23519],{},"Natürlich gab es auch Vorträge aus dem agilen Umfeld. Viel mitnehmen konnte man aus dem Erfahrungsbericht von Ben\nRomberg und Georg Meyer, die verschiedene Methoden des Code Reviews in ihrem Team getestet haben und sich mit dem\nPublikum rege darüber austauschten. Auch das Manager/AgileCoach Rollenspiel von Benjamin Seidler und Marion Gakstatter\ngefiel mir gut, weil man dort den Sinn und Unsinn verschiedener Metriken zur Team Performance gut vor Augen geführt\nbekam.",[18,23521,23522],{},[1794,23523],{"alt":23524,"src":23525},"\"irrertyp\"","https://media.synyx.de/uploads//2022/03/irrertyp.png",[18,23527,23528],{},"Die abschließende Keynote der Konferenz war etwas Besonderes. James Coplien ließ sich in einem an Irrsinn grenzenden,\nunterhaltsamen Rant darüber aus, dass die agile und objektorientierte Entwicklung ihre Wurzeln verloren haben. Bewußt\nprovokante Aussagen wie “Unit Tests are bad for quality” und “Java is the only language where it is impossible to write\nobjects” schüttelten das Publikum ganz schön durcheinander. Die Bottom Line seiner emotionalen Keynote ist aber eine\nsehr bedeutende: Beim Schreiben von Software geht es um Menschen und wir dürfen die Menschen dabei nie aus den Augen\nverlieren – ein Grundsatz, den auch wir von synyx uns auf die Fahne schreiben.",[3469,23530,23532],{"id":23531},"tutorial-day","Tutorial Day",[18,23534,23535],{},"Einer von uns drei Kollegen besuchte am Freitag sogar noch den Tutorial Day und möchte seine durchweg positiven\nErfahrungen teilen:",[18,23537,23538,23539,23544,23545,23550],{},"Sabine Neubauer, Kristin Utech und Simon Wagner luden am Freitag zum\nWorkshop “",[585,23540,23543],{"href":23541,"rel":23542},"https://entwicklertag.de/karlsruhe/2016/solid-verstehen-und",[589],"SOLID – Verstehen und Anwenden","” ein. Ungefähr\n15 sowohl angehende, als auch langjährige Softwareentwickler folgten der Einladung. Zu Beginn wurde den Teilnehmern die\nSOLID Prinzipien theoretisch näher gebracht, danach wurden im Pair\nverschiedene ",[585,23546,23549],{"href":23547,"rel":23548},"https://github.com/emilybache/Racing-Car-Katas",[589],"Aufgaben"," gelöst. In den Aufgaben sollten verschiedene\nVerletzungen der Prinzipien erkannt werden.",[18,23552,23553],{},"Zunächst wurden Implementierung und Tests den Erkenntnissen entsprechend refactored und ergänzt, dann wurden nach jeder\nAufgabe die Lösungen vorgestellt und darüber diskutiert. Durch das fundierte Wissen der Workshopleiter waren auch\nDiskussionen außerhalb der Übungen möglich. Dieses Tutorial war eine ausgezeichnete Möglichkeit für Softwareentwickler\nfernab des Tagesgeschäfts sich die SOLID Prinzipien anzueignen und diese umzusetzen.",[3469,23555,23557],{"id":23556},"ende-gut-alles-gut","Ende gut, alles gut?",[18,23559,23560],{},"Was lässt sich nach drei Entwicklertagen festhalten? Erstmal ein großes Lob an den Veranstalter Andrena! Die\nDurchführung der Konferenz war wie immer stark, das Organisationsteam hat merklich gute Arbeit geleistet. Man fühlte\nsich immer gut verpflegt, hatte immer einen Überblick über das Konferenzgeschehen und es war eine gute Aufteilung\nzwischen Vorträgen zum Zuhören und Pausen zum Austauschen. In den kleineren Vortragsräumen gab es gelegentlich Probleme\nmit dem Platz und dem zu kleinen Beamerbild aber das fiel nie groß ins Gewicht. Eine gute Idee war die Liveübertragung\nder Talks aus dem großen Saal ins Foyer, so dass man auch mal eine ausgedehnte Kaffepause mit einem Ohr beim\nKollegengespräch und einem Ohr beim Speaker zubringen konnte.",[18,23562,23563],{},"Nicht ganz so gut fällt unser Urteil diesmal beim eigentlichen “Fleisch” der Konferenz aus, den Talks. Es gab einige\nVorträge, die gut waren und die man unter “solide Grundkost” einordnen kann. Allerdings flog während der Vorträge auch\nzu oft ein “wär ich doch in den anderen Track gegangen” durch unseren Gruppenchat. Es bleibt das Gefühl, dass bei der\nAuswahl der Talks eher auf Quantität als auf Qualität geachtet wurde, so dass man die sechs Tracks für zwei Tage auch\nvoll bekommt. Was nur wenig vorkam waren echte Highlights, Neuheiten, Kontroversen, Talks aus denen man als erfahrener\nEntwickler viel mitnehmen kann. Natürlich haben wir mit drei Mann auch nur einen kleinen Teil aller Vorträge mitbekommen\nund hatten vielleicht einfach nur Pech. Dieses Urteil fiel unter uns dreien auch nicht einstimmig aus – unser jüngerer\nKollege konnte für sich viel aus den Vorträgen mitnehmen und verließ die Konferenz sehr zufrieden – insbesondere nach\nder Teilnahme am Workshop Day am Freitag.",[18,23565,23566],{},"Abschließend kann ich dennoch sagen, dass diese verlässlich grundsolide Heimatkonferenz garantiert auch nächstes Jahr\nwieder von synyx Kollegen besucht wird.",[18,23568,23569,23570,23575],{},"Folien zu den Vorträgen sind ",[585,23571,23574],{"href":23572,"rel":23573},"https://entwicklertag.de/karlsruhe/2016/programm",[589],"auf der Seite der Entwicklertage"," unter\nden jeweiligen Programmpunkten verlinkt.",{"title":48,"searchDepth":86,"depth":86,"links":23577},[23578,23579,23580,23581],{"id":23485,"depth":86,"text":23486},{"id":23504,"depth":86,"text":23507},{"id":23531,"depth":86,"text":23532},{"id":23556,"depth":86,"text":23557},[614],"2016-06-24T14:53:00","Die Entwicklertage in unserer Heimatstadt sind schon seit Jahren ein sicherer Anker in unserem Konferenzkalender. Der\\nVeranstalter Andrena hat auch dieses Jahr wieder die Entwicklergemeinde der Region herbeizitiert und drei synyx Kollegen\\nsind dem Ruf gefolgt.","https://synyx.de/blog/synyx-bei-den-entwicklertagen-in-karlsruhe/",{},"/blog/synyx-bei-den-entwicklertagen-in-karlsruhe",{"title":23473,"description":23482},"blog/synyx-bei-den-entwicklertagen-in-karlsruhe",[],"Die Entwicklertage in unserer Heimatstadt sind schon seit Jahren ein sicherer Anker in unserem Konferenzkalender. Der Veranstalter Andrena hat auch dieses Jahr wieder die Entwicklergemeinde der Region herbeizitiert und drei…","BaaNqYdfSyZpxxOBuFpbB4UeO6DWxR9jHyslFAKzpms",{"id":23594,"title":23595,"author":23596,"body":23597,"category":23719,"date":23720,"description":23721,"extension":617,"link":23722,"meta":23723,"navigation":499,"path":23724,"seo":23725,"slug":23726,"stem":23727,"tags":23728,"teaser":23729,"__hash__":23730},"blog/blog/nachbericht-ueber-einen-inspirierenden-tag-beim-nachhaltigkeits-barcamp-in-karlsruhe.md","Ein inspirierender Tag beim Nachhaltigkeits BarCamp",[19716],{"type":11,"value":23598,"toc":23717},[23599,23602,23605,23608,23614,23622,23631,23640,23649,23655,23664,23702,23708],[14,23600,23595],{"id":23601},"ein-inspirierender-tag-beim-nachhaltigkeits-barcamp",[18,23603,23604],{},"Am vergangenen Samstag, 09. April durfte ich das erste Nachhaltigkeits BarCamp in Karlsruhe, besuchen. Mit über 350\nAnmeldungen wurden die Erwartungen deutlich übertroffen. Trotz einiger, die es doch nicht geschafft haben, war das Camp\ninsgesamt sehr sehr gut besucht.",[18,23606,23607],{},"Nach einem lockeren Frühstück und ersten Networking-Gesprächen ging es dann mit dem Programm des BarCamps los. Direkt\nzu Beginn durften wie bei jedem BarCamp interessierte Teilnehmer für “Ihre” Themen / Vorträge / Diskussionen pitchen, um\ndann in einer nachgelagerten Abstimmungsrunde die Themen zu finden, welche in einen der 25 Zeitslots aufgenommen und\ndamit diskutiert werden.",[18,23609,23610],{},[1794,23611],{"alt":23612,"src":23613},"\"So many sessions\"","https://twitter.com/synyx_ka/status/718782805157797888",[18,23615,23616,23617,23621],{},"Aufgrund einer überragend hohen Anzahl an Themen wurde auch spontan noch ein weiterer Raum von\nder ",[585,23618,13248],{"href":23619,"rel":23620},"https://twitter.com/karlshochschule",[589]," organisiert, so dass es im Endeffekt sogar 30 verschiedene\nTalks waren, zwischen denen man in 5 Sessions über den Tag verteilt wählen konnte. Trotz alledem sind immer noch einige\nThemen nicht aufgenommen worden, was definitiv einen Bedarf an einem weiteren Nachhaltigkeits BarCamp in der Zukunft\nzeigt.",[18,23623,23624,23625,23630],{},"Bei so vielen Themen fällt es natürlich schwer, sich für einzelne Sessions zu entscheiden. Meine Wahl für den Start fiel\naufgrund des spannenden Titels “Unternehmensdemokratie – Eine Strategie sozial nachhaltiger Unternehmensführung?” auf\ndie Diskussionsrunde von ",[585,23626,23629],{"href":23627,"rel":23628},"https://twitter.com/zeuch",[589],"Dr. Andreas Zeuch",". Ich fand das Thema vor allem deswegen so\nspannend, da wir bei synyx ja seit langem versuchen ein Unternehmen mit zumindest ansatzweise basisdemokratischen\nPrinzipien zu führen und mich interessierte vor allem, was für Impulse hierzu von den anderen Teilnehmern kommen. Es war\ndann auch bei den 30+ Teilnehmern schnell eine hitzige Diskussion am laufen, und man hätte locker noch einige Stunden\nweiter machen können. Ich habe auf jeden Fall viele Spannende Eindrücke und Erfahrungsberichte für mich aus dieser\nDiskussion mitgenommen und für mich war die erste Session auch gleich das Highlight des Tages.",[18,23632,23633,23634,23639],{},"Im zweiten Slot widmete ich mich unter der Führung von ",[585,23635,23638],{"href":23636,"rel":23637},"https://twitter.com/FrankWidmayer",[589],"Frank Widmayer"," dem ebenso\nhochspannenden Thema “Organisationelle Energie”, welche sich mit einem wissenschaftlichen Ansatz zu persönlichen\nEnergie-Leveln im Beruf und dem notwendigen “Wiederaufladen” durch Freizeitaktivitäten bzw. durch Schlaf widmete. Es\nentstand schnell eine rege Diskussion mit den Teilnehmern über die Möglichkeiten, die persönlichen Energielevel von\nKollegen und Mitarbeitern zu erkennen und mit welchen Maßnahmen eine zu starke “Entladung” vorgebeugt werden kann, bevor\ndiese letztendlich im Burnout endet. Spannendes Thema, sehr interessant vorgetragen und auch hier wieder viel gelernt,\nund viele Impulse für die tägliche Arbeit mitgenommen.",[18,23641,23642,23643,23648],{},"Den dritten Slot habe ich dann mangels für mich wirklich spannenden Themen im Playspace der Karlshochschule beim\nwirklich leckeren veganen Mittagessen aus 100% biologisch abbaubaren Schälchen und mit Holzbesteck dem Networking\ngewidmet und einige interessante Gespräche geführt unter anderem mit Ama von ",[585,23644,23647],{"href":23645,"rel":23646},"https://twitter.com/wearnepra",[589],"Wear Nepra","\nüber die in Karlsruhe geborene Idee von nachhaltiger Sportbekleidung, die in Finnland dann wirklich Realität wurde.",[18,23650,23651],{},[1794,23652],{"alt":23653,"src":23654},"\"ncka16_collage\"","https://media.synyx.de/uploads//2016/04/ncka16_collage-1.jpg",[18,23656,23657,23658,23663],{},"Der vierte und für mich leider letzte Slot gestaltete nachhaltigen Raum\nmit ",[585,23659,23662],{"href":23660,"rel":23661},"https://twitter.com/Susanne_Theisen",[589],"Susanne Theisen",". Hierbei ging es um die Herausforderungen, Raum nachhaltig\nund vor allem für die darin befindlichen Personen angenehm zu benutzen. Spannendes Thema mit hochinteressanten Ausflügen\nin Farblehre und Feng Shui sowie ein psychologischer Exkurs in die Grundbedürfnisse von Menschen. Auch hier konnte ich\nsehr interessante Diskussionen und Anregungen mit nach Hause nehmen.",[18,23665,23666,23667,23672,23673,23678,23679,99,23684,23689,23690,23695,23696,23701],{},"Den fünften Slot musste ich leider aufgrund eines privaten Termins für mich ausfallen lassen, schaffte es aber zum Glück\nrechtzeit zur superspannenden ",[585,23668,23671],{"href":23669,"rel":23670},"https://twitter.com/synyx_ka/status/718831542068461569",[589],"Podiumsdiskussion"," zum\nThemenbereich Nachhaltigkeit mit einem überzeugenden Moderator ",[585,23674,23677],{"href":23675,"rel":23676},"https://twitter.com/breitenbach",[589],"Patrick Breitenbach",".\nMit diskutiert haben der Lebensmittelretter und\nKonsumverweigerer ",[585,23680,23683],{"href":23681,"rel":23682},"https://twitter.com/raphaelfellmer",[589],"Raphael Fellmer",[585,23685,23688],{"href":23686,"rel":23687},"https://twitter.com/SchubertPanecka",[589],"Dr. Katarzyna Schubert-Panecka","\nderen Vortrag zum Thema “Ökologie des Menschen” ich leider nicht besuchen konnte, mit der ich aber nach der\nPodiumsdiskussion noch ein längeres und sehr informatives Gespräch führen durfte, der Kopf des Premium Cola\nKollektivs ",[585,23691,23694],{"href":23692,"rel":23693},"https://twitter.com/luebbermann",[589],"Uwe Lübbermann",", der Professor für “International Sustainability\nManagement” an der Karlshochschule ",[585,23697,23700],{"href":23698,"rel":23699},"https://twitter.com/andrereichel",[589],"Dr. André Reichel",", sowie die bei Bosch in\nKarlsruhe für “Change Management & People Development” zuständige Isabell Mohr.",[18,23703,23704],{},[1794,23705],{"alt":23706,"src":23707},"\"Logo des Nachhaltigkeits BarCamp 2016\"","https://media.synyx.de/uploads//2016/04/barcamp_2016.png",[18,23709,23710,23711,23716],{},"Am Schluss gab es dann noch ein lockeres Zusammensein mit Networking, bei welchem sich noch lange und spannenden\nGespräche ergaben und sich das Gefühl dann verfestigte, dass hier in Karlsruhe wirklich sehr viel Interesse an\nNachhaltigkeit besteht, aber auch schon wahnsinnig viele Projekte laufen und auch schon zum Teil sehr erfolgreich sind.\nEin herzliches Dankeschön am Schluss daher an Elena Lenz von\nder ",[585,23712,23715],{"href":23713,"rel":23714},"https://twitter.com/Fairantwortung",[589],"Initiative Fairantwortung"," für die Organisation dieses rundum gelungenen\nBarCamps und ich freue mich schon auf’s nächste Jahr. (Und synyx ist selbstverständlich dann auch wieder als Sponsor\ndabei!)",{"title":48,"searchDepth":86,"depth":86,"links":23718},[],[614],"2016-04-12T16:38:47","Am vergangenen Samstag, 09. April durfte ich das erste Nachhaltigkeits BarCamp in Karlsruhe, besuchen. Mit über 350\\nAnmeldungen wurden die Erwartungen deutlich übertroffen. Trotz einiger, die es doch nicht geschafft haben, war das Camp\\ninsgesamt sehr sehr gut besucht.","https://synyx.de/blog/nachbericht-ueber-einen-inspirierenden-tag-beim-nachhaltigkeits-barcamp-in-karlsruhe/",{},"/blog/nachbericht-ueber-einen-inspirierenden-tag-beim-nachhaltigkeits-barcamp-in-karlsruhe",{"title":23595,"description":23604},"nachbericht-ueber-einen-inspirierenden-tag-beim-nachhaltigkeits-barcamp-in-karlsruhe","blog/nachbericht-ueber-einen-inspirierenden-tag-beim-nachhaltigkeits-barcamp-in-karlsruhe",[],"Am vergangenen Samstag, 09. April durfte ich das erste Nachhaltigkeits BarCamp in Karlsruhe, besuchen. Mit über 350 Anmeldungen wurden die Erwartungen deutlich übertroffen. Trotz einiger, die es doch nicht geschafft…","YnPskD1bXCIluEkxG-4TVWJxhKqO1g3tDDyee3uREts",{"id":23732,"title":23733,"author":23734,"body":23736,"category":23904,"date":23905,"description":23745,"extension":617,"link":23906,"meta":23907,"navigation":499,"path":23908,"seo":23909,"slug":23910,"stem":23911,"tags":23912,"teaser":23918,"__hash__":23919},"blog/blog/anwendungsprojekt-der-hochschule-karlsruhe-bei-synyx-prototyp-fuer-ein-resource-planning-board.md","Anwendungsprojekt der Hochschule Karlsruhe bei synyx: Prototyp für ein Resource Planning Board",[23735],"tamara",{"type":11,"value":23737,"toc":23902},[23738,23741,23746,23749,23754,23757,23760,23763,23768,23771,23777,23782,23788,23795,23801,23807,23813,23819,23825,23834,23839,23842,23845,23848,23853,23856,23859,23864,23867,23872,23875,23880,23883,23888,23893,23896,23899],[14,23739,23733],{"id":23740},"anwendungsprojekt-der-hochschule-karlsruhe-bei-synyx-prototyp-für-ein-resource-planning-board",[18,23742,23743],{},[27,23744,23745],{},"Einleitung",[18,23747,23748],{},"In den letzten 4 Monaten hat ein kleines studentisches Team der Hochschule Karlsruhe für synyx im Rahmen eines\nAnwendungsprojekts die Entwicklung eines Prototyps für ein Resource Planning Board durchgeführt. Unsere Aufgabe war es,\neine auf Usability optimierte Ressourcenplanung zu entwickeln, welche die Projekt- und Mitarbeiterplanung innerhalb\neines Unternehmens leicht machen und optimieren soll. Im Folgenden ist ein kleiner Bericht über den Projektablauf und\ndie Zusammenarbeit mit synyx.",[18,23750,23751],{},[27,23752,23753],{},"Über das Anwendungsprojekt",[18,23755,23756],{},"Das Anwendungsprojekt der Hochschule ist ein Modul für Wirtschaftsinformatik-studenten/innen (B.Sc.), in dem jeder\nStudent mindestens 225 Stunden leisten soll. Das Projekt soll existierendes methodisches Wissen durch praktische Arbeit\nmit realen Kunden vertiefen.",[18,23758,23759],{},"Im Vordergrund soll ein Entwicklungsprozess für eine Entwicklergruppe (4-7 Personen) in einem realen Projekt von der\nAngebotserstellung bis zur Abnahme durch den Kunden durchlaufen werden. Für die Bearbeitung des Projekts wurde ein\niteratives Vorgehen gewählt. Die Studierenden nehmen dabei, über das Semester verteilt, unterschiedliche Rollen im\nProjektteam ein. Die Veranstaltung besteht aus Pflichtteilen und Projektarbeit, die von den Projektteams\neigenverantwortlich gestaltet wird. Die beteiligten Professoren/innen stehen den Projektteams als Coaches zur Seite.",[18,23761,23762],{},"Das Anwendungsprojekt fängt mit der Auswahl und Zuordnung von Studenten zu Projekten an. Jeder potentielle Kunde hält\neine kurze Präsentation an der Hochschule und erläutert die Ziele, die Herausforderungen des eigenen Projekts für die\nStudenten. Auch synyx war mit Christian Rückert vertreten und hat ihre Idee für ein Resource Planning Board vorgestellt.\nDanach konnten wir uns drei Projekte aussuchen, in denen wir gern mitarbeiten würden. Am Ende entschieden sich die\nProfessoren, welche Studenten welches Projekt bekommen. Ich freute mich sehr, als ich dem synyx-Projekt zugeordnet\nwurde, das war nämlich meine erste Wahl. Meine ersten Eindrücke von synyx nach der Präsentation waren ein kompetentes,\nerfahrenes Team, klare Ziele in dem Projekt und eine innovative Arbeitsatmosphäre.",[18,23764,23765],{},[27,23766,23767],{},"Das Projekt: Resource Planning Board",[18,23769,23770],{},"Das Resource Planning Board soll eine optimierte Ressourcenplanung ermöglichen. Die Bedienung der Webanwendung soll\ndabei sehr einfach, selbsterklärend und intuitiv von statten gehen. Projekte und Ressourcen sollen einfach angelegt und\nper Drag&Drop zugeordnet werden können. Nach der Zuordnung von Ressourcen und Projekten werden freie Kapazitäten\nerkannt und können verplant werden. Mit der Zuordnung werden bestimmte Ressourcen-, Projekt- und\nUnternehmenskennzahlen on-the-fly aktualisiert und man hat jederzeit alle wichtigen Daten direkt im Blick.",[18,23772,23773],{},[1794,23774],{"alt":23775,"src":23776},"\"UI Resource Planning Board\"","https://media.synyx.de/uploads//2016/03/screenshot.png",[18,23778,23779],{},[27,23780,23781],{},"Technisch haben wir folgende Frameworks eingesetzt:",[18,23783,23784,23785,23787],{},"Als Technologie im Backend wurde ",[573,23786,13144],{}," verwendet. Das Framework bietet durch einfache Konfiguration und gute\nIntegration vielerlei Komponenten die Möglichkeit, initiale Aufwände zu minimieren und somit den anfänglichen\nEntwicklungsprozess zu beschleunigen.",[18,23789,23790,23791,23794],{},"Als Datenbank wurde ",[573,23792,23793],{},"H2"," ausgewählt. Gegenüber großen DBMS wie Oracle oder SQL Server ist die H2-Datenbank\nleichtgewichtig und braucht wenige Ressourcen. Zudem kann sie in eine Spring Boot-Anwendung integriert werden, wodurch\ndie Installation, Konfiguration und Pflege einer externen Datenbank entfällt. H2 ist für die Entwicklung sehr gut\ngeeignet, da durchgeführte Datenbankoperationen wenig komplex sind und ausreichend gut unterstützt werden.",[18,23796,23797,23800],{},[573,23798,23799],{},"AngularJS"," ist ein von Google entwickeltes JavaScript-Framework, das die Entwicklung von Single-Page-Webanwendungen\nerleichtern soll. AngularJS setzt das in der Webentwicklung häufig vorkommende MVC-Pattern um, dessen Ziel es ist,\nDaten von ihrer Darstellung zu trennen. Änderungen der visuellen Darstellung haben einen unmittelbaren Einfluss auf die\nzugrunde liegenden Daten und umgekehrt. Darüber hinaus bietet Angular ein einfaches Templating an, wodurch aufwändige\nDOM-Manipulationen entfallen.",[18,23802,23803,23806],{},[573,23804,23805],{},"Dragula"," ist ein weiteres JavaScript-Framework, das die Entwicklung von Anwendungen mit Drag&Drop-Funktionalität\nstark erleichtert. Es bietet durch sein einfaches und verständliches, dennoch sauber umgesetztes Konzept die\nMöglichkeit, schnell und einfach grundlegende Drag&Drop-Funktionen zu integrieren und anschließend den Anforderungen\nanzupassen.",[18,23808,23809,23812],{},[573,23810,23811],{},"Bower"," wird benutzt, um Front-End-Abhängigkeiten für unsere Anwendung wie z.B. AngularJS flexibel laden zu können.",[18,23814,23815,23818],{},[573,23816,23817],{},"Grunt"," übernimmt viele Front-End-seitige Aufgaben, wie z.B. Tests ausführen, JavaScript-Dateien zusammenführen und\nkomprimieren oder LESS-Dateien in CSS konvertieren.",[18,23820,23821,23824],{},[573,23822,23823],{},"Karma"," ist ein Plug-In für Grunt, welches für das Ausführen von Tests verantwortlich ist.",[18,23826,23827,1628,23830,23833],{},[573,23828,23829],{},"JUnit",[573,23831,23832],{},"Jasmine"," sind etablierte Frameworks für Unit-Tests in Java bzw. JavaScript.",[18,23835,23836],{},[27,23837,23838],{},"Zusammenarbeit mit synyx",[18,23840,23841],{},"Während der letzten 4 Monate arbeiteten wir einmal in der Woche bei synyx im Büro. Neben der Büroinfrastruktur,\nGetränken und Goodies konnten wir Unterstützung auch in fachlichen Fragen durch synyx Mitarbeiter nutzen. Synyx\norganisierte für uns verschiedene Workshops im Bereich Technik, Usability und Design. Außerdem standen einige\nMitarbeiter von synyx auch bei individuellen Fragen zur Seite. Vor Allem möchte ich mich dafür bei David, Olle und\nKatharina bedanken.",[18,23843,23844],{},"Unserer Ansprechpartner, Christian Rückert spielte den Product Owner im Projekt. Er wirkte nicht nur bei der\nSprintplanung und den Sprintreviews mit sondern er gab uns auch wertvolle Ratschläge und Hinweise auf das Vorgehen in\neinem realen Projekt und in der Zusammenarbeit mit Kunden.",[18,23846,23847],{},"Außerdem muss ich noch das freundliche Verhalten von allen synyx-Mitarbeiter erwähnen. Wir fühlten uns während der\nArbeit mit synyx mit den Mitarbeitern gleichgestellt und als Teil des richtigen synyx-Teams.",[18,23849,23850],{},[27,23851,23852],{},"Unsere Eindrücke vom AWP",[18,23854,23855],{},"Im Folgenden einige Gedanken aus unserem Erfahrungsbericht zum AWP:",[18,23857,23858],{},"Andre Eberhard:",[18,23860,23861],{},[573,23862,23863],{},"„Das Anwendungsprojekt hat die Möglichkeit geboten, einen Eindruck über den Verlauf eines realen Projektes zu erhalten.\nVor allem galt es, organisatorische und kommunikative Hürden zu bewältigen, was mit zunehmendem Projektfortschritt\nbesser gelang. Auch konnten Gruppenmitglieder ihre Kompetenzen durch die von ihnen gelösten Aufgaben und Probleme\nerweitern.“",[18,23865,23866],{},"Volkan Güllü:",[18,23868,23869],{},[573,23870,23871],{},"„Das Anwendungsprojekt hat viele spannende Aspekte geboten. Die realitätsnahen Rahmenbedingungen haben mir einen guten\nEinblick in einen Projektverlauf mit realen Kunden ermöglicht. Hierbei habe ich gelernt welche Schwierigkeiten auftreten\nkönnen bei der Kommunikation und Umsetzung von Anforderungen bzw. Kundenwünschen.“",[18,23873,23874],{},"Marvin Lackus:",[18,23876,23877],{},[573,23878,23879],{},"„Das Anwendungsprojekt hat mich unter vielen Aspekten vorangebracht. Vor allem technisch durch das eigenständige\nAufsetzen einer gesamten Infrastruktur und die Implementierung verschiedener Features, wobei unser persönlicher Coach\nDavid bei Fragen immer aufschlussreiche Antworten parat hatte…“",[18,23881,23882],{},"Tamara Tunczinger:",[18,23884,23885],{},[573,23886,23887],{},"„Viele “Kleinigkeiten” haben in meinem Auge eine größere Bedeutung erhalten, wie z.B. die Dokumentation der\nKundengespräche (Protokoll schreiben) oder die Dokumentation der eigenen Fortschritte in JIRA. Außerdem habe ich\ngelernt, dass es eine längere Zeit dauert, bis ein Projektteam richtig gut zusammenarbeiten kann und welche wichtige\nRolle Kommunikation in der Projektentwicklung spielt … Ich denke, jeder in dem Team konnte sich in verschiedenen\nBereichen weiterentwickeln, sowohl fachlich als auch sozial gesehen … jeder von uns kann etwas aus diesen Erfahrungen\nfür die Zukunft mitnehmen.“",[18,23889,23890],{},[27,23891,23892],{},"Schlusswort",[18,23894,23895],{},"Das Projekt bzw. die Zusammenarbeit mit synyx hat uns in vielen Aspekten vorangebracht. Sowohl technisch, als auch\norganisatorisch konnten wir unsere Kenntnisse durch die Erfahrungen im realitätsnahen Umfeld weiterentwickeln.",[18,23897,23898],{},"Die Ergebnisse wurden am Ende Februar bei synyx vorgestellt und anschließend mit einem angenehmen Grillabend gefeiert.",[18,23900,23901],{},"Wir möchten uns nochmal bei dem gesamten synyx-Team, vor allem bei Christian Rückert für die Zusammenarbeit und seine\nUnterstützung bedanken.",{"title":48,"searchDepth":86,"depth":86,"links":23903},[],[614],"2016-03-23T15:45:32","https://synyx.de/blog/anwendungsprojekt-der-hochschule-karlsruhe-bei-synyx-prototyp-fuer-ein-resource-planning-board/",{},"/blog/anwendungsprojekt-der-hochschule-karlsruhe-bei-synyx-prototyp-fuer-ein-resource-planning-board",{"title":23733,"description":23745},"anwendungsprojekt-der-hochschule-karlsruhe-bei-synyx-prototyp-fuer-ein-resource-planning-board","blog/anwendungsprojekt-der-hochschule-karlsruhe-bei-synyx-prototyp-fuer-ein-resource-planning-board",[23913,23914,23915,23916,23917],"awp","hochschule-karlsruhe","projektmanagement","resource-planning-board","ressourcenplanung","Einleitung In den letzten 4 Monaten hat ein kleines studentisches Team der Hochschule Karlsruhe für synyx im Rahmen eines Anwendungsprojekts die Entwicklung eines Prototyps für ein Resource Planning Board durchgeführt.…","GiUYkAC3ZLs58bIjU1xOZZ8DtTzKorqpoyS-wHamXIU",{"id":23921,"title":23922,"author":23923,"body":23924,"category":23937,"date":23938,"description":48,"extension":617,"link":23939,"meta":23940,"navigation":499,"path":23941,"seo":23942,"slug":23928,"stem":23943,"tags":23944,"teaser":23947,"__hash__":23948},"blog/blog/devoxx4kids-meets-javaland.md","Devoxx4Kids meets JavaLand",[21028],{"type":11,"value":23925,"toc":23935},[23926,23929],[14,23927,23922],{"id":23928},"devoxx4kids-meets-javaland",[18,23930,23931],{},[1794,23932],{"alt":23933,"src":23934},"Javaland4kids","https://media.synyx.de/uploads//2016/03/IMG_1212-185x300.jpg",{"title":48,"searchDepth":86,"depth":86,"links":23936},[],[614],"2016-03-17T12:42:22","https://synyx.de/blog/devoxx4kids-meets-javaland/",{},"/blog/devoxx4kids-meets-javaland",{"title":23922,"description":48},"blog/devoxx4kids-meets-javaland",[3747,6242,23945,23946],"javaland4kids","synyx-event","Zum zweiten mal fand im Rahmen der JavaLand Konferenz im Phantasialand Brühl die JavaLand4Kids statt. Wie auch letztes Jahr hat die Devoxx4Kids das Event tatkräftig mit Hardware und dem JumpingSumo…","9rLGVfPNE3tY0WqDCKeQRkOdWwGwomgofLGylz-h5b8",{"id":23950,"title":23951,"author":23952,"body":23954,"category":24180,"date":24181,"description":48,"extension":617,"link":24182,"meta":24183,"navigation":499,"path":24184,"seo":24185,"slug":23958,"stem":24186,"tags":24187,"teaser":24190,"__hash__":24191},"blog/blog/nagios-benachrichtigungsmanagement.md","Nagios Benachrichtigungsmanagement",[23953],"klem",{"type":11,"value":23955,"toc":24168},[23956,23959,23963,23966,23969,23973,23976,23979,23983,23986,23993,23996,23999,24007,24010,24012,24015,24021,24023,24026,24029,24036,24039,24042,24045,24048,24051,24054,24057,24060,24063,24070,24072,24075,24079,24082,24086,24089,24092,24095,24098,24101,24104,24110,24113,24119,24122,24128,24132,24135,24138,24142,24145,24148,24151,24155,24158,24162,24165],[14,23957,23951],{"id":23958},"nagios-benachrichtigungsmanagement",[3469,23960,23962],{"id":23961},"warum-wird-ein-benachrichtigungsmanagement-benötigt","Warum wird ein Benachrichtigungsmanagement benötigt?",[18,23964,23965],{},"Monitoring ist wichtig, aber nicht alle Monitoring-Tests sind (nur) für System Administratoren interessant. Oft\ninteressieren sich auch Entwickler zum Beispiel über den Zustand ihrer Anwendung und wollen darüber benachrichtigt\nwerden, falls diese ausfällt. Die Gruppenverwaltung über Nagios gestaltet sich allerdings kompliziert und wenig\nAnwenderfreundlich.",[18,23967,23968],{},"Außerdem nimmt die Zahl an Nagios Checks immer weiter zu, so dass ein einfacher E-Mail Versand bei einem\nfehlgeschlagenen Test zu einer Überflutung des E-Mail Postfaches führen kann. Eine Limitierung und Priorisierung von\nNachrichten ist hier hilfreich.",[3469,23970,23972],{"id":23971},"was-ist-mit-benachrichtigungsmanagement-gemeint","Was ist mit Benachrichtigungsmanagement gemeint?",[18,23974,23975],{},"Mit dem Benachrichtigungsmanagement ist eine Webanwendung gemeint, die es ermöglicht, aus einem Pool an Personen,\nGruppen zu erstellen.",[18,23977,23978],{},"Diese Gruppen können wiederum für bestimmte Nagios Checks registriert werden, über deren Ergebnis die Mitglieder der\nGruppe anschließend Benachrichtigt werden.",[3469,23980,23982],{"id":23981},"was-muss-an-nagios-vorgenommen-werden-um-das-benachrichtigungsmanagement-zu-verwenden","Was muss an Nagios vorgenommen werden, um das Benachrichtigungsmanagement zu verwenden?",[18,23984,23985],{},"Nagios wird zur Verwendung des Benachrichtigungsmanagements um zwei “commands” erweitert.",[18,23987,23988],{},[585,23989,23992],{"href":23990,"rel":23991},"https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/3/en/objectdefinitions.html#command",[589],"Siehe Nagios Dokumentation: Command Definition",[18,23994,23995],{},"`define command {",[18,23997,23998],{},"command_name service-notify-by-notification-management",[18,24000,24001,24002,24006],{},"command_line curl -X POST -H \"Content-Type:\napplication/json\" \"",[585,24003,24004],{"href":24004,"rel":24005},"http://benachrichtigungs-management.synyx.de/notifications",[589],"\" -d '{\"nagiosCheck\":{\"\nhostname\":\"$HOSTALIAS$\",\"servicename\":\"$SERVICEDESC$\"}, \"type\":\"$NOTIFICATIONTYPE$\", \"state\":\"$SERVICESTATE$\"}'",[18,24008,24009],{},"}`",[18,24011,23995],{},[18,24013,24014],{},"command_name host-notify-by-notification-management",[18,24016,24001,24017,24020],{},[585,24018,24004],{"href":24004,"rel":24019},[589],"\" -d '{\"nagiosCheck\":{\"\nhostname\":\"$HOSTNAME$\"}, \"type\": \"$HOSTSTATE$\"}'",[18,24022,24009],{},[18,24024,24025],{},"Diese sorgen dafür, dass das Ergebnis eines Nagios Checks per HTTP-POST an das Benachrichtigungsmanagement übertragen\nwird.",[18,24027,24028],{},"Nun muss noch ein “contact” definiert werden, der diese commands verwendet.",[18,24030,24031],{},[585,24032,24035],{"href":24033,"rel":24034},"https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/3/en/objectdefinitions.html#contact",[589],"Siehe Nagios Dokumentation: Contact Definition",[18,24037,24038],{},"`define contact {",[18,24040,24041],{},"contact_name notificationManagement",[18,24043,24044],{},"alias notificationManagement",[18,24046,24047],{},"service_notification_period 24x7",[18,24049,24050],{},"host_notification_period 24x7",[18,24052,24053],{},"service_notification_options w,u,c,r",[18,24055,24056],{},"host_notification_options d,r",[18,24058,24059],{},"service_notification_commands service-notify-by-notification-management",[18,24061,24062],{},"host_notification_commands host-notify-by-notification-management",[18,24064,24065,24066],{},"email ",[585,24067,24069],{"href":24068},"mailto:admin@synyx.de","admin@synyx.de",[18,24071,24009],{},[18,24073,24074],{},"Wenn dieser contact für alle Nagios Checks registriert ist, sendet Nagios nun jedes Ergebnis per HTTP-POST an das\nBenachrichtigungsmanagement, in dem die Benachrichtigung weiter verarbeitet werden kann.",[3469,24076,24078],{"id":24077},"wie-funktioniert-dieses-benachrichtigungsmanagement","Wie funktioniert dieses Benachrichtigungsmanagement?",[18,24080,24081],{},"Das Prinzip des Benachrichtigungsmanagements ist, dass eine Benachrichtigung von Nagios empfangen und an interessierte\nPersonen unter Berücksichtigung von Limitierung und Priorisierung weitergeleitet wird. Es verfügt sowohl über eine\ngraphische Benutzeroberfläche als auch über eine RESTful API.",[649,24083,24085],{"id":24084},"gruppenverwaltung","Gruppenverwaltung",[18,24087,24088],{},"Die Gruppenverwaltung ist derzeit so umgesetzt, dass alle Mitarbeiter aus einem LDAP abgefragt werden. Diese sind also\nder vorhin erwähnte Personen-Pool anhand derer Gruppen erstellt werden können. Zudem werden automatisch Gruppen anhand\nder LDAP-Gruppen erstellt.",[18,24090,24091],{},"Sollten diese nicht ausreichen, lassen sich weitere Gruppen über die API oder über die graphische Oberfläche bilden.",[18,24093,24094],{},"Diesen Gruppen können dann explizit Nagios Checks zugewiesen werden, so dass die Mitglieder der Gruppe über den Status\ndes Nagios Checks per E-Mail informiert werden.",[18,24096,24097],{},"Damit diese E-Mails nicht das E-Mail Postfach überfluten, existiert eine Möglichkeit, die Anzahl an E-Mails in einem\nselbst definierten Zeitintervall einzuschränken.",[18,24099,24100],{},"Dies ist ebenfalls, sowohl über die API als auch über die graphische Oberfläche möglich.",[18,24102,24103],{},"Um dies zu veranschaulichen, folgt nun ein Beispiel.",[18,24105,24106],{},[1794,24107],{"alt":24108,"src":24109},"\"NNM_Checks\"","https://media.synyx.de/uploads//2016/03/NNM_Checks.png",[18,24111,24112],{},"Im Bild wird aus der Liste der verfügbaren Nagios Checks nach “Urlaub” gefiltert. Anschließend soll einem dieser Nagios\nChecks die Gruppe “Urlaubsverwaltung” zugeordnet werden, die über Änderungen am Zustand des Checks informiert werden\nsoll. Dies ist im nächsten Bild zu sehen.",[18,24114,24115],{},[1794,24116],{"alt":24117,"src":24118},"\"NNM_Map_UV\"","https://media.synyx.de/uploads//2016/03/NNM_Map_UV.png",[18,24120,24121],{},"Sobald die Gruppe ausgewählt wurde, wird sie als zugeordnete Gruppe angezeigt. Alle Mitglieder der Gruppe\n“Urlaubsverwaltung” werden nun über Zustandsänderungen dieses Nagios Checks benachrichtigt.",[18,24123,24124],{},[1794,24125],{"alt":24126,"src":24127},"\"NNM_UV_Mapped\"","https://media.synyx.de/uploads//2016/03/NNM_UV_Mapped.png",[649,24129,24131],{"id":24130},"limitierung-von-nachrichten","Limitierung von Nachrichten",[18,24133,24134],{},"Die Limitierung von Nachrichten funktioniert, anhand einer nutzerspezifischen Konfiguration. Es besteht hier die\nMöglichkeit die Anzahl an E-Mails in einem selbst definierten Zeitintervall einzuschränken. Standardmäßig werden bis zu\n10 Benachrichtigungen in einem Zeitraum von 30 Minuten verschickt. Alle Benachrichtigungen, die über dieses Limit hinaus\neintreffen, werden in eine Queue geleitet, die alle 10 Sekunden überprüft wird.",[18,24136,24137],{},"Zu Berücksichtigen ist hierbei, dass Benachrichtigungen über ein positives Ergebnis eines Nagios Checks (‘RECOVERY’ oder\n‘UP’) nicht von dieser Limitierung betroffen sind. Wenn also ein Test in der Zwischenzeit wieder erfolgreich durchlaufen\nwerden konnte, wird darüber auf jeden Fall informiert. Ebenso zählen diese Erfolgsbenachrichtigungen nicht in das Limit\nder versandten Nachrichten hinein. Sollten noch Fehlerbenachrichtigungen (PROBLEM, DOWN) in der Queue sein, werden diese\nbei einer später eintreffenden Erfolgsbenachrichtigung aus der Queue entfernt.",[649,24139,24141],{"id":24140},"priorisierung-von-nachrichten","Priorisierung von Nachrichten",[18,24143,24144],{},"Damit wichtige Benachrichtigungen nicht von unwichtigeren bereits versandten Benachrichtigungen blockiert werden,\nexistiert zudem eine Priorisierung von Benachrichtigungen basierend auf dem Host des Nagios Checks. Befindet sich beim\nAbarbeiten der Queue eine Nachricht mit höherer Priorität als eine der bereits versandten Benachrichtigungen, wird diese\ndennoch verschickt. Dabei wird die unwichtigste Benachrichtigung aus der List der bereits versandten Benachrichtigungen\nmit der Neuen ersetzt.",[18,24146,24147],{},"Zur Priorisierung werden alle zu überwachenden Hosts abgefragt und mit Tags versehen. Diese Tags sind selbst zu\nerstellen und mit einer Gewichtung zu versehen. Die Zuweisung der Tags funktioniert automatisch über selbst definierbare\nNamensregeln. So kann zum Beispiel jedem Host mit einem Hostnamen, der “-test” enthält das Tag “Testsystem” zugewiesen\nwerden. Jeder Host, der kein “-test” in einem Hostnamen hat wird dagegen mit dem Tag “Produktivsystem”, welches eine\nhöhere Gewichtung haben könnte, versehen.",[18,24149,24150],{},"Die Verwaltung von Tags und Regeln ist ebenfalls sowohl über die API als auch über die graphische Oberfläche möglich.",[649,24152,24154],{"id":24153},"temporäres-deaktivieren-von-nagios-checks-via-ticketsystem","Temporäres deaktivieren von Nagios Checks via Ticketsystem",[18,24156,24157],{},"Oft kommt es auch dazu, dass bestimmte Nagios Checks zeitweise uninteressant werden. Zum Beispiel dann, wenn ein Projekt\npausiert und die Maschine daher keine Priorität mehr hat. Man möchte in dieser Zeit keine weiteren Benachrichtigungen\nüber fehlgeschlagene Nagios Checks erhalten. Daher wurde eine Möglichkeit geschaffen, einem Nagios Check ein Ticket aus\ndem Ticketsystem zuzuordnen. Dies sorgt dafür, dass der Nagios Check deaktiviert wird, bis das Ticket geschlossen wird.\nSo hat man einen Überblick darüber, welche Nagios Checks aus welchen Gründen und für welche Dauer ausgeschaltet sind.",[3469,24159,24161],{"id":24160},"was-ist-noch-denkbar","Was ist noch denkbar?",[18,24163,24164],{},"Überlegungen sind unter anderem zusätzliche Benachrichtigungswege (SMS,IRC, ..), so dass zum Beispiel bei\nBenachrichtigungen besonders hoher Priorität zu bestimmten Uhrzeiten SMS verschickt werden können, um über kritische\nZustände zu informieren.",[18,24166,24167],{},"Ebenso ist eine nutzerspezifische Priorisierung von expliziten Nagios Checks denkbar.",{"title":48,"searchDepth":86,"depth":86,"links":24169},[24170,24171,24172,24173,24179],{"id":23961,"depth":86,"text":23962},{"id":23971,"depth":86,"text":23972},{"id":23981,"depth":86,"text":23982},{"id":24077,"depth":86,"text":24078,"children":24174},[24175,24176,24177,24178],{"id":24084,"depth":126,"text":24085},{"id":24130,"depth":126,"text":24131},{"id":24140,"depth":126,"text":24141},{"id":24153,"depth":126,"text":24154},{"id":24160,"depth":86,"text":24161},[614],"2016-03-04T09:53:43","https://synyx.de/blog/nagios-benachrichtigungsmanagement/",{},"/blog/nagios-benachrichtigungsmanagement",{"title":23951,"description":48},"blog/nagios-benachrichtigungsmanagement",[24188,24189,15770],"monitoring","nagios","Warum wird ein Benachrichtigungsmanagement benötigt? Monitoring ist wichtig, aber nicht alle Monitoring-Tests sind (nur) für System Administratoren interessant. Oft interessieren sich auch Entwickler zum Beispiel über den Zustand ihrer Anwendung…","Wao5IVero4mEM3A4tDQms2ao3vtXlhOVMnrdqjh1EaQ",{"id":24193,"title":24194,"author":24195,"body":24197,"category":24285,"date":24286,"description":24287,"extension":617,"link":24288,"meta":24289,"navigation":499,"path":24290,"seo":24291,"slug":24201,"stem":24293,"tags":24294,"teaser":24296,"__hash__":24297},"blog/blog/heute-sprechen-wir-python-und-scratch.md","Heute sprechen wir Python und Scratch!",[24196],"bechtold",{"type":11,"value":24198,"toc":24283},[24199,24202,24216,24219,24222,24231,24234,24248,24251,24265,24268,24271,24277,24280],[14,24200,24194],{"id":24201},"heute-sprechen-wir-python-und-scratch",[18,24203,24204,24205,24209,24210,24215],{},"Am Samstag fand der erste IT-Workshop mit Unterstützung der ",[585,24206,6829],{"href":24207,"rel":24208},"http://www.devoxx4kids.de/",[589],"\nim ",[585,24211,24214],{"href":24212,"rel":24213},"https://www.internationaler-bund.de/angebote/standort/202305",[589],"IB Jugendmigrationsdienst Karlsruhe"," in der Südstadt\nstatt. Migranten haben im IB u. a. die Möglichkeit, Sprachkurse in Deutsch als Fremdsprache für verschiedene Stufen zu\nabsolvieren.",[18,24217,24218],{},"Einige dieser Schüler, sowie andere IT-interessierte Migranten aus dem Landkreis Karlsruhe, fanden sich um 10:30 Uhr\nzum Start der Workshops ein.",[18,24220,24221],{},"Ein Ziel war unter anderem, potentielle Kandidaten für eine IT-Ausbildung zu identifizieren, da auch Teilnehmer mit\nkonkretem IT-Ausbildungwunsch vor Ort waren. Wieder andere wollten einfach gerne mehr über die IT erfahren bzw. sich\nein erstes Bild machen und mal reinschnuppern.",[18,24223,24224,24225,24230],{},"Zusammen mit der ",[585,24226,24229],{"href":24227,"rel":24228},"https://www.codecentric.de/",[589],"codecentric AG"," hatten wir eine ausreichend große Gruppe von Mentoren, um\ndie jungen Erwachsenen zwischen 20 – 25 Jahren bei den Workshops zu betreuen.",[18,24232,24233],{},"Nach einer kurzen Einführung machten wir uns auch sofort ans Werk und teilten uns in sechs Gruppen zu je zwei Personen\nauf. Los ging es mit einem Scratch Workshop und nach kurzweiligen 75 Minuten stellten die Gruppen ihre Ergebnisse vor.",[18,24235,24236,24240,24244],{},[1794,24237],{"alt":24238,"src":24239},"\"ib_baden_08\"","https://media.synyx.de/uploads//2016/01/ib_baden_08.jpg",[1794,24241],{"alt":24242,"src":24243},"\"ib_baden_03\"","https://media.synyx.de/uploads//2016/01/ib_baden_03.jpg",[1794,24245],{"alt":24246,"src":24247},"\"ib_baden_05\"","https://media.synyx.de/uploads//2016/01/ib_baden_05.jpg",[18,24249,24250],{},"Im Anschluss folgte ein Minecraft Workshop, der die in Scratch neu erworbenen Logikkenntnisse bzw. Programmierkonzepte\ndirekt auf eine harte Probe stellte 🙂",[18,24252,24253,24257,24261],{},[1794,24254],{"alt":24255,"src":24256},"\"ib_baden_02\"","https://media.synyx.de/uploads//2016/01/ib_baden_02.jpg",[1794,24258],{"alt":24259,"src":24260},"\"ib_baden_07\"","https://media.synyx.de/uploads//2016/01/ib_baden_07.jpg",[1794,24262],{"alt":24263,"src":24264},"\"ib_baden_01\"","https://media.synyx.de/uploads//2016/01/ib_baden_01.jpg",[18,24266,24267],{},"Zur Stärkung gab es dann Pizza für alle!",[18,24269,24270],{},"Wir alle hatten super viel Spaß und kleinere Sprachbarrieren konnten durch ein Lächeln sowie den Einsatz von Händen und\nFüßen einfach ausgeräumt werden 🙂",[18,24272,24273],{},[1794,24274],{"alt":24275,"src":24276},"\"ib_baden_06\"","https://media.synyx.de/uploads//2016/01/ib_baden_06.jpg",[18,24278,24279],{},"In der Abschlussrunde teilte uns unsere Ansprechpartnerin vom IB mit, dass alle ganz begeistert waren und der Wunsch\nnach einer Wiederholung groß sei. Sie hätte bereits eine ganze Liste mit Interessenten für einen zweiten Termin.",[18,24281,24282],{},"Unser Feedback zu einzelnen Teilnehmern hat sie aufgenommen, um deren individuelle Entwicklung besser fördern und\nunterstützen zu können.",{"title":48,"searchDepth":86,"depth":86,"links":24284},[],[614],"2016-01-26T15:24:13","Am Samstag fand der erste IT-Workshop mit Unterstützung der Devoxx4Kids\\nim IB Jugendmigrationsdienst Karlsruhe in der Südstadt\\nstatt. Migranten haben im IB u. a. die Möglichkeit, Sprachkurse in Deutsch als Fremdsprache für verschiedene Stufen zu\\nabsolvieren.","https://synyx.de/blog/heute-sprechen-wir-python-und-scratch/",{},"/blog/heute-sprechen-wir-python-und-scratch",{"title":24194,"description":24292},"Am Samstag fand der erste IT-Workshop mit Unterstützung der Devoxx4Kids\nim IB Jugendmigrationsdienst Karlsruhe in der Südstadt\nstatt. Migranten haben im IB u. a. die Möglichkeit, Sprachkurse in Deutsch als Fremdsprache für verschiedene Stufen zu\nabsolvieren.","blog/heute-sprechen-wir-python-und-scratch",[3747,24295],"fluechtlingshilfe","Am Samstag fand der erste IT-Workshop mit Unterstützung der Devoxx4Kids im IB Jugendmigrationsdienst Karlsruhe in der Südstadt statt. Migranten haben im IB u. a. die Möglichkeit, Sprachkurse in Deutsch als…","Fan9wqmIZbQjnY_edJfbd5zw5kqKmzXPfSRArwZ25Vg",{"id":24299,"title":24300,"author":24301,"body":24302,"category":24402,"date":24403,"description":24404,"extension":617,"link":24405,"meta":24406,"navigation":499,"path":24407,"seo":24408,"slug":24306,"stem":24409,"tags":24410,"teaser":24417,"__hash__":24418},"blog/blog/it-wertbeitrag-ganz-pragmatisch.md","IT-Wertbeitrag ganz pragmatisch?!",[21374],{"type":11,"value":24303,"toc":24400},[24304,24307,24310,24313,24318,24321,24324,24327,24332,24335,24338,24343,24346,24349,24352,24363,24366,24371,24376,24379,24382,24393],[14,24305,24300],{"id":24306},"it-wertbeitrag-ganz-pragmatisch",[18,24308,24309],{},"Eigentlich hatte ich vor mit den nachfolgenden Zeilen einen pragmatischen Ansatz zu liefern, wie man den IT-Wertbeitrag\nermittelt. Das Wörtchen „eigentlich“ verrät bereits, dass man diesen pragmatischen Ansatz zur IT-Wertbeitragsermittlung\nim Folgenden nicht finden wird. Im Gegenteil, ich bin mittlerweile davon überzeugt, dass die Ermittlung des Wertbeitrags\nZeitverschwendung ist!",[18,24311,24312],{},"Wie komme ich zu dem Schluss? In meinen Augen steht der Versuch einer objektiven Wertbeitragsermittlung in keinem\nadäquaten Verhältnis von Aufwand zu Nutzen. Dabei stellt sich natürlich die Frage, was ich für angemessen bzw. nicht\nadäquat halte. Um dies bewerten zu können, ist es notwendig sich mit dem Ziel bzw. den Hintergründen der\nIT-Wertbeitragsermittlung auseinanderzusetzen.",[18,24314,24315],{},[27,24316,24317],{},"Aus Gründen",[18,24319,24320],{},"Warum will ich überhaupt den IT-Wertbeitrag ermitteln? Dafür gibt es im Großen und Ganzen zwei Gründe. Der am meisten\ngenannte Grund – zumindest nach meiner Erfahrung – ist der, der Rechtfertigung. Die Geschäftsführung bzw. der\nFachbereich wirft der IT(Abteilung) Ineffizienz und zu hohe Kosten vor. Die IT soll belegen, wie viel sie eigentlich\nWert ist, bzw. was sie dem Unternehmen bringt. IT-Verantwortliche, welche mit solchen Vorwürfen und der\nWertbeitragsermittlung konfrontiert sind, haben einen sehr schweren Stand. Zum einen gibt es ein klares\nVerständnisdefizit auf Fachbereichsseite über die Zusammenhänge von Unternehmensprozessen und der IT – was durchaus der\nIntransparenz und Kommunikationsunfreudigkeit der IT selbst geschuldet sein kann – und zum anderen können sie alleine\nüberhaupt gar nicht beurteilen, wie viel die IT tatsächlich zum Unternehmenswert beiträgt. Dies geht, wenn überhaupt nur\nmit dem Fachbereich zusammen! Denn Werte entstehen erst dann, wenn die IT genutzt wird und der Nutzer ist nun mal der\nFachbereich.",[18,24322,24323],{},"Der zweite Grund, warum man den Wertbeitrag der IT ermitteln will, ist sinnvoller aber in meinen Augen auch zu teuer.\nMan möchte eine bessere Entscheidungsgrundlage für IT-Investitionen haben. Idealerweise möchte man wissen, wie hoch der\nIT-Wertbeitrag in den jeweiligen Unternehmensbereichen ist, um dann entscheiden zu können, wo mehr und wo weniger in\ndie IT investiert wird. Auch hier kann die Wertbeitragsermittlung nicht die IT alleine machen und der Fachbereich muss\nmitarbeiten.",[18,24325,24326],{},"Und, warum ist jetzt die IT-Wertbeitragsermittlung meiner Meinung nach zu teuer? Wie ich weiter oben beschrieben habe,\nentstehen Werte nicht in der IT sondern im Fachbereich. Was für Werte entstehen dort? Ist das nur das\nUnternehmensergebnis (Gewinn/Verlust)? Wenn ja, wie teilt sich dieses Ergebnis auf die jeweiligen Fachbereiche auf?\nAlso, welcher Fachbereich (Sales & Marketing, Produktion, Einkauf, HR, …) leistet wie viel für das Ergebnis? Die Frage\nstellt sich, da die IT diesen Fachbereichen zuliefert! Oder sind neben dem Gewinn noch weitere Kennzahlen, wie bspw.\nQualität, Mitarbeiterbindung, Wachstum, Risikomanagement, … Bestandteile der Wertbetrachtung? Wenn ja, in welchem\nVerhältnis stehen diese zueinander? Wie viel Prozent vom ganzen Wert entspricht die jeweilige Kennzahl? Und, wie teilen\nsich diese Kennzahlen auf die Fachbereiche auf? Mit diesen Fragen will ich klar stellen, dass es eine sehr komplexe\nAngelegenheit ist überhaupt die Werte des Unternehmens zu beziffern von denen die jeweiligen Anteile der Beitragenden (\nu. a. die IT) ermittelt werden sollen.",[18,24328,24329],{},[27,24330,24331],{},"Objektivität ist der Knackpunkt",[18,24333,24334],{},"Voraussetzung für eine objektive Wertbeitragsermittlung ist eine transparente Bewertung des Unternehmenswertes und\nseiner Bestandteile. Ich tippe mal, bei 99 % der Unternehmen ist diese nicht vorhanden oder nicht objektiv. Objektiv\nbedeutet, die Bewertung ist nachvollziehbar, schlüssig und wird anerkannt. Sie ist nicht „angreifbar“. Wenn man bereits\nauf Fachbereichsseite keine Objektivität gewährleisten kann, wird man sich ständig rechtfertigen müssen – was man ja\neigentlich durch die IT-Wertbeitragsermittlung lösen wollte …",[18,24336,24337],{},"Falls das Unternehmen zu dem vermeintlichen 1 % gehören sollte, welches die Grundvoraussetzung erfüllt und eine\nobjektive Werteaufstellung vorliegen hat, bin ich immer noch der Überzeugung, dass der Aufwand für die\nWertbeitragsermittlung zu hoch ist. Eine IT-Wertbeitragsermittlung ist die Differenz von Kosten zu Nutzen. Dazwischen\nist der Prozess, das Tun des Unternehmens. An dem Prozess ist nicht nur die IT beteiligt. Es gibt mehrere\nProzessbeteiligte die etwas dazu tun, dass am Ende des Prozesses ein Ergebnis entsteht. Um auch hier Objektivität sicher\nzu stellen, genügt es nicht, alleine die Leistung der IT zu bewerten. Es müssen alle Prozessbeteiligten bewertet werden.\nNur dann ist die Bewertung vollständig und schlüssig. Worauf ich hinaus will. Man müsste das gesamte Unternehmen von der\nStrategie, den Ergebnissen, über die Maßnahmen, die zu den Ergebnissen führen sollen, seine Prozesse und alle\nProzessbeteiligten beleuchten und bewerten, um zu einem schlüssigen Ergebnis zu kommen, wer wie viel zum\nUnternehmenserfolg beiträgt. Ich bezweifle wirklich, dass dieser potentielle Aufwand in einem guten Verhältnis zum\nNutzen steht und plädiere für „bleiben lassen“!",[18,24339,24340],{},[27,24341,24342],{},"Alternativen?",[18,24344,24345],{},"Nichtsdestotrotz besteht weiterhin der Bedarf nach mehr Klarheit über den Nutzen der IT und Hilfe bei der\nEntscheidungsfindung für IT-Investitionen. Die Wertbeitragsermittlung ist aber in meinen Augen, der ineffizienteste Weg\ndiese Fragen zu beantworten. Meine Empfehlung ist, dem Fachbereich und Entscheidern ein besseres Verständnis über die IT\nund die komplexen Zusammenhänge in ihrem Unternehmen zu vermitteln. Dadurch können diese ein besseres Gefühl für gute\nund relevante Fragen entwickeln, die zur Entscheidungsfindung wichtig sind. Transparenz, Kommunikation,\nBeziehungsmanagement und Wissen über das Geschäft des Unternehmens helfen auf Seite der IT, dem Fachbereich\nIT-Know-how und Verständnis zu vermitteln. Kennzahlen, die belegen wie die IT genutzt wird (Menge, Zeit,\nProzessoutput, …) helfen sehr dabei, dieses Verständnis zu verbessern und zu untermauern. Auf Fachbereichsseite ist\nebenso Transparenz erforderlich, aber auch der Wille sich IT-Know-how anzueignen und offen für Beratungsvorschläge zu\nsein. Beiden Bereichen muss klar sein, dass sie nur zusammen dem Unternehmen helfen können.",[18,24347,24348],{},"Was wäre ein pragmatischer Ansatz, um den Stellenwert der IT zu stärken, Entscheider über die Wichtigkeit der IT zu\nsensibilisieren und Entscheidungsgrundlagen für IT-Investitionen zu schaffen?",[18,24350,24351],{},"Stellenwert und Wichtigkeit der IT:",[5899,24353,24354,24357,24360],{},[580,24355,24356],{},"Aufzeigen des Durchdringungsgrades der IT: Wie viele Mitarbeiter UND Systeme/Anlagen nutzen IT? Wie viele Kunden\nnutzen die IT? Wo unterstützt die IT Unternehmensprozesse?",[580,24358,24359],{},"Aufzeigen der IT-Kosten im Verhältnis zu den Gesamtkosten und zu anderen Teilkosten. *Anmerkung: Je direkter das\nGeschäft die IT nutzt, umso höher sind die IT-Kosten und entsprechend sieht das Ergebnis auf den ersten Blick\nnatürlich nicht so vorteilhaft aus.",[580,24361,24362],{},"IT-Know-how des Managements durch Kennzahlen, regelmäßige Meetings, Schulungen, externe Beratung, … verbessern und\nPotentiale aufzeigen.",[18,24364,24365],{},"Restrukturierung von IT und Umschichten von IT-Investitionen:",[5899,24367,24368],{},[580,24369,24370],{},"Aufzeigen der IT-Kostenanteile für Projekte (Themen, die den Fachbereich in irgendeiner Art und Weise unterstützen)\nim Verhältnis zu IT-Kostenanteil für Betrieb & Support.",[18,24372,24373],{},[27,24374,24375],{},"IT is still the next big thing!",[18,24377,24378],{},"Häufig wird von der IT verlangt, dass sie sich in die Effizienzkette einhängt und pro Jahr x % weniger an Kosten\nverursacht. Wenn man sich den im Verhältnis kleinen Kostenanteil der IT zu den Gesamtkosten (siehe *Anmerkung weiter\noben) ansieht und die viel größeren Prozesskosten betrachtet, sollte schnell klar sein, dass es bei den Prozesskosten\nviel mehr Einsparpotential gibt.",[18,24380,24381],{},"Gründe für den Ausbau von IT-Investitionen:",[5899,24383,24384,24387,24390],{},[580,24385,24386],{},"Mit IT Prozessabläufe automatisieren = Prozesskostensenkung, Steigerung von\nOutput/Geschwindigkeit/Nachvollziehbarkeit und Qualität, Kunden / Lieferanten Integrieren",[580,24388,24389],{},"Mit IT mehr Daten sammeln und auswerten = Generierung, Verarbeitung und Auswertung von Daten / großen Datenmengen,\nbessere Entscheidungsfindung.",[580,24391,24392],{},"Mit IT die Kommunikation ausbauen = Maschine zu Maschine, B2B oder B2C.",[18,24394,24395,24396,24399],{},"Und, es gibt immer noch keine bessere Alternative zur IT, um Effizienz zu erzielen! Wieso also Investitionen in IT\nreduzieren? Im Gegenteil, aus den genannten Gründen muss ",[27,24397,24398],{},"VIEL MEHR"," in die IT investiert werden. Für diese Erkenntnis\nbrauche ich keinen IT-Wertbeitrag, allerdings Wissen, was man mit IT machen und wie man sie für sein Geschäft nutzen\nkann!",{"title":48,"searchDepth":86,"depth":86,"links":24401},[],[614],"2016-01-21T15:11:10","Eigentlich hatte ich vor mit den nachfolgenden Zeilen einen pragmatischen Ansatz zu liefern, wie man den IT-Wertbeitrag\\nermittelt. Das Wörtchen „eigentlich“ verrät bereits, dass man diesen pragmatischen Ansatz zur IT-Wertbeitragsermittlung\\nim Folgenden nicht finden wird. Im Gegenteil, ich bin mittlerweile davon überzeugt, dass die Ermittlung des Wertbeitrags\\nZeitverschwendung ist!","https://synyx.de/blog/it-wertbeitrag-ganz-pragmatisch/",{},"/blog/it-wertbeitrag-ganz-pragmatisch",{"title":24300,"description":24309},"blog/it-wertbeitrag-ganz-pragmatisch",[24411,3806,24412,24413,24414,24415,24416],"best-practice","it-kosten","it-management","it-marketing","it-wertbeitrag","pragmatisch","Eigentlich hatte ich vor mit den nachfolgenden Zeilen einen pragmatischen Ansatz zu liefern, wie man den IT-Wertbeitrag ermittelt. Das Wörtchen „eigentlich“ verrät bereits, dass man diesen pragmatischen Ansatz zur IT-Wertbeitragsermittlung…","V5lFst8g9i1u812ZRuZ_0RN8cvogDxJ5taHG4v_nshg",{"id":24420,"title":24421,"author":24422,"body":24423,"category":24481,"date":24482,"description":24483,"extension":617,"link":24484,"meta":24485,"navigation":499,"path":24486,"seo":24487,"slug":24427,"stem":24488,"tags":24489,"teaser":24493,"__hash__":24494},"blog/blog/lichtschwerterundso-mit-synyx-ins-kino.md","#lichtschwerterundso – Mit synyx ins Kino",[21374],{"type":11,"value":24424,"toc":24479},[24425,24428,24431,24437,24440,24446,24449,24455,24458,24461,24467,24470,24476],[14,24426,24421],{"id":24427},"lichtschwerterundso-mit-synyx-ins-kino",[18,24429,24430],{},"Am Montagabend, den 21.12.2015 um 18 Uhr ging es endlich los, unser Kino Event mit #lichtschwerterundso in der Kurbel\nin Karlsruhe.",[18,24432,24433],{},[1794,24434],{"alt":24435,"src":24436},"\"Stormtrooper persönlich\"","https://media.synyx.de/uploads//2016/01/IMG_0409-1.jpg",[18,24438,24439],{},"Mit ungefähr 130 Personen war der Bereich vor dem Kinosaal gut gefüllt und bei Wraps, kleinen Häppchen und dem ein oder\nanderen Hopfengetränk konnte man es sich ganz gut gehen lassen.",[18,24441,24442],{},[1794,24443],{"alt":24444,"src":24445},"\"Viel los\"","https://media.synyx.de/uploads//2016/01/IMG_0430-1.jpg",[18,24447,24448],{},"Kurz vor dem Film wurden die Lose für unser kleines Lego Gewinnspiel sowie die 3D-Brillen und das Popcorn verteilt und\ndann ging es endlich los mit dem 7. Teil der Star Wars Saga „Das Erwachen der Macht“.",[18,24450,24451],{},[1794,24452],{"alt":24453,"src":24454},"\"Im Kinosaal\"","https://media.synyx.de/uploads//2016/01/DSC_0188.jpg",[18,24456,24457],{},"Achtung nun folgt ein kleiner Spoiler:",[18,24459,24460],{},"Die visuellen Effekte und Bilder fand ich einfach großartig! J.J. Abrams hat ein wirklich grandioses, bildgewaltiges\nWerk vollbracht. Die Geschichte des Films war in meinen Augen etwas zu sehr an den alten Episoden 4 bis 6 angelehnt.\nTrotzdem hat sie mich in Ihren Bann gezogen und ich werde mir den Film definitiv ein weiteres mal ansehen. Man darf\ngespannt sein, wie sich die Geschichte im 8. Teil entwickelt.",[18,24462,24463],{},[1794,24464],{"alt":24465,"src":24466},"\"Verlosung\"","https://media.synyx.de/uploads//2016/01/IMG_0475.jpg",[18,24468,24469],{},"Nach dem Film fand die Verlosung statt und es durften sich drei unserer Gäste über die bereits auf Twitter angekündigten\nLego Star Wars Sets freuen. Viel Spaß beim 3D-Puzzeln 😉",[18,24471,24472],{},[1794,24473],{"alt":24474,"src":24475},"\"Lego Preise\"","https://media.synyx.de/uploads//2016/01/SYNEMA.jpg",[18,24477,24478],{},"Zum Ausklang des Abends hat sich ein guter Teil der Leute bei synyx im Büro getroffen. Dank weiterer Kaltgetränke,\nKicker, Billard und Konsolenspielen hat der Abend einen wirklich gelungen Abschluss gefunden. Und wer weiß, vielleicht\nmachen wir nächstes Jahr ein weiteres #SYNEMA Event? An dieser Stelle auch noch mal vielen Dank an alle, die\nmitgeholfen haben und besonders an die Verantwortlichen der Kurbel in Karlsruhe für die tolle Zusammenarbeit!",{"title":48,"searchDepth":86,"depth":86,"links":24480},[],[614],"2016-01-07T17:56:44","Am Montagabend, den 21.12.2015 um 18 Uhr ging es endlich los, unser Kino Event mit #lichtschwerterundso in der Kurbel\\nin Karlsruhe.","https://synyx.de/blog/lichtschwerterundso-mit-synyx-ins-kino/",{},"/blog/lichtschwerterundso-mit-synyx-ins-kino",{"title":24421,"description":24430},"blog/lichtschwerterundso-mit-synyx-ins-kino",[24490,24491,24492,23946],"kino","lichtschwerterundso","synema","Am Montagabend, den 21.12.2015 um 18 Uhr ging es endlich los, unser Kino Event mit #lichtschwerterundso in der Kurbel in Karlsruhe. Mit ungefähr 130 Personen war der Bereich vor dem…","G1WeRI2RKGJkbnOJI6_tK2VsxiNVO37_p9aYyBu0GQM",{"id":24496,"title":24497,"author":24498,"body":24499,"category":24729,"date":24730,"description":24731,"extension":617,"link":24732,"meta":24733,"navigation":499,"path":24734,"seo":24735,"slug":24503,"stem":24737,"tags":24738,"teaser":24743,"__hash__":24744},"blog/blog/a-conference-series-that-matters-from-nosql-to-distributed.md","A conference series that matters – From NoSQL to distributed",[10931],{"type":11,"value":24500,"toc":24723},[24501,24504,24527,24531,24534,24537,24561,24574,24585,24591,24602,24606,24620,24624,24631,24644,24677,24701,24718,24720],[14,24502,24497],{"id":24503},"a-conference-series-that-matters-from-nosql-to-distributed",[18,24505,24506,24507,24512,24513,24516,24517,24520,24521,24526],{},"Since November 2013 I have been attending six conferences of the ",[585,24508,24511],{"href":24509,"rel":24510},"https://distributed-matters.org/",[589],"conference series","\nformerly known as ",[27,24514,24515],{},"NoSQL matters",", and that now runs by the name ",[27,24518,24519],{},"distributed matters",". And you can say I am a fan!\nThe conferences take place in various interesting places of the world, so far they were hosted in Cologne, Berlin,\nParis, Dublin and Barcelona. I have not been everywhere, but my favorite city is Barcelona. Beautifully located at\nthe ",[585,24522,24525],{"href":24523,"rel":24524},"http://www.uab-casaconvalescencia.org/ca/index.php",[589],"Casa Convalescència",", it is fun to attend all the talks on\ndifferent topics and discuss with the speakers and attendees. So, after being to distributed matters in Barcelona again\non November 21, I want to take the chance to wrap up and share some of my impressions.",[3469,24528,24530],{"id":24529},"why-i-like-the-conference-series","Why I like the conference series",[18,24532,24533],{},"What I really like about the conferences is that it is still quite small. There is no rushing from talk to talk, nor are\nthere people who just come to give their talk and leave immediately afterwards. This makes it possible to get in touch\nwith the speakers, even the ones with high reputation in the field of modern database technology and distributed\nsystems. So far, speakers from Facebook, MapR, Google, Codecentric and many more companies shared their knowledge and\nexperiences, and were available for discussions during the day or at the get-together.",[18,24535,24536],{},"I attended talks that go beyond the commercial tech-talks that is sometimes heard at bigger conferences. I have my\npersonal highlights for every year:",[18,24538,24539,24540,24543,24544,24549,24550,24555,24556,5993],{},"In 2013 in Barcelona there was a talk by ",[27,24541,24542],{},"Doug Turnbull"," where he took up a historical review on the NoSQL movement\nwhich inspired us to have a critical look on the NoSQL movement in Germany in\na ",[585,24545,24548],{"href":24546,"rel":24547},"https://synyx.de/2014/06/a-very-brief-history-of-the-nosql-development/",[589],"blog post",", and later in an article series\nfor the ",[585,24551,24554],{"href":24552,"rel":24553},"https://jaxenter.de/eine-kleine-reise-durch-nosql-28451",[589],"German Java Magazin"," (also available at\nthe ",[585,24557,24560],{"href":24558,"rel":24559},"https://synyx.de/unternehmen/publikationen/",[589],"synyx homepage",[18,24562,24563,24564,24567,24568,24573],{},"The following year, 2014, ",[27,24565,24566],{},"Ellen Friedman"," beautifully told a story on the emergence of big data and the usage of *\n*time series databases** of which we ",[585,24569,24572],{"href":24570,"rel":24571},"https://synyx.de/2014/11/time-series-data-is-the-the-new-big-data/",[589],"blogged"," a\nshort recap that became relatively popular.",[18,24575,24576,24577,24580,24581,24584],{},"And this year ",[27,24578,24579],{},"Pablo Chacin"," gave a talk on ",[573,24582,24583],{},"The tale of two microservices",", which focuses on the different\ninterpretations on the weakly defined term microservices (which, in my opinion, is comparibaly weak as the term NoSQL).",[18,24586,24587,24588,24590],{},"And I do not forget to mention the talks of ",[27,24589,21495],{},", who is kind of a permanent guest at the conferences,\nand whose talks I always enjoy as they reveal intersting insight into his experiences with modern information technology\ntrends.",[18,24592,24593,24594,24597,24598,24601],{},"The new trend is going from distribution to microservices, and ",[27,24595,24596],{},"microservice"," is, like ",[27,24599,24600],{},"NoSQL",", a buzzword with a\nmaybe limited survival chance. But I like that the topic is controversially and honestly discussed in the community at\nthe conferences. Often, a clear and honest message is promoted: If you don’t need microservices, don’t do them. And, as\npointed out at several occasions, honesty is a valuable good in modern distributed datastore times.",[3469,24603,24605],{"id":24604},"the-conference-organization","The conference organization",[18,24607,24608,24609,12740,24612,24615,24616,24619],{},"To my opinion, the conferences are always very well organized. From my side a big thanks to ",[27,24610,24611],{},"Katja Keil",[27,24613,24614],{},"Jana\nVolkova"," from the organization team! Well chosen venues and a good organized entrance make participation easy and free\nthe participants to focus on talks and discussions. And also (or almost most) important: There is always very good\ncoffee. 😉 The traditional after-conference get-togethers provide local cuisine (like famous ",[573,24617,24618],{},"tapas and beer"," in\nBarcelona) and promotes further discussions in a calm atmosphere. Keeping the same locations in cultural interesting\ncities makes it easy and fun to return on a yearly basis, and also to plan elongated weekends with family.",[3469,24621,24623],{"id":24622},"dmconf15-in-barcelona","#dmconf15 in Barcelona",[18,24625,24626,24627,24630],{},"A few impressions on ",[27,24628,24629],{},"this years conference in Barcelona",", that took place on 21.11.2015. For the sake of brevity,\nI focus on the (in my personal opinion!) most interesting talks of the day.",[18,24632,24633,24634,24637,24638,24643],{},"The conference key note was held by ",[27,24635,24636],{},"K. Hightower"," from Google. His talk focused on resource usage optimization in\nvirtualized environments. If you virtualize your machine, there is a good chance that you waste resources, what limits\nthe capacity of machines that can be hosted. That is not only a waste of money, but also puts harsh limits on the number\nof machines. Algorithms that optimally schedule machines in the environment are needed. Hightower\nshowed ",[585,24639,24642],{"href":24640,"rel":24641},"http://kubernetes.io/",[589],"kubernetes",", an open source project that serves the purpose.",[18,24645,24646,24651,24652,24657,24658,24663,24664,24669,24670,12740,24673,24676],{},[585,24647,24650],{"href":24648,"rel":24649},"http://de.slideshare.net/dmconf/f1-the-distributed-sql-database-supporting-googles-ad-business-bart-samwell",[589],"B. Samwell",",\nalso from Google, gave an introduction to ",[585,24653,24656],{"href":24654,"rel":24655},"http://research.google.com/pubs/pub38125.html",[589],"Googles F1",", a distributed\ndatabase build atop ",[585,24659,24662],{"href":24660,"rel":24661},"http://research.google.com/archive/spanner.html",[589],"Spanner",". F1 is a hybrid database that takles\nreplication inside and across datacenters, and combines the scalability\nof ",[585,24665,24668],{"href":24666,"rel":24667},"http://research.google.com/archive/bigtable.html",[589],"BigTable"," with the usability of a SQL database. F1 provides\nscaling without NoSQL and focuses on ",[27,24671,24672],{},"OLTP",[27,24674,24675],{},"OLAP"," as well. As F1 resides atop Spanner, snapshot isolation is\nguaranteed. Samwell warned that migration to F1 might be hard (it took him and his team two years to migrate from a\nMySQL cluster), and to be aware of hidden actions when you use ORMs.",[18,24678,24679,24684,24685,24688,24689,24694,24695,24700],{},[585,24680,24683],{"href":24681,"rel":24682},"http://de.slideshare.net/dmconf/a-tale-of-two-microservices-pablo-chacin",[589],"P. Chacin"," told the interesting ",[573,24686,24687],{},"Tale of two\nMicroservices",". As the term microservice is rather weakly defined, he looked at microservice from two different\nphilosophies: Those considering it as an architectural style, and from the point of operations. They differ in certain\npoints but also have their similarities, also to the SOA architectural style. Chacin emphasized that no complete\ndecoupling of services is achievable, as their inevitable coupling dependencies in time (synchronization), location (\nbinding), knowledge (schema), centrality (orchestration), context and state (persistence). He underlined again the law\nof conversion of complexity in software design (see\ne.g. ",[585,24690,24693],{"href":24691,"rel":24692},"https://michaelfeathers.silvrback.com/microservices-until-macro-complexity",[589],"M. Feathers article","), and the role of\nsize and usage of microservices (cp.\nthe ",[585,24696,24699],{"href":24697,"rel":24698},"https://www.tigerteam.dk/2014/micro-services-its-not-only-the-size-that-matters-its-also-how-you-use-them-part-1/",[589],"blog series by J. Cramon",").\nTalk and mentioned article are definitely recommendable.",[18,24702,24703,24704,24709,24710,24713,24714,24717],{},"Again, ",[585,24705,24708],{"href":24706,"rel":24707},"http://de.slideshare.net/dmconf/microservices-stressfree-and-without-increased-heartattack-risk-uwe-friedrichsen",[589],"U. Friedrichsen","\nwas present as speaker in Barcelona. He warned of the way down microservice road towards ",[27,24711,24712],{},"microservice hell",". He\nshared some of his experiences and pointed out: You can go down this road, but you do not have not! Those that are not\nable to build up a well-structured monolith might not be able to master a complicated distributed (micro)service\narchitecture. But microservices might be a choice if the time from idea to market is of high business importance, as\nwell as the autonomy of teams. He also emphasized Evans’ ",[27,24715,24716],{},"Domain Driven Design"," approach, and the importance to focus\non business functionality, not on data. The DRY principle might not be a good idea when applied across process\nboundaries, evolution of interfaces is usually unavoidable (as business is due to change!). At the end of the talk he\nstated about consistency: The real world, he said, is either BASE or inconsistent. Worth considering in discussions\nabout ACID in the near future..",[3469,24719,4147],{"id":4146},[18,24721,24722],{},"I still recommend the conference series to everyone interested in NoSQL and distributed data storage and systems, and I\nam in good hope that the quality of talks and speakers can be kept up. As long the the number of participants stays\nrelatively small, discussions will keep to be insightful and fruitful. For me it is clear to go by BlindBird to\nBarcelona again next year. I hope to see some new faces then, as speakers and in the audience! 😉",{"title":48,"searchDepth":86,"depth":86,"links":24724},[24725,24726,24727,24728],{"id":24529,"depth":86,"text":24530},{"id":24604,"depth":86,"text":24605},{"id":24622,"depth":86,"text":24623},{"id":4146,"depth":86,"text":4147},[614],"2015-11-30T11:37:01","Since November 2013 I have been attending six conferences of the conference series\\nformerly known as NoSQL matters, and that now runs by the name distributed matters. And you can say I am a fan!\\nThe conferences take place in various interesting places of the world, so far they were hosted in Cologne, Berlin,\\nParis, Dublin and Barcelona. I have not been everywhere, but my favorite city is Barcelona. Beautifully located at\\nthe Casa Convalescència, it is fun to attend all the talks on\\ndifferent topics and discuss with the speakers and attendees. So, after being to distributed matters in Barcelona again\\non November 21, I want to take the chance to wrap up and share some of my impressions.","https://synyx.de/blog/a-conference-series-that-matters-from-nosql-to-distributed/",{},"/blog/a-conference-series-that-matters-from-nosql-to-distributed",{"title":24497,"description":24736},"Since November 2013 I have been attending six conferences of the conference series\nformerly known as NoSQL matters, and that now runs by the name distributed matters. And you can say I am a fan!\nThe conferences take place in various interesting places of the world, so far they were hosted in Cologne, Berlin,\nParis, Dublin and Barcelona. I have not been everywhere, but my favorite city is Barcelona. Beautifully located at\nthe Casa Convalescència, it is fun to attend all the talks on\ndifferent topics and discuss with the speakers and attendees. So, after being to distributed matters in Barcelona again\non November 21, I want to take the chance to wrap up and share some of my impressions.","blog/a-conference-series-that-matters-from-nosql-to-distributed",[24739,24740,24741,24742],"conference-blog","distributed-systems","microservices","nosql","Since November 2013 I have been attending six conferences of the conference series formerly known as NoSQL matters, and that now runs by the name distributed matters. And you can…","gpWHkrU4i0v7LAtsksybHKaG_wXDbV-x2Nw9w-nTlfw",{"id":24746,"title":24747,"author":24748,"body":24749,"category":24815,"date":24816,"description":24756,"extension":617,"link":24817,"meta":24818,"navigation":499,"path":24819,"seo":24820,"slug":24753,"stem":24821,"tags":24822,"teaser":24824,"__hash__":24825},"blog/blog/marshmallow-challenge-bei-synyx.md","Marshmallow Challenge bei synyx",[10932],{"type":11,"value":24750,"toc":24813},[24751,24754,24757,24760,24769,24772,24780,24783,24786,24800,24803],[14,24752,24747],{"id":24753},"marshmallow-challenge-bei-synyx",[18,24755,24756],{},"Man nehme…",[18,24758,24759],{},"20 Spaghetti – 1 Marshmallow – 1 Meter Schnur – 1 Meter Krepp-Klebeband",[18,24761,24762,24763,24768],{},"…und fertig ist ein verrücktes Pasta-Rezept – wäre eine Möglichkeit. Die andere nennt\nsich ",[585,24764,24767],{"href":24765,"rel":24766},"http://marshmallowchallenge.com/Welcome.html",[589],"Marshmallow Challenge",": ein spannendes Spiel zum Thema „agile\nPrinzipien“. Ziel dieses Spieles ist es, nur mit Hilfe der oben genannten Zutaten die höchste, freistehende und stabile\nStruktur zu bauen, die als Herausforderung auf der Spitze der Struktur einen Marshmallow tragen muss.",[18,24770,24771],{},"Drei mutige Teams à vier synyxler stellten sich dieser Aufgabe. Sie bauten in 9 Minuten was das Zeug hält (im wahrsten\nSinne des Wortes). Denn sie durften die Schnur, das Klebeband und die Spaghetti verwenden, wie sie wollten. Einzig der\nMarshmallow durfte weder geteilt, noch gegessen werden.",[18,24773,24774,24775,986],{},"Nach 9 Minuten Bauzeit lieferten die Teams klasse Ergebnisse (siehe Bilder). Denn jedes Team hat auf seine eigene Weise\neine Struktur geschaffen, die jeweils einen Marshmallow tragen konnte. Im Vergleich zu anderen Marshmallow Challenges\nist dies beachtlich. Meine Erfahrung hat gezeigt, dass nach Ablauf der Zeit viele Spaghetti-Konstruktionen entweder\nnicht fertig werden oder unter der Last des Marshmallows zusammenstürzen. Zum gleichen Ergebnis kommt auch Tom Wujec in\nseinem bekannten Ted-Talk. Dort schildert er seine Erfahrungen und untermauert sie\nmit ",[585,24776,24779],{"href":24777,"rel":24778},"https://www.youtube.com/watch?v=H0_yKBitO8M",[589],"zahlreichen Beispielen",[18,24781,24782],{},"Es folgte eine zweite Runde der Marshmallow Challenge. Wieder 9 Minuten Bauzeit und somit eine Chance das Wissen und die\nErfahrung aus der ersten Runde zu nutzen. Motiviert und begeistert machten sich die drei Teams mit neuem Material ans\nWerk. Das Resultat konnte sich zeigen lassen: alle bauten noch höher (bis zu 70 cm).",[18,24784,24785],{},"Aus der anschließenden Diskussion mit den drei Teams ergaben sich folgende Erkenntnisse:",[577,24787,24788,24791,24794,24797],{},[580,24789,24790],{},"Planen ist gut, Machen ist besser. Mit Hilfe von kurzen Zyklen frühes Feedback bekommen und nicht den einen perfekten\nWeg als Lösung anzustreben war eine Erkenntnis (beispielsweise kleine Prototypen bauen).",[580,24792,24793],{},"Der vermeintlich „leichte und fluffige“ Marshmallow verführt zu der Annahme, dass er ganz einfach von der Struktur\ngetragen wird. Jedoch ist der Marshmallow im Vergleich zu den Spaghetti schwerer. Bezogen auf reale Projekte ist es\nsinnvoll, sich Gedanken zu solch versteckten Annahmen (Marshmallows) zu machen. Sind die im Vorfeld getroffenen\nAnnahmen gerechtfertigt?",[580,24795,24796],{},"Ein Team, das gut zusammenarbeitet und mit allen seinen Sinnen dabei ist, kann sehr gute Ergebnisse erzielen.",[580,24798,24799],{},"Spaß an der Arbeit ist zwar nicht notwendig, kann aber ein Garant für Erfolg sein.",[18,24801,24802],{},"Vielen Dank an die drei Teams für die tolle Mitarbeit und guten Ergebnisse!",[18,24804,24805,6159,24809],{},[1794,24806],{"alt":24807,"src":24808},"\"IMG_3336\"","https://media.synyx.de/uploads//2015/11/IMG_3336.jpg",[1794,24810],{"alt":24811,"src":24812},"\"IMG_3341\"","https://media.synyx.de/uploads//2015/11/IMG_3341.jpg",{"title":48,"searchDepth":86,"depth":86,"links":24814},[],[614],"2015-11-12T12:59:33","https://synyx.de/blog/marshmallow-challenge-bei-synyx/",{},"/blog/marshmallow-challenge-bei-synyx",{"title":24747,"description":24756},"blog/marshmallow-challenge-bei-synyx",[4494,24823,4505,3122],"marshmallow-challenge","Man nehme… 20 Spaghetti – 1 Marshmallow – 1 Meter Schnur – 1 Meter Krepp-Klebeband …und fertig ist ein verrücktes Pasta-Rezept – wäre eine Möglichkeit. Die andere nennt sich Marshmallow…","wylKlNW6dEUN1cOMdVRf8Ymi7jsEd8zSk4bKdsl5ILc",{"id":24827,"title":24828,"author":24829,"body":24830,"category":24956,"date":24957,"description":48,"extension":617,"link":24958,"meta":24959,"navigation":499,"path":24960,"seo":24961,"slug":24962,"stem":24963,"tags":24964,"teaser":24965,"__hash__":24966},"blog/blog/dritte-devoxx4kids-neue-location-neue-workshops-altbekannter-spass.md","Dritte Devoxx4Kids: Neue Location, neue Workshops, altbekannter Spaß",[10931,21028],{"type":11,"value":24831,"toc":24954},[24832,24835,24841,24844,24847,24851,24854,24859,24866,24871,24878,24883,24890,24895,24902,24905,24913,24951],[14,24833,24828],{"id":24834},"dritte-devoxx4kids-neue-location-neue-workshops-altbekannter-spaß",[18,24836,24837],{},[1794,24838],{"alt":24839,"src":24840},"\"P1020269\"","https://media.synyx.de/uploads//2015/10/P1020269.jpg",[18,24842,24843],{},"Am 17.10. war es wieder so weit: in Karlsruhe fand die dritte Devoxx4Kids statt. Wieder einmal fanden sich 32 Kinder\nzwischen neun und 15 Jahren zusammen, um einen Tag lang mit Spaß und Freude Technik zu erforschen. Und das dieses mal in\neiner für alle Beteiligten neuen Location, der Hochschule für Technik und Wirtschaft. Diese bedeutete Umstellungen in\nvielen Bereichen: Die Anfahrt musste für Eltern und Kids neu beschrieben werden, die Beschilderung der genutzten Räume\nmusste angepasst werden, und nicht zuletzt lagen auch die Workshop-Räume weiter voneinander entfernt.",[18,24845,24846],{},"Aber nicht nur die Location war anders, auch die Workshops waren allesamt neu gestaltet. Da es sich um eine aufbauende\nVeranstaltung gehandelt hat, standen sowohl die Kids als auch die Mentoren vor neuen Herausforderungen. Das tat der\nFreude an der Veranstaltung aber keinen Abbruch, und die Workshops waren wiederum lehrreich für Kinder und Mentoren.",[18,24848,24849],{},[27,24850,6890],{},[18,24852,24853],{},"Im Angebot hatten wir dieses Mal vier nagelneue Workshops, von denen die Kids alle durchlaufen durften. Thematisch\nversuchten die Workshops die bekannten Schwerpunkte Programmierung, Robotik und das Internet der Dinge spielerisch zu\nkombinieren.",[18,24855,24856],{},[27,24857,24858],{},"Tinkerforge",[18,24860,24861,24865],{},[1794,24862],{"alt":24863,"src":24864},"\"P1020208\"","https://media.synyx.de/uploads//2015/10/P1020208.jpg","\nDer Tinkerforge-Workshop befasst sich mit dem s.g. Internet der Dinge, d. h. der Beobachtung der wahrnehmbaren Umwelt\nmit Sensoren unterschiedlichster Art. Tinkerforge stellt dabei elektronische Komponenten bereit, die sich legoartig\nkombinieren lassen. Der Workshop legte seinen Schwerpunkt diesmal klar auf die Vermittlung eines physikalischen\nGrundverständnisses: Mit Hilfe von in Reihe geschalteten Kartoffeln und Metallen wurden Batterien gebaut, mit denen\nelektronische Komponenten wie Lüfter betrieben wurden. Über die Kopplung der Komponenten mithilfe der Tinkerforge Bricks\nkonnten die erzeugten Ströme und Spannungen dann in einer kleinen JavaFX-Anwendung auch visuell betrachtet und\ninterpretiert werden. Die Verbindung von bekannten physikalischen Experimenten wie der Kartoffelbatterie mit neuen\nTechnologien wie sie Tinkerforge verbreitet hat den Kindern viel Freude bereitet.",[18,24867,24868],{},[27,24869,24870],{},"CardBoard",[18,24872,24873,24877],{},[1794,24874],{"alt":24875,"src":24876},"\"P1020344\"","https://media.synyx.de/uploads//2015/10/P1020344.jpg","\nEbenfalls physikalisch motiviert war auch unser Google CardBoard Workshop, der sich mit der Physik des Auges, der\nTäuschung des Gehirns und virtueller Realität beschäftigt hat. Jedes Team wurde ausgestattet mit einem Handy und einem\nGoogle CardBoard, um sich eine eigene kleine virtuelle Welt zu erzeugen. Begonnen hat der Workshop mit einer kleinen\nEinführung darüber, wie das menschliche Auge sich täuschen lässt und die Illusion einer dreidimensionalen Welt\nhergestellt werden kann. Danach haben die Kids mit den Mentoren eine eigene kleine Umgebung erstellen können, durch die\nsie sich fortbewegen konnten. Der Workshop fand guten Anklang und das Durchschreiten der virtuell konstruierten\nLabyrinthe machte viel Freude.",[18,24879,24880],{},[27,24881,24882],{},"Minecraft",[18,24884,24885,24889],{},[1794,24886],{"alt":24887,"src":24888},"\"P1020304\"","https://media.synyx.de/uploads//2015/10/P1020304.jpg","\nMincraft ist ein Spiel, das eigentlich keinen der Kids mehr hat erklärt werden müssen, hier haben im Gegenteil die\nMentoren so einiges erfahren darüber, was man mit Minecraft alles gestalten kann. Das Ziel des Workshops aber war, das\nModden des Spiels, d.h. das Aufmotzen und Erstellen eines eigenen kleinen Spiels im Spiel. Dazu ist eine für Minecraft\nfür den RaspberryPi vorhandene Python-Schnittstelle verwendet worden. Dies stellt aus Sicht der Mentoren eine\nschwierige Aufgabe an die Kinder da, die diese aber alle mit Bravour gemeistert haben. Unter Anleitung der Mentoren\nhaben fast alle Gruppen ihre eigene individuelle Welt programmatisch erstellt, in der sie nach eigenen programmierten\nRegeln ein Spiel gestaltet haben, in dem sie Punkte sammeln und gegen die Zeit spielen konnten. Nicht zuletzt war es\nhier auch eine Herausforderung, die Spiele anderer Gruppen zu testen und zu meistern.",[18,24891,24892],{},[27,24893,24894],{},"Jumping Sumo",[18,24896,24897,24901],{},[1794,24898],{"alt":24899,"src":24900},"\"P1020069\"","https://media.synyx.de/uploads//2015/10/P1020069.jpg","\nDie Firma Parrot hat uns für unser Event freundlicherweise fünf Exemplare ihrer Jumping Sumos gesponsert. Dies haben wir\nmit einem neuen Workshop honoriert. Die erste Hürde hierzu hatten die Mentoren zu nehmen, in dem sie ihr Ziel eine\neigene Java API für den Sumo zu kreieren umsetzen mussten. Kudos dafür! Diese wurde von den Kindern genutzt, um in\neigenen einfachen textuellen Programmen den Sumo dazu zu bewegen, nach eigenen Wünschen zu agieren. Mit einfachen\nBefehlen für vorwärts- und rückwärtsfahren, Drehen und natürlich Springen (die Spezialität des Sumo) musste ein\nParcours gemeistert werden. Die Kinder lösten ihre Aufgabe prima, und natürlich macht es auch einfach Spaß die\nFähigkeiten des Sumo auszureizen und einfach mal zu prüfen wie die einfachen Eigenschaften zu komplexen Verhalten\nkombiniert werden können.",[18,24903,24904],{},"Auch die dritte D4K in Karlsruhe war für alle Beteiligten ein Riesenspaß und großer Erfolg. An alle Kinder ein\nherzliches Dankeschön! Die Eltern der Kinder konnten sich am Ende des Tages noch zeigen lassen was ihre Sprösslinge so\ngeleistet haben, und staunten teilweise nicht schlecht darüber, wie natürlich manche der Kinder mittlerweile mit den\nneuen Technologien umzugehen wissen.",[18,24906,24907,24908,24912],{},"Für uns Mentoren ist die Anzahl der wiederkehrenden Kinder ein Beweis dafür, dass sich Arbeit und Aufwand im Vorfeld\nlohnen. Wir hoffen das es so weiter geht, und das der Erfolg dieser kleinen Tagung für Kinder Schule macht und sich in\nweitere deutsche Städte verbreitet. Wir jedenfalls machen weiter! Die Workshops stehen\nauf ",[585,24909,3573],{"href":24910,"rel":24911},"https://github.com/devoxx4kidsde",[589]," frei zur Verfügung. Wer daran Interesse hat, kann gerne mitmachen.",[18,24914,24915,24916,99,24921,99,24926,99,24931,99,24935,99,24940,24944,24945,24950],{},"Wir möchten uns natürlich auch bei den\nSponsoren ",[585,24917,24920],{"href":24918,"rel":24919},"http://www.parrot.com/de/",[589],"Parrot",[585,24922,24925],{"href":24923,"rel":24924},"http://www.siteos.de/",[589],"SiteOS",[585,24927,24930],{"href":24928,"rel":24929},"https://www.innoq.com/de/",[589],"innoQ",[585,24932,24934],{"href":24227,"rel":24933},[589],"codecentric",[585,24936,24939],{"href":24937,"rel":24938},"https://www.inovex.de/de/",[589],"inovex",[585,24941,3122],{"href":24942,"rel":24943},"http://www.synyx.de",[589],"\nund der ",[585,24946,24949],{"href":24947,"rel":24948},"http://www.hs-karlsruhe.de/home.html",[589],"Hochschule"," bedanken.",[18,24952,24953],{},"Bis zum nächsten Mal… 😉",{"title":48,"searchDepth":86,"depth":86,"links":24955},[],[614],"2015-10-28T13:40:29","https://synyx.de/blog/dritte-devoxx4kids-neue-location-neue-workshops-altbekannter-spass/",{},"/blog/dritte-devoxx4kids-neue-location-neue-workshops-altbekannter-spass",{"title":24828,"description":48},"dritte-devoxx4kids-neue-location-neue-workshops-altbekannter-spass","blog/dritte-devoxx4kids-neue-location-neue-workshops-altbekannter-spass",[],"Am 17.10. war es wieder so weit: in Karlsruhe fand die dritte Devoxx4Kids statt. Wieder einmal fanden sich 32 Kinder zwischen neun und 15 Jahren zusammen, um einen Tag lang…","tLRTFp41-y5RhffJtyDCVEK7FPqOV1kL1vbVeJg--K8",{"id":24968,"title":24969,"author":24970,"body":24971,"category":25029,"date":25030,"description":25031,"extension":617,"link":25032,"meta":25033,"navigation":499,"path":25034,"seo":25035,"slug":25036,"stem":25037,"tags":25038,"teaser":25039,"__hash__":25040},"blog/blog/vom-altbau-zu-den-war-rooms-ein-jahr-neues-synyx-buero.md","Vom Altbau zu den War-Rooms – ein Jahr neues synyx Büro",[21028],{"type":11,"value":24972,"toc":25027},[24973,24976,24979,24982,24989,24992,24999,25006,25009,25012,25015,25021],[14,24974,24969],{"id":24975},"vom-altbau-zu-den-war-rooms-ein-jahr-neues-synyx-büro",[18,24977,24978],{},"Es ist nun ein Jahr her, dass wir in das Synus Gebäude gezogen sind. Ein Jahr? Ist das wirklich schon so lange her? Kaum\nzu glauben! Und, in diesem Jahr ist auch sehr viel passiert. Doch zunächst erst mal zurück zum Anfang:",[18,24980,24981],{},"Unser tolles Altbau-Büro wurde uns doch zu kuschelig. Wir brauchten definitiv mehr Platz. Die Bürosuche gestaltete sich\nschwieriger als gedacht. Nach langem hin und her stand dann endlich fest, dass wir unser neues Domizil im Synus Gebäude\nbeziehen werden. Am ersten Oktober ging es dann auch los mit dem Umzug. Das ganze Wochenende über wurde im neuen Büro\nfleißig aufgebaut und Möbel gerückt, so dass am Montag dann alle Mitarbeiter an ihren neuen Arbeitsplätzen starten\nkonnten.",[18,24983,24984,24988],{},[1794,24985],{"alt":24986,"src":24987},"\"buero_01\"","https://media.synyx.de/uploads//2015/10/buero_01.jpg","\nIch persönlich muss schon sagen, dass ich mir mit dem Start im Großraumbüro etwas schwer getan habe. Zuvor hatten wir\nkleine Büros á 2-6 Personen. Die Umstellung nun mit allen Kollegen in einem großen Raum zu sein, war nicht einfach. Die\nTatsache, dass unser neues Büro noch nicht ganz fertig war, erschwerte den Anfang, denn wir konnten einen Teil davon\nerst gar nicht nutzen oder betreten. Aber nicht nur das, der rechte Teil des Gebäudes war noch eine richtige Baustelle.\nSo wurde unser Arbeiten oftmals durch Bohr- und Hammergeräusche begleitet.",[18,24990,24991],{},"Nach und nach wurde immer mehr Räume freigegeben, die Bauarbeiten wurden weniger und somit auch leiser. Und auch wir\nalle von synyx haben uns an das Großraumbüro gewöhnt. Letztlich kann ich es mir gar nicht mehr vorstellen, anders zu\narbeiten.",[18,24993,24994,24998],{},[1794,24995],{"alt":24996,"src":24997},"\"kreativ_02\"","https://media.synyx.de/uploads//2015/10/kreativ_02.jpg","\nAber auch wir waren nicht untätig unser Büro gemütlich zu gestalten. Wir synyxer stimmten ab, wie unsere Meeting- oder\nauch gerne War-Room genannt, eingerichtet werden sollen. Die Entscheidung stand fest und so sollte es also ein\nWohnzimmer, einen Kreativraum, einen grünen Raum, eine Werkstatt, einen Fitnessraum sowie eine Bar geben. Alle Räume\nsollten aber wie gesagt auch als Meeting-Räume nutzbar sein. Viele engagierte Mitarbeiter machten sich dann an die\nAusgestaltung der Räume und fast alle sind soweit fertig. Es macht unheimlich viel Spaß die unterschiedlichen\nAtmosphären und Funktionen zu nutzen.",[18,25000,25001,25005],{},[1794,25002],{"alt":25003,"src":25004},"\"spiel\"","https://media.synyx.de/uploads//2015/10/spiel.jpg","Was uns\nauch besonders freut: durch die größere Fläche haben wir nun auch einen großen Meeting-Raum, welcher im Alltag z.B. für\ndas Mittagessen genutzt wird. Dadurch haben wir zusätzlich die Möglichkeit der Java User Group Karlsruhe oder wie morgen\nder Scrum User Group einen Raum anzubieten.",[18,25007,25008],{},"Ja, es ist schon ein Jahr her. Die Zeit ist unheimlich schnell vergangen. Und wir sind auch noch mehr synyxer geworden.\nSeit letztem Jahr kamen 17 neue Arbeitskollegen dazu. Und wir sind immer noch auf der Suche, z.B. nach einem Android\nEntwickler oder Senior Java Entwickler.",[18,25010,25011],{},"Wer also Lust hat, sich bei uns einzubringen, kann sich gerne bewerben 😉",[18,25013,25014],{},"Mein Resümee? Auch wenn der Anfang schwer war und ich immer noch sehr gerne an das alte Büro denke, so fühle ich mich\nhier inzwischen pudelwohl. Die Vorteile des neuen Büros sind großartig. Und das tolle Team tut sein übriges dazu.\nsynyx- weiter so 🙂",[18,25016,25017],{},[1794,25018],{"alt":25019,"src":25020},"\"gangl\"","https://media.synyx.de/uploads//2015/10/gangl.jpg",[18,25022,25023],{},[1794,25024],{"alt":25025,"src":25026},"\"rooms\"","https://media.synyx.de/uploads//2015/10/rooms.jpg",{"title":48,"searchDepth":86,"depth":86,"links":25028},[],[614],"2015-10-07T09:53:18","Es ist nun ein Jahr her, dass wir in das Synus Gebäude gezogen sind. Ein Jahr? Ist das wirklich schon so lange her? Kaum\\nzu glauben! Und, in diesem Jahr ist auch sehr viel passiert. Doch zunächst erst mal zurück zum Anfang:","https://synyx.de/blog/vom-altbau-zu-den-war-rooms-ein-jahr-neues-synyx-buero/",{},"/blog/vom-altbau-zu-den-war-rooms-ein-jahr-neues-synyx-buero",{"title":24969,"description":24978},"vom-altbau-zu-den-war-rooms-ein-jahr-neues-synyx-buero","blog/vom-altbau-zu-den-war-rooms-ein-jahr-neues-synyx-buero",[],"Es ist nun ein Jahr her, dass wir in das Synus Gebäude gezogen sind. Ein Jahr? Ist das wirklich schon so lange her? Kaum zu glauben! Und, in diesem Jahr…","8xwAnutzvugrgPhPCEYxL53mOH0ZJ1sRWF59sTMD7wk",{"id":25042,"title":25043,"author":25044,"body":25045,"category":25143,"date":25144,"description":25145,"extension":617,"link":25146,"meta":25147,"navigation":499,"path":25148,"seo":25149,"slug":25150,"stem":25151,"tags":25152,"teaser":25154,"__hash__":25155},"blog/blog/spende-fuer-fluechtlinge-in-karlsruhe.md","Spende für Flüchtlinge in Karlsruhe",[19312],{"type":11,"value":25046,"toc":25141},[25047,25050,25053,25056,25064,25067,25073,25088,25094,25097,25100,25103,25109,25118],[14,25048,25043],{"id":25049},"spende-für-flüchtlinge-in-karlsruhe",[18,25051,25052],{},"Der Aufruf eines Bekannten, ihm statt eines Geschenkes zum Geburtstag Sachspenden für Flüchtlinge zu überreichen, hat\neine beachtliche Welle geschlagen.",[18,25054,25055],{},"Ein kleiner Aufruf in den bekannten sozialen Medien führte in wenigen Stunden zu über 100 Reaktionen. Auch synyx war\ndabei. Von der Zustimmung getragen wurde kurzer Hand zusätzlich ein öffentlicher Spendenaufruf gestartet.",[18,25057,20403,25058,25063],{},[585,25059,25062],{"href":25060,"rel":25061},"https://web.archive.org/web/20150518192118/http://vanguar.de:80/cafe/",[589],"Café Vanguarde",", wo auch die letzte\nsynyx-Winterfeier stattfand, erklärte sich sofort bereit,",[18,25065,25066],{},"als Lager für die Sachspenden zu dienen und rief dazu auf, eine Woche lang während den Öffnungszeiten die Sachspenden\nanzuliefern. synyx zögerte nicht, den notwendigen Sprinter für die Anlieferung der Spenden an das Flüchtlingsheim zu\nspenden und bei der Aktion Hilfe zu stellen. Zusätzlich wurde auch firmenintern eine Sammlung organisiert.",[18,25068,25069],{},[1794,25070],{"alt":25071,"src":25072},"\"Sammelstelle Café Vanguarde\"","https://media.synyx.de/uploads//2015/09/IMG_1754.jpg",[18,25074,25075,25076,25081,25082,25087],{},"Kleine Bedenken, geschürt durch\neinen ",[585,25077,25080],{"href":25078,"rel":25079},"https://web.archive.org/web/20210422135731/https://fluechtlingshilfe-karlsruhe.de/kleidung-moebel-2/",[589],"Artikel","\nüber aktuell nicht mehr benötigte Sachspenden konnten durch einen persönlichen Besuch vorort\nim ",[585,25083,25086],{"href":25084,"rel":25085},"https://fluechtlingshilfe.net.kit.edu/",[589],"Flüchtlingsheim KIT Campus Ost"," beseitigt werden. So trafen sich einige\nHelfer am Café Vanguarde um die Sachspenden entgegen zunehmen und –wie mit den Verantwortlichen des Flüchtlingsheims\nvereinbart– die Sachspenden vorzusortieren.",[18,25089,25090],{},[1794,25091],{"alt":25092,"src":25093},"\"Vorsortierung der Spenden\"","https://media.synyx.de/uploads//2015/09/IMG_1752.jpg",[18,25095,25096],{},"Nach und nach trafen immer wieder bis zum vereinbarten Termin Spenden ein. Anschließend wurde der Sprinter mit den\nneusortierten Spenden beladen und zum Flüchtlingsheim KIT-Ost gebracht.",[18,25098,25099],{},"Am richtigen Gebäude angekommen, halfen uns sehr viele Flüchtlinge dabei, den Sprinter koordiniert auszuräumen und die\nSpenden in das Lager zu bringen.",[18,25101,25102],{},"Die relativ spontane Aktion ist geglückt und hat sich gelohnt!",[18,25104,25105],{},[1794,25106],{"alt":25107,"src":25108},"\"Erfolgreiche Spendenaktion\"","https://media.synyx.de/uploads//2015/09/IMG_1758.jpg",[18,25110,25111,25112,25117],{},"Man kann an vielen Stellen helfen wenn man Interesse hat. Einige Flüchtlingsheime werden schon ausreichend versorgt. Vor\nallem ",[585,25113,25116],{"href":25114,"rel":25115},"https://www.facebook.com/kriegsstrasse200",[589],"diejenigen mit viel Social Media"," Aktivität. Andere wie das neu\nerrichtete Flüchtlingsheim am KIT Campus-Nord hingegen bauen ihre Infrastruktur, wie zum Beispiel eine Kleiderkammer,\nmomentan erst auf und brauchen sicherlich in naher Zukunft Helfer und Spenden. Wichtig ist vorher abzuklären, in welcher\nForm Hilfe zur Zeit am meisten benötigt wird. Dafür gibt es einige Anlaufstellen:",[577,25119,25120,25127,25134],{},[580,25121,25122],{},[585,25123,25126],{"href":25124,"rel":25125},"http://fluechtlingshilfe-karlsruhe.de/",[589],"Flüchtlingshilfe Karlsruhe",[580,25128,25129],{},[585,25130,25133],{"href":25131,"rel":25132},"http://www.amnesty-karlsruhe.de/",[589],"Amnesty Karlsruhe",[580,25135,25136],{},[585,25137,25140],{"href":25138,"rel":25139},"http://www.menschenrechtszentrum.de/",[589],"Menschenrechtszentrum",{"title":48,"searchDepth":86,"depth":86,"links":25142},[],[614],"2015-09-29T15:10:46","Der Aufruf eines Bekannten, ihm statt eines Geschenkes zum Geburtstag Sachspenden für Flüchtlinge zu überreichen, hat\\neine beachtliche Welle geschlagen.","https://synyx.de/blog/spende-fuer-fluechtlinge-in-karlsruhe/",{},"/blog/spende-fuer-fluechtlinge-in-karlsruhe",{"title":25043,"description":25052},"spende-fuer-fluechtlinge-in-karlsruhe","blog/spende-fuer-fluechtlinge-in-karlsruhe",[25153,24295],"refugeeswelcome","Der Aufruf eines Bekannten, ihm statt eines Geschenkes zum Geburtstag Sachspenden für Flüchtlinge zu überreichen, hat eine beachtliche Welle geschlagen. Ein kleiner Aufruf in den bekannten sozialen Medien führte in…","IIG37FuBFRo9c5UJWmPiaTlzK6-Hxu4poI5z2-jpWG0",{"id":25157,"title":25158,"author":25159,"body":25160,"category":25512,"date":25513,"description":25514,"extension":617,"link":25515,"meta":25516,"navigation":499,"path":25517,"seo":25518,"slug":25164,"stem":25519,"tags":25520,"teaser":25522,"__hash__":25523},"blog/blog/synyx-berlin-expert-days-2015.md","synyx @ Berlin Expert Days 2015",[11916],{"type":11,"value":25161,"toc":25507},[25162,25165,25174,25177,25183,25187,25190,25196,25199,25202,25205,25208,25212,25227,25236,25239,25256,25263,25271,25290,25300,25303,25309,25328,25349,25355,25372,25376,25379,25402,25420,25434,25445,25451,25481,25492,25498,25501,25504],[14,25163,25158],{"id":25164},"synyx-berlin-expert-days-2015",[18,25166,25167,25168,25173],{},"Am 17. und 18. September 2015 fanden die fünften ",[585,25169,25172],{"href":25170,"rel":25171},"http://bed-con.org/2015/",[589],"Berlin Expert Days"," (kurz BED-Con) statt.",[18,25175,25176],{},"Erst beim Schreiben dieses Blog Posts habe ich mit Erstaunen festgestellt, dass es für mich bereits die vierte BED-Con\nwar…",[18,25178,25179,25180,986],{},"Rückt näher an den Kamin, Kinder, nehmt euch einen Keks, ich werde euch nun die Geschichte erzählen von ",[573,25181,25182],{},"Neun synyxern,\ndie auszogen, die BED-Con unsicher zu machen",[649,25184,25186],{"id":25185},"mittwoch-16-september-anreise","Mittwoch, 16. September – Anreise",[18,25188,25189],{},"Bereits gegen 13:30 Uhr macht sich unsere lustige Truppe auf den Weg zum Hauptbahnhof. Gewappnet mit Reiseproviant (\nBier), guter Laune und Kartenspielen sind wir bereit für die große Reise Richtung Berlin.",[18,25191,25192],{},[1794,25193],{"alt":25194,"src":25195},"\"Nao\"","https://media.synyx.de/uploads//2015/09/Nao-e1443019500387.jpg",[18,25197,25198],{},"In weiser Voraussicht haben wir eine Direktverbindung gebucht, sind mehr als überpünktlich am Hauptbahnhof und haben bei\nder großen Reisegruppe selbstverständlich auch an Platzreservierungen gedacht. Wir sind der Meinung, dass nun eigentlich\nnichts mehr schiefgehen könne.",[18,25200,25201],{},"Leider haben wir ein winziges Detail übersehen: unsere Platzreservierungen befinden sich im Ruhebereich des ICE.",[18,25203,25204],{},"So dauert es nicht lange bis unsere freudig aufgeregte und mitteilungsfreudige Truppe von einem adrett gekleideten Herrn\nauf diesen Umstand hingewiesen wird. Mehrmals. Glücklicherweise stört sich niemand sonst an Kommunikation und als er\nnach einigen Stationen wieder aussteigt, kann man sich auch wieder unterhalten, ohne flüstern zu müssen.",[18,25206,25207],{},"Mit einer halben Stunde Verspätung erreichen wir gegen 20 Uhr den Hauptbahnhof der Hauptstadt, wo sich unsere Wege\nvorerst einmal trennen, da ich privat unterkomme.",[649,25209,25211],{"id":25210},"donnerstag-17-september-erster-konferenztag","Donnerstag, 17. September – Erster Konferenztag",[18,25213,25214,25215,25220,25221,25226],{},"In diesem Jahr hat die BED-Con nicht nur einen anderen Termin (Herbst statt Frühjahr), sondern auch eine andere\nLokalität zu bieten. Statt in der ",[585,25216,25219],{"href":25217,"rel":25218},"http://www.fu-berlin.de/",[589],"Freien Universität Berlin"," findet die Java-Konferenz\ndieses Jahr in der ",[585,25222,25225],{"href":25223,"rel":25224},"http://www.urania.de/",[589],"Urania Berlin"," statt.",[18,25228,25229,25230,25235],{},"Ich habe einen typischen Berliner Anfahrtsweg von ungefähr 50 Minuten vor mir. Die anderen haben sich in\neinem ",[585,25231,25234],{"href":25232,"rel":25233},"http://www.motel-one.com/de/hotels/berlin/hotel-berlin-tiergarten/",[589],"Hotel"," eingenistet, von dem aus man einen\nextrem langen Fußmarsch von 2 Minuten hinlegen muss, um die Urania zu erreichen.",[18,25237,25238],{},"Um 08:40 Uhr treffen wir uns vor der Urania. Wir sind alle gespannt auf den kommenden Tag und schmieden Pläne, welche\nVorträge wir heute besuchen werden.",[18,25240,25241,25242,25245,25246,25249,25250,25255],{},"Wie bereits das Jahr zuvor ist auch dieses Jahr das Thema Microservices sehr präsent auf der BED-Con. So auch der erste\nVortrag im Humboldtsaal von ",[27,25243,25244],{},"Leon Rosenberg",". Ich staune nicht schlecht, als ich den riesigen Saal betrete und gefühlt\ntausende von roten Sesseln vorfinde. Ein Gefühl von Kino liegt in der Luft und ich verspüre ein leichtes Verlangen nach\nPopcorn. Es gibt einige Meta-Ratschläge zum Thema ",[27,25247,25248],{},"Worauf es wirklich ankommt bei Microservices",". Es geht um typische\nProbleme und wie man diese lösen bzw. vermeiden kann. Ich amüsiere mich über die Anekdoten von kuriosen Bugs, die der\nSpeaker zum Besten gibt. Als es um Problemvermeidung und Monitoring von Anwendungen geht, stelle ich fest, dass ich Leon\nRosenberg bereits von einer vergangenen BED-Con kenne, nämlich von seinem Talk über ",[585,25251,25254],{"href":25252,"rel":25253},"http://www.moskito.org/",[589],"MoSKito",",\neinem sehr hilfreich anmutendem Monitoring Tool für Java-Anwendungen. Ich ärgere mich, dass ich es nach über zwei\nJahren immer noch nicht geschafft habe, mich genauer mit MoSKito auseinander zu setzen und nehme mir fest vor, das\ndemnächst endlich anzugehen.",[18,25257,25258,25259,25262],{},"In der kurzen Pause stärke ich mich mit Kaffee – diesen gibt es neben Tee, Wasser und Cola nämlich zur Selbstbedienung –\nund greife voller Vorfreude zu, als ich Brezeln entdecke. Noch während ich den Gedanken habe ",[573,25260,25261],{},"Juhu keine\nButterbrezeln!",", beiße ich hinein und bemerke, dass die Brezeln mit massig Butter gefüllt sind! Ich frage mich, wer auf\nso eine verrückte Idee wie gefüllte Butterbrezeln kommen kann…",[18,25264,25265,25266,25270],{},"Der Schock über die bizarren Brezeln rückt allerdings schnell in den Hintergrund. Wir irren reichlich verwirrt durch die\nUrania auf der Suche nach Raum A. Mehrere Stockwerke, mehrere Möglichkeiten von Stockwerk zu Stockwerk zu kommen.\nIrgendwann fragen wir uns, ob wir auf der Suche nach Raum ",[25267,25268,25269],"del",{},"neundreiviertel"," A eine geheime Wand übersehen haben.\nGlücklicherweise kann uns die nette BED-Con Crew weiterhelfen und bringt anschließend auch einige Beschilderungen mehr\nan.",[18,25272,25273,25274,25279,25280,25283,25284,25289],{},"Im Zuge der ",[585,25275,25278],{"href":25276,"rel":25277},"http://jug-karlsruhe.de/",[589],"Java User Group Karlsruhe"," hatte ",[27,25281,25282],{},"Sven Ruppert"," bereits seinen Vortrag über *\n*Mutation Testing** bei uns im Hause gehalten. Da ich diesen allerdings verpasst habe, will ich die BED-Con nutzen, um\netwas über Mutation Testing zu erfahren. Anhand eines simplen Code Snippets wird aufgezeigt und diskutiert, was denn\neigentlich gute Testabdeckung bedeutet und wie man diese messen und erreichen kann. Dabei wird deutlich gemacht, dass\neine gute Testabdeckung eben nicht nur an guter Code Coverage gemessen werden kann. Mithilfe\nvon ",[585,25285,25288],{"href":25286,"rel":25287},"http://pitest.org/",[589],"PIT"," stellt Sven Ruppert dann im praktischen Beispiel die Methode des Mutation Testings vor.\nDer Vortrag macht mich neugierig und ich nehme mir vor, mich nach der BED-Con genauer mit dem Thema zu befassen, auch\nwenn Mutation Testing sicherlich nicht der Heilige Gral für jede Art von Anwendung sein mag.",[18,25291,25292,25293,25295,25296,25299],{},"Kaffee und Wasser fassen und ab in den Humboldtsaal! ",[27,25294,15332],{}," erörtert, warum ",[27,25297,25298],{},"Microservices und agile\nSoftwareentwicklung"," gut zusammenpassen. Anhand von Conway’s Law geht er auf die Vor- und Nachteile von Microservices\nein. Der Vortrag ist fast ein bisschen philosophisch anmutend, aber nichtsdestotrotz sehr interessant.",[18,25301,25302],{},"Zur Stärkung gibt es in der Mittagspause belegte Baguettes. Meines hat sowohl auf der Ober- als auch auf der Unterseite\neine kräftige Schicht Butter aufzuweisen. Mir scheint, Butter ist in Berlin ein beliebtes Nahrungsmittel.",[18,25304,25305],{},[1794,25306],{"alt":25307,"src":25308},"\"Devoxx4Kids_Bedcon\"","https://media.synyx.de/uploads//2015/09/Devoxx4Kids_Bedcon.jpg",[18,25310,25311,25312,25314,25315,1628,25318,25321,25322,25327],{},"Für mich als synyxer ist es quasi eine heilige Pflicht, dem Vortrag über die ",[27,25313,6829],{}," beizuwohnen, der von\nunseren Kollegen ",[27,25316,25317],{},"Katja Arrasz-Schepanski",[27,25319,25320],{},"Christian Mennerich"," gehalten wird. Die Zuschauer sind\ninteressiert, stellen Fragen und sorgen für interessante Diskussionen. Ich bin gespannt, ob der Vortrag Früchte tragen\nwird und wir bald einen weiteren ",[585,25323,25326],{"href":25324,"rel":25325},"http://www.devoxx4kids.de/veranstaltungen/",[589],"Devoxx4Kids Deutschland"," Sprössling\nheranwachsen sehen werden.",[18,25329,25330,25331,25334,25335,25340,25341,25344,25345,25348],{},"Im Anschluss (bequemerweise muss ich nicht einmal den Raum wechseln) stellt ",[27,25332,25333],{},"Oliver Wehrens"," die Leitplanken\nder ",[585,25336,25339],{"href":25337,"rel":25338},"http://www.epost.de",[589],"E-POST"," bei der ",[27,25342,25343],{},"Entwicklung verteilter Systeme"," vor. Ich stelle fest, dass wir in manchen\nProjekten ziemlich ähnliche ",[25267,25346,25347],{},"Probleme"," Herausforderungen haben, bin allerdings heilfroh, dass zumindest die\nStrukturen/Hierarchien bei uns anderer Art sind.",[18,25350,25351],{},[1794,25352],{"alt":25353,"src":25354},"\"UX_im_Projekt_Bedcon\"","https://media.synyx.de/uploads//2015/09/UX_im_Projekt_Bedcon.jpg",[18,25356,25357,25358,1628,25361,25364,25365,25368,25369,986],{},"Zum Abschluss des ersten Konferenztages lehne ich mich in einem der bequemen Sessel des Humboldtsaals zurück und lausche\n",[27,25359,25360],{},"Nicole Charlier",[27,25362,25363],{},"Philipp Kumar"," über ihre Erfahrungen von ",[27,25366,25367],{},"UX im Projekt",". Sie berichten über den\nEntwicklungsprozess einer Android App, die Pflegekräfte bei der Arbeit unterstützen soll. Zuallererst wird die fachliche\nDomäne, sprich der Arbeitsalltag einer Pflegekraft, mit anschaulichen Skizzen vorgestellt. Der Entwicklungsprozess wird\ngenauer erläutert: mehrere Tage Feldstudien, Interviews, Konzeptionen. Alles, um den Endbenutzer im Fokus zu haben und\nbei ihm eine hohe Akzeptanz zu erreichen. In der anschließenden Diskussion gibt es einige kritische Stimmen, wie man\neinen solch hohen Anteil an UX überhaupt durchsetzen/verkaufen kann. Mir gefällt die Argumentation (frei zitiert): ",[573,25370,25371],{},"Man\nmuss nur begreiflich machen, dass es das wert ist, wenn man sich durch eine hohe Qualität abheben will",[649,25373,25375],{"id":25374},"freitag-18-september-zweiter-konferenztag","Freitag, 18. September – Zweiter Konferenztag",[18,25377,25378],{},"Um 08:50 Uhr treffe ich vorerst nur auf einen meiner Mitreisenden und höre mir erstaunliche Geschichten zum Vorabend in\nKreuzberg an. Man munkelt, es wurde angeblich sogar ein Geheimgang in der Hotel Bar gefunden.",[18,25380,25381,25382,25385,25386,25389,25390,25395,25396,25401],{},"Ich rüste mich mit Kaffee aus und mache mich zum ersten Mal auf den Weg ins Loft, das sich im 3. OG befindet. Ich bin\ngespannt auf den tierischen Vortrag von ",[27,25383,25384],{},"Jeremias Rößler"," mit dem erfrischenden Titel ",[27,25387,25388],{},"Bei uns testen lauter Affen:\nDas Ende der Bananensoftware!",". Der Vortrag erläutert das Monkey Testing Prinzip, ein Verfahren, um eine Anwendung auf\nFehler zu prüfen, indem man wahllos agierende Affen auf diese hetzt, die versuchen Fehler zu verursachen. Die Türme von\nHanoi dienen als Beispiel, um zu erläutern, wie man sich den genetischen Algorithmus zunutze machen kann, um\nintelligente Affen zu erschaffen. Wir lernen auch, warum Fortpflanzung so beliebt ist. Ein eigentlich sehr\nwissenschaftlicher Vortrag, der jedoch durch die kreativen Folien und den sympathischen Speaker keinesfalls trocken ist.\nAm Ende schließt sich der Kreis (da beißt sich der Affe in den Schwanz): das Startup ",[585,25391,25394],{"href":25392,"rel":25393},"http://www.retest.de/",[589],"ReTest","\nbietet einen vollautomatisierten Regressionstester an, der eben genau das vorgestellte Monkey Testing Prinzip nutzt.\nPersönlich interessant für mich ist allerdings eher die kurz angesprochene Monkey Testing\nLibrary ",[585,25397,25400],{"href":25398,"rel":25399},"https://github.com/marmelab/gremlins.js/blob/master/README.md",[589],"Gremlins.js",". Eine Horde Gremlins auf unsere\nAnwendungen loslassen, das klingt ganz schön verlockend.",[18,25403,25404,25407,25408,25410,25411,25414,25415,25419],{},[573,25405,25406],{},"Und täglich grüßen die Microservices…"," Wieder ein Votrag von ",[27,25409,15332],{}," über Microservices, diesmal allerdings\nsteht eher die Technologie im Vordergrund. Es wird gezeigt, wie einfach man ",[27,25412,25413],{},"Microservices mit Spring Boot und Spring\nCloud"," erstellen kann. Ich staune einmal mehr über die immense Magie, die\nin ",[585,25416,13144],{"href":25417,"rel":25418},"http://projects.spring.io/spring-boot/",[589]," steckt. Und noch mehr, als ich höre, dass man Spring Boot\nApplikationen inzwischen sogar total easy-going als Unix Services ausführen kann.",[18,25421,25422,25425,25426,25429,25430,25433],{},[573,25423,25424],{},"Loft is in the air…"," Ich erklimme den weiten Weg nach oben ins Loft, um mir einen Vortrag über ",[27,25427,25428],{},"Docker für\nIntegrationtests"," von ",[27,25431,25432],{},"Stefan Hildebrandt"," anzuhören. Leider fehlt mir ein bisschen der rote Faden. Es wird sehr\nausführlich auf die Erzeugung von produktionsnahen Testdaten anhand von Produktionsdatenbanken eingegangen. Aufgrund des\nTitels hatte ich im Vorfeld irgendwie ein paar andere Erwartungen.",[18,25435,25436,25437,25440,25441,25444],{},"Ich bin mir beim nächsten Slot aufgrund der Themen sehr unschlüssig, welchen Vortrag ich mir anhören soll. Während der\nMittagspause werde ich darauf hingewiesen, dass ",[27,25438,25439],{},"Jochen Mader"," wohl sehr gute Talks halten soll. Daher folge ich\nmeinen Kollegen in seinen Vortrag über ",[27,25442,25443],{},"Event Sourcing",". Und ich werde nicht enttäuscht. Sehr anschaulich, mit\nkreativen Folien wird Event Sourcing anhand von Spiele-Programmierung erklärt. Das hat sich gelohnt.",[18,25446,25447],{},[1794,25448],{"alt":25449,"src":25450},"\"Java_Testing_Bingo\"","https://media.synyx.de/uploads//2015/09/Java_Testing_Bingo.jpg",[18,25452,25453,25454,25457,25458,25461,25462,1628,25465,25468,25469,25474,25475,25480],{},"Nach mehreren Runden Buzzword-Bingo (",[573,25455,25456],{},"It’s all about Microservices!",") habe ich nun auch Lust auf eine Runde ",[27,25459,25460],{},"Java\nTesting Bingo",". Tatsächlich verteilen ",[27,25463,25464],{},"Martin Klose",[27,25466,25467],{},"Jan Hartung"," zu Beginn des Vortrags Bingo-Karten. Wir\nerleben eine Reise durch verschiedene Java Testing Libraries, sehen diverse Code Snippets und am Ende bleibt bei mir vor\nallem hängen, dass ich mir ",[585,25470,25473],{"href":25471,"rel":25472},"http://joel-costigliola.github.io/assertj/",[589],"AssertJ"," als Alternative\nzu ",[585,25476,25479],{"href":25477,"rel":25478},"http://hamcrest.org/",[589],"Hamcrest"," zu Gemüte führen werde.",[18,25482,25483,25484,25487,25488,25491],{},"…und dann ist man plötzlich beim letzten BED-Con Vortrag angekommen. Alle reden über’s Wetter, aber nur wenige tun dies\nmit Requisiten und Sound-Effekten. ",[27,25485,25486],{},"Timmo Freudl-Gierke"," stellt uns in seinem Vortrag ",[27,25489,25490],{},"Sharding Weather"," die\nDomäne Wetter genauer vor und erläutert seine Erfahrungen zum Aufbewahren von großen Datenmengen wie Wetterdaten.",[18,25493,25494],{},[1794,25495],{"alt":25496,"src":25497},"\"Die BED-Con Truppe\"","https://media.synyx.de/uploads//2015/09/Bedcon_Truppe.jpg",[18,25499,25500],{},"Eine weitere BED-Con geht zu Ende…aber die nächste kommt bestimmt 🙂",[18,25502,25503],{},"Bis dahin kann man noch eine Weile zehren von den Erkenntnissen, Ideen und Gedankenanstößen, die man so mit nach Hause\nnimmt.",[18,25505,25506],{},"Es hat sich mal wieder gelohnt!",{"title":48,"searchDepth":86,"depth":86,"links":25508},[25509,25510,25511],{"id":25185,"depth":126,"text":25186},{"id":25210,"depth":126,"text":25211},{"id":25374,"depth":126,"text":25375},[614],"2015-09-24T10:32:43","Am 17. und 18. September 2015 fanden die fünften Berlin Expert Days (kurz BED-Con) statt.","https://synyx.de/blog/synyx-berlin-expert-days-2015/",{},"/blog/synyx-berlin-expert-days-2015",{"title":25158,"description":25514},"blog/synyx-berlin-expert-days-2015",[25521,15426,5836,3122],"bed-con","Am 17. und 18. September 2015 fanden die fünften Berlin Expert Days (kurz BED-Con) statt. Erst beim Schreiben dieses Blog Posts habe ich mit Erstaunen festgestellt, dass es für mich…","rsFcwgNWbV3hUYF44I1lgKIVe8gs8HsxL5lwkMpttu4",{"id":25525,"title":25526,"author":25527,"body":25529,"category":25545,"date":25546,"description":25547,"extension":617,"link":25548,"meta":25549,"navigation":499,"path":25550,"seo":25551,"slug":25533,"stem":25552,"tags":25553,"teaser":25554,"__hash__":25555},"blog/blog/synyx-sportelt-unser-lauf-beim-b2run.md","synyx sportelt: Unser Lauf beim B2Run!",[25528],"kesler",{"type":11,"value":25530,"toc":25543},[25531,25534,25537],[14,25532,25526],{"id":25533},"synyx-sportelt-unser-lauf-beim-b2run",[18,25535,25536],{},"Am 11. Juni fand in Karlsruhe der B2Run statt, die siebte Auflage der deutschlandweiten Firmenlaufmeisterschaften in 12\nStädten. Dieses Jahr nahmen über 7000 Läufer statt – und immerhin 9 Läufer davon stellten wir. Als sich vor dem Lauf\nnach und nach mehr Teilnehmer am Stadion einfanden, war das für uns als erstmalige Teilnehmer durchein ein\neindrucksvoller Anblick. Entsprechend unserer vermuteten Laufleistung haben wir uns in den verschiedenen Startblöcken\neinsortiert und harrten gespannt der Dinge, die da kommen werden.",[18,25538,25539],{},[1794,25540],{"alt":25541,"src":25542},"B2Run2","https://media.synyx.de/uploads//2015/07/B2Run2-300x169.jpg",{"title":48,"searchDepth":86,"depth":86,"links":25544},[],[614],"2015-07-06T09:53:23","Am 11. Juni fand in Karlsruhe der B2Run statt, die siebte Auflage der deutschlandweiten Firmenlaufmeisterschaften in 12\\nStädten. Dieses Jahr nahmen über 7000 Läufer statt – und immerhin 9 Läufer davon stellten wir. Als sich vor dem Lauf\\nnach und nach mehr Teilnehmer am Stadion einfanden, war das für uns als erstmalige Teilnehmer durchein ein\\neindrucksvoller Anblick. Entsprechend unserer vermuteten Laufleistung haben wir uns in den verschiedenen Startblöcken\\neinsortiert und harrten gespannt der Dinge, die da kommen werden.","https://synyx.de/blog/synyx-sportelt-unser-lauf-beim-b2run/",{},"/blog/synyx-sportelt-unser-lauf-beim-b2run",{"title":25526,"description":25536},"blog/synyx-sportelt-unser-lauf-beim-b2run",[],"Am 11. Juni fand in Karlsruhe der B2Run statt, die siebte Auflage der deutschlandweiten Firmenlaufmeisterschaften in 12 Städten. Dieses Jahr nahmen über 7000 Läufer statt – und immerhin 9 Läufer…","FgOagTI03W0mGG4USkYAaUSEjWzw6XDAwR38sW0UbI4",{"id":25557,"title":25558,"author":25559,"body":25560,"category":25582,"date":25583,"description":25584,"extension":617,"link":25585,"meta":25586,"navigation":499,"path":25587,"seo":25588,"slug":25564,"stem":25589,"tags":25590,"teaser":25591,"__hash__":25592},"blog/blog/unser-girls-day-2015.md","Unser Girls' Day 2015",[25528],{"type":11,"value":25561,"toc":25580},[25562,25565,25568,25571,25574],[14,25563,25558],{"id":25564},"unser-girls-day-2015",[18,25566,25567],{},"Der 23. April war ein besonderer Tag für uns bei synyx. Im Rahmen des Girls Day 2015, hatten wir 12 Schülerinnen im\nAlter von 10 bis 14 Jahren aus der Region Karlsruhe bei uns zu Gast.",[18,25569,25570],{},"Wie wir in einem vorherigen Blogbeitrag bereits geschrieben haben, findet der Girls Day deutschlandweit einmal jährlich\nstatt. Ziel ist es, jungen Mädchen Berufsfelder aufzuzeigen und Interesse an Themen zu wecken, die fälschlicherweise oft\nnoch als typische “Männerberufe” angesehen werden.",[18,25572,25573],{},"Zwar haben wir bei synyx durch unsere regelmäßigen Devoxx4Kids-Veranstaltungen Erfahrung damit, junge Menschen an das\nThema IT heranzuführen, allerdings war dies unsere erste Teilnahme am Girls Day, und das erste Mal, dass wir\ntechnikaffine Kids in unseren “live” Bürobetrieb einbinden. Entsprechend groß war die Spannung, was uns erwarten wird (\nwobei die Spannung sicherlich auch bei den Mädels vorhanden gewesen war).",[18,25575,25576],{},[1794,25577],{"alt":25578,"src":25579},"20150423_121024","https://media.synyx.de/uploads//2015/06/20150423_121024-300x263.jpg",{"title":48,"searchDepth":86,"depth":86,"links":25581},[],[614],"2015-06-16T10:38:43","Der 23. April war ein besonderer Tag für uns bei synyx. Im Rahmen des Girls Day 2015, hatten wir 12 Schülerinnen im\\nAlter von 10 bis 14 Jahren aus der Region Karlsruhe bei uns zu Gast.","https://synyx.de/blog/unser-girls-day-2015/",{},"/blog/unser-girls-day-2015",{"title":25558,"description":25567},"blog/unser-girls-day-2015",[],"Der 23. April war ein besonderer Tag für uns bei synyx. Im Rahmen des Girls Day 2015, hatten wir 12 Schülerinnen im Alter von 10 bis 14 Jahren aus der…","BukfK_6zih9WPUkO99nYvPc1d-msoWmWSupqj5e6Zho",{"id":25594,"title":25595,"author":25596,"body":25597,"category":25668,"date":25669,"description":25670,"extension":617,"link":25671,"meta":25672,"navigation":499,"path":25673,"seo":25674,"slug":25601,"stem":25675,"tags":25676,"teaser":25677,"__hash__":25678},"blog/blog/wertbeitrag-der-it-input-aus-leipzig.md","Wertbeitrag der IT – Input aus Leipzig",[21374],{"type":11,"value":25598,"toc":25666},[25599,25602,25605,25611,25620,25624,25632,25635,25641,25646,25649,25660,25663],[14,25600,25595],{"id":25601},"wertbeitrag-der-it-input-aus-leipzig",[18,25603,25604],{},"Am 26. und 27. März war ich in Leipzig Teilnehmer bei der Konferenz „Wertbeitrag der IT“. Das Thema der\nWertbeitragsermittlung beschäftigt mich seit einigen Jahren und ich bin gerade tatsächlich dabei, einen Leitfaden mit\neinem pragmatischen Ansatz zur Wertbeitragsermittlung zu schreiben. Von daher hat der Zeitpunkt ideal gepasst und ich\nwar sehr gespannt, welche Erkenntnisse ich nach den zwei Tagen mit nach Hause nehmen kann.",[18,25606,25607],{},[1794,25608],{"alt":25609,"src":25610},"\"Softwareforen Leipzig\"","https://media.synyx.de/uploads//2015/04/Fassade_Hainstra%C3%9Fe.jpg",[18,25612,25613,25614,25619],{},"Die Konferenz wurde von den ",[585,25615,25618],{"href":25616,"rel":25617},"http://www.softwareforen.de",[589],"Softwareforen Leipzig"," und deren Geschäftsführer André Köhler\nausgetragen. Zentral in der Innenstadt gelegen, in einem charmanten Altbau mit neu gestalteten Räumlichkeiten, bestem\nCatering und sehr guter Organisation konnte man sich gut aufgehoben fühlen. Die Softwareforen Leipzig veranstalten\nregelmäßig IT-spezifische Konferenzen und ich kann sie als Veranstalter durch aus empfehlen.",[18,25621,25622],{},[27,25623,6143],{},[18,25625,25626,25627,25631],{},"Alle Vorträge und Referenten können unter\ndiesem ",[585,25628,20957],{"href":25629,"rel":25630},"http://www.softwareforen.de/portal/de/veranstaltung/softwareforen_konferenzen/wertbeitrag_der_it/themenarchiv_11/konferenz_2/konferenz_3.xhtml",[589],"\neingesehen werden – zumindest in Kurzform. In meinen Augen waren die beiden Vorträge von Prof. Dr. Tim Weitzel (\nOtto-Friedrich-Universität Bamberg) „Wertbeitrag der IT – Wie man die IT nutzt, damit die IT nutzt“ und von Prof. Dr.\nFrederik Ahlemann (Universität Duisburg-Essen) „Benefits Management – Ein Ansatz zur Nutzengenerierung aus\nIT-Investitionen“ am wertvollsten. Sie haben deutlich gemacht, dass der Wertbeitrag der IT eben nicht in der IT zu\nsuchen ist sondern beim Fachbereich und eben genau dieser sich um den Nutzen/Wert kümmern muss.",[18,25633,25634],{},"Interessant zu sehen war, dass es nicht DIE Berechnungsmethodik gibt, mit der der Wertbeitrag der IT zu ermitteln ist.\nUnd, dass mehrheitlich leider immer noch die Wertbeitragsermittlung aus einem Rechtfertigungsgrund (die IT kostet!)\ngewünscht wird – als Steuerungsinstrument wäre sinnvoller!",[18,25636,25637],{},[1794,25638],{"alt":25639,"src":25640},"\"Eröffnung der Konferenz\"","https://media.synyx.de/uploads//2015/04/Konferenz_WBIT_01.jpg",[18,25642,25643],{},[27,25644,25645],{},"Meine Erkenntnisse",[18,25647,25648],{},"Die Vorträge in Leipzig haben einige meiner Gedanken zum Thema der Wertbeitragsermittlung bestätigt:",[5899,25650,25651,25654,25657],{},[580,25652,25653],{},"Es gibt nicht DIE Methode",[580,25655,25656],{},"Der Fachbereich ist der Schlüssel",[580,25658,25659],{},"Das Ergebnis einer Wertbeitragsermittlung ist von außen betrachtet subjektiv",[18,25661,25662],{},"Und, es haben sich neue Fragen gestellt. Was ist eigentlich genau der Unternehmenserfolg, von dem ich den Wertbeitrag\nder IT bemessen will? Wie setzt er sich zusammen? Die Antworten auf diese Fragen sind meiner Meinung nach Voraussetzung\nfür eine sinnvolle Berechnung. Aber, nach meiner Erfahrung gibt es diese Antworten in der Regel nicht! Im Moment bin ich\nmir sogar unschlüssig ob es überhaupt sinnvoll ist, eine Wertbeitragsberechnung anzugehen. Wo liegt der Nutzen und ist\ner diesen Aufwand wert? Oder sollte man nicht lieber davon ausgehen, dass die IT erst effizientes Arbeiten ermöglicht\nund das als Tatsache verstehen?",[18,25664,25665],{},"In diesem Sinne freue ich mich immer über einen Austausch mit allen Mitstreitern und Interessierten am Thema Wertbeitrag\nder IT.",{"title":48,"searchDepth":86,"depth":86,"links":25667},[],[614],"2015-04-24T11:32:16","Am 26. und 27. März war ich in Leipzig Teilnehmer bei der Konferenz „Wertbeitrag der IT“. Das Thema der\\nWertbeitragsermittlung beschäftigt mich seit einigen Jahren und ich bin gerade tatsächlich dabei, einen Leitfaden mit\\neinem pragmatischen Ansatz zur Wertbeitragsermittlung zu schreiben. Von daher hat der Zeitpunkt ideal gepasst und ich\\nwar sehr gespannt, welche Erkenntnisse ich nach den zwei Tagen mit nach Hause nehmen kann.","https://synyx.de/blog/wertbeitrag-der-it-input-aus-leipzig/",{},"/blog/wertbeitrag-der-it-input-aus-leipzig",{"title":25595,"description":25604},"blog/wertbeitrag-der-it-input-aus-leipzig",[],"Am 26. und 27. März war ich in Leipzig Teilnehmer bei der Konferenz „Wertbeitrag der IT“. Das Thema der Wertbeitragsermittlung beschäftigt mich seit einigen Jahren und ich bin gerade tatsächlich…","1NKFRVXinFgKubN-DHIM4M5wUJruOH9XIoiTB6eVmhU",{"id":25680,"title":25681,"author":25682,"body":25683,"category":25750,"date":25751,"description":25752,"extension":617,"link":25753,"meta":25754,"navigation":499,"path":25755,"seo":25756,"slug":25687,"stem":25758,"tags":25759,"teaser":25765,"__hash__":25766},"blog/blog/auch-die-zweite-devoxx4kids-in-karlsruhe-war-ein-erfolg.md","Auch die zweite Devoxx4Kids in Karlsruhe war ein Erfolg",[21028],{"type":11,"value":25684,"toc":25748},[25685,25688,25701,25707,25710,25713,25719,25722,25730,25739,25745],[14,25686,25681],{"id":25687},"auch-die-zweite-devoxx4kids-in-karlsruhe-war-ein-erfolg",[18,25689,25690,25691,25695,25696,25700],{},"Am 11.04.2015 fand die zweite ",[585,25692,6829],{"href":25693,"rel":25694},"http://devoxx4kids.org/deutschland",[589]," in Karlsruhe statt. Die Workshops\nwaren die gleichen wie beim letzten Mal im\nSeptember (",[585,25697,10117],{"href":25698,"rel":25699},"http://blog.synyx.de/2014/09/devoxx4kids-in-karlsruhe-programmieren-und-elektronik-fur-kids/",[589]," könnt\nihr nachlesen, was wir genau gemacht haben). So wollten wir auch Kindern die Gelegenheit bieten, welche beim ersten\nEvent keinen Platz mehr bekommen haben, an den Workshops teilzunehmen.",[18,25702,25703],{},[1794,25704],{"alt":25705,"src":25706},"\"kids_ges\"","https://media.synyx.de/uploads//2015/04/kids_ges.jpg",[18,25708,25709],{},"Dieses Mal hieß es 24 Plätze an wissbegierige Mädchen und Jungen zu vergeben. Was uns sehr freute, es haben sich sehr\nviele Mädchen angemeldet, im Verhältnis mehr als das letzte Mal. Das lässt annehmen, dass sich auch die weibliche\nGeneration langsam aber sicher dem Thema „Technik und Informatik“ annimmt und sich dafür interessiert.",[18,25711,25712],{},"Wir hatten auch zwei „Wiederholungstäter“, sprich zwei Kids, welche bereits im September da waren. Wir hatten leichte\nBedenken, dass die beiden sich vielleicht langweilen würden, das war aber zum Glück nicht der Fall. Wir hatten allgemein\nden Eindruck, als hätten die Kids wieder viel Spaß beim Lernen gehabt. Zumindest hat das auch das erste Feedback,\nwelches wir noch am gleichen Tag erhalten haben, ergeben. Das freut uns natürlich außerordentlich und bestätigt uns in\nunserem Handeln und bestärkt uns weiterhin die Devoxx4Kids zu organisieren und anzubieten.",[18,25714,25715],{},[1794,25716],{"alt":25717,"src":25718},"\"bild_2\"","https://media.synyx.de/uploads//2015/04/bild_2.jpg",[18,25720,25721],{},"Es war auch klasse, dass die Karlshochschule uns wieder ihre Räumlichkeiten zur Verfügung gestellt hat. Die Räume sind\nmit allem, was wir für unsere Workshops brauchen, ausgestattet. Auch das Karlscafé öffnete wieder seine Pforten für uns\nund versorgte und mit leckerem, heißem Kaffee 😉",[18,25723,25724,25725,25729],{},"An dieser Stelle möchten wir uns bedanken. Danke, dass so viele tolle Kinder da waren. Danke an die vielen Helfer und\nMentoren. Insbesondere Oliver Milke und Alexander Bischoff, die den Kinder wieder das „Internet der Dinge“\nmittels ",[585,25726,24858],{"href":25727,"rel":25728},"http://www.tinkerforge.com/de",[589]," näher gebracht haben. Die beiden engagieren sich sehr für die\nDevoxx4Kids, waren auch mit auf der JavaLand4Kids und werden bei uns im September ebenfalls wieder dabei sein. Ihr seid\nuns echt ans Herz gewachsen.",[18,25731,25732,25733,25738],{},"Aber auch den Sponsoren ist zu danken. ",[585,25734,25737],{"href":25735,"rel":25736},"http://www.exensio.de/",[589],"Exensio"," hat mit dem Bronze-Sponsering auch zu diesem\ntollen Event beigetragen. Zu guter Letzt danken wir unserem Arbeitgeber, der synyx GmbH & Co. KG. Es ist nicht\nselbstverständlich, dass eine Firma so viel Energie, Mittel und Arbeitszeit in ein Non-Profit Event steckt.",[18,25740,25741],{},[1794,25742],{"alt":25743,"src":25744},"\"copter\"","https://media.synyx.de/uploads//2015/04/copter.jpg",[18,25746,25747],{},"Wir hoffen für September, wenn es neue Workshops geben wird, genauso viele Helfer und Sponsoren finden zu können. Wir\nwollen wieder 32 Kindern die Möglichkeit bieten, sich mit dem Thema mit Spaß zu beschäftigen. Wer noch Ideen für neue\nWorkshops hat oder vielleicht auch als Mentor dabei sein will, kann sich gerne bei uns melden. Wir freuen uns über jede\nUnterstützung.",{"title":48,"searchDepth":86,"depth":86,"links":25749},[],[614],"2015-04-17T17:15:17","Am 11.04.2015 fand die zweite Devoxx4Kids in Karlsruhe statt. Die Workshops\\nwaren die gleichen wie beim letzten Mal im\\nSeptember (hier könnt\\nihr nachlesen, was wir genau gemacht haben). So wollten wir auch Kindern die Gelegenheit bieten, welche beim ersten\\nEvent keinen Platz mehr bekommen haben, an den Workshops teilzunehmen.","https://synyx.de/blog/auch-die-zweite-devoxx4kids-in-karlsruhe-war-ein-erfolg/",{},"/blog/auch-die-zweite-devoxx4kids-in-karlsruhe-war-ein-erfolg",{"title":25681,"description":25757},"Am 11.04.2015 fand die zweite Devoxx4Kids in Karlsruhe statt. Die Workshops\nwaren die gleichen wie beim letzten Mal im\nSeptember (hier könnt\nihr nachlesen, was wir genau gemacht haben). So wollten wir auch Kindern die Gelegenheit bieten, welche beim ersten\nEvent keinen Platz mehr bekommen haben, an den Workshops teilzunehmen.","blog/auch-die-zweite-devoxx4kids-in-karlsruhe-war-ein-erfolg",[3747,25760,25761,25762,19240,25763,25764],"kindertagung","nao","quadcopter","tinkerforge","worksho","Am 11.04.2015 fand die zweite Devoxx4Kids in Karlsruhe statt. Die Workshops waren die gleichen wie beim letzten Mal im September (hier könnt ihr nachlesen, was wir genau gemacht haben). So…","PandpV-fJlmjwjmouRWWwOSMEtOqjvwAUzuniOYYpNI",{"id":25768,"title":25769,"author":25770,"body":25772,"category":25830,"date":25831,"description":25832,"extension":617,"link":25833,"meta":25834,"navigation":499,"path":25835,"seo":25836,"slug":25776,"stem":25837,"tags":25838,"teaser":25840,"__hash__":25841},"blog/blog/javaland-2015.md","Javaland – 2015",[25771],"arrasz",{"type":11,"value":25773,"toc":25828},[25774,25777,25780,25783,25786,25789,25792,25804,25807,25810,25813,25816,25819,25822,25825],[14,25775,25769],{"id":25776},"javaland-2015",[18,25778,25779],{},"Dieses Jahr hatte ich endlich einmal die Gelegenheit einen Tag auf der Javaland, einer recht neuen Konferenz im\ndeutschsprachigen Raum, zu verbringen. Spannend ist hier vor allem die Location, das Phantasialand in Brühl. Ich war\nsehr gespannt, ob die Location praktikabel ist oder nicht… Natürlich ist das Socializing bei solchen Konferenzen auch\nein wichtiger Aspekt 🙂 Auch dies versprach auf der Javaland, durch die iJUG mitorganisiert, sehr spannend zu werden. Zu\nguter Letzt war es auch so, dass meine halbe Twitter Timeline schon seit Tagen viel @javalandconf im Angebot hatte 🙂",[18,25781,25782],{},"Und so begab es sich, dass ich mich wieder einmal zu unmenschlichen Zeiten morgens am Karlsruher Bahnhof mit ein paar\nKollegen auf den Weg nach Brühl bei Köln aufmachte.",[18,25784,25785],{},"Mein erster Talk an diesem Tag war Michael Hunger, der über die Neo4j sprach. Eigentlich ist das für mich nichts Neues,\nwir arbeiten selbst schon einige Zeit mit Neo4j, jedoch erhoffte ich mir Neuigkeiten aus der Entwicklung und ich wurde\nnicht enttäuscht. Nicht nur, das NeoTechnologies weiter an Cypher (der Neo4J Abfrage Sprache) feilt, sie versprechen\nmittlerweile auch, dass Cypher schneller als die Java-API ist. Auch an der allgemeinen Performance der Neo4J wurde\ngefeilt und Michael versprach mit dem nächsten Release eine Geschwindigkeitssteigerung um den Faktor 5. Meiner Meinung\nnach sind das super Aussichten und es beweist, dass man derzeit mit der Entscheidung für den Einsatz einer Neo4J sehr\ngut aufgestellt ist.",[18,25787,25788],{},"Der zweite Talk den ich hörte war von Florian Hopf, einem Ex-synyxer, und somit war ich sehr gespannt, was er Neues zu\nElasticSearch zu berichten hatte. Letztlich verstand er es hervorragend, verschiedene Anwendungsfälle aufzuzeigen und\nsomit die Augen für ganz andere Einsatzszenarien von ElasticSearch zu öffnen. Spannend auch der Vergleich zwischen dem\nELK (ElasticSearch, Logstash, Kibana) Stack und Graylog als monolithischere Alternative. Fazit: spannender, informativer\nund abwechslungsreicher Talk, obwohl Flo krank angereisst ist!",[18,25790,25791],{},"Danach habe ich mir den Devoxx4Kids Ableger der JavaLand einmal genauer angeschaut und meine Kollegen von synyx besucht,\nwelche den Event mit veranstaltet haben.",[18,25793,25794,25795,13322,25799,25803],{},"14 Mädchen und Jungen der dritten und vierten Klasse der Max & Moritz Grundschule in St. Augustin hatten das erste Mal\ndie Gelegenheit, an drei unterschiedlichen Workshops (Quadcopter, Tinkerforge und Scratch) teilzunehmen. Sie erlernten\nspielerisch den Umgang mit dem Raspberry Pi, einen Mini-Computer, und konnten erste Einblicke in die unterschiedlichen\nMöglichkeiten der Programmierung erhalten. Die Kids hatten sehr viel Spaß, wenn auch das Geräusch der Achterbahnen ab\nund zu die Aufmerksamkeit auf sich zog. Die ",[585,25796,25326],{"href":25797,"rel":25798},"http://www.devoxx4kids.org/deutschland",[589],[585,25800,24858],{"href":25801,"rel":25802},"http://www.tinkerforge.com",[589]," freuen sich schon auf ein weiteres Event im nächsten Jahr.",[18,25805,25806],{},"Nach dem Mittagessen ging es dann mit „Pipelines Zeichnen ist nicht schwer, Pipelines bauen dagegen sehr“ weiter,\nwelches mir leider zu Feature lastig war. Sicherlich wusste der Speaker sehr genau, was er da vortrug, aber letztlich\nkann ich mir eine Vergleichsmatrix zwischen verschiedenen Systemen zur Softwaredelivery selbst im Internet anschauen,\nich habe mir mehr Real World Problems versprochen und habe somit die restliche Zeit mit Networking verbracht 🙂 Für\nKollegen, denen die Continous Gedanken neu sind, war es sicherlich ein sinnvoller Vortrag.",[18,25808,25809],{},"Als nächsten und für mich dann auch letzten kompletten Vortag stand Distributed Log Aggregation und Metrics auf dem\nProgramm. Hier war ich natürlich besonders gespannt, da ich selbst vor einigen Monaten ein paar Artikel rund um diese\nThemen im JavaMagazin veröffentlicht hatte.",[18,25811,25812],{},"Der Vortrag wurde von Tammo van Heesen, ein damaliger Mitschreiber zu diesem Themengebiet im JavaMagazin, zusammen mit\nAlex Heusingfeld, welcher auch beinahe mal synyxer geworden wäre, gehalten.",[18,25814,25815],{},"Kurz und knapp gesagt war es ein spannender, informativer und unterhaltsamer und sehr guter Vortrag, der meine damaligen\nAussagen zum Großteil bestätigt.",[18,25817,25818],{},"Zu guter letzt wollte ich mir eigentlich noch ein Round-Up zu JSR371 MVC in JavaEE8 abholen. Allerdings gab ich das\nnach kurzer Zeit, aufgrund der für mich nicht schlüssigen Gründe FÜR den JSR, auf. Ich denke hier sollten die führenden\nKollegen noch ein paar mehr Runden drehen, ansonsten wird sich das an der Community vorbei entwickeln.",[18,25820,25821],{},"Das Networking kam auf der Javaland leider etwas zu kurz, da die Wege zwischen den Sessions recht weit sein können,\ninsbesondere wenn man sich auch die Devoxx4Kids mit anschauen wollte, was natürlich aus synyx Sicht besonders spannend\nwar 🙂 Leider waren aber eben genau die Devoxx4Kids Sessions komplett außerhalb des Phantasialands in einem Hotel\nuntergebracht, sodass zum einen die Wege enorm weit waren und zum anderen leider die Sichtbarkeit für meinen Geschmack\nVIEL zu gering ausgefallen ist. Ich hoffe dass dies beim nächsten Mal besser wird.",[18,25823,25824],{},"Um das Bild vollends abzurunden: das Catering war durchaus gelungen, auch wenn hier die Vegetarier/Vegane Freunde ein\nschweres Los durch lange Wartezeiten hatten. Sogar an die Sojamilch an allen Kaffeeständen wurde gedacht und das ist\ngroßartig! Hier können sich andere Konferenzen durchaus eine Scheibe abschneiden.",[18,25826,25827],{},"Somit würde ich sagen, bis 2016 im Javaland!",{"title":48,"searchDepth":86,"depth":86,"links":25829},[],[614],"2015-04-15T18:31:50","Dieses Jahr hatte ich endlich einmal die Gelegenheit einen Tag auf der Javaland, einer recht neuen Konferenz im\\ndeutschsprachigen Raum, zu verbringen. Spannend ist hier vor allem die Location, das Phantasialand in Brühl. Ich war\\nsehr gespannt, ob die Location praktikabel ist oder nicht… Natürlich ist das Socializing bei solchen Konferenzen auch\\nein wichtiger Aspekt 🙂 Auch dies versprach auf der Javaland, durch die iJUG mitorganisiert, sehr spannend zu werden. Zu\\nguter Letzt war es auch so, dass meine halbe Twitter Timeline schon seit Tagen viel @javalandconf im Angebot hatte 🙂","https://synyx.de/blog/javaland-2015/",{},"/blog/javaland-2015",{"title":25769,"description":25779},"blog/javaland-2015",[3747,6242,5836,25839],"phantasialand","Dieses Jahr hatte ich endlich einmal die Gelegenheit einen Tag auf der Javaland, einer recht neuen Konferenz im deutschsprachigen Raum, zu verbringen. Spannend ist hier vor allem die Location, das…","EuATM86YB9ssWiUT88o8h7JFGvfN8FZuhEPZO3Kr9wU",{"id":25843,"title":25844,"author":25845,"body":25846,"category":25859,"date":25860,"description":48,"extension":617,"link":25861,"meta":25862,"navigation":499,"path":25863,"seo":25864,"slug":25865,"stem":25866,"tags":25867,"teaser":25868,"__hash__":25869},"blog/blog/it-ist-keine-mannersache.md","IT ist keine Männersache",[25528],{"type":11,"value":25847,"toc":25857},[25848,25851],[14,25849,25844],{"id":25850},"it-ist-keine-männersache",[18,25852,25853],{},[1794,25854],{"alt":25855,"src":25856},"GirlsDay","https://media.synyx.de/uploads//2015/03/GirlsDay-300x84.jpg",{"title":48,"searchDepth":86,"depth":86,"links":25858},[],[614],"2015-03-04T09:44:55","https://synyx.de/blog/it-ist-keine-mannersache/",{},"/blog/it-ist-keine-mannersache",{"title":25844,"description":48},"it-ist-keine-mannersache","blog/it-ist-keine-mannersache",[],"Mädchen und Technik, das passt nicht zusammen? Wir finden: Ganz im Gegenteil, das passt sogar sehr gut! Dieses Jahr nimmt synyx am Girls‘Day teil, mit dem Ziel Schülerinnen an Berufsfelder…","NPAP7dRXupMNEXkUZ__3TWuGg_1MBFBmYl_KavIpSH4",{"id":25871,"title":25872,"author":25873,"body":25874,"category":25946,"date":25947,"description":25948,"extension":617,"link":25949,"meta":25950,"navigation":499,"path":25951,"seo":25952,"slug":25878,"stem":25953,"tags":25954,"teaser":25955,"__hash__":25956},"blog/blog/null-prozent-mitarbeiterfluktuation-in-den-letzten-3-jahren.md","Null-Prozent-Mitarbeiterfluktuation in den letzten 3 Jahren",[21374],{"type":11,"value":25875,"toc":25944},[25876,25879,25882,25885,25888,25932,25941],[14,25877,25872],{"id":25878},"null-prozent-mitarbeiterfluktuation-in-den-letzten-3-jahren",[18,25880,25881],{},"Wo gibt’s das noch im Jahr 2015 und in der Softwareindustrie? synyx ist mit aktuell fast 50 Mitarbeitern keine kleine\nEntwicklerbude mehr. Seit 2012 ist unsere Mitarbeiterzahl um ca. 1/3 angestiegen.",[18,25883,25884],{},"Obwohl jeder Entwickler mehrere Jobangebote pro Woche von Headhuntern über Xing, LinkedIn und andere Kanäle erhält,\nbleiben die Kollegen bei synyx. Und das ist gut für das Unternehmen! Es gibt weniger Unruhe, die Zusammenarbeit in den\nTeams wird immer besser, Wissen bleibt erhalten und wird ausgebaut und das kommt letztendlich auch dem Kunden zugute.\nDieser kann auch nach Jahren auf die gleichen Mitarbeiter „zurückgreifen“.",[18,25886,25887],{},"Wie erreicht man eine hohe Mitarbeiterbindung? Auch, wenn ich jetzt u.a. unseren Marktbegleitern helfe, möchte ich doch\nein paar Tipps los werden, wie man die Mitarbeiterbindung verbessern kann. Also gut aufgepasst liebe Geschäftsführer und\nVorstände 😉",[5899,25889,25890,25911,25914,25917,25920,25923,25926,25929],{},[580,25891,25892,25893,25899,25900,25905,25906,986],{},"Gehalt – offensichtlich! Es muss den Lebensumständen entsprechen und so hoch sein, dass ich als Mitarbeiter nicht\nmehr drüber nachdenken muss. Das ist eine Voraussetzung! Ein zu niedriges Gehalt demotiviert. Aaaaber, ein hohes Gehalt\nist nicht der Grund, warum Mitarbeiter im Unternehmen bleiben. Motivation/Mitarbeiterbindung über Bonus und ähnliche\nvariable Gehaltsbestandteile zu fördern funktioniert nicht in unserer Branche, zumindest nicht längerfristig. Siehe dazu\nu.a.\nden ",[585,25894,25898],{"href":25895,"rel":25896,"title":25897},"http://www.ted.com/talks/dan_pink_on_motivation/transcript?language=en",[589],"TED talk Dan Pink","TED Vortrag von Dan Pink",",\nBücher von ",[585,25901,25904],{"href":25902,"rel":25903,"title":25904},"http://de.wikipedia.org/wiki/Lutz_von_Rosenstiel",[589],"Lutz von Rosenstiel"," oder\ndie ",[585,25907,25910],{"href":25908,"rel":25909,"title":25910},"http://www.haygroup.com/downloads/de/Mitarbeiter_sind_kauflich_Ihre_Motivation_nicht.pdf",[589],"Studie der HayGroup zur Arbeitsmotivation",[580,25912,25913],{},"Die Richtigen einstellen! Im Zweifelsfall zählt die Persönlichkeit eines Bewerbers mehr als seine Job- oder\nTechnikerfahrung. Wenn er vom menschlichen in das Unternehmen passt, kann ich ihm immer noch das fehlende Handwerkszeug\nbeibringen. Der umgekehrte Fall ist eher schwierig.",[580,25915,25916],{},"Das richtige Werkzeug! Ein gut ausgestatteter Arbeitsplatz mit einem guten Stuhl, großen Monitoren, Dockingstation,\nNotebook mit ordentlich RAM, freier Wahl des Betriebssystems und der IDE sowie freien Getränken und Kaffee kosten nicht\ndie Welt und tragen ungemein dazu bei, effektiv und angenehm arbeiten zu können.",[580,25918,25919],{},"Weiterbildung! Damit ist nicht gemeint, dass man Bücher kauft, die ausgeliehen werden und nach der Arbeit studiert\nwerden können. Wenn man will, dass sich Mitarbeiter weiter entwickeln muss man ihnen die Möglichkeit dazu einräumen. Das\nbedeutet man muss Geld und Zeit (wieder Geld) zur Verfügung stellen. Tut man dies gar nicht, verliert das Unternehmen\nseine Wettbewerbsfähigkeit, tut man es auf dem Rücken der Mitarbeiter (siehe Zeit!) wird das Unternehmen das Know-how\nnicht behalten können und – „Trommelwirbel“ – verliert seine Wettbewerbsfähigkeit. Your choice?!",[580,25921,25922],{},"Flexible Arbeitsmodelle! Je nach persönlicher und familiärer Situation kann es sein, dass man zeitweise von zuhause\narbeiten will, man nicht mehr hunderte Kilometer pro Woche unterwegs sein kann oder auch einfach nur weniger arbeiten\nmöchte. Technisch und organisatorisch lässt sich dies meistens regeln. Nicht immer von heute auf morgen, aber mit einem\ngewissen Vorlauf, so dass es letztendlich für Arbeitgeber und Arbeitnehmer passt. Der Mitarbeiter wird es Danken!",[580,25924,25925],{},"Auf Projekte verzichten! Es ist besser auf manche Projekte zu verzichten, wenn die Bedingungen nicht zu den\nMitarbeitern passen. Das können lange vor Ort Einsätze sein, bei denen der Arbeitsort weit vom eigentlichen\nLebensmittelpunkt entfernt ist. Oder, das können auch Projekte bei Firmen sein, mit deren Branche sich Mitarbeiter\nüberhaupt nicht identifizieren können. Macht man trotzdem solche Projekte, wird sich der Gewinn über kurz oder lang in\nLuft auflösen, weil er von HR-Akquise und Know-how-Aufbaukosten aufgefressen wird.",[580,25927,25928],{},"Kommunikation und Mitbestimmung! Wenn der Azubi ohne Angst beim Chef klopfen und ihn etwas Fragen kann, und der ihm\naufrichtig zuhört, dann kann man davon ausgehen, dass in der Beziehung vieles richtig läuft.",[580,25930,25931],{},"Sinnvolle Unternehmensziele! Jetzt muss ich manche Geschäftsführer und Vorstände enttäuschen: „Wachstum in Höhe von\nx % als DAS Ziel zu definieren macht überhaupt gar keinen Sinn“! Wachstum kann ein Mittel zum Zweck sein, um ein\nanderes, sinnvolles Ziel zu erreichen, aber alleine stehend ohne Grenze ist Wachstum in einer begrenzten Welt ziemlich\nSinn befreit.",[18,25933,25934,25935,25940],{},"Diese Liste lässt sich beliebig lang fortführen und beschreibt nur ein paar Dinge, die meiner Meinung nach bei synyx\nrichtig gemacht werden. Letztendlich sind es viele Puzzleteile, die alle einen Beitrag für Wohlbefinden, Motivation und\nIdentifikation leisten. Passend dazu, schau mal auf",[585,25936,25939],{"href":25937,"rel":25938,"title":25939},"http://www.synyx.de/jobs/",[589],"synyx Jobs",";-).",[18,25942,25943],{},"Meinungen? „Feuer frei“!",{"title":48,"searchDepth":86,"depth":86,"links":25945},[],[614],"2015-02-12T17:22:22","Wo gibt’s das noch im Jahr 2015 und in der Softwareindustrie? synyx ist mit aktuell fast 50 Mitarbeitern keine kleine\\nEntwicklerbude mehr. Seit 2012 ist unsere Mitarbeiterzahl um ca. 1/3 angestiegen.","https://synyx.de/blog/null-prozent-mitarbeiterfluktuation-in-den-letzten-3-jahren/",{},"/blog/null-prozent-mitarbeiterfluktuation-in-den-letzten-3-jahren",{"title":25872,"description":25881},"blog/null-prozent-mitarbeiterfluktuation-in-den-letzten-3-jahren",[],"Wo gibt’s das noch im Jahr 2015 und in der Softwareindustrie? synyx ist mit aktuell fast 50 Mitarbeitern keine kleine Entwicklerbude mehr. Seit 2012 ist unsere Mitarbeiterzahl um ca. 1/3…","S_RhbaGcog3m0UsZIMToXcLpygTmW-N-L0L9H34m3RU",{"id":25958,"title":25959,"author":25960,"body":25961,"category":26127,"date":26128,"description":48,"extension":617,"link":26129,"meta":26130,"navigation":499,"path":26131,"seo":26132,"slug":25965,"stem":26133,"tags":26134,"teaser":26136,"__hash__":26137},"blog/blog/lets-add-some-value.md","Let's add some value!",[21597],{"type":11,"value":25962,"toc":26123},[25963,25966,25970,25978,25998,26001,26007,26011,26014,26017,26034,26037,26042,26045,26048,26051,26074,26077,26080,26091,26100,26103,26106,26115,26118],[14,25964,25959],{"id":25965},"lets-add-some-value",[3469,25967,25969],{"id":25968},"tldr","tl;dr",[18,25971,25972,25973,13333],{},"Follow principles #1 and #3 from the ",[585,25974,25977],{"href":25975,"rel":25976},"http://agilemanifesto.org/",[589],"agile manifesto",[6653,25979,25980,25983,25986,25989,25992,25995],{},[18,25981,25982],{},"“Our highest priority is to satisfy the customer",[18,25984,25985],{},"through early and continuous delivery",[18,25987,25988],{},"of valuable software. ”",[18,25990,25991],{},"“Deliver working software frequently, from a",[18,25993,25994],{},"couple of weeks to a couple of months, with a",[18,25996,25997],{},"preference to the shorter timescale.”",[18,25999,26000],{},"Or in my own words:",[18,26002,26003,26004],{},"In each iteration ask yourself: ",[27,26005,26006],{},"While working towards a big vision can we solve at least one real problem by the end\nof this iteration?",[3469,26008,26010],{"id":26009},"part-1-the-problem-with-technical-stories","Part 1: The problem with technical stories",[18,26012,26013],{},"In Scrum we deliver a potential shippable product increment in each iteration. Following this directive has many\nadvantages for us:",[18,26015,26016],{},"We can…",[577,26018,26019,26022,26025,26028,26031],{},[580,26020,26021],{},"detect errors or misunderstandings very early through feedback from stakeholders",[580,26023,26024],{},"fail fast by discovering critical problems as early as possible",[580,26026,26027],{},"find out what users really want/need by experimenting with early versions of a feature",[580,26029,26030],{},"generate value by solving real problems with each new version of the product",[580,26032,26033],{},"change priorities based on new circumstances",[18,26035,26036],{},"Often customers have visions which result in very large user stories, also known as epics. Since we can not build the\nrequested feature within one iteration we break it down into smaller work packages. The challenge here is to find user\nstories which solve part of the problem while still making progress towards the envisioned goal.",[18,26038,26039],{},[27,26040,26041],{},"A partially finished feature has no value but a smaller feature which solves part of a problem has.",[18,26043,26044],{},"It is often easy to come to the conclusion that only the whole feature provides value because after all we can not go\nlive with a half finished feature.",[18,26046,26047],{},"So we start to create tasks to fulfil the epic:",[18,26049,26050],{},"We…",[577,26052,26053,26056,26059,26062,26065,26068,26071],{},[580,26054,26055],{},"analyse the problem",[580,26057,26058],{},"design a possible solution",[580,26060,26061],{},"evaluate technology",[580,26063,26064],{},"implement the frontend with backend mockups",[580,26066,26067],{},"implement the backend while mocking calls to 3rd party services",[580,26069,26070],{},"integrate the real 3rd party services",[580,26072,26073],{},"… and the list goes on",[18,26075,26076],{},"And there can be no objection to that! As long was we do not start to call these tasks stories, fill our backlog with\nthem and start to plan whole sprints with them. But in my experience that is exactly what happens when we are confronted\nwith complex problems. Of course we all know that a user story describes a real problem from a stakeholder which is\nsolved once the story is fulfilled and since our defined tasks do not meet this criteria we call them technical stories.\nBefore I talk about the problems of technical stories, I want to look at the advantages that we can still have if we use\nthem. Since we still work in iterations and (hopefully) deliver some sort of running software after each iteration we\ncan still inspect and adapt.",[18,26078,26079],{},"We can still…",[577,26081,26082,26085,26088],{},[580,26083,26084],{},"try out early versions of the software in an experimental environment",[580,26086,26087],{},"get feedback from stakeholders by showing them design sketches, frontend mockups or partially implemented features",[580,26089,26090],{},"fail fast if we discover that a chosen technology does not work as expected",[18,26092,26093,26094,26099],{},"That sounds good! So where are the problems? The product increment which we deliver after each iteration can not be used\nin production and therefore does not generate value until the whole (complex) feature is finished. We miss the advantage\nof a lesser ",[585,26095,26098],{"href":26096,"rel":26097},"http://en.wikipedia.org/wiki/Time_to_market",[589],"time to market"," (to use a management buzz word) which means we\nloose money. We also do not get feedback from real users which is often the most valuable resource to base further\ndevelopment on.",[18,26101,26102],{},"But here I want to focus on a problem which is less obvious: Generating no value early means that the product owner can\nnot change priorities based on new insights (change in the market situatíon, new requirments from stakeholders, new\nmanagement priorities). Taken to the extreme we could plan each iteration without the product owner being present until\nhis epic is completed. After all he has already told his story and the decision in which order the tasks to fulfil it\nmust be completed, belongs entirely to the team. Of course we would still work closely together and invite him (and\nstakeholders who are interested) to a review meeting after each iteration, to benefit from the advantages stated above.\nBut as long as that one large feature remains the highest priority and the whole team can work on it (i.e. the work is\nparallelisable) the product owner has not much to do.",[18,26104,26105],{},"In reality there are often small change requests or bug fixes getting higher priority which results in a delay of the\nstory. This puts the product owner into a difficult situation. While he always has to prioritize between different\nneeds (= stories) of his stakeholders he now has to decide between fast wins and his most important feature which\neveryone waits for. Real trouble awaits him if the epic that the team currently works on suddenly is not the highest\npriority anymore or for some reason takes much longer to implement than expected. Of course we can just delay new\nstories until the current feature is finished but that might be bad for the project and it is certainly not what we hope\nto achieve with agile development (being able to react to change). The option to stop development on the feature\nentirely (which a PO should always have) however would mean that all his money spent up until then is lost without any\nreturned value. That would not be the case if we had solved partial problems on the way towards the big goal. Maybe the\nfeature can be shrunk down to minimize the work needed to get at least some value before we abandon it. But if that is\npossible why did we not define this smaller goal as a partial solution from the start?",[18,26107,26108,26109,26114],{},"More often than not it is not that easy to get reasonably fast to a smaller solution once we started developing with the\nbig solution in mind. Let us assume that with some additional effort design and technology decisions can be adopted to a\nslightly changed goal, since that will always be expected from an agile development team. The structuring of the work\nmakes the real difference though. For example a big and complex feature naturally requires a longer analysis and design\nphase. So by starting with the epic as our goal we might still be working on the design tasks or an implementation task\nwhich results in a small part of the final feature, when the product owner announces the change of priorities. Had we\nstarted with a smaller goal we might already have implemented something which we can either just finish (to generate\nimmediate value) or adapt to better match the new goal of the PO. When changing priorities we must also be careful not\nto rush the development because we know that we ideally should already be working on a different story. The quality of\nthe software must always be maintained because otherwise we build\nup ",[585,26110,26113],{"href":26111,"rel":26112},"http://en.wikipedia.org/wiki/Technical_debt",[589],"technical debt"," which must eventually be repaid.",[18,26116,26117],{},"There are some objections that I have come across while talking with developers and product owners about why we do not\nbreak down epics into real user stories to avoid these problems. But as this post is already a bit to long I decided to\nmake a series about this topic. This way I can discuss the objections as well as possible answers more detailed in the\nupcoming parts. Until then I leave you with my conclusion up until now:",[18,26119,26120],{},[27,26121,26122],{},"Finding ways to generate real value early may be hard but it is worth the effort.",{"title":48,"searchDepth":86,"depth":86,"links":26124},[26125,26126],{"id":25968,"depth":86,"text":25969},{"id":26009,"depth":86,"text":26010},[614],"2014-11-12T17:05:06","https://synyx.de/blog/lets-add-some-value/",{},"/blog/lets-add-some-value",{"title":25959,"description":48},"blog/lets-add-some-value",[4494,26135,4505],"processes","tl;dr Follow principles #1 and #3 from the agile manifesto! “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. ” “Deliver working software…","jCMSyRgM9WyBPQ0pcFsJa4VR8ktEvJORcwRdiEVh4w0",{"id":26139,"title":26140,"author":26141,"body":26142,"category":26324,"date":26325,"description":26326,"extension":617,"link":26327,"meta":26328,"navigation":499,"path":26329,"seo":26330,"slug":26331,"stem":26332,"tags":26333,"teaser":26336,"__hash__":26337},"blog/blog/individuelle-taschen-fur-synyx.md","Egal ob groß oder klein, unsere neuen synyx-Taschen sind grün und genial!",[21028],{"type":11,"value":26143,"toc":26322},[26144,26147,26150,26156,26163,26168,26171,26177,26183,26188,26193,26198,26203,26207,26215,26220,26224,26229,26234,26239,26244,26249,26254,26259,26264,26269,26274,26277,26283,26286,26289,26294,26299,26304,26309,26314,26319],[14,26145,26140],{"id":26146},"egal-ob-groß-oder-klein-unsere-neuen-synyx-taschen-sind-grün-und-genial",[18,26148,26149],{},"Seit ein paar Wochen sind immer wieder tolle synyx-Taschen zu sehen. Ob im Web, über Twitter oder wie zuletzt auf der\nW-Jax in echt. Bis es so weit war, dass wir diese außergewöhnlichen Taschen erhalten haben, ist jedoch einige Zeit\nvergangen. Warum? Ganz einfach: Diese Taschen aus Lkw-Plane sind ganz individuell für uns entwickelt, gestaltet und\nproduziert worden. Angefangen hat es mit einfachen Zeichnungen, über den Prototypen bis hin zur ersten Tasche. Dies\nalles ist in enger Zusammenarbeit zwischen uns und der Herstellerin Lene Arrasz-Zehl, Bag&Needle, entstanden.",[18,26151,26152],{},[1794,26153],{"alt":26154,"src":26155},"\"tasche_ganz\"","https://media.synyx.de/uploads//2014/11/tasche_ganz.jpg",[18,26157,26158,26161],{},[27,26159,26160],{},"Tasche von der Seite",[1794,26162],{"alt":26154,"src":26155},[18,26164,26165],{},[27,26166,26167],{},"Tasche von vorne",[18,26169,26170],{},"Ich habe mich mit Lene zusammengesetzt und mich mit ihr über die Entstehung der Taschen unterhalten:",[18,26172,26173,26176],{},[27,26174,26175],{},"Katja",": Hi Lene, schön, dass du uns ein bisschen etwas über die Taschen erzählen möchtest.",[18,26178,26179,26182],{},[27,26180,26181],{},"Lene",": Hei Katja, sehr gerne! So kann ich mal ein bisschen erklären, welche Arbeit sich hinter den fertigen\nsynyx-Taschen verbirgt.",[18,26184,26185,26187],{},[27,26186,26175],{},": Wir sind ja vor einiger Zeit auf dich zugekommen, da wir ganz individuelle Taschen für unsere Mitarbeiter\nbenötigten. Kannst du dich noch an die Anforderungen erinnern?",[18,26189,26190,26192],{},[27,26191,26181],{},": Klar, denn es sollte mein erster großer Auftrag werden. Vor allem war es neu, das die Taschen so individuell\ngewünscht wurden. Das war schon aufregend.",[18,26194,26195,26197],{},[27,26196,26175],{},": Warum war es in diesem speziellen Fall nicht möglich auf Standard-Taschen zurückzugreifen?",[18,26199,26200,26202],{},[27,26201,26181],{},": Da manche Mitarbeiter beim Kunden vor Ort arbeiten und auch mal eine Nacht im Hotel verbringen, war es wichtig\ndie Taschen so zu konzipieren, dass geschäftliche als auch private Dinge getrennt darin untergebracht werden können.",[18,26204,26205],{},[1794,26206],{"alt":26154,"src":26155},[18,26208,26209,26212,26214],{},[27,26210,26211],{},"Tasche offen",[27,26213,26175],{},": Was war die besondere Herausforderung für dich?",[18,26216,26217,26219],{},[27,26218,26181],{},": Genau das, wie eben beschrieben. Ich brauchte die Idee zwei Taschen in einer unterzubringen. So, dass weder\ndas Private dem Geschäftlichen im Wege ist, noch andersherum. Dazu musste ich natürlich auch neue Schablonen erstellen\nund die Suche nach einer passenden Druckerei hat ordentlich Nerven gekostet.",[18,26221,26222],{},[1794,26223],{"alt":26154,"src":26155},[18,26225,26226],{},[27,26227,26228],{},"Tasche mit geöffneter Erweiterung nach vorne",[18,26230,26231,26233],{},[27,26232,26175],{},": Warum war es so schwierig, eine passende Druckerei zu finden?",[18,26235,26236,26238],{},[27,26237,26181],{},": Lkw-Plane braucht einen speziellen Druck mit lösemittelhaltiger Farbe. Ansonsten reibt sich dieser ganz\nschnell wieder ab. Ich habe gefühlte 20 Druckereien angefragt, Proben verschickt und Absagen kassiert.Nach langem Suchen\nhabe ich dann doch noch eine Druckerei in Bremen gefunden, die meine Plane bedrucken konnte.",[18,26240,26241,26243],{},[27,26242,26175],{},": Als du damals noch die Zeichnungen erstellt hast, war dir klar, dass das ein so umfangreiches Projekt wird?",[18,26245,26246,26248],{},[27,26247,26181],{},": Nein, nicht direkt. Eine Planung auf Papier ist immer noch mal eine andere Sache, als diese dann nachher\numzusetzen. Das ‘Ausmaß’ wurde mir erst wirklich bewusst, als ich anfing nach Druckereien zu suchen und dann der\nPrototyp entstand. Nachdem der fertig war, wurden noch einige Änderungen besprochen und dementsprechend umgesetzt. Das\nwar schon ziemlich viel Arbeit.",[18,26250,26251,26253],{},[27,26252,26175],{},": Du hast dich dann mit der Zeit ‘eingearbeitet’. Wie lange hast du an einer Tasche gearbeitet?",[18,26255,26256,26258],{},[27,26257,26181],{},": Sage und schreibe 10 Stunden, ohne Denken. Also nur die Näharbeiten und der Zuschnitt. Schaut sich ein Laie\ndie fertige Tasche an, kann er sich das vielleicht nicht vorstellen und auch ich habe ein wenig geschluckt, als ich\nmeine penibel notierten Arbeitszeiten zusammenrechnete. Aber saubere Arbeit braucht eben auch Zeit. Und ‘schnell,\nschnell’ kann und will ich nicht abliefern.",[18,26260,26261,26263],{},[27,26262,26175],{},": Jeder Mitarbeiter kann sich die Tasche individuell auf seine Bedürfnisse abstimmen lassen……",[18,26265,26266,26268],{},[27,26267,26181],{},": Genau das ist wohl mein Alleinstellungsmerkmal. Eine Tasche von der Stange kann jeder herstellen. Mein Können\nliegt, neben der Näharbeit, eben auch darin, genau die Wünsche und Bedürfnisse des Kunden zu berücksichtigen und\numzusetzen. Was hilft es einem, wenn man eine coole Tasche hat, die man aber nicht voll ausnutzen kann?!",[18,26270,26271],{},[1794,26272],{"alt":26154,"src":26273},"https://media.synyx.de/uploads//2014/11/innen.jpg",[18,26275,26276],{},"**Oben: Tasche innen gefüllt",[18,26278,26279,26280],{},"Unten: Tasche innen**\n",[1794,26281],{"alt":26154,"src":26282},"https://media.synyx.de/uploads//2014/11/erweiterungen.jpg",[18,26284,26285],{},"**Oben: Tasche mit Erweiterung nach vorne",[18,26287,26288],{},"Unten: Tasche mit Erweiterung nach oben**",[18,26290,26291,26293],{},[27,26292,26175],{},": Was ist das Besondere an den Taschen?",[18,26295,26296,26298],{},[27,26297,26181],{},": Die Taschen für synyx bieten zuerst einmal sehr viel Stauraum. Man kann, neben flexibel einstellbaren\nUnterteilungen, die Taschen auch vergrößern. Nach oben, um z.B. einen Ordner zu transportieren. Wenn man einen teilbaren\nReißverschluss vorne ringsherum der Tasche, aufmacht, entsteht noch einmal so viel Raum, für z.B. Privates. Braucht man\ndiesen nicht, macht man den Reißverschluss einfach wieder zu und alles ist kompakt wie vorher. So kann man den\nTascheninhalt geordnet voneinander trennen. Besonders ist auch der Taschendeckel, in den man durch eine aufgesetzte\nKlarsichtfolie z.B. Werbezettel o.ä. einschieben kann. Am besten guckt man sich so eine Tasche real mal an. Es gibt zu\nviele Dinge, die cool, entlastend, schlau konzipiert sind. Schwer, alles aufzuzählen.",[18,26300,26301,26303],{},[27,26302,26175],{},": Würdest du so ein Projekt noch einmal in Angriff nehmen?",[18,26305,26306,26308],{},[27,26307,26181],{},": Ganz bestimmt. Sicherlich würde ich beim nächsten Mal viel sicherer und gezielter mit den Arbeitsschritten\numgehen können. Ich habe bei dem Projekt wahnsinnig viel gelernt und bin wirklich froh, diese Erfahrungen gemacht zu\nhaben. Außerdem macht es einfach Spaß dem Kunden exakt das bieten zu können, was er will bzw. braucht.",[18,26310,26311,26313],{},[27,26312,26175],{},": Danke für das Interview.",[18,26315,26316,26318],{},[27,26317,26181],{},": Sehr gern!",[18,26320,26321],{},"Wir sind auf jeden Fall sehr happy mit den neuen synyx-Taschen.",{"title":48,"searchDepth":86,"depth":86,"links":26323},[],[614],"2014-11-12T15:27:44","Seit ein paar Wochen sind immer wieder tolle synyx-Taschen zu sehen. Ob im Web, über Twitter oder wie zuletzt auf der\\nW-Jax in echt. Bis es so weit war, dass wir diese außergewöhnlichen Taschen erhalten haben, ist jedoch einige Zeit\\nvergangen. Warum? Ganz einfach: Diese Taschen aus Lkw-Plane sind ganz individuell für uns entwickelt, gestaltet und\\nproduziert worden. Angefangen hat es mit einfachen Zeichnungen, über den Prototypen bis hin zur ersten Tasche. Dies\\nalles ist in enger Zusammenarbeit zwischen uns und der Herstellerin Lene Arrasz-Zehl, Bag&Needle, entstanden.","https://synyx.de/blog/individuelle-taschen-fur-synyx/",{},"/blog/individuelle-taschen-fur-synyx",{"title":26140,"description":26149},"individuelle-taschen-fur-synyx","blog/individuelle-taschen-fur-synyx",[26334,13472,3122,26335],"lwk-plane","werbemittel","Seit ein paar Wochen sind immer wieder tolle synyx-Taschen zu sehen. Ob im Web, über Twitter oder wie zuletzt auf der W-Jax in echt. Bis es so weit war, dass…","swq4enmJ7FW93db-9sia7Cm2_jRmAB0gMP4keAhOmoI",{"id":26339,"title":26340,"author":26341,"body":26342,"category":26575,"date":26576,"description":26577,"extension":617,"link":26578,"meta":26579,"navigation":499,"path":26580,"seo":26581,"slug":26346,"stem":26582,"tags":26583,"teaser":26585,"__hash__":26586},"blog/blog/urlaubsverwaltung-goes-mobile.md","Urlaubsverwaltung goes mobile",[11916],{"type":11,"value":26343,"toc":26558},[26344,26347,26350,26353,26356,26360,26364,26370,26373,26377,26387,26390,26393,26396,26399,26405,26408,26412,26415,26421,26424,26427,26430,26433,26436,26446,26449,26452,26456,26459,26465,26468,26471,26474,26484,26487,26490,26494,26504,26507,26510,26513,26516,26520,26528,26531,26534,26538,26544,26551],[14,26345,26340],{"id":26346},"urlaubsverwaltung-goes-mobile",[18,26348,26349],{},"Seit ungefähr zweieinhalb Jahren wird die Urlaubsverwaltung nun bei synyx eingesetzt. Mit dem regelmäßigen Einsatz kamen\nimmer wieder neue Anforderungen hinzu, sodass die Urlaubsverwaltung längst nicht mehr nur zur Beantragung und\nGenehmigung von Urlaubsanträgen genutzt wird. So werden beispielsweise inzwischen auch Krankmeldungen in der\nUrlaubsverwaltung erfasst.",[18,26351,26352],{},"In Zeiten von Smartphones und Tablets ist es wichtig, dass eine Anwendung auch auf mobilen Endgeräten bedienbar ist,\nweshalb die Urlaubsverwaltung ein komplettes Re-Design erfahren hat, um diesen Ansprüchen gerecht zu werden.",[18,26354,26355],{},"Im Folgenden wird das neue Look and Feel der Urlaubsverwaltung vorgestellt und gleichzeitig ein Überblick über einige\nder neuen Features verschafft.",[3469,26357,26359],{"id":26358},"entwicklung-der-übersichtsseite","Entwicklung der Übersichtsseite",[649,26361,26363],{"id":26362},"_2012","2012",[18,26365,26366],{},[1794,26367],{"alt":26368,"src":26369},"\"Übersicht 2012\"","https://media.synyx.de/uploads//2014/10/overview-2012.png",[18,26371,26372],{},"Die Übersichtsseite zeigt Urlaubsanspruch und verbleibende Urlaubstage für das jeweils gewählte Jahr. Es gibt eine\nStatistik darüber, wie viele Urlaubstage für welchen Typ von Urlaub eingeplant sind. Die Urlaubsanträge für das gewählte\nJahr sind mit Status, Zeitraum und Anzahl von verbrauchten Urlaubstagen aufgelistet.",[649,26374,26376],{"id":26375},"_2014","2014",[18,26378,26379,26383],{},[1794,26380],{"alt":26381,"src":26382},"\"Übersicht\"","https://media.synyx.de/uploads//2014/10/overview.png",[1794,26384],{"alt":26385,"src":26386},"\"Übersicht Mobile\"","https://media.synyx.de/uploads//2014/10/overview_mobile.png",[18,26388,26389],{},"Benutzer haben nun dank dem Kalender auf der Übersichtsseite einen schnelleren Überblick über Wochenenden und\nFeiertage (in grün dargestellt) und genehmigten Urlaub (in gelb dargestellt).",[18,26391,26392],{},"Informationen über Urlaubsanspruch und verbleibende Urlaubstage für das gewählte Jahr sind schneller erfassbar durch die\nneue Darstellungsweise, da nur noch die für den Mitarbeiter relevanten Inhalte angezeigt werden.",[18,26394,26395],{},"Die Statistik über geplante Urlaubstage ist aufgeteilt in Erholungsurlaub und anderen Urlaub (Sonderurlaub, unbezahlter\nUrlaub, Überstundenabbau). Hierbei wird angezeigt, wie viele der geplanten Urlaubstage bereits genehmigt wurden.",[18,26397,26398],{},"Die Liste der Urlaubsanträge enthält nun die zusätzliche Information über das Datum der letzten Bearbeitung. Zum\nschnelleren Erfassen des Status der Urlaubsanträge wird dieser durch ein Icon symbolisiert.",[18,26400,26401],{},[1794,26402],{"alt":26403,"src":26404},"\"Übersichtsseite - Krankmeldungen\"","https://media.synyx.de/uploads//2014/10/overview2.png",[18,26406,26407],{},"In der Übersicht befinden sich nun zusätzlich zu den Urlaubsanträgen auch die Krankmeldungen des Mitarbeiters. Hierbei\nwird unterschieden zwischen Krankheitstagen und Kind-Krankheitstagen. Dies ist insofern relevant, da einem Angestellten\ngesetzlich nur eine bestimmte Anzahl von Kind-Krankheitstagen im Jahr zur Verfügung steht.",[3469,26409,26411],{"id":26410},"entwicklung-des-urlaubsantrags","Entwicklung des Urlaubsantrags",[649,26413,26363],{"id":26414},"_2012-1",[18,26416,26417],{},[1794,26418],{"alt":26419,"src":26420},"\"Urlaubsantrag 2012\"","https://media.synyx.de/uploads//2014/10/app_form-2012.png",[18,26422,26423],{},"Wichtige Informationen bei einem Urlaubsantrag sind Art (Erholungsurlaub, Sonderurlaub, unbezahlter Urlaub,\nÜberstundenabbau) und Zeitraum des Urlaubs.",[18,26425,26426],{},"Start- und Enddatum des Urlaubs werden bequem über einen Datepicker gewählt.",[18,26428,26429],{},"Außerdem stehen optionale Felder zur weiteren Information zur Verfügung wie beispielsweise Vertreter während des\nUrlaubszeitraums, Anschrift und Telefon.",[18,26431,26432],{},"Wird Erholungsurlaub beantragt, muss nicht zwingend ein Grund angegeben werden. Beantragt man jedoch Sonderurlaub,\nunbezahlten Urlaub oder Urlaub zum Überstundenabbau, muss ein Grund angegeben werden.",[649,26434,26376],{"id":26435},"_2014-1",[18,26437,26438,26442],{},[1794,26439],{"alt":26440,"src":26441},"\"Urlaubsantrag\"","https://media.synyx.de/uploads//2014/10/app_form1.png",[1794,26443],{"alt":26444,"src":26445},"\"Urlaubsantrag Mobile\"","https://media.synyx.de/uploads//2014/10/app_form_mobile.png",[18,26447,26448],{},"Die Informationen zum Beantragen von Urlaub haben sich nicht verändert, jedoch wurde der Datepicker erweitert. Um die\nAuswahl des Urlaubszeitraums komfortabler zu gestalten, werden im Datepicker Wochenenden und Feiertage (in grün) und\ngenehmigter Urlaub (in gelb) angezeigt.",[18,26450,26451],{},"Wie hier in der mobilen Ansicht zu sehen, wird nach Angabe des Zeitraums direkt berechnet, wie viele Urlaubstage der\ngewählte Urlaubszeitraum kosten würde.",[3469,26453,26455],{"id":26454},"entwicklung-der-mitarbeiterpflege","Entwicklung der Mitarbeiterpflege",[649,26457,26363],{"id":26458},"_2012-2",[18,26460,26461],{},[1794,26462],{"alt":26463,"src":26464},"\"Mitarbeiterformular 2012\"","https://media.synyx.de/uploads//2014/10/staff_edit.png",[18,26466,26467],{},"Das Formular zum Pflegen von Mitarbeitern ist unterteilt in Personendaten und Urlaubsanspruch.",[18,26469,26470],{},"Beim Urlaubsanspruch gibt man den Jahresurlaubsanspruch und gegebenenfalls Resturlaub aus dem letzten Jahr an. Anhand\ndes gewählten Zeitraums und des Jahresurlaubsanspruchs wird der anteilige Urlaubsanspruch berechnet. Es kann bestimmt\nwerden, ob der Resturlaub aus dem letzten Jahr am 1. April eines Jahres verfällt oder weiterhin genutzt werden kann.",[649,26472,26376],{"id":26473},"_2014-2",[18,26475,26476,26480],{},[1794,26477],{"alt":26478,"src":26479},"\"Mitarbeiterformular\"","https://media.synyx.de/uploads//2014/10/staff_list.png",[1794,26481],{"alt":26482,"src":26483},"\"Mitarbeiter Mobile\"","https://media.synyx.de/uploads//2014/10/staff_edit_mobile.png",[18,26485,26486],{},"Das Mitarbeiterformular wurde erweitert um Rollen- und Arbeitszeitkonfiguration. Ein Mitarbeiter kann mehrere Rollen\ngleichzeitig innehaben – außer er ist inaktiv.",[18,26488,26489],{},"Bei der Arbeitszeitkonfiguration werden die wöchentlichen Arbeitstage eines Mitarbeiters festgelegt. Diese Konfiguration\nwird bei der Berechnung von Urlaubstagen für einen Urlaubszeitraum herangezogen. Es wird nicht mehr standardmäßig davon\nausgegangen, dass jeder Mitarbeiter von Montag bis Freitag arbeitet.",[3469,26491,26493],{"id":26492},"krankmeldungen","Krankmeldungen",[18,26495,26496,26500],{},[1794,26497],{"alt":26498,"src":26499},"\"Krankmeldungen\"","https://media.synyx.de/uploads//2014/10/sick_notes1.png",[1794,26501],{"alt":26502,"src":26503},"\"Krankmeldungen Mobile\"","https://media.synyx.de/uploads//2014/10/sick_notes_mobile.png",[18,26505,26506],{},"Neben Urlaubsanträgen können nun auch Krankmeldungen in der Anwendung elektronisch verwaltet werden.",[18,26508,26509],{},"Dabei gibt es zwei Typen von Krankmeldungen: eigene Krankmeldungen und Kind-Krankmeldungen.",[18,26511,26512],{},"Nach dem Anlegen einer Krankmeldung kann diese bei Bedarf bearbeitet, storniert oder in Urlaub umgewandelt werden.",[18,26514,26515],{},"Im Gegensatz zu Urlaubsanträgen können Krankmeldungen übrigens nur vom Office angelegt werden und nicht vom Mitarbeiter\nselbst 😉",[3469,26517,26519],{"id":26518},"demo-system","Demo-System",[18,26521,26522,26523,26527],{},"Wem dieser Überblick über die Urlaubsverwaltung noch nicht gereicht hat, kann sich gerne die aktuelle Version der\nUrlaubsverwaltung auf\nunserem ",[585,26524,26519],{"href":26525,"rel":26526},"https://urlaubsverwaltung-demo.synyx.de/login?username=office&password=secret",[589]," anschauen.",[18,26529,26530],{},"Benutzername: office",[18,26532,26533],{},"Passwort: secret",[3469,26535,26537],{"id":26536},"weiterführende-informationen","Weiterführende Informationen",[18,26539,26540],{},[585,26541,26543],{"href":12006,"rel":26542},[589],"Projekt-Repository auf Github",[18,26545,26546],{},[585,26547,26550],{"href":26548,"rel":26549},"http://blog.synyx.de/2012/11/urlaubsverwaltung-was-hat-sich-getan/",[589],"Blogpost von 2012",[18,26552,26553],{},[585,26554,26557],{"href":26555,"rel":26556},"http://blog.synyx.de/2011/11/elektronische-urlaubsverwaltung-made-by-youngsters/",[589],"Blogpost von 2011",{"title":48,"searchDepth":86,"depth":86,"links":26559},[26560,26564,26568,26572,26573,26574],{"id":26358,"depth":86,"text":26359,"children":26561},[26562,26563],{"id":26362,"depth":126,"text":26363},{"id":26375,"depth":126,"text":26376},{"id":26410,"depth":86,"text":26411,"children":26565},[26566,26567],{"id":26414,"depth":126,"text":26363},{"id":26435,"depth":126,"text":26376},{"id":26454,"depth":86,"text":26455,"children":26569},[26570,26571],{"id":26458,"depth":126,"text":26363},{"id":26473,"depth":126,"text":26376},{"id":26492,"depth":86,"text":26493},{"id":26518,"depth":86,"text":26519},{"id":26536,"depth":86,"text":26537},[614],"2014-10-28T17:56:39","Seit ungefähr zweieinhalb Jahren wird die Urlaubsverwaltung nun bei synyx eingesetzt. Mit dem regelmäßigen Einsatz kamen\\nimmer wieder neue Anforderungen hinzu, sodass die Urlaubsverwaltung längst nicht mehr nur zur Beantragung und\\nGenehmigung von Urlaubsanträgen genutzt wird. So werden beispielsweise inzwischen auch Krankmeldungen in der\\nUrlaubsverwaltung erfasst.","https://synyx.de/blog/urlaubsverwaltung-goes-mobile/",{},"/blog/urlaubsverwaltung-goes-mobile",{"title":26340,"description":26349},"blog/urlaubsverwaltung-goes-mobile",[3122,20838,26584,20839],"urlaubsantrag","Seit ungefähr zweieinhalb Jahren wird die Urlaubsverwaltung nun bei synyx eingesetzt. Mit dem regelmäßigen Einsatz kamen immer wieder neue Anforderungen hinzu, sodass die Urlaubsverwaltung längst nicht mehr nur zur Beantragung…","mFcisXJAQw2CR0_FKctGxEPBj6wQHbHwf7dOBwoqFOQ",{"id":26588,"title":26589,"author":26590,"body":26591,"category":26728,"date":26729,"description":26730,"extension":617,"link":26731,"meta":26732,"navigation":499,"path":26733,"seo":26734,"slug":26736,"stem":26737,"tags":26738,"teaser":26740,"__hash__":26741},"blog/blog/devoxx4kids-in-karlsruhe-programmieren-und-elektronik-fur-kids.md","Devoxx4Kids in Karlsruhe – Programmieren und Elektronik für Kids",[10931],{"type":11,"value":26592,"toc":26723},[26593,26596,26615,26617,26620,26631,26644,26650,26657,26663,26670,26674,26694,26698,26717,26720],[14,26594,26589],{"id":26595},"devoxx4kids-in-karlsruhe-programmieren-und-elektronik-für-kids",[18,26597,26598,26599,26603,26604,26609,26610,26614],{},"Die ",[585,26600,6829],{"href":26601,"rel":26602},"http://www.devoxx4kids.org/deutschland/",[589]," ist eine Tagung für Kinder. Angelehnt ist sie an die Devoxx,\ndie alljährliche Konferenz für Java-Entwickler. Die Devoxx4Kids richtet ihren Fokus auf die Programmierer, Entwickler\nund Informationsdesigner von Morgen. Die Idee zur dieser Kindertagung entstand vor einigen Jahren in der belgischen Java\nUser Group (",[585,26605,26608],{"href":26606,"rel":26607},"http://www.bejug.org/",[589],"BeJUG",") und findet seither weltweit großen Anklang. 26 Jungen und sechs Mädchen im\nAlter von acht bis 14 Jahren fanden sich am letzten Samstag, dem 27.09.2014, in\nder ",[585,26611,13248],{"href":26612,"rel":26613},"http://karlshochschule.de/de/",[589]," in Karlsruhe ein, um in vier angebotenen Workshops Spiele und\nRoboter zu programmieren, Quadrocopter zu steuern und die Grundlagen der Elektronik zu erlernen. Die Kids haben in\njeweils vier Zweiergruppen pro Workshop Übungen absolviert, wobei der Lernspaß hier im Vordergrund stand.",[3469,26616,6890],{"id":6889},[18,26618,26619],{},"Insgesamt hat jedes Kind vier Workshops besucht. Jeder Workshop wurde von einem Team von drei bis vier Mentoren\ngeleitet, um die Kids optimal betreuen zu können. Neben den Workshops zu Scratch und dem Roboter Nao, die mittlerweile\nauf Veranstaltungen dieser Art in anderen Ländern erprobt sind, wurden auch zwei völlig neue Workshops angeboten: synyx\nhat einen Quadrocopter Workshop erarbeitet und angeboten, Tinkerforge einen zu den Grundlagen der Elektronik und des\n‘Internets der Dinge’.",[18,26621,26622,26626,26630],{},[1794,26623],{"alt":26624,"src":26625},"\"IMG_9017\"","https://media.synyx.de/uploads//2014/09/IMG_9017.jpg",[585,26627,6895],{"href":26628,"rel":26629},"http://scratch.mit.edu/",[589],"\nist eine grafische Programmiersprache, die es erlaubt eigene Spielideen schnell umzusetzen und die Grundlagen der\nSpieleprogrammierung zu erlernen. Nachdem mit den Kindern zusammen eine gemeinsame Grundlage für ein Spiel erarbeitet\nwurde, durften eigene Ideen ausprobiert werden. Dabei haben die interessierten Fragen der Kids die Mentoren oft ganz\nschön ins Grübeln gebracht, zusammen wurden aber Lösungen zur Umsetzung interessanter und individueller Spielideen\ngefunden.",[18,26632,26633,26637,26638,26643],{},[1794,26634],{"alt":26635,"src":26636},"\"IMG_9083\"","https://media.synyx.de/uploads//2014/09/IMG_9083.jpg","\nDer ",[585,26639,26642],{"href":26640,"rel":26641},"https://web.archive.org/web/20160201111355/https://www.aldebaran.com/en",[589],"Nao-Robot"," ist ein humanoider Roboter,\nhergestellt von der französischen Firma Aldebaran Robotics. Für diesen Workshop waren Tasha und Pierre Carl mit ihren\nbeiden Nao-Robotern extra aus Belgien angereist. Mittels der Oberfläche Choreographe konnten die Kids das Verhalten des\nRoboters programmieren, seine Sensoren und Aktoren ansprechen und auf Signale reagieren. So war der Nao in der Lage die\nKinder zu suchen und mit ihnen zu interagieren. Sein Talent als Unterhalter hat der Nao aber auch in der Mittagspause\ngezeigt, in der sich als Tänzer und Rock’n’Roller präsentierte (und damit nicht nur die Kinder unterhielt und\nbeeindruckte).",[18,26645,26646],{},[1794,26647],{"alt":26648,"src":26649},"\"IMG_8947\"","https://media.synyx.de/uploads//2014/09/IMG_8947.jpg",[18,26651,26652,26653,26656],{},"Als Piloten agierten die Kinder im ",[27,26654,26655],{},"Quadrocopter-Workshop",". Hier steuerten sie fliegende Drohnen mittels einer\nJavaScript-API. In diesem Workshop galt es am Beispiel von Quadrocoptern zu verstehen, wie ein Echtzeitsystem reagiert\nund sich in einer räumlich beschränkten Geometrie bewegt. Die Flugübungen umfassten das Umfliegen von Hindernissen und\ndas Ausführen von Figuren.",[18,26658,26659],{},[1794,26660],{"alt":26661,"src":26662},"\"IMG_8994\"","https://media.synyx.de/uploads//2014/09/IMG_8994.jpg",[18,26664,26665,26666,26669],{},"Eine Einführung in das ‘Internet der Dinge’ gab der Tinkerforge-Workshop. ",[585,26667,24858],{"href":25801,"rel":26668},[589],"\nbietet elektronische Bausteine, die ähnlich wie Legosteine kombiniert werden können, und einen Basissatz an Sensoren für\nTemperatur, Luftfeuchtigkeit oder Lichteinstrahlung mitbringen. Im Workshop wurde den Kindern erklärt, wie diese\nSensoren Daten liefern, wie deren Auswertung funktioniert und wie auf diese reagiert werden kann. Auch das Anzeigen und\nInterpretieren von Daten hat hier eine Rolle gespielt.",[3469,26671,26673],{"id":26672},"betreuung-und-sponsoren","Betreuung und Sponsoren",[18,26675,26676,26680,26681,26683,26684,26687,26688,26690,26691,26693],{},[1794,26677],{"alt":26678,"src":26679},"\"IMG_9163\"","https://media.synyx.de/uploads//2014/09/IMG_9163.jpg","\nViele Personen haben dazu beigetragen, dass die Devoxx4Kids in Karlsruhe ein Erfolg für alle Teilnehmer wurde.\nAngefangen bei den mehr als zehn Kollegen von synyx kamen viele weitere Freiwillige aus verschiedenen Teilen der\nRepublik (von Braunschweig über Schwäbisch Hall und Heidelberg bis nach München) und sogar aus Belgien dazu.\nAusgerichtet wurde die Devoxx4Kids zwar von ",[27,26682,3122],{},", aber weitere Sponsoren haben mit zum Erfolg beigetragen. Vielen\nDank hier an ",[27,26685,26686],{},"Citrix"," (Goldsponsor), ",[27,26689,24858],{}," (die den Kindern jeweils ein Elektronikset mit nach Hause gaben)\nund die ",[27,26692,13248],{}," (die ihre tollen Räume zur Verfügung stellte).",[3469,26695,26697],{"id":26696},"nachhaltiger-lernspaß","Nachhaltiger Lernspaß",[18,26699,26700,26704,26705,26709,26710,26716],{},[1794,26701],{"alt":26702,"src":26703},"\"IMG_9143\"","https://media.synyx.de/uploads//2014/09/IMG_9143.jpg","\nAm Ende der Veranstaltung durften die Kinder jeweils einen Raspberry-Pi und ein Tinkerforge-Set mit nach Hause nehmen,\num das Gelernte nicht zu vergessen und um zu Hause weiter üben zu können. Die neuen Vorträge werden demnächst, so wie es\nbei der Devoxx4Kids üblich ist, auf der ",[585,26706,26708],{"href":26601,"rel":26707,"title":6829},[589],"Homepage"," und\nauf ",[585,26711,26715],{"href":26712,"rel":26713,"title":26714},"https://github.com/devoxx4kids/",[589],"D4K Github","Github"," bereit gestellt, damit sie auch anderen zur Verfügung stehen\nund angepasst oder auch weiterentwickelt werden können. Aber nicht nur die Kinder, auch die Betreuer und Tutoren haben\nviel gelernt an diesem Tag. Die Kinder haben riesiges Interesse an den angebotenen Themen gezeigt und mit ihrer\nNeugierde und Fragen die Tutoren immer wieder gefordert. Wir hoffen, dass der Tag den Kindern genauso viel Spaß gemacht\nhat wie den Veranstaltern, Tutoren und Helfern! Es ist geplant, die Devoxx4Kids zu einem regelmäßigen Event in Karlsruhe\nwerden zu lassen. Aber auch andere Städte sind herzlich eingeladen eine eigene Devoxx4Kids auf die Beine zu stellen. Wir\nstehen allen Interessierten hier gerne mit Rat und Tat zur Seite!",[18,26718,26719],{},"Vielen Dank an alle Beteiligten und bis zum nächsten Mal sagt Euer",[18,26721,26722],{},"Devoxx4Kids Team aus Deutschland",{"title":48,"searchDepth":86,"depth":86,"links":26724},[26725,26726,26727],{"id":6889,"depth":86,"text":6890},{"id":26672,"depth":86,"text":26673},{"id":26696,"depth":86,"text":26697},[614],"2014-09-30T12:00:45","Die Devoxx4Kids ist eine Tagung für Kinder. Angelehnt ist sie an die Devoxx,\\ndie alljährliche Konferenz für Java-Entwickler. Die Devoxx4Kids richtet ihren Fokus auf die Programmierer, Entwickler\\nund Informationsdesigner von Morgen. Die Idee zur dieser Kindertagung entstand vor einigen Jahren in der belgischen Java\\nUser Group (BeJUG) und findet seither weltweit großen Anklang. 26 Jungen und sechs Mädchen im\\nAlter von acht bis 14 Jahren fanden sich am letzten Samstag, dem 27.09.2014, in\\nder Karlshochschule in Karlsruhe ein, um in vier angebotenen Workshops Spiele und\\nRoboter zu programmieren, Quadrocopter zu steuern und die Grundlagen der Elektronik zu erlernen. Die Kids haben in\\njeweils vier Zweiergruppen pro Workshop Übungen absolviert, wobei der Lernspaß hier im Vordergrund stand.","https://synyx.de/blog/devoxx4kids-in-karlsruhe-programmieren-und-elektronik-fur-kids/",{},"/blog/devoxx4kids-in-karlsruhe-programmieren-und-elektronik-fur-kids",{"title":26589,"description":26735},"Die Devoxx4Kids ist eine Tagung für Kinder. Angelehnt ist sie an die Devoxx,\ndie alljährliche Konferenz für Java-Entwickler. Die Devoxx4Kids richtet ihren Fokus auf die Programmierer, Entwickler\nund Informationsdesigner von Morgen. Die Idee zur dieser Kindertagung entstand vor einigen Jahren in der belgischen Java\nUser Group (BeJUG) und findet seither weltweit großen Anklang. 26 Jungen und sechs Mädchen im\nAlter von acht bis 14 Jahren fanden sich am letzten Samstag, dem 27.09.2014, in\nder Karlshochschule in Karlsruhe ein, um in vier angebotenen Workshops Spiele und\nRoboter zu programmieren, Quadrocopter zu steuern und die Grundlagen der Elektronik zu erlernen. Die Kids haben in\njeweils vier Zweiergruppen pro Workshop Übungen absolviert, wobei der Lernspaß hier im Vordergrund stand.","devoxx4kids-in-karlsruhe-programmieren-und-elektronik-fur-kids","blog/devoxx4kids-in-karlsruhe-programmieren-und-elektronik-fur-kids",[3747,25760,26739,25762,19240,3122,25763,4215],"nao-robot","Die Devoxx4Kids ist eine Tagung für Kinder. Angelehnt ist sie an die Devoxx, die alljährliche Konferenz für Java-Entwickler. Die Devoxx4Kids richtet ihren Fokus auf die Programmierer, Entwickler und Informationsdesigner von…","oP2EdVF_2t-8XpvKtpQEvPtlKUh9kJRYiSvTsgKBqMU",{"id":26743,"title":26744,"author":26745,"body":26746,"category":26904,"date":26905,"description":26755,"extension":617,"link":26906,"meta":26907,"navigation":499,"path":26908,"seo":26909,"slug":26750,"stem":26910,"tags":26911,"teaser":26913,"__hash__":26914},"blog/blog/javaforum-stuttgart-2014.md","JavaForum Stuttgart 2014",[11098],{"type":11,"value":26747,"toc":26902},[26748,26751,26756,26759,26762,26767,26770,26775,26784,26789,26792,26797,26800,26805,26820,26825,26834,26839,26842,26847,26855,26860,26863,26868,26877,26882,26891,26896,26899],[14,26749,26744],{"id":26750},"javaforum-stuttgart-2014",[18,26752,26753],{},[27,26754,26755],{},"Warum in die Ferne schweifen, wenn das Gute doch so nah ist?",[18,26757,26758],{},"Das dachten sich dieses Jahr auch vier Entwickler von synyx, und machten sich daher am 17.07. auf nach Stuttgart zum\nJavaForum der Java User Group Stuttgart (JUGS).",[18,26760,26761],{},"Die Vorteile liegen auf der Hand: kurze An-/ Abreise, große Auswahl an guten Vorträgen, super Verpflegung, und das\nalles zu einem relativ günstigen Preis.",[18,26763,26764],{},[27,26765,26766],{},"08:05 Uhr, Hauptbahnhof Stuttgart",[18,26768,26769],{},"Alle da? Wo müssen wir hin? Raus aus dem Bahnhof, der Masse nach zum Kongresszentrum Liederhalle. Zehn Minuten laufen\nsind bestimmt nicht verkehrt – sitzen werden wir heute noch genug. Der Checkin zum JavaForum funktioniert dank vorher\nzugeschickter Barcode-Scheckkarte schnell und problemlos. Dann erst mal orientieren: Wo gibts was? Kaffee? Ah, da.\nPraktischerweise gibts auch Brezeln – also Zeit für ein zweites Frühstück.",[18,26771,26772],{},[27,26773,26774],{},"8:45 Uhr, Hegel-Saal",[18,26776,26777,26778,26783],{},"Zum Warm-Up: Thorsten Maier\nmit “",[585,26779,26782],{"href":26780,"rel":26781},"http://www.java-forum-stuttgart.de/_data/D1_2014.pdf",[589],"Effektiver Einsatz von Code-Reviews","“. Keine Tool-Show (\npuh, Glück gehabt), dafür umso mehr praktische Infos rund um die Reviews. Warum wollen wir überhaupt Reviews machen? Und\nwie führt man diese praktisch durch? Insgesamt sehr praxisnah und einfach umzusetzen. Das werden wir nächste Woche\ngleich mal ausprobieren.",[18,26785,26786],{},[27,26787,26788],{},"9:50 Uhr, Raum Sylt",[18,26790,26791],{},"Nach etwas suchen den Tagungsraum im obersten Stockwerk gefunden. Mit “Leittechnik für Bahnsysteme mit Eclipse” von\nChristian Scholz geht es hier mal um etwas womit man im Entwickleralltag eher nie zu tun hat, es aber fast jeden Tag (\npassiv) nutzt. Da die Domaine sehr spannend klang dachte ich wäre hier eine Horizonterweiterung bestimmt auch nicht\nschlecht. Leider ist der Vortrag nicht ganz so gut wie erwartet – insgesamt habe ich den Eindruck dass es etwas\ndurcheinander ist, sicherlich auch bedingt durch viele Fachbegriffe sowie den englischsprachigen Foliensatz (weniger\nwäre hier sicher mehr gewesen). Mag sein dass der gute Mann einfach auch nicht mehr (Details) erzählen durfte…",[18,26793,26794],{},[27,26795,26796],{},"10:40 Uhr, Foyer",[18,26798,26799],{},"Wo gibt es die Croissants mit denen hier alle rum laufen?",[18,26801,26802],{},[27,26803,26804],{},"11:10 Uhr, Schiller-Saal",[18,26806,26807,26808,26813,26814,26819],{},"Im dritten Block geht es\num “",[585,26809,26812],{"href":26810,"rel":26811},"http://www.java-forum-stuttgart.de/_data/A3_2014.pdf",[589],"Enterprise integration Patterns Revisited","“. Kai Wähner trägt\ndas Thema sehr kurzweilig vor – die 45 Minuten fliegen recht dahin. Die wichtigsten Kernpunkte: letztlich hat wohl schon\njeder EAIs verwendet – wenn auch unbewusst. Daher:\ndas ",[585,26815,26818],{"href":26816,"rel":26817},"http://www.amazon.de/Enterprise-Integration-Patterns-Designing-Deploying/dp/0321200683/ref=sr_1_1?ie=UTF8",[589],"EAI Buch von Hohpe und Woolf","\nlesen, und dann die Patterns nicht selbst implementieren, sondern fertige Frameworks bzw. Tools verwenden.",[18,26821,26822],{},[27,26823,26824],{},"12:15 Uhr, Beethoven-Saal",[18,26826,26827,26828,26833],{},"Vor der Mittagspause noch was neues zu Java 8\nlernen: “",[585,26829,26832],{"href":26830,"rel":26831},"http://www.java-forum-stuttgart.de/_data/E4_2014.pdf",[589],"Lambdas, Collections und Streams","“. Michael Wiedeking\nträgt sehr unterhaltsam vor wie man mit Lambda Ausdrücken und Streams in Java 8 sehr elegant tolle Sachen machen kann.\nDas ganze in einem wahnsinns schnellen Tempo. Ich weiß zwar jetzt was geht – damit das wirklich anwendbar wird, muss ich\nmich wohl aber erst mal selbst hin setzen und etwas damit herumspielen. Trotz der Geschwindigkeit des Vortrages war es\nbisher wohl der beste (und auch unterhaltsamste) Vortrag des Tages.",[18,26835,26836],{},[27,26837,26838],{},"13:00 Uhr, Foyer",[18,26840,26841],{},"Mittagessen – also schön in die Schlange am Buffet einreihen. Die Auswahl ist groß, man weiß garnicht was man angesichts\ndes Angebots auf den (dafür) viel zu kleinen Teller laden soll. Aber egal wofür man sich entscheidet: alles sehr lecker!\nVorspeise, Hauptgang, Nachspeise – Zeit während der Mittagspause noch etwas den Sonnenschein draußen zu genießen und\nsich zu bewegen.",[18,26843,26844],{},[27,26845,26846],{},"14:30 Uhr, Raum Usedom",[18,26848,1038,26849,26854],{},[585,26850,26853],{"href":26851,"rel":26852},"http://www.java-forum-stuttgart.de/_data/E5_2014.pdf",[589],"Slim Fast","“. Heiko Rupp scheint angesicht des vielen Essens auch\nschon bedenken im Bezug auf seine Figur zu haben. Allerdings soll es hier nicht darum gehen wie wir abnehmen können,\nsondern wie der benötigte Heap unserer Anwendung schlanker werden kann. Gezeigt werden einige Tools zur Analyse des\nHeaps (VisualVM, Eclipse MAT), sowie typische Beispiele wo man auf einfache Art viel Speicher sparen kann. Wissen dass\nwir in unseren Projekten sicherlich noch gewinnbringend einsetzen können.",[18,26856,26857],{},[27,26858,26859],{},"15:20 Uhr, Foyer",[18,26861,26862],{},"Bevor dass jemand verhungert: Zeit für lecker Kuchen!",[18,26864,26865],{},[27,26866,26867],{},"15:35 Uhr, Beethoven-Saal",[18,26869,26870,26871,26876],{},"In Zeiten sich täglich überschlagender Meldungen von geklauten Daten und Passwörter so aktuell wie\nnie: “",[585,26872,26875],{"href":26873,"rel":26874},"http://www.java-forum-stuttgart.de/_data/F6_2014.pdf",[589],"Krypto für Java-Entwickler","“, vorgetragen von Dominik\nSchadow. Es geht darum dass man auf jeden Fall auf bewährte Krypto-Verfahren setzen sollte, Java bringt hier\nout-of-the-box schon sehr viel mit. Da dies in der Umsetzung dann allerdings oft eher etwas umständlich ist, gibt es\nauch hier Frameworks welche es dem Entwickler leicht machen Daten ordentlich zu verschlüsseln. Wichtigste Message:\nverschlüsseln ja, dabei auf fertige Bibliotheken und Algorithmen vertrauen und nichts selbst implementieren.",[18,26878,26879],{},[27,26880,26881],{},"16:40 Uhr, Raum Usedom",[18,26883,26884,26885,26890],{},"Zum Endspurt noch einmal hinauf ins oberste Stockwerk\nzu “",[585,26886,26889],{"href":26887,"rel":26888},"http://www.java-forum-stuttgart.de/_data/A7_2014.pdf",[589],"Entwicklung von BigData-Systemen mit Apache Cassandra","“.\nPhilipp Stussak stellt die grundsätzliche Funktionsweise dieser NoSQL Datenbank vor, und zeigt sehr deutlich welche\nVorteile diese gegenüber einer herkömmlichen (relationalen) Datenbank hat. Auf jeden Fall sehr interessant, vor allem\nwenn man sehr viele Daten zu speichern hat.",[18,26892,26893],{},[27,26894,26895],{},"17:40 Uhr, Stuttgart Innenstadt",[18,26897,26898],{},"Auf dem Weg zurück zum Bahnhof. Rückblickend hat sich der Tag in Stuttgart auf jeden Fall gelohnt. Die Vorträge waren\ninsgesamt alle sehr informativ. Vieles wurde sicherlich nur oberflächlich angerissen (mehr ist in der kurzen Zeit aber\nauch kaum möglich), die Vorträge bieten aber jeweils einen guten Startpunkt um selbst tiefer in die einzelnen Themen\neinzusteigen.",[18,26900,26901],{},"JavaForum Stuttgart – nächstes Jahr gerne wieder. Und nicht nur wegen dem Essen 😉",{"title":48,"searchDepth":86,"depth":86,"links":26903},[],[614],"2014-07-22T11:50:17","https://synyx.de/blog/javaforum-stuttgart-2014/",{},"/blog/javaforum-stuttgart-2014",{"title":26744,"description":26755},"blog/javaforum-stuttgart-2014",[6240,290,26912,6243,5836],"javaforum","Warum in die Ferne schweifen, wenn das Gute doch so nah ist? Das dachten sich dieses Jahr auch vier Entwickler von synyx, und machten sich daher am 17.07. auf nach…","LoqlLEnXvn-aE3Wc2m1OLELW-ezLTZNNiILSLwq7qW0",{"id":26916,"title":26917,"author":26918,"body":26920,"category":26969,"date":26970,"description":26971,"extension":617,"link":26972,"meta":26973,"navigation":499,"path":26974,"seo":26975,"slug":26977,"stem":26978,"tags":26979,"teaser":26980,"__hash__":26981},"blog/blog/kleiner-ruckblick-zur-open-street-map-konferenz-in-karlsruhe.md","Kleiner Rückblick zur Open Street Map Konferenz in Karlsruhe",[26919,21374],"knorre",{"type":11,"value":26921,"toc":26967},[26922,26925,26934,26943,26952,26961,26964],[14,26923,26917],{"id":26924},"kleiner-rückblick-zur-open-street-map-konferenz-in-karlsruhe",[18,26926,26927,26928,26933],{},"Vom 13.-15. Juni war die ",[585,26929,26932],{"href":26930,"rel":26931},"http://www.sotm-eu.org/",[589],"State of the Map EU"," in Karlsruhe. Open Street Map wird bei\neinigen unserer Kundenprojekte verwendet. Nicht nur deswegen sondern auch, weil Open Street Map ein tolles Community\nProjekt ist, haben wir uns entschlossen diese Veranstaltung durch ein Sponsoring zu unterstützen.",[18,26935,26936,26937,26942],{},"Christine Karch und Frederik Ramm von der ",[585,26938,26941],{"href":26939,"rel":26940},"http://www.geofabrik.de",[589],"Geofabrik"," haben die Konferenz organisiert und einen\nwirklich tollen Job gemacht! Ich war positiv überrascht wie viele Teilnehmer die Konferenz besucht haben und dass doch\neinige, wie der Titel der Konferenz durch den Zusatz „EU“ suggeriert, auch aus dem Ausland angereist waren.",[18,26944,26945,26946,26951],{},"Von Freitagvormittag bis Samstagnachmittag gab es eine Vielzahl von spannenden Talks zum Thema. Ich persönlich fand den\nTalk ",[585,26947,26950],{"href":26948,"rel":26949},"http://www.sotm-eu.org/slides/57.pdf",[589],"„State of Kort“"," von Stefan Keller, Professor an der Hochschule für Technik\nin Rapperswil Schweiz, sehr interessant. Stefan Keller hat das Spiel Kort entwickelt und versucht über Gamification Open\nStreet Map Daten zu validieren. Bei Kort handelt es sich um eine Web-App, die für mobile Geräte optimiert ist und mit\neinem entsprechenden Backend und Open Street Map kommuniziert. Das Spielprinzip ist einfach gehalten. Spieler können\neine Mission anlegen, beispielsweise „Um welchen Weg-Typ handelt es sich hier?“ und Credits bzw. in dem Fall „Koins“\nfür die richtige Antwort vergeben. Wenn nun andere Spieler die Mission annehmen und die richtige Antwort wählen,\nerhalten sie die „Koins“ und bestätigen zum anderen, dass es sich bei dem Weg-Typ beispielsweise um einen Schotterweg\nhandelt. Damit ist das eigentliche Ziel erreicht, nämlich dass es zum einen ein gesteigertes Interesse am „mappen“ von\nOpen Street Map Daten gibt und zum anderen diese über die Community validiert werden.",[18,26953,26954,26955,26960],{},"Ein ebenfalls sehr interessanter Vortrag war der zu ",[585,26956,26959],{"href":26957,"rel":26958},"http://www.sotm-eu.org/en/slots/6",[589],"pgmapcss",", einem neuen Standard\nfür die Darstellung von Kartographie-Daten. Die Syntax ist stark angelehnt an CSS für HTML, wobei sich hier die\nSelektoren aber auf geographische Objekte beziehen. Dabei lässt sich bereits auf eine Vielzahl vorhandener Stile\nzurückgreifen, aber auch das Hinzufügen von eigenen Stilen ist möglich. Dies eröffnet viele Möglichkeiten einerseits die\nDarstellung, als auch Funktionen bis hin zum Routing vom selben Datenmodell in unterschiedlichen Formen auszugeben.",[18,26962,26963],{},"Am letzten Tag der Konferenz, dem Hackday, ging es dann mehr praktisch zu. Die Konferenzteilnehmer konnten selbst in die\nTasten greifen, an Workshops teilnehmen oder einen Ausflug in die „Wildnis“ von Karlsruhe unternehmen und mit Open\nStreet Map verbinden.",[18,26965,26966],{},"Insgesamt fand ich die Konferenz absolut empfehlenswert und bin gespannt, wie sie sich in Zukunft entwickelt.",{"title":48,"searchDepth":86,"depth":86,"links":26968},[],[614],"2014-07-04T15:35:15","Vom 13.-15. Juni war die State of the Map EU in Karlsruhe. Open Street Map wird bei\\neinigen unserer Kundenprojekte verwendet. Nicht nur deswegen sondern auch, weil Open Street Map ein tolles Community\\nProjekt ist, haben wir uns entschlossen diese Veranstaltung durch ein Sponsoring zu unterstützen.","https://synyx.de/blog/kleiner-ruckblick-zur-open-street-map-konferenz-in-karlsruhe/",{},"/blog/kleiner-ruckblick-zur-open-street-map-konferenz-in-karlsruhe",{"title":26917,"description":26976},"Vom 13.-15. Juni war die State of the Map EU in Karlsruhe. Open Street Map wird bei\neinigen unserer Kundenprojekte verwendet. Nicht nur deswegen sondern auch, weil Open Street Map ein tolles Community\nProjekt ist, haben wir uns entschlossen diese Veranstaltung durch ein Sponsoring zu unterstützen.","kleiner-ruckblick-zur-open-street-map-konferenz-in-karlsruhe","blog/kleiner-ruckblick-zur-open-street-map-konferenz-in-karlsruhe",[],"Vom 13.-15. Juni war die State of the Map EU in Karlsruhe. Open Street Map wird bei einigen unserer Kundenprojekte verwendet. Nicht nur deswegen sondern auch, weil Open Street Map…","kEOmVCqxjel3aMKHHvETBu60U9c7pgr6qThAFEbWdVY",{"id":26983,"title":26984,"author":26985,"body":26986,"category":27067,"date":27068,"description":27069,"extension":617,"link":27070,"meta":27071,"navigation":499,"path":27072,"seo":27073,"slug":27074,"stem":27075,"tags":27076,"teaser":27078,"__hash__":27079},"blog/blog/devcamp_karlsruhe.md","DevCamp Karlsruhe: viele nette Leute, interessante Vorträge und jede Menge Spaß",[10931,21028],{"type":11,"value":26987,"toc":27065},[26988,26991,26994,27000,27009,27012,27015,27021,27024,27032,27037,27044,27047,27052,27055,27058],[14,26989,26984],{"id":26990},"devcamp-karlsruhe-viele-nette-leute-interessante-vorträge-und-jede-menge-spaß",[18,26992,26993],{},"Letztes Wochenende fand zum zweiten Mal das DevCamp in Karlsruhe statt. Nicht nur weil synyx auch dieses Mal als Sponsor\nauftritt, war ich beide Tage vor Ort. Nein, ich finde diese Art der Veranstaltungen einfach klasse. Eine lockere\nAtmosphäre, man trifft viele nette, aufgeschlossene Leute. Außerdem gefällt mir das Format. Es gibt hier keine\nZuschauer, sondern nur Mitwirkende. Jeder Teilnehmer bekommt dabei die Zeit, seinen Vortrag, Workshop oder eine einfache\nDiskussionsrunde durchzuführen.",[18,26995,26996],{},[1794,26997],{"alt":26998,"src":26999},"\"sessionplanung\"","https://media.synyx.de/uploads//2014/03/sessionplanung.jpg",[18,27001,27002,27003,27008],{},"Diese Gelegenheit haben mein Kollege Christian und ich uns nicht entgehen lassen und haben gleich am Samstagmorgen eine\nSession zum Thema Devoxx4Kids gehalten. Wer sich dafür interessiert, kann sich die Slides auf\nder ",[585,27004,27007],{"href":3706,"rel":27005,"title":27006},[589],"D4K","deutschen D4K-Website"," anschauen. Natürlich gibt dort noch mehr Informationen\nzu dem Thema. In einer lockeren Atmosphäre hat es uns sehr viel Spaß gemacht, den Anwesenden die Devoxx4Kids näher zu\nbringen.",[18,27010,27011],{},"Ich ließ mich anschließend von meinen Kollegen noch zu einer weiteren Session „JavaScript – Bad Practises“ überreden.\nHey, und die Hälfte davon hab ich als Marketing-Mensch sogar noch verstanden. Dann war es auch schon Zeit für das\nMittagessen. Ich habe mir etwas Zeit gelassen, da der Andrang recht hoch war. Aber lecker war´s. Den Samstagnachmittag\nund den größten Teil des Sonntags, habe ich dann mit vielen Gesprächen mit sehr netten Menschen verbracht.",[18,27013,27014],{},"Mein Fazit: es war ein tolles Event mit tollen Leuten. Jeder, der vor hat irgendwann einen Vortrag zu halten, sollte\nsich diese Gelegenheit nicht entgehen lassen. In lockerer Runde macht das Spaß und das Lampenfieber geht ganz schnell\nweg. An dieser Stelle sei den Organisatioren, den Sponsoren, Fabian Beiner für seine tolle Moderation und zuletzt\nnatürlich auch ALLEN Teilnehmern gedankt, denn ohne die würde nichts funktionieren.",[18,27016,27017],{},[1794,27018],{"alt":27019,"src":27020},"\"devcamp\"","https://media.synyx.de/uploads//2014/03/devcamp.jpg",[18,27022,27023],{},"Wie schon erwähnt, war mein Kollege Christian Mennerich auch dabei. Er hat ebenfalls eine kleine Zusammenfassung zum\nDevCamp geschrieben. Hier folgt sie:",[18,27025,27026,27027,27031],{},"Es gab viele technisch sehr interessante Vorträge auf dem DevCamp, die thematisch von Hausautomatisierung und\nHeimarbeitsorganisation über Suche und Java Performanceanalyse bis hin zu Programmierworkshops reichten. Wen es\ninteressiert was er verpasst hat, kann dies noch hier nachschauen: ",[585,27028,27029],{"href":27029,"rel":27030},"http://lanyrd.com/2014/dcka/schedule/",[589],". Ein großes\nThema waren immer wieder Webanwendungen, JavaScript und JavaScript Frameworks, aber auch die Graphdatenbank Neo4j wurde\nmit einem Vortrag beehrt. Im Folgenden werden für jeden Veranstaltungstag exemplarisch zwei Vorträge näher beschrieben,\ndie besonders gefallen haben.",[18,27033,27034],{},[27,27035,27036],{},"Der Samstag",[18,27038,27039,27040,986],{},"Alexander Reelsen von ElasticSearch hat einen sehr guten Vortrag gehalten über die Kombination von ElasticSearch,\nLogStash und Kibana. Einführend motivierte er kurz die Notwendigkeit des zentralisierten Loggings, einerseits zur\nAnalyse der betriebenen Systeme und zur Früherkennung von Kapazitätenknappheit oder Angriffen, andererseits aber auch\nzur Informationsgewinnung z.B. zu Marketingzwecken. LogStash als Mittel der Wahl folgt hier im wesentlichem dem Muster\nEingabe –> Filterung –> Ausgabe. Daten können aus den verschiedensten Quellen in LogStash gelangen, darunter\nMonitoringtools, Datenbanken, Warteschlangen und viele andere. Ebenso vielfältig sind die Ausgabemöglichkeiten und\n-formate. Filter bieten zahlreiche Möglichkeiten, Daten zu konvertieren, anzureichern oder auszublenden. Exemplarisch\nhat Alexander demonstriert, wie syslog oder JSON Dateien eingelesen und in ElasticSearch gespeichert und durchsuchbar\ngemacht werden können. Mittels Kibana können Daten auf einfach konfigurierbaren Dashboards visualisiert werden. In einer\nschönen Live-Demo hat er gezeigt, wie sich beispielsweise die von meetup.com zur Verfügung gestellten Streams einfach\nindizieren lassen, um sie mittels Kibana und ElasticSearch analysieren und visualisieren zu können. Alexander hat seine\nVortragsfolien öffentlich zur Verfügung\ngestellt: ",[585,27041,27042],{"href":27042,"rel":27043},"https://speakerdeck.com/elasticsearch/using-elasticsearch-logstash-and-kibana-to-create-realtime-dashboards",[589],[18,27045,27046],{},"Petar Petrov hat über seine Erfahrungen berichtet, die er gesammelt hat, als er neben seiner beruflichen Tätigkeit in 30\nNächten im Rahmen des von GitHub veranstalteten Game Off Wettbewerbs ein Spiel mit JavaScript programmiert hat. Das\nErgebnis heißt Psiral, hat guten Platz im Wettbewerb belegt und ist unter psiral.herokuapp.com zu bewundern und zu\nspielen. Neben den Schwierigkeiten der technischen Umsetzung des Spiels hat Petar psychologische Komponenten beleuchtet:\nDie Schwankungen der Motivation, die Schwierigkeiten der Organisation ein solches Projekt neben seinem eigentlichen\nBeruf zu realisieren und die Notwendigkeit zu schlafen! Gespickt war sein Erfahrungsbericht neben technischen Aspekten\nauch immer wieder von kurzen Anekdoten über die Zusammenarbeit mit der Spieldesignerin, die nebenbei auch seine Ehefrau\nist. Insgesamt ein sehr interessanter Bericht über die vielen Facetten der Projektplanung und -durchführung.",[18,27048,27049],{},[27,27050,27051],{},"Der Sonntag",[18,27053,27054],{},"Tim Suchanek hat einen Workshop gleich in zwei Teilen gehalten, um live zu demonstrieren wie gut MEAN funktioniert. MEAN\nsteht für MongoDB (eine dokumentenbasierte NoSQL Datenbank), Express (ein Webframework für Node.js), Angular.js (ein\nJavaScript MVC Framework) und Node.js (eine Laufzeitumgebung für JavaScript). Den Rahmen für beide Vorträge bildete ein\nonline Einkaufszettel (wage angelehnt an die Meet&Eat Plattform Crowddining, an der Tim mitarbeitet).Vorbereitet hatte\nTim lediglich die HTML und CSS Dateien für den fertigen Einkaufszettel, als als Ausgangsprojekt diente das auf GitHub\nzur Verfügung stehende angular-seed. Der erste Vortrag bestand aus der Erstellung eines Backends basierend auf der\nMongoDB, Node.js und Express. Vorbildlich testgetrieben entwickelte Tim in 45 Minuten eine REST-Schnittstelle, die die\nnötigen CRUD (create, read, update, delete) Operationen bereitstellt, um den Einkaufszettel zu füllen und zu bearbeiten.",[18,27056,27057],{},"Im zweiten Workshop zeigte er, wie mit Angular.js ein zugehöriges Frontend entwickelt werden kann. Zusätzlich kam neben\nAngular noch Restangular zur Anwendung. Tim demonstrierte, wie einfach es ist, Kenntnisse in der Technologie und den\nFramworks vorausgesetzt, die notwendigen Anzeigeelemente und -effekte zu generieren und mit Funktionalität füllen.",[18,27059,27060,27061,986],{},"Der Workshop war sehr gut besucht und lief beeindruckend flüssig. Die wenigen kleinen Stolpersteine nutzte Tim\ngeschickt, um auch die Debuggingmöglichkeiten und -techniken zu demonstrieren. Der Einkaufszettel steht auf GitHub zur\nVerfügung: ",[585,27062,27063],{"href":27063,"rel":27064},"https://github.com/crowddining/einkaufszettel",[589],{"title":48,"searchDepth":86,"depth":86,"links":27066},[],[614],"2014-03-27T13:33:56","Letztes Wochenende fand zum zweiten Mal das DevCamp in Karlsruhe statt. Nicht nur weil synyx auch dieses Mal als Sponsor\\nauftritt, war ich beide Tage vor Ort. Nein, ich finde diese Art der Veranstaltungen einfach klasse. Eine lockere\\nAtmosphäre, man trifft viele nette, aufgeschlossene Leute. Außerdem gefällt mir das Format. Es gibt hier keine\\nZuschauer, sondern nur Mitwirkende. Jeder Teilnehmer bekommt dabei die Zeit, seinen Vortrag, Workshop oder eine einfache\\nDiskussionsrunde durchzuführen.","https://synyx.de/blog/devcamp_karlsruhe/",{},"/blog/devcamp_karlsruhe",{"title":26984,"description":26993},"devcamp_karlsruhe","blog/devcamp_karlsruhe",[27077,13368],"devcamp","Letztes Wochenende fand zum zweiten Mal das DevCamp in Karlsruhe statt. Nicht nur weil synyx auch dieses Mal als Sponsor auftritt, war ich beide Tage vor Ort. Nein, ich finde…","u_Fm6yEJ3gJgMv-J5-wcioHVYu0pEkGP1k0z0MHcoes",{"id":27081,"title":27082,"author":27083,"body":27084,"category":27155,"date":27156,"description":27157,"extension":617,"link":27158,"meta":27159,"navigation":499,"path":27160,"seo":27161,"slug":27163,"stem":27164,"tags":27165,"teaser":27169,"__hash__":27170},"blog/blog/fairantwortung-ubernehmen-ist-nicht-nur-ein-lippenbekenntnis.md","FAIRantwortung übernehmen ist nicht nur ein Lippenbekenntnis",[21028],{"type":11,"value":27085,"toc":27153},[27086,27089,27099,27102,27105,27108,27111,27114,27131,27140,27150],[14,27087,27082],{"id":27088},"fairantwortung-übernehmen-ist-nicht-nur-ein-lippenbekenntnis",[18,27090,27091,27092,27098],{},"Am 22.01.14 fand im IHK Bildungszentrum das\nerste ",[585,27093,27097],{"href":27094,"rel":27095,"title":27096},"http://www.fairantwortung.net/",[589],"Fairantwortung","Karlsruher Unternehmerforum"," statt. Thema war: Verantwortung\nübernehmen, Flagge zeigen, Zukunft sichern.",[18,27100,27101],{},"Da wir von synyx dieses Thema, auch Corporate Social Responsibility genannt, ebenfalls als sehr wichtig empfinden und\nbereits entsprechend Maßnahmen ergriffen haben, war mir schnell klar, dass ich an dieser Veranstaltung teilnehmen\nmöchte. Einerseits um weitere Ideen zu sammeln, andererseits natürlich auch, um neue Kontakte zu knüpfen.",[18,27103,27104],{},"Ich möchte hier gar nicht lange über die Vorträge oder Impulse eingehen, das würde den Rahmen sprengen.",[18,27106,27107],{},"Dennoch gab es Talks, welche einen bleibenden Eindruck hinterlassen haben. So z. B. Torsten Matthias, Marketingleiter\nder FRoSTA AG. Er hat ohne Umschweife aufgezeigt, wie sich die Umsätze des Unternehmens entwickelt haben. Vor allem die\nsinkenden Umsätze nach der Einführung von nachhaltigen Produkten. Erstaunlich fand ich, dass die FRoSTA AG trotz der\nnegativen Zahlen an die Idee der Nachhaltigkeit geglaubt haben und diesen Weg weiter gegangen sind. Letztlich hat sich\ndas ausgezahlt.",[18,27109,27110],{},"Auch die Aussagen von Max Wittrock, Gründer der mymuesli GmbH, in der Podiumsdiskussion hatten Hand und Fuß.\nBeeindruckend wie ein junges Unternehmen sich zu diesen Themen platziert. Im Übrigen war das ebenfalls ein Thema: die\nveränderten Werte der Generation Y (“Why”). Das spielt vor allem für Arbeitgeber und Personaler eine Rolle. Ihre Werte\nwerden in Zukunft immer mehr Raum in den Unternehmen einnehmen.",[18,27112,27113],{},"Fazit: Es war eine gelungene Veranstaltung, welche mit vielen Impulsen anregen konnte.",[18,27115,27116,27117,27123,27124,27130],{},"Wie ich eingangs schon erwähnt hatte, ist das Thema CSR für synyx nicht nur eine Floskel. Wir haben bereits viele\nMaßnahmen ergriffen, aber es ist auch noch einiges zu tun. Wie heißt es so schön? Der Weg ist das Ziel. Wir sind\nvielleicht nicht in der Lage die Welt zu verbessern, aber wir können unseren Teil dazu beitragen. Und das muss nicht\nimmer viel Geld kosten. Natürlich ist es nicht damit getan, Umwelt-Toilettenpapier zu verwenden, so eine Aussage bei\nder Veranstaltung. Jedoch ist ein Anfang. Dann lasst uns doch einfach weiter machen. Wir beziehen z. B. unseren Kaffee\nvon ",[585,27118,27122],{"href":27119,"rel":27120,"title":27121},"http://www.cafe-libertad.de",[589],"Cafe Libertad","Café Libertad Kollektiv e.G","., oder unser Wasser\nvon ",[585,27125,27129],{"href":27126,"rel":27127,"title":27128},"http://www.vivaconagua.org/",[589],"Viva con agua","Viva con Agua"," und unsere anderen Getränke beziehen wir nicht über die\ngroßen Konzerne, sondern auch hier unterstützen wir kleine Marken. Als IT-Unternehmen mit hohem Stromverbrauch ist es\nfür uns selbstverständlich, auf 100% Öko-Strom zu setzen.",[18,27132,27133,27134,27139],{},"Ergänzend stehen die Mitarbeiter bei synyx ebenfalls im Mittelpunkt. Seit 2008 sind wir Mitglied\nbei ",[585,27135,27138],{"href":27136,"rel":27137,"title":27138},"https://web.archive.org/web/20140924063622/http://faircompany.karriere.de/",[589],"Fair Company",". Unseren\nMitarbeitern stehen jährlich 2.000 EUR Fortbildungsbudget zur Verfügung. Auch flexible Arbeitszeiten und die\nindividuelle Arbeitsplatzgestaltung gehören dazu.",[18,27141,27142,27143,27149],{},"Es gibt so viele Möglichkeiten, sich als Unternehmen zu engagieren. Und nicht alles kostet Unmengen an Geld. Doch was\nhaben die Unternehmen davon? Wenn diese Philosophie mehr als ein Lippenbekenntnis ist, liegen die Vorteile auf der Hand:\nzufriedene Mitarbeiter, ein gutes Team und letztlich das gute Gefühl, die Welt ein kleines Bisschen zu verbessern. Auf\nunserer ",[585,27144,27148],{"href":27145,"rel":27146,"title":27147},"http://www.synyx.de/unternehmen/verantwortung_csr/",[589],"Verantwortung","Hompage"," kann man unsere Maßnahmen\nnachlesen.",[18,27151,27152],{},"Wir sind von der Initiative FAIRantwortung begeistert. Deshalb sind wir als FAIRpeople Förderer der Initiative.",{"title":48,"searchDepth":86,"depth":86,"links":27154},[],[614],"2014-02-04T15:10:42","Am 22.01.14 fand im IHK Bildungszentrum das\\nerste Karlsruher Unternehmerforum statt. Thema war: Verantwortung\\nübernehmen, Flagge zeigen, Zukunft sichern.","https://synyx.de/blog/fairantwortung-ubernehmen-ist-nicht-nur-ein-lippenbekenntnis/",{},"/blog/fairantwortung-ubernehmen-ist-nicht-nur-ein-lippenbekenntnis",{"title":27082,"description":27162},"Am 22.01.14 fand im IHK Bildungszentrum das\nerste Karlsruher Unternehmerforum statt. Thema war: Verantwortung\nübernehmen, Flagge zeigen, Zukunft sichern.","fairantwortung-ubernehmen-ist-nicht-nur-ein-lippenbekenntnis","blog/fairantwortung-ubernehmen-ist-nicht-nur-ein-lippenbekenntnis",[27166,27167,27168],"csr","nachhaltigkeit","verantwortung","Am 22.01.14 fand im IHK Bildungszentrum das erste Karlsruher Unternehmerforum statt. Thema war: Verantwortung übernehmen, Flagge zeigen, Zukunft sichern. Da wir von synyx dieses Thema, auch Corporate Social Responsibility genannt,…","kJctTGDkJ8CNpWRwP81uhVn_cKtYR7rXVkZ8mDR7aTs",{"id":27172,"title":27173,"author":27174,"body":27175,"category":27420,"date":27421,"description":27422,"extension":617,"link":27423,"meta":27424,"navigation":499,"path":27425,"seo":27426,"slug":27179,"stem":27428,"tags":27429,"teaser":27436,"__hash__":27437},"blog/blog/my-first-time-on-a-conference-with-synyx.md","My first time on a conference with synyx",[19196],{"type":11,"value":27176,"toc":27418},[27177,27180,27187,27193,27196,27199,27215,27229,27244,27276,27317,27332,27335,27350,27369,27372,27375,27392,27395],[14,27178,27173],{"id":27179},"my-first-time-on-a-conference-with-synyx",[18,27181,27182,27183,27186],{},"I am a fresh employee at synyx. I started early in 2013 to work for the company and the",[573,27184,27185],{},"Devoxx 2013"," in Antwerp was my\nfirst conference with my new colleagues. Everything started around august when a colleague asked „Whoooo want to go to\nthe Devoxx in November. Are you in? And you?“, he was so enthusiastic that I thought: “Hm first conference with these\nguys? One week with them in another country? And that on my birthday? Let’s do it!”.",[18,27188,27189,27190,27192],{},"Till November nothing big happens. I searched through the Devoxx site for speakers and talks, but not so much. I wanted\nto be free and just do what I want to do on the Devoxx and be ",[573,27191,4494],{},", of course. Then, one week before the Devoxx, I\ntalked to my colleague to know when the train leaves, where we are going to sleep, where to get the tickets and so on.\nAt this point I realized that synyx has everything organized and well planed. Good guy synyx!",[18,27194,27195],{},"When we arrived at the main station in Frankfurt the first cuba libre was ready to go. Of course with ice and lime. Yes\nwe had ice. We also shared some with friends we met before. We chatted on the train about talks, speakers, the company,\nfuture projects, our new office and challenges in some of our projects. It was fun to speak about things that bother you\nin this different atmosphere than our office or meeting rooms. It was very relaxing and fun.",[18,27197,27198],{},"The next day was the first day on the Devoxx. We started early to get our access keys and traveled there via subway. Its\na nice subway with a ‘nice’ smell, something like mushrooms.",[18,27200,27201,27202,27207,27208,12740,27211,27214],{},"One of the first talks I listened to was ",[585,27203,27206],{"href":27204,"rel":27205},"http://fhornain.wordpress.com/2013/11/12/devoxx13-java-ee-7-whats-new-in-the-java-ee-platform/http://",[589],"**Java EE 7: What’s New in the Java EE Platform\n**",". ",[573,27209,27210],{},"Argun\nGupta",[573,27212,27213],{},"Antonio Goncalves"," talked about new features of Java EE7. It was very interesting and a clear presentation\nwith good speakers. They talked about 3 hours, so it was good that they also did a lot of jokes on the stage especially\nwhen questions arrived like “why do you do not use spring? It has every feature you represent since two years.” Good\nSpeakers, good presentation. I learned a lot about Java EE in general.",[18,27216,27217,27220,27221,27228],{},[573,27218,27219],{},"David Gageot"," showed us in a quick 30 minutes live coding session called ",[585,27222,27225],{"href":27223,"rel":27224},"http://www.devoxx.be/dv13-david-gageot.html?presId=3108",[589],[27,27226,27227],{},"From Legacy to Cloud Under an Hour – Live\nCoding"," how easy it is to take old nasty unreadable code with\nabout a million of if/else statements and other dirty stuff in it and a good IDEA to get a nice clean code without\nduplicates and all the if/else and put it on the cloud at the end. Very impressive to see that in 30 minutes. He must\nhave trained a lot! Notice to me: Take time for your IDEA and learn what you can do with it, even if you think you know\na lot.",[18,27230,27231,27232,27235,27236,27243],{},"At the second day I was excited about the talk from ",[573,27233,27234],{},"José Paumard"," called ",[585,27237,27240],{"href":27238,"rel":27239},"http://www.devoxx.be/dv13-jos-paumard.html?presId=3540",[589],[27,27241,27242],{},"Autumn Collection: from iterable to\nlambdas, streams and collectors"," because this stuff you are\nusing and will use all the time when programming. It gave a real clear view on lambdas, streams and what you can do with\nit. The syntax looked quite nice, if you take care of it. Do not start to use it for everything and make things more\ncomplicated than they already are. Let’s see how it will be in future projects with Java 8. It feels like parallel\nprogramming will be made available and easier for a wider mass of developers.",[18,27245,27246,27247,27254,27255,27258,27259,99,27264,27269,27270,27275],{},"The next talk I watched was ",[585,27248,27251],{"href":27249,"rel":27250},"http://www.devoxx.be/dv13-matt-raible.html?presId=3648",[589],[27,27252,27253],{},"The Modern Java Web Developer",".\n",[573,27256,27257],{},"Matt Raible"," is a very good speaker with a lot of self irony and sarcasm. Which makes the talk even more interesting.\nHe talked about the modern solutions of web development\nlike ",[1794,27260],{"alt":27261,"src":27262,"title":27263},"\"20131112_133433\"","http://angularjs.org/","Angular JS",[585,27265,27268],{"href":27266,"rel":27267},"http://jquery.com/",[589],"jQuery",",\nCSS3, ",[585,27271,27274],{"href":27272,"rel":27273},"http://www.html5rocks.com/en/",[589],"HTML5"," and so on. It was a great overview over the preferred technologies for web\ndevelopers. At the end of his talk the showed us a video of him coding a complete dashboard application at one\nafternoon. Of course with a lot of copy paste. But it was nice to see the problems he got stuck, how he fixed it and how\npowerful and easy to use modern web frameworks and libraries are.",[18,27277,27278,27279,27282,27283,27290,27291,27294,27295,27298,27299,6159,27302,12740,27307,27312,27313,27316],{},"When I wrote this blog entry about the third day I could not remember what talks were really good at that day, besides\nthe talks of ",[573,27280,27281],{},"Martijn Verburg",". The problem was not that they were bad, but maybe not so forceful. On the other hand I\nwatched ",[585,27284,27287],{"href":27285,"rel":27286},"http://www.devoxx.be/dv13-chet-haase.html?presId=3193",[589],[27,27288,27289],{},"Patterns Shmatterns"," by ",[573,27292,27293],{},"Chet Haase",". And maybe that\nmakes me forget all the other talks. It was a ",[573,27296,27297],{},"fun quickie"," about patterns and their ‘pendant’. Great show, great funny\nface at the front. Definitely one talk to watch between other real talks to relax. The talks from ",[573,27300,27301],{},"Martijn Verburg:",[585,27303,27306],{"href":27304,"rel":27305},"http://www.devoxx.be/dv13-martijn-verburg.html?presId=3214",[589],"*\n*The Habits of Highly Effective Technical Teams**",[585,27308,27311],{"href":27309,"rel":27310},"http://www.devoxx.be/dv13-martijn-verburg.html?presId=3223",[589],"*\n*The Bleeding Edge**"," were both very good. The first named\ntalk was one of my highlights on the Devoxx, because it forced me to think about companies and how they treat their\nemployees and how they should treat them. For example why companies do not gave their employees rights to the productive\nsystem for the project they work on ",[573,27314,27315],{},"and so on and so forth",". A lot of questions where thrown into the room which I\nnever really asked myself and their was one moment where I realized that synyx is making a good job. Definitely a talk\nemployees and employer should watch and think about their process.",[18,27318,27319,27323,27324,27327,27328,27331],{},[1794,27320],{"alt":27321,"src":27322},"\"20131111_231326\"","https://media.synyx.de/uploads//2013/12/20131111_231326.jpg","\nThis was not only a effective day at the Devoxx. it was also my birthday. So we went for lunch this evening with\neveryone and then went into a student bar somewhere in Antwerp. It was really funny to go into a small student bar with\nround about 13 people on an evening where they had a 90’s party. Of course we knew all the great 90’s songs like Barbie\nGirl (O",[573,27325,27326],{},"o). But we were not prepared for it and the girls with their shards, yeah shards. Sometimes it is funny if you\nhave a close look at it. After that ‘crazy’ party we moved on to the _Beer Central"," to taste all their 300+ beer.\nLet’s say we ",[573,27329,27330],{},"almost"," did it. Great but different birthday than the years before. Thanks synyx!",[18,27333,27334],{},"At the last two days of the conference I watched a lot of talks, just one after another and running from room to room.\nTwo of them I do remind very well, because they where my points of lights these days.",[18,27336,27337,27338,27341,27342,27349],{},"First of all another highlight of my Devoxx week was the talk from ",[573,27339,27340],{},"Joey Cieplinski"," with the title ",[585,27343,27346],{"href":27344,"rel":27345},"http://www.devoxx.be/dv13-joe-cieplinski.html?presId=3330",[589],[27,27347,27348],{},"Business\nStrategies for Small Independent Developers"," he talked\nabout premium and none premium applications for mobile devices and his view to make higher price applications. Then to\nconcentrate on the 10% of customers that care about your product and do not see it as a throwaway piece of software to\nbuy for less then 1€. This talk confirmed me in my opinion to create quality software and get what you earn for a good\nproduct and concentrate of the concerns of real customers and their problems. Inspiring talk, thank you for sharing it.",[18,27351,27352,27359,27360,27363,27364,27368],{},[585,27353,27356],{"href":27354,"rel":27355},"http://www.devoxx.be/dv13-alain-regnier.html?presId=3733",[589],[27,27357,27358],{},"Introduction to Google Glass"," from ",[573,27361,27362],{},"Alain Regnier","was my\nlast talk I visited. It was a demonstration about what can be done with the glass and what could be done with it in the\nfuture. Alain also explained a lot on how Google act by spreading the glass and what you have to do to get the\nglass. ",[1794,27365],{"alt":27366,"src":27367},"\"20131115_105017\"","https://media.synyx.de/uploads//2013/12/20131115_105017.jpg","\nHe explained how to program with the Mirror API and his hopes of getting the GDK (Glass Development Kit) soon. Google\nGlass seems to be a product which can change parts of our lives, but for this it needs a real case in which it will be\nnecessary to have one. I am excited to see what will be possible in the future.",[18,27370,27371],{},"And at the end a small summary.",[18,27373,27374],{},"Antwerp:",[577,27376,27377,27380,27383,27386,27389],{},[580,27378,27379],{},"The subway smells like mushrooms.",[580,27381,27382],{},"The subway is small and carries a lot of people.",[580,27384,27385],{},"Awesome and horrible beer at once.",[580,27387,27388],{},"Beautiful main train station.",[580,27390,27391],{},"They love mayonnaise.",[18,27393,27394],{},"Devoxx:",[577,27396,27397,27400,27403,27406,27409,27412,27415],{},[580,27398,27399],{},"Great speakers with very interesting talks.",[580,27401,27402],{},"Nice People.",[580,27404,27405],{},"Learned a lot of new stuff.",[580,27407,27408],{},"Raspberry Pis will rule the world.",[580,27410,27411],{},"Crab sandwiches are delicious. Yeah! Ate a lot of them.",[580,27413,27414],{},"Tuna salad with only tuna are not that fun.",[580,27416,27417],{},"Belgian fries are awesome.",{"title":48,"searchDepth":86,"depth":86,"links":27419},[],[614],"2013-12-06T08:59:44","I am a fresh employee at synyx. I started early in 2013 to work for the company and theDevoxx 2013 in Antwerp was my\\nfirst conference with my new colleagues. Everything started around august when a colleague asked „Whoooo want to go to\\nthe Devoxx in November. Are you in? And you?“, he was so enthusiastic that I thought: “Hm first conference with these\\nguys? One week with them in another country? And that on my birthday? Let’s do it!”.","https://synyx.de/blog/my-first-time-on-a-conference-with-synyx/",{},"/blog/my-first-time-on-a-conference-with-synyx",{"title":27173,"description":27427},"I am a fresh employee at synyx. I started early in 2013 to work for the company and theDevoxx 2013 in Antwerp was my\nfirst conference with my new colleagues. Everything started around august when a colleague asked „Whoooo want to go to\nthe Devoxx in November. Are you in? And you?“, he was so enthusiastic that I thought: “Hm first conference with these\nguys? One week with them in another country? And that on my birthday? Let’s do it!”.","blog/my-first-time-on-a-conference-with-synyx",[6240,27430,27431,27432,27433,5836,27434,27435],"devoxx","gogle-glass","java-8","java-ee7","modern-web-development","premium-apps","I am a fresh employee at synyx. I started early in 2013 to work for the company and the Devoxx 2013 in Antwerp was my first conference with my new colleagues.…","o_aFlRO4Z2neys_7nDR-63csn2MLWAYQgg8F4ktsHls",{"id":27439,"title":27440,"author":27441,"body":27442,"category":27483,"date":27484,"description":27485,"extension":617,"link":27486,"meta":27487,"navigation":499,"path":27488,"seo":27489,"slug":27446,"stem":27491,"tags":27492,"teaser":27493,"__hash__":27494},"blog/blog/warum-nicht-auch-mal-sales-know-how-weitergeben.md","Warum nicht auch mal Sales Know-how weitergeben?",[21374],{"type":11,"value":27443,"toc":27481},[27444,27447,27464,27467,27475,27478],[14,27445,27440],{"id":27446},"warum-nicht-auch-mal-sales-know-how-weitergeben",[18,27448,27449,27450,27456,27457,27463],{},"Technisches Wissen und Erfahrungen geben wir bereits über unser Firmenblog und auch bei Veranstaltungen gerne und\nkostenfrei weiter. Also warum nicht auch mal Sales Know-how weitergeben? Eine gute Gelegenheit dafür war\nein ",[585,27451,27455],{"href":27452,"rel":27453,"title":27454},"http://www.cie-kit.de/2013/09/11/cie-kaminabend-b2b-vertrieb-it-dienstleistungen/",[589],"Kaminabend KIT","Kaminabend","\nbeim ",[585,27458,27462],{"href":27459,"rel":27460,"title":27461},"http://www.cie-kit.de/",[589],"CIE","Center für Innovation & Entrepreneurship",", kurz CIE, am KIT. Das CIE hat sich zum\nZiel gesetzt Unternehmensgründungen – unkonventionell und unbürokratisch – zu fördern. Angegliedert an das Institut für\nEntrepreneurship, Technologie-Management und Innovation des KIT, werden studentische Gründer kostenfrei mit diversen\nAngeboten unterstützt.",[18,27465,27466],{},"Dominik Stober und Anne Siebold sind die ersten Ansprechpartner des CIE. Dominik habe ich im Sommer kennengelernt. In\nunseren Gesprächen ist die Idee entstanden, dass synyx sich an einem Kaminabend beteiligen könnte und einen Referenten\nzur Verfügung stellt. Da bei Gründern die Vermarktung Ihrer Geschäftsidee und das Verkaufen eine im wahrsten Sinne des\nWortes tragende Rolle spielen, dachte ich mir, dass ein Vortrag und eine Diskussion zu Vertriebsthemen sicher auf\nInteresse stoßen.",[18,27468,27469,27470,27474],{},"Und so war es dann auch. Der Kaminabend „B2B Vertrieb von IT Dienstleistungen“ war schnell ausgebucht und Dominik musste\nmanchem Interessierten, der sich zu spät angemeldet hatte leider absagen. Sehr wahrscheinlich wird es aber einen zweiten\nAbend zu dem Thema geben und damit eine weitere Möglichkeit dabei zu sein. Also einfach mal auf der Webseite des CIE die\nVeranstaltungsankündigungen verfolgen. Oder sich direkt mit Dominik (",[585,27471,27473],{"href":27472},"mailto:stober@cie-kit.de","stober@cie-kit.de",") in Verbindung setzen.",[18,27476,27477],{},"Ich habe versucht den Kaminabend möglichst Praxis nah zu gestalten und von meiner persönlichen Erfahrung zu berichten.\nEinstieg war eine Beschreibung einer meiner beruflichen Stationen, bei der es um den Vertrieb von Infrastruktur nahen\nLösungen und Services an Konzernkunden ging. Das ist ein sehr umkämpfter Markt und hier kommt es meiner Meinung nach\nstark auf die eigene Positionierung und den USP an. Wie bei Start-ups auch, waren meine zeitlichen Ressourcen begrenzt.\nMan muss sich also gut überlegen, wie man mit den verfügbaren Mitteln Geld und Zeit schnell vertriebliche Erfolge\nnachweisen kann, wenn man im Job bleiben oder am Markt bestehen möchte. Inhaltlich wurden die Ausgangssituation, die\nZielkunden, der Akquiseprozess, Door-Opener, Positionierung am Markt und weitere wichtige Punkte besprochen. Bereits\njetzt wurden Zwischenfragen gestellt und es ging quasi direkt zum zweiten Teil des Abends, auf den ich mich am meisten\ngefreut habe: Konkrete Fragestellungen der Teilnehmer erörtern.",[18,27479,27480],{},"Da die Teilnehmerrunde sowohl vom eigenen Angebot als auch von der Phase, in der sich das jeweilige Start-up befindet,\nrecht unterschiedlich waren, fand ich diesen Part des Abends besonders spannend. Ich hoffe, dass meine Ausführungen und\ndie gemeinsame Diskussion, den Teilnehmern bei ihrer vertrieblichen Arbeit viel helfen werden. In diesem Sinne freue ich\nmich schon auf den zweiten Kaminabend.",{"title":48,"searchDepth":86,"depth":86,"links":27482},[],[614],"2013-10-18T12:13:05","Technisches Wissen und Erfahrungen geben wir bereits über unser Firmenblog und auch bei Veranstaltungen gerne und\\nkostenfrei weiter. Also warum nicht auch mal Sales Know-how weitergeben? Eine gute Gelegenheit dafür war\\nein Kaminabend\\nbeim Center für Innovation & Entrepreneurship, kurz CIE, am KIT. Das CIE hat sich zum\\nZiel gesetzt Unternehmensgründungen – unkonventionell und unbürokratisch – zu fördern. Angegliedert an das Institut für\\nEntrepreneurship, Technologie-Management und Innovation des KIT, werden studentische Gründer kostenfrei mit diversen\\nAngeboten unterstützt.","https://synyx.de/blog/warum-nicht-auch-mal-sales-know-how-weitergeben/",{},"/blog/warum-nicht-auch-mal-sales-know-how-weitergeben",{"title":27440,"description":27490},"Technisches Wissen und Erfahrungen geben wir bereits über unser Firmenblog und auch bei Veranstaltungen gerne und\nkostenfrei weiter. Also warum nicht auch mal Sales Know-how weitergeben? Eine gute Gelegenheit dafür war\nein Kaminabend\nbeim Center für Innovation & Entrepreneurship, kurz CIE, am KIT. Das CIE hat sich zum\nZiel gesetzt Unternehmensgründungen – unkonventionell und unbürokratisch – zu fördern. Angegliedert an das Institut für\nEntrepreneurship, Technologie-Management und Innovation des KIT, werden studentische Gründer kostenfrei mit diversen\nAngeboten unterstützt.","blog/warum-nicht-auch-mal-sales-know-how-weitergeben",[],"Technisches Wissen und Erfahrungen geben wir bereits über unser Firmenblog und auch bei Veranstaltungen gerne und kostenfrei weiter. Also warum nicht auch mal Sales Know-how weitergeben? Eine gute Gelegenheit dafür…","caLMtuoGnniP5bgR0IjftK5RDYbOaAHKimQUBP94aRg",{"id":27496,"title":27497,"author":27498,"body":27500,"category":27638,"date":27639,"description":27509,"extension":617,"link":27640,"meta":27641,"navigation":499,"path":27642,"seo":27643,"slug":27644,"stem":27645,"tags":27646,"teaser":27648,"__hash__":27649},"blog/blog/neo4j-jug-karslruhe.md","Neo4J JUG Karlsruhe",[27499],"matt",{"type":11,"value":27501,"toc":27636},[27502,27505,27510,27513,27516,27521,27536,27542,27545,27548,27551,27554,27557,27562,27565,27571,27596,27599,27602,27605,27610,27613,27616,27625,27629],[14,27503,27497],{"id":27504},"neo4j-jug-karlsruhe",[18,27506,27507],{},[27,27508,27509],{},"Of graphs and relationships – An evening at the JUG Karlsruhe",[18,27511,27512],{},"The Java User Group in Karlsruhe (JUG Karlsruhe) arranges free-for-all presentations about topics around, but not\nlimited to, Java. For the first time in the new location, now at the Karlsruhe ‘Hochschule für Technik&Wirtschaft’ .\nThe talk last Wednesday (September 4th 2013) was dedicated to the beautiful world of graphs. The presentation was given\nby Peter Neubauer, a graph enthusiast. Christian Mennerich and I don’t miss the chance to see this event.",[18,27514,27515],{},"Peter, one of the founder of Neo Technology and the graph database Neo4j, was presenting ‘Neo4j und die wunderbare Welt\nder Graphen’. In a talk that stretched to two and a half hours, without getting boring, Peter presented some graph\ndatabase basics, the Neo4j graph database and lots of applications and code examples. At first, Peter talked a bit about\nthe relational database world and the NoSQL movement, but he skipped most of this part. He introduced the property graph\nmodel and how it is reflected in Neo4j. Graphs can be the data structure of choice for data mining in highly related\ndata sets. But there are lots of other interesting applications for the Neo4j graph database, ranging from social\nnetwork applications and recommendation systems to routing problems.",[18,27517,27518],{},[27,27519,27520],{},"Neo4j and graph-databases",[18,27522,27523,27524,27527,27528,27531,27532,27535],{},"Neo4j is a graph database, what means that the basic data structure is a graph, in opposition to classic relational\ndatabases that deal with relations only. Neo4j is based on so called ",[573,27525,27526],{},"property graphs",". A property graph consists of\n",[573,27529,27530],{},"nodes"," that are linked to other nodes by ",[573,27533,27534],{},"relationships",". Here, as in real live relationships, the direction\nmatters.",[18,27537,27538,27541],{},[573,27539,27540],{},"Properties"," can be assigned to both, the nodes and the relationships, and more than one relationship between nodes is\npossible. So, a property graph is what you actually call a directed labeled multi graph. Properties are ‘flat data’, no\nlinks to real objects is directly supported (but nobody stops you from putting a serialized object as a property…).",[18,27543,27544],{},"Neo4j is implemented in Java. Nodes are stored as doubly linked lists, making graph traversals possible in the direction\nof ingoing and outgoing relationships. This implementation makes operations concerning neighbored nodes (i.e. nodes\nlinked by a relationship) possible in constant time. Thus, graphs provide what you call ‘index-free adjacency’. At the\nmoment, more than 17 Billion nodes and relationships can be managed by a single instance of Neo4j (enough to represent a\ncontinents data points in Open Street Map). To traverse a path in a graph, you need an entry node in the graph.",[18,27546,27547],{},"Neo4j comes along with full ACID support. The ACID properties, atomicity, consistency, isolation and durability, are\nwell known from relational databases. In short, ACID means that a transaction manipulating data in the databse is\nexecuted as if it had exclusive access, and either all its operations take effect, or none. In the sense of the CAP\ntheorem, Neo4j is on the CA side of the CAP triangle, in opposition to many other NoSQL databases that ‘sacrifice’ A or\nC for P. (CAP stands for consistency, availability, partition tolerance.)",[18,27549,27550],{},"Thus, horizontal scale-out is not an easy problem in Neo4j. To gain high availability, Neo4j offers a master/slave\nreplication strategy, where read performance is ensured by replication of the data. Write operations here become a\nbottleneck, as a dedicated master node is responsible for the write processes. If the master fails (e.g. due to network\nproblems), a new master is automatically elected by a quorum. Sharding in graphs seems to be complicated, as it involves\nthe problem of partitioning a graph.",[18,27552,27553],{},"In addition to the Neo4j database a REST-server and a web front-end are available to maintain the data in the\ndatabase. In the web-frontend, the graph itself can be visualized in a node-and-arrow manner, starting from a\nselected node. Neighboring nodes and relationships can be folded and unfolded to explore the data. Algorithms to arrange\nthe graph clearly on the screen are used. Depending on the size of the graph and the degree of the nodes (i.e. the\nnumber of ingoing and outgoing relationships) the visual exploration can soon lose its fun.",[18,27555,27556],{},"Neo4j comes in of three editions: The Community Edition is for first steps with the graph database, the Advanced and\nEnterprise Edition are for more sophisticated and production set-ups. The community edition is free and might be used\nin a similar way as MySQL might be used. For the usage of the Advanced and Enterprise Edition, licensing is needed. For\nOpen-Source projects, there is the AGPL, to include Neo4j in closed-source business application, the Neo Technology\nCommercial License (NTCL) is available. Actual terms of the license that fits your purposes and business models can be\ndiscussed with Neotechnology directly. But the good thing is: Neo4j is free in all three versions for testing and\nevaluating purposes!",[18,27558,27559],{},[27,27560,27561],{},"Working with graphs",[18,27563,27564],{},"Neo4j offers different possibilities to interact and query the graph. Among others, there are: A REST-interface,\ninterfaces to the query languages Cypher, and the usage of Spring Data Neo4j. The REST interface accepts JSON and can be\nqueried using.e.g. ‘curl’.",[18,27566,27567,27568,27570],{},"Cypher is an easy-to-learn query language, inspired by ASCII-arts: You kind of ‘draw’ your query, using symbols for\nnodes, and the directed relationships ( (…) and -",[53,27569,22533],{},"-> ). With that you can ask for the friends of Tobis friends:",[6653,27572,27573,27579,27593],{},[18,27574,27575,27576],{},"START tobi=node:PEOPLE",[50,27577,27578],{},"(name='Tobi'``)",[18,27580,27581,27582,27587,27588,27592],{},"MATCH (tobi)-",[53,27583,27584],{},[27585,27586],"friend",{},"->(friend)-",[53,27589,27590],{},[27585,27591],{},"->(friend2)",[18,27594,27595],{},"RETURN friend2",[18,27597,27598],{},"Hopefully, Tobi will be in the result set. 😉",[18,27600,27601],{},"A different way to work with graphs is using the Spring Data Neo4j API. The object-graph mapping works similar to the\nobjects-relational mapping in Spring Data for relational databases. Using annotations for nodes and relationships,\nobjects are linked to nodes and relations in the database. It is possible to include Cypher queries in annotations, what\nmakes the API flexible to use.",[18,27603,27604],{},"Compared to relational database systems, queries become incredibly fast due the locality and topology of the nodes. As\nthe friends-of-friend query shown above will be answered in a time, almost independent of the number of persons stored\nin the database, as only neighboring nodes are searched what keeps the data local. (Actually, the time for the query\nscales with the number of friends a person has.) In a relational database system, the query time strongly depends on the\nnumber of persons in the system, so that exceeding a certain number of persons, in a relational database system the\nquery becomes unfeasible in an acceptable time.",[18,27606,27607],{},[27,27608,27609],{},"Thinking in graphs",[18,27611,27612],{},"Thinking in graphs needs getting used to. Queries have to be formulated as graph traversals or graph-related problems.\nBut once the thought is accepted and the classical thinking in relations is abandoned, the advantages become clear. Many\nscenarios can be described in the graph world. Social networks and product recommendation systems are an obvious\nexample. But also the problem of dynamically assigning roles and rights in a content management system (CMS), a hard\nproblem, can be formulated and solved as a shortest path problem in a graph. Graphs are often easy to understand, as\nthey are ‘white board friendly’: Once painted to a white board, the data model is there and ready to be implemented. No\nmatter if you draw in an abstract manner, or as a concrete example.",[18,27614,27615],{},"The concept of a graph is powerful, and as general as the concept of relations in relational databases. They are fast to\ntraverse when the data is highly connected. And giving the easy data structure of a graph, queries are often easy to\nformulate. On the other side, sharding can be a real problem in big data scenarios (but it also is in relational\ndatabases), and the shift towards ‘thinking in graphs’ might take some time to adjust to. Give it a try, it is fun! (But\ndon’t make it another all-dominant paradigm!)",[18,27617,27618,27619,27624],{},"Peter showed lots of interesting application of models of real world scenarios with graphs, covering CMS applications,\nstrutr (structr.org), routing (",[585,27620,27623],{"href":27621,"rel":27622},"http://www.transportdublin.ie",[589],"www.transportdublin.ie","), gene sequencing and more. On his laptop, he also could show\ncoding examples of programming against the Spring Data Neo4j API, proving the elegance of this approach. In a\nlive-experiment, Peter showed exemplary queries against a database he had populated with data from from MusicBrainz and\nLast.fm, about 15 GBs in size! With queries like ‘What music does A like that B likes’ Peter showed how easy it is to\ncreate a music recommendations in this huge amount of data by exploiting the locality of the data. The Cypher expression\nhe used all just span a few lines.",[18,27626,27627],{},[27,27628,4147],{},[18,27630,27631,27632,27635],{},"Graphs are great, we all knew that before. But there are more applications to graphs than one might have thought of.\nNeo4j comes with solutions for many often occurring problems, such as finding the shortest path between two nodes. After\ndiscussing the importance of self relationships of nodes in a graph database, Peter proudly presented his T-shirt, so\nwe now know: (peter)-",[53,27633,27634],{},"FRIEND","->(peter). And, after paying the beer, he surely has a lot more friends now. 😉 But\nseriously: Thank you Peter for the presentation, the discussion and the interesting insides into the applications of\ngraphs and graph databases! It was a long, informative and fun evening.",{"title":48,"searchDepth":86,"depth":86,"links":27637},[],[614],"2013-09-16T15:39:00","https://synyx.de/blog/neo4j-jug-karslruhe/",{},"/blog/neo4j-jug-karslruhe",{"title":27497,"description":27509},"neo4j-jug-karslruhe","blog/neo4j-jug-karslruhe",[27647],"neo4j-jug-nosql","Of graphs and relationships – An evening at the JUG Karlsruhe The Java User Group in Karlsruhe (JUG Karlsruhe) arranges free-for-all presentations about topics around, but not limited to, Java.…","CiEE3gd3KyDSZy0RMTaVgIRlPxIW26bpJFGwQhZNv-o",{"id":27651,"title":27652,"author":27653,"body":27654,"category":28050,"date":28051,"description":28052,"extension":617,"link":28053,"meta":28054,"navigation":499,"path":28055,"seo":28056,"slug":27658,"stem":28057,"tags":28058,"teaser":28059,"__hash__":28060},"blog/blog/yammer-metrics-made-easy-part-ii.md","yammer – Metrics made easy – Part II",[25771],{"type":11,"value":27655,"toc":28048},[27656,27659,27662,27665,27668,27671,27691,27694,27697,27745,27748,27849,27852,27949,27952,27955,27958,27961,27964,27996,27999,28037,28040,28043,28046],[14,27657,27652],{"id":27658},"yammer-metrics-made-easy-part-ii",[18,27660,27661],{},"Last time i explained a little example using yammer metrics to inspect runtime metrics of a standalone client\napplication. This time we want to go a step further and instrument a web application and expose some metrics around\nrequest/response cycles.",[18,27663,27664],{},"Important Note:",[18,27666,27667],{},"For this example we need a jmx-enabled container like a Tomcat or a Glassfish. If you want to use Jetty or similar\ncontainers please provide a JMX-Registry within them. For example you can use JMinix which is quite easy (add\ndependency and add the JMinix servlet to your web.xml)",[18,27669,27670],{},"So, lets get started with yammer metrics for web apps. What provides metrics out of the box for your project:",[577,27672,27673,27676,27679,27682,27685,27688],{},[580,27674,27675],{},"DefaultWebappMetricsFilter for request / response cycle metrics",[580,27677,27678],{},"Little Administration Servlet with links for further inspections",[580,27680,27681],{},"Ping Servlet for isAlive checks",[580,27683,27684],{},"ThreadDump Servlet to inspect containers threads",[580,27686,27687],{},"Metrics Servlet which exposes all your registered metrics as JSON",[580,27689,27690],{},"HealthCheck Servlet which exposes all your registered HealthChecks as JSON",[18,27692,27693],{},"For todays blog we dig a bit deeper into enabling all these Servlets as well as exposing them to a JmxRegistry. In a\nlater article we will dig deeper into health checks and standard metrics.",[18,27695,27696],{},"Now, where to start? Add metrics-core, metrics-servlet and metrics-servlets (bad naming, isn’t it?) to your pom.\nAfter that we are able to add the DefaultWebappMetricsFilter to our web.xml",[43,27698,27700],{"className":11245,"code":27699,"language":11247,"meta":48,"style":48},"\n \u003Cfilter>\n \u003Cfilter-name>webappMetricsFilter\u003C/filter-name>\n \u003Cfilter-class>com.yammer.metrics.servlet.DefaultWebappMetricsFilter\u003C/filter-class>\n \u003C/filter>\n \u003Cfilter-mapping>\n \u003Cfilter-name>webappMetricsFilter\u003C/filter-name>\n \u003Curl-pattern>/*\u003C/url-pattern>\n \u003C/filter-mapping>\n\n",[50,27701,27702,27706,27711,27716,27721,27726,27731,27735,27740],{"__ignoreMap":48},[53,27703,27704],{"class":55,"line":56},[53,27705,500],{"emptyLinePlaceholder":499},[53,27707,27708],{"class":55,"line":86},[53,27709,27710],{}," \u003Cfilter>\n",[53,27712,27713],{"class":55,"line":126},[53,27714,27715],{}," \u003Cfilter-name>webappMetricsFilter\u003C/filter-name>\n",[53,27717,27718],{"class":55,"line":163},[53,27719,27720],{}," \u003Cfilter-class>com.yammer.metrics.servlet.DefaultWebappMetricsFilter\u003C/filter-class>\n",[53,27722,27723],{"class":55,"line":186},[53,27724,27725],{}," \u003C/filter>\n",[53,27727,27728],{"class":55,"line":221},[53,27729,27730],{}," \u003Cfilter-mapping>\n",[53,27732,27733],{"class":55,"line":242},[53,27734,27715],{},[53,27736,27737],{"class":55,"line":273},[53,27738,27739],{}," \u003Curl-pattern>/*\u003C/url-pattern>\n",[53,27741,27742],{"class":55,"line":279},[53,27743,27744],{}," \u003C/filter-mapping>\n",[18,27746,27747],{},"Then we need to add all within the distribution shipped helper-servlets",[43,27749,27751],{"className":11245,"code":27750,"language":11247,"meta":48,"style":48},"\n \u003Cservlet>\n \u003Cservlet-name>MetricsAdmin\u003C/servlet-name>\n \u003Cservlet-class>com.yammer.metrics.servlets.AdminServlet\u003C/servlet-class>\n \u003C/servlet>\n \u003Cservlet>\n \u003Cservlet-name>MetricsPing\u003C/servlet-name>\n \u003Cservlet-class>com.yammer.metrics.servlets.PingServlet\u003C/servlet-class>\n \u003C/servlet>\n \u003Cservlet>\n \u003Cservlet-name>MetricsThread\u003C/servlet-name>\n \u003Cservlet-class>com.yammer.metrics.servlets.ThreadDumpServlet\u003C/servlet-class>\n \u003C/servlet>\n \u003Cservlet>\n \u003Cservlet-name>Metrics\u003C/servlet-name>\n \u003Cservlet-class>com.yammer.metrics.servlets.MetricsServlet\u003C/servlet-class>\n \u003C/servlet>\n \u003Cservlet>\n \u003Cservlet-name>MetricsHealthCheck\u003C/servlet-name>\n \u003Cservlet-class>com.yammer.metrics.servlets.HealthCheckServlet\u003C/servlet-class>\n \u003C/servlet>\n\n",[50,27752,27753,27757,27762,27767,27772,27777,27781,27786,27791,27795,27799,27804,27809,27813,27817,27822,27827,27831,27835,27840,27845],{"__ignoreMap":48},[53,27754,27755],{"class":55,"line":56},[53,27756,500],{"emptyLinePlaceholder":499},[53,27758,27759],{"class":55,"line":86},[53,27760,27761],{}," \u003Cservlet>\n",[53,27763,27764],{"class":55,"line":126},[53,27765,27766],{}," \u003Cservlet-name>MetricsAdmin\u003C/servlet-name>\n",[53,27768,27769],{"class":55,"line":163},[53,27770,27771],{}," \u003Cservlet-class>com.yammer.metrics.servlets.AdminServlet\u003C/servlet-class>\n",[53,27773,27774],{"class":55,"line":186},[53,27775,27776],{}," \u003C/servlet>\n",[53,27778,27779],{"class":55,"line":221},[53,27780,27761],{},[53,27782,27783],{"class":55,"line":242},[53,27784,27785],{}," \u003Cservlet-name>MetricsPing\u003C/servlet-name>\n",[53,27787,27788],{"class":55,"line":273},[53,27789,27790],{}," \u003Cservlet-class>com.yammer.metrics.servlets.PingServlet\u003C/servlet-class>\n",[53,27792,27793],{"class":55,"line":279},[53,27794,27776],{},[53,27796,27797],{"class":55,"line":496},[53,27798,27761],{},[53,27800,27801],{"class":55,"line":503},[53,27802,27803],{}," \u003Cservlet-name>MetricsThread\u003C/servlet-name>\n",[53,27805,27806],{"class":55,"line":509},[53,27807,27808],{}," \u003Cservlet-class>com.yammer.metrics.servlets.ThreadDumpServlet\u003C/servlet-class>\n",[53,27810,27811],{"class":55,"line":515},[53,27812,27776],{},[53,27814,27815],{"class":55,"line":521},[53,27816,27761],{},[53,27818,27819],{"class":55,"line":527},[53,27820,27821],{}," \u003Cservlet-name>Metrics\u003C/servlet-name>\n",[53,27823,27824],{"class":55,"line":533},[53,27825,27826],{}," \u003Cservlet-class>com.yammer.metrics.servlets.MetricsServlet\u003C/servlet-class>\n",[53,27828,27829],{"class":55,"line":539},[53,27830,27776],{},[53,27832,27833],{"class":55,"line":545},[53,27834,27761],{},[53,27836,27837],{"class":55,"line":4941},[53,27838,27839],{}," \u003Cservlet-name>MetricsHealthCheck\u003C/servlet-name>\n",[53,27841,27842],{"class":55,"line":4949},[53,27843,27844],{}," \u003Cservlet-class>com.yammer.metrics.servlets.HealthCheckServlet\u003C/servlet-class>\n",[53,27846,27847],{"class":55,"line":4957},[53,27848,27776],{},[18,27850,27851],{},"and then expose them to an url:",[43,27853,27855],{"className":11245,"code":27854,"language":11247,"meta":48,"style":48},"\n \u003Cservlet-mapping>\n \u003Cservlet-name>MetricsAdmin\u003C/servlet-name>\n \u003Curl-pattern>/admin\u003C/url-pattern>\n \u003C/servlet-mapping>\n \u003Cservlet-mapping>\n \u003Cservlet-name>MetricsPing\u003C/servlet-name>\n \u003Curl-pattern>/admin/ping\u003C/url-pattern>\n \u003C/servlet-mapping>\n \u003Cservlet-mapping>\n \u003Cservlet-name>MetricsThread\u003C/servlet-name>\n \u003Curl-pattern>/admin/threads\u003C/url-pattern>\n \u003C/servlet-mapping>\n \u003Cservlet-mapping>\n \u003Cservlet-name>Metrics\u003C/servlet-name>\n \u003Curl-pattern>/admin/metrics\u003C/url-pattern>\n \u003C/servlet-mapping>\n \u003Cservlet-mapping>\n \u003Cservlet-name>MetricsHealthCheck\u003C/servlet-name>\n \u003Curl-pattern>/admin/healthcheck\u003C/url-pattern>\n \u003C/servlet-mapping>\n\n",[50,27856,27857,27861,27866,27870,27875,27880,27885,27889,27894,27898,27902,27906,27911,27915,27919,27923,27928,27932,27936,27940,27945],{"__ignoreMap":48},[53,27858,27859],{"class":55,"line":56},[53,27860,500],{"emptyLinePlaceholder":499},[53,27862,27863],{"class":55,"line":86},[53,27864,27865],{}," \u003Cservlet-mapping>\n",[53,27867,27868],{"class":55,"line":126},[53,27869,27766],{},[53,27871,27872],{"class":55,"line":163},[53,27873,27874],{}," \u003Curl-pattern>/admin\u003C/url-pattern>\n",[53,27876,27877],{"class":55,"line":186},[53,27878,27879],{}," \u003C/servlet-mapping>\n",[53,27881,27882],{"class":55,"line":221},[53,27883,27884],{}," \u003Cservlet-mapping>\n",[53,27886,27887],{"class":55,"line":242},[53,27888,27785],{},[53,27890,27891],{"class":55,"line":273},[53,27892,27893],{}," \u003Curl-pattern>/admin/ping\u003C/url-pattern>\n",[53,27895,27896],{"class":55,"line":279},[53,27897,27879],{},[53,27899,27900],{"class":55,"line":496},[53,27901,27884],{},[53,27903,27904],{"class":55,"line":503},[53,27905,27803],{},[53,27907,27908],{"class":55,"line":509},[53,27909,27910],{}," \u003Curl-pattern>/admin/threads\u003C/url-pattern>\n",[53,27912,27913],{"class":55,"line":515},[53,27914,27879],{},[53,27916,27917],{"class":55,"line":521},[53,27918,27884],{},[53,27920,27921],{"class":55,"line":527},[53,27922,27821],{},[53,27924,27925],{"class":55,"line":533},[53,27926,27927],{}," \u003Curl-pattern>/admin/metrics\u003C/url-pattern>\n",[53,27929,27930],{"class":55,"line":539},[53,27931,27879],{},[53,27933,27934],{"class":55,"line":545},[53,27935,27884],{},[53,27937,27938],{"class":55,"line":4941},[53,27939,27839],{},[53,27941,27942],{"class":55,"line":4949},[53,27943,27944],{}," \u003Curl-pattern>/admin/healthcheck\u003C/url-pattern>\n",[53,27946,27947],{"class":55,"line":4957},[53,27948,27879],{},[18,27950,27951],{},"Finished?",[18,27953,27954],{},"Not yet .. nothing will work for now. yammer Metrics need some “bootstrapping” which cannot be done too easy with DI\nFrameworks like Spring. It’s a little hazzle /o",[18,27956,27957],{},"For our little example it is enough to enable the required bootstrapping with a ServletContextListener and it’s provided\nmethods contextInitialized and contextDestroyed.",[18,27959,27960],{},"Why do we need a programmatic bootstrapping? Because metrics searches for it’s MetricRegistries in servletcontext. It is\npossible doing this by hand but this won’t work with the current 3.0.0-beta1 version so i decided using this way.\nFurthermore it seems the easiest way enabling all the needed stuff and registries.",[18,27962,27963],{},"An apropriate contextInitialized method could look like this:",[43,27965,27967],{"className":288,"code":27966,"language":290,"meta":48,"style":48},"\n @Override\n public void contextInitialized(ServletContextEvent sce) {\n createAndBuildRegistries(sce);\n registerHealthChecks();\n }\n",[50,27968,27969,27973,27977,27982,27987,27992],{"__ignoreMap":48},[53,27970,27971],{"class":55,"line":56},[53,27972,500],{"emptyLinePlaceholder":499},[53,27974,27975],{"class":55,"line":86},[53,27976,15609],{},[53,27978,27979],{"class":55,"line":126},[53,27980,27981],{}," public void contextInitialized(ServletContextEvent sce) {\n",[53,27983,27984],{"class":55,"line":163},[53,27985,27986],{}," createAndBuildRegistries(sce);\n",[53,27988,27989],{"class":55,"line":186},[53,27990,27991],{}," registerHealthChecks();\n",[53,27993,27994],{"class":55,"line":221},[53,27995,860],{},[18,27997,27998],{},"The corresponding createAndBuildRegistries Method could look like this:",[43,28000,28002],{"className":288,"code":28001,"language":290,"meta":48,"style":48},"\n private void createAndBuildRegistries(ServletContextEvent sce) {\n metricsForWebapp = new MetricRegistry(\"DemonstrationWebapp\");\n jmxForWebapp = JmxReporter.forRegistry(metricsForWebapp).build();\n sce.getServletContext().setAttribute(DefaultWebappMetricsFilter.class.getName() + \".registry\", metricsForWebapp);\n jmxForWebapp.start();\n }\n",[50,28003,28004,28008,28013,28018,28023,28028,28033],{"__ignoreMap":48},[53,28005,28006],{"class":55,"line":56},[53,28007,500],{"emptyLinePlaceholder":499},[53,28009,28010],{"class":55,"line":86},[53,28011,28012],{}," private void createAndBuildRegistries(ServletContextEvent sce) {\n",[53,28014,28015],{"class":55,"line":126},[53,28016,28017],{}," metricsForWebapp = new MetricRegistry(\"DemonstrationWebapp\");\n",[53,28019,28020],{"class":55,"line":163},[53,28021,28022],{}," jmxForWebapp = JmxReporter.forRegistry(metricsForWebapp).build();\n",[53,28024,28025],{"class":55,"line":186},[53,28026,28027],{}," sce.getServletContext().setAttribute(DefaultWebappMetricsFilter.class.getName() + \".registry\", metricsForWebapp);\n",[53,28029,28030],{"class":55,"line":221},[53,28031,28032],{}," jmxForWebapp.start();\n",[53,28034,28035],{"class":55,"line":242},[53,28036,860],{},[18,28038,28039],{},"and the method registerHealthChecks is used to register all developed HealthChecks to the appropriate Registry we want\nto expose them. Currently we implemented no HealthChecks so the HealthCheckRegistry should just expose nothing to JMX\nand send back a 400 via REST.",[18,28041,28042],{},"So that’s it for today. We showed you how easy it is to enhance a web-application with runtime metrics for it’s\nrequest/response cycles. In the upcoming port we will show you hw to implement some HealthChecks as well as some\nmeasurements around business-interactions.",[18,28044,28045],{},"So stay tuned …",[607,28047,989],{},{"title":48,"searchDepth":86,"depth":86,"links":28049},[],[614],"2013-09-09T14:09:47","Last time i explained a little example using yammer metrics to inspect runtime metrics of a standalone client\\napplication. This time we want to go a step further and instrument a web application and expose some metrics around\\nrequest/response cycles.","https://synyx.de/blog/yammer-metrics-made-easy-part-ii/",{},"/blog/yammer-metrics-made-easy-part-ii",{"title":27652,"description":27661},"blog/yammer-metrics-made-easy-part-ii",[],"Last time i explained a little example using yammer metrics to inspect runtime metrics of a standalone client application. This time we want to go a step further and instrument…","RHTvUAhcMwY9U3Lv81Zdqd7g_JXHfzHBMWih3XVVH4E",{"id":28062,"title":28063,"author":28064,"body":28065,"category":28107,"date":28108,"description":28109,"extension":617,"link":28110,"meta":28111,"navigation":499,"path":28112,"seo":28113,"slug":28069,"stem":28114,"tags":28115,"teaser":28116,"__hash__":28117},"blog/blog/super-double-senior-expert-software-architect.md","Super Double Senior Expert Software Architect",[21374],{"type":11,"value":28066,"toc":28105},[28067,28070,28073,28076,28079,28082,28085,28088,28095],[14,28068,28063],{"id":28069},"super-double-senior-expert-software-architect",[18,28071,28072],{},"Aloha, liebe Freunde des Visitenkarten-Bullshit-Bingos. Ich brauche eure Hülfe! Mich treibt folgende Frage um: „Welche\nTitel soll synyx in Zukunft auf den Visitenkarten und in E-Mail-Signaturen verwenden?“",[18,28074,28075],{},"Wir werden in absehbarer Zeit in ein anderes Büro umziehen. Sprich, eine neue Anschrift haben. Das wiederum bedeutet,\ndass wir unsere alten Visitenkarten entsorgen können und neue benötigen. Also, ein guter Zeitpunkt sich Gedanken über\ndie jeweiligen Titel auf den Visitenkarten zu machen.",[18,28077,28078],{},"Meiner Kenntnis nach hat ein Titel auf der Visitenkarte den Zweck, dem Empfänger Auskunft über die Funktion im\nUnternehmen zu geben bzw. ihm bei der Vorstellung zu helfen, welche Aufgabe und Verantwortung man im Unternehmen hat.\nVor der Funktion findet man sehr häufig die Angabe Junior, Senior, Director oder ähnliches im Titel. Dieser Zusatz zur\nFunktion, soll eine gewisse Kompetenz und Erfahrung suggerieren. Also, ein Senior ist besser/höher/schneller als ein\nJunior und eine Director ist besser/höher/schneller als ein Senior und so weiter.",[18,28080,28081],{},"Und nun mein Problem: An welchen Kriterien mache ich denn fest ob einer das Senior oder Director Level erreicht hat, UND\ndem Titel gerecht wird? Weil, also, ich will ja dem Kunden nicht was unter/über Wert verkaufen. Und, nehmen wir mal an,\nwir hätten die Methode für synyx gefunden, wie wir unsere Kollegen korrekt in Level aufteilen; sind unsere Kriterien die\ngleichen wie die des Kunden oder des Marktbegleiters? Man will ja nicht Äpfel mit Birnen vergleichen.",[18,28083,28084],{},"Da diese Bewertungskriterien ganz individuell und nicht allgemeingültig sind, macht es für uns wahrscheinlich keinen\nSinn Titel mit Angaben zu vermeintlicher Erfahrung oder Kompetenz zu führen. Vielleicht ist sogar die Funktion fraglich?\nZumindest bei unseren Softwareentwicklern, Architekten und Beratern. Denn oftmals haben die Kollegen mehrere Rollen im\nProjekt.",[18,28086,28087],{},"Mich beschleicht auch das Gefühl, dass das Level Senior und die Funktion Architekt mittlerweile inflationär auf\nVisitenkarten zu finden sind. Oder, ist das nur mein Eindruck? Über die Gründe kann man natürlich spekulieren. Ich tippe\nja auf vermeintliche, kaufmännische Vorteile.",[18,28089,28090,28091],{},"Mal sehen, wie sich dieses Thema bei uns entwickelt. Vielleicht gehen wir ja auch, wie so oft, synyx-Style-mäßig vor.\nDas kann Lustig werden! Während dessen freue ich mich über jeden Kommentar, eigene Erfahrungen dazu oder Vorschläge, wie\nwir das handhaben könnten – gerne an ",[585,28092,28094],{"href":28093},"mailto:rueckert@synyx.de","rueckert@synyx.de",[18,28096,28097,28098,28104],{},"PS: ",[585,28099,28103],{"href":28100,"rel":28101,"title":28102},"http://www.spiegel.de/karriere/berufsleben/jobtitel-generator-neue-berufsbezeichungen-fuer-angeber-und-aufschneider-a-771682.html",[589],"Jobtitel-Generator","Den","\nkenne ich bereits 😉",{"title":48,"searchDepth":86,"depth":86,"links":28106},[],[614],"2013-04-24T10:03:40","Aloha, liebe Freunde des Visitenkarten-Bullshit-Bingos. Ich brauche eure Hülfe! Mich treibt folgende Frage um: „Welche\\nTitel soll synyx in Zukunft auf den Visitenkarten und in E-Mail-Signaturen verwenden?“","https://synyx.de/blog/super-double-senior-expert-software-architect/",{},"/blog/super-double-senior-expert-software-architect",{"title":28063,"description":28072},"blog/super-double-senior-expert-software-architect",[],"Aloha, liebe Freunde des Visitenkarten-Bullshit-Bingos. Ich brauche eure Hülfe! Mich treibt folgende Frage um: „Welche Titel soll synyx in Zukunft auf den Visitenkarten und in E-Mail-Signaturen verwenden?“ Wir werden in…","c72x5-UMIzmyjN_CKj1lBH_TPUnNjxsTAYSMAwnurIQ",{"id":28119,"title":28120,"author":28121,"body":28122,"category":28164,"date":28165,"description":28166,"extension":617,"link":28167,"meta":28168,"navigation":499,"path":28169,"seo":28170,"slug":28171,"stem":28172,"tags":28173,"teaser":28174,"__hash__":28175},"blog/blog/kann-googles-8020-formel-fur-ein-reines-dienstleistungsunternehmen-wirtschaftlich-sein.md","Kann Google's „80/20 Formel“ für ein reines Dienstleistungsunternehmen wirtschaftlich sein?",[21374],{"type":11,"value":28123,"toc":28162},[28124,28127,28130,28133,28136,28139,28142,28145,28148,28151,28154,28157],[14,28125,28120],{"id":28126},"kann-googles-8020-formel-für-ein-reines-dienstleistungsunternehmen-wirtschaftlich-sein",[18,28128,28129],{},"Mit diesem Blog-Beitrag möchte ich etwas Einblick in die Unternehmensstrategie, die „Denke“ und Werte von synyx geben –\nund, natürlich aufzeigen, was das Ganze mit Google’s „80/20 Formel” zu tun hat. Seit Mitte Oktober bin ich hier für\nSales verantwortlich. Vor mir gab es in der Firma noch keinen Vertriebsmitarbeiter. Von daher war und ist es immer noch\neine Herausforderung, die eigenen aber natürlich unterschiedlichen Erfahrungen, wie Unternehmen funktionieren und sich\nentwickeln können, auf einen gemeinsamen Nenner zu bringen. Eine spannende Aufgabe, vor allem auch, weil es bei synyx\nkeine Entscheidungen von „Oben“ herab gibt, sondern wirklich alles im Team/in der Firma diskutiert und beschlossen wird.\nDas macht das Ganze natürlich sehr spannend, weil man die Kollegen für seine Ideen begeistern muss.",[18,28131,28132],{},"Zu Beginn meiner Tätigkeit haben wir intensiv über die Unternehmensziele und deren genauere Definition gesprochen. Ganz\noben steht dabei die Qualität in der Softwareentwicklung. Qualität ist der Punkt, der nicht verhandelbar ist und in dem\nwir führend sein wollen. Für mich als Verkäufer klingt das natürlich hervorragend. Wenn man nachhaltige\nKundenbeziehungen und keine One-Shot-Deals machen möchte, ist Qualität DAS Mittel dafür. Stellt sich nur noch die\nFrage, wie wir diesen hohen Anspruch an Qualität erreichen und belegen können.",[18,28134,28135],{},"Eine Vorgehensweise, welche sich synyx zur Maximierung der Qualität vorgenommen hat, ist Google’s „80/20 Formel”. Die\nIdee ist, 80 % seiner Zeit produktiv (fakturierbar) zu arbeiten und 20 % der Zeit für Innovationen aufzuwenden. In\nunserem Fall haben wir gesagt, wir wollen die 20 % unserer Zeit für die persönliche Entwicklung der Mitarbeiter (\nWeiterbildung) bzw. die Unternehmensentwicklung (R&D, Marketing) nutzen. Aktuell haben wir dieses Ziel noch nicht voll\nerreicht, aber wir arbeiten konsequent an der Umsetzung. Ein Zeitanteil von 20 % entspricht bei unserer 40 Stundenwoche,\neinem kompletten Tag pro Woche. Zusätzlich zu den 20 % Zeit hat jeder Mitarbeiter ein Weiterbildungsbudget von 2.000\nEUR pro Jahr. Das ist insgesamt ein beeindruckendes Investment, welches die Firma tätigt, um seine Qualitätsansprüchen\ngerecht zu werden.",[18,28137,28138],{},"Was bedeutet nun der faktische Verzicht auf 20 % vom Umsatz? Können wir uns das überhaupt leisten? Da wir ein reines\nDienstleistungsunternehmen sind und kein Produktgeschäft „neben her“ am Laufen haben, verdienen wir ausschließlich über\nunsere Zeit, die wir für den Kunden arbeiten.",[18,28140,28141],{},"Also noch mal die Frage: Können wir uns Google’s „80/20 Formel“ leisten? Antwort: Ja! Und ist es für uns wirtschaftlich?\nAntwort: Ja!",[18,28143,28144],{},"Im Geiste lese ich schon Blog-Kommentare wie: „Klar, könnt Ihr Euch das leisten, wenn Ihr horrende Tagessätze\nverlangt!“. Oder: „Ihr bezahlt nur Hungerlöhne! Dann geht das.“. Beide imaginären Kommentare sind nachvollziehbar und\ngehen, wenn auch nur geringfügig, in die richtige Richtung.",[18,28146,28147],{},"Zu unseren Tagessätzen: Diese sind aus meiner Sicht absolut marktkonform und wettbewerbsfähig. Mein Ziel ist es leicht\nüber dem Mittelfeld zu liegen. Darüber, weil wir aufgrund unserer „80/20 Regel“ sehr wahrscheinlich eine bessere\nQualität, als unsere Marktbegleiter liefern können. Zu den Hungerlöhnen: Es ist richtig, dass wir keine Gehälter zahlen\nkönnen, wie Sie in größeren Consulting Firmen oder bei größeren Endkunden gezahlt werden. Wir sind allerdings auch nicht\nso weit weg davon und bieten inhaltlich bzw. von der Work-life-balance oft mehr von dem, wie sich Mitarbeiter Ihre\nArbeit vorstellen. Unserer Meinung nach ist",[18,28149,28150],{},"Lebensqualität mit einem guten Gehalt mehr wert als ein Maximalgehalt",[18,28152,28153],{},"mit Stress und fehlender Work-Life Balance.",[18,28155,28156],{},"Der Entscheidende Faktor, warum synyx sich die „80/20 Regel“ leisten kann ist jedoch die Geschäftsführung selbst.\nThomas, (Jo)Achim und Markus zahlen sich selbst im Verhältnis ein sehr bescheidenes Gehalt. Dieses nicht entnommene\nGeld, ist ein maßgeblicher Grund dafür, dass wir es uns leisten können auf 20 % unseres Umsatzes zu verzichten. Im\nKontext mit den aktuellen Debatten über explodierender Manager Gehälter und hemmungsloser Mitnahmementalität, tut es\neinfach gut ein komplett anderes, auf Nachhaltigkeit ausgelegtes Unternehmensmodell zu erleben und daran mitwirken zu\nkönnen.",[18,28158,28159,28160,986],{},"Für mich ist die „80/20 Regel“ ein klarer Wettbewerbsvorteil, den ich selbstverständlich in Kunden- oder\nPersonalgesprächen nenne und erläutere. Mich würde interessieren, welche anderen Unternehmen ähnlich viel In Qualität\ninvestieren möchten, die gleichen Ziele und Werte verfolgen und natürlich wie diese das umsetzen. Wer eines kennt, bitte\nMail an ",[585,28161,28094],{"href":28093},{"title":48,"searchDepth":86,"depth":86,"links":28163},[],[614],"2013-03-15T09:16:31","Mit diesem Blog-Beitrag möchte ich etwas Einblick in die Unternehmensstrategie, die „Denke“ und Werte von synyx geben –\\nund, natürlich aufzeigen, was das Ganze mit Google’s „80/20 Formel” zu tun hat. Seit Mitte Oktober bin ich hier für\\nSales verantwortlich. Vor mir gab es in der Firma noch keinen Vertriebsmitarbeiter. Von daher war und ist es immer noch\\neine Herausforderung, die eigenen aber natürlich unterschiedlichen Erfahrungen, wie Unternehmen funktionieren und sich\\nentwickeln können, auf einen gemeinsamen Nenner zu bringen. Eine spannende Aufgabe, vor allem auch, weil es bei synyx\\nkeine Entscheidungen von „Oben“ herab gibt, sondern wirklich alles im Team/in der Firma diskutiert und beschlossen wird.\\nDas macht das Ganze natürlich sehr spannend, weil man die Kollegen für seine Ideen begeistern muss.","https://synyx.de/blog/kann-googles-8020-formel-fur-ein-reines-dienstleistungsunternehmen-wirtschaftlich-sein/",{},"/blog/kann-googles-8020-formel-fur-ein-reines-dienstleistungsunternehmen-wirtschaftlich-sein",{"title":28120,"description":28129},"kann-googles-8020-formel-fur-ein-reines-dienstleistungsunternehmen-wirtschaftlich-sein","blog/kann-googles-8020-formel-fur-ein-reines-dienstleistungsunternehmen-wirtschaftlich-sein",[],"Mit diesem Blog-Beitrag möchte ich etwas Einblick in die Unternehmensstrategie, die „Denke“ und Werte von synyx geben – und, natürlich aufzeigen, was das Ganze mit Google’s „80/20 Formel” zu tun…","IRosyh8hdxiqO4H8PR5bKoTIZ43PiIIxUeGCym_05Ms",{"id":28177,"title":28178,"author":28179,"body":28181,"category":28428,"date":28429,"description":28188,"extension":617,"link":28430,"meta":28431,"navigation":499,"path":28432,"seo":28433,"slug":28185,"stem":28434,"tags":28435,"teaser":28438,"__hash__":28439},"blog/blog/synyx-weihnachtsgedicht.md","synyx Weihnachtsgedicht",[28180],"mohr",{"type":11,"value":28182,"toc":28426},[28183,28186,28189,28192,28195,28198,28201,28204,28207,28210,28213,28216,28219,28222,28225,28228,28231,28234,28237,28240,28243,28246,28249,28252,28255,28258,28261,28264,28267,28270,28273,28276,28279,28282,28285,28288,28291,28294,28297,28300,28303,28306,28309,28312,28315,28318,28321,28324,28327,28330,28333,28336,28339,28342,28345,28348,28351,28354,28357,28360,28363,28366,28369,28372,28375,28378,28381,28384,28387,28390,28393,28396,28399,28402,28405,28408,28411,28414,28417,28420,28423],[14,28184,28178],{"id":28185},"synyx-weihnachtsgedicht",[18,28187,28188],{},"Vom weiten Nordpol komm ich her,",[18,28190,28191],{},"Ich muss euch sagen es buggte sehr,",[18,28193,28194],{},"Mein Navi versagte und auch mein Bord-PC,",[18,28196,28197],{},"Mein Schlitten stürzte in einen Haufen Schnee.",[18,28199,28200],{},"Gar hart ich auf meinen Allerwertesten knallte,",[18,28202,28203],{},"Der Knall noch in meinen Ohren schallte.",[18,28205,28206],{},"Zum Glück tat ich mir nichts, war nur verwirrt,",[18,28208,28209],{},"Wohin hatte ich mich bloß verirrt?",[18,28211,28212],{},"Vor Kälte schon ganz rote Ohren,",[18,28214,28215],{},"Die Nase fast schon abgefroren,",[18,28217,28218],{},"Sah ich ein Schild mit “Open Source”,",[18,28220,28221],{},"Das Schicksal führte mich auf den richtigen Kurs.",[18,28223,28224],{},"Die Dame mit den blonden Locken",[18,28226,28227],{},"Sah erstaunt drein – fast erschrocken.",[18,28229,28230],{},"Schließlich passiert’s nicht allzu oft,",[18,28232,28233],{},"Dass der Weihnachtsmann an der Türe klopft.",[18,28235,28236],{},"“Gnädiges Fräulein, ich hab ein Problem",[18,28238,28239],{},"Alles kaputt, das ganze System.",[18,28241,28242],{},"Viele Geschenke, die ich ausliefern muss:",[18,28244,28245],{},"Süßes, Spielzeug, viel Schönes im Überschuss.",[18,28247,28248],{},"Könntet ihr mir vielleicht helfen?",[18,28250,28251],{},"Ihr seid doch sowas wie Software-Elfen.",[18,28253,28254],{},"Habt sicher auch Ersatz-Hardware,",[18,28256,28257],{},"Die Reparatur ist bestimmt nicht schwer.”",[18,28259,28260],{},"“Sind Sie etwa”, sprach sie, “der Weihnachtsmann?",[18,28262,28263],{},"Ich kann’s nicht glauben, manno mann!",[18,28265,28266],{},"So kommen Sie doch erstmal rein,",[18,28268,28269],{},"Da draußen rumsteh’n muss nicht sein.",[18,28271,28272],{},"Und wärmen Sie sich bei uns auf.",[18,28274,28275],{},"Kaffee, Tee – Sie haben Lust worauf?",[18,28277,28278],{},"Folgen Sie mir einfach in die Küche.",[18,28280,28281],{},"Das hier sind übrigens uns’re Fische.”",[18,28283,28284],{},"Und in der Küche, oh welch ein Duft!",[18,28286,28287],{},"Ein Wohlgeruch hing in der Luft.",[18,28289,28290],{},"“Es ist”, sprach sie, “grad Mittagszeit,",[18,28292,28293],{},"Das heißt Kochmuddis Festmahl steht bereit.",[18,28295,28296],{},"Setzen Sie sich erstmal hin,",[18,28298,28299],{},"Ich informiere unser Team.",[18,28301,28302],{},"Lassen Sie es sich gut schmecken,",[18,28304,28305],{},"Das Essen ist zum Finger lecken.",[18,28307,28308],{},"Dr. Kill und die anderen Doktoren",[18,28310,28311],{},"Der Code Clinic haben für Sie offene Ohren.",[18,28313,28314],{},"Vielleicht lässt sich am Navi noch was machen",[18,28316,28317],{},"Und wir finden des Problems Ursachen.”",[18,28319,28320],{},"Gerade hatte ich aufgegessen,",[18,28322,28323],{},"Da kamen – man hatte mich nicht vergessen –",[18,28325,28326],{},"Schon Dr. Kill und die anderen Doktoren.",[18,28328,28329],{},"Und Sie ließen mich erfahren:",[18,28331,28332],{},"“Das ist ein wirklich schwerer Fall:",[18,28334,28335],{},"Unsaub’rer Code, Sonar Violations überall!",[18,28337,28338],{},"Von der mangelnden Testabdeckung will ich gar nicht sprechen,",[18,28340,28341],{},"Die ist geradezu ein Verbrechen.",[18,28343,28344],{},"Wenn Sie woll’n, tun wir das Beste.",[18,28346,28347],{},"Jedoch wär’s für Sie das Schönste,",[18,28349,28350],{},"Das Indy-Team mal anzuhauen,",[18,28352,28353],{},"Auf ihre Maßanfertigungen kann man bauen.",[18,28355,28356],{},"Vielleicht wär auch ein Smartphone nicht verkehrt.",[18,28358,28359],{},"Mit einer Navi-App die sich bewährt.",[18,28361,28362],{},"Auch Mobile Solutions zähl’n zu uns’rem Bereich.",[18,28364,28365],{},"Wenn Sie woll’n mach’n wir uns an die Arbeit gleich.",[18,28367,28368],{},"Damit alle Kinder ihre Geschenke bekommen,",[18,28370,28371],{},"Haben wir uns auch Ihrem alten Navi angenommen.",[18,28373,28374],{},"Und mit ein paar Tricks im Nullkommanix",[18,28376,28377],{},"Nun läuft es wieder dank uns’rem Quickfix.”",[18,28379,28380],{},"Und wie ich so in der Küche stand,",[18,28382,28383],{},"Näherte sich ein bärtiger Jemand.",[18,28385,28386],{},"“Hopp, hopp”, rief es, “alter Gesell,",[18,28388,28389],{},"Hebe die Beine und spute dich schnell.",[18,28391,28392],{},"Repariert ist nun dein Bord-PC,",[18,28394,28395],{},"Auch eingebaut ‘ne SSD.",[18,28397,28398],{},"Damit’s mit den Geschenken läuft,",[18,28400,28401],{},"Selbst wenn man mal ein Bierchen säuft.”",[18,28403,28404],{},"Mein Bord-PC war wieder fit,",[18,28406,28407],{},"Das Navi lotzste mich Schritt für Schritt.",[18,28409,28410],{},"So konnt’ ich fortsetzen meine Reise,",[18,28412,28413],{},"Alle Geschenke ausliefern glücklicherweise.",[18,28415,28416],{},"So rettete synyx das Weihnachtsfest,",[18,28418,28419],{},"Zumindest wenn man Phantasie walten lässt.",[18,28421,28422],{},"Wir wünschen ein schönes Weihnachtsfest und ganz klar:",[18,28424,28425],{},"Habt auch einen guten Rutsch ins neue Jahr!",{"title":48,"searchDepth":86,"depth":86,"links":28427},[],[614],"2012-12-21T13:26:51","https://synyx.de/blog/synyx-weihnachtsgedicht/",{},"/blog/synyx-weihnachtsgedicht",{"title":28178,"description":28188},"blog/synyx-weihnachtsgedicht",[28436,3122,28437],"code-clinic","weihnachten","Vom weiten Nordpol komm ich her, Ich muss euch sagen es buggte sehr, Mein Navi versagte und auch mein Bord-PC, Mein Schlitten stürzte in einen Haufen Schnee. Gar hart ich…","Lo6fXbP8epgQa2hZRl5qPphQGy6SFXL-Bgb7yJ1WIMs",{"id":28441,"title":28442,"author":28443,"body":28444,"category":28488,"date":28489,"description":28490,"extension":617,"link":28491,"meta":28492,"navigation":499,"path":28493,"seo":28494,"slug":28448,"stem":28495,"tags":28496,"teaser":28499,"__hash__":28500},"blog/blog/raclette-essen-in-neuen-dimensionen.md","Raclette-Essen in neuen Dimensionen",[21028],{"type":11,"value":28445,"toc":28486},[28446,28449,28452,28455,28458,28468,28471,28477,28480,28483],[14,28447,28442],{"id":28448},"raclette-essen-in-neuen-dimensionen",[18,28450,28451],{},"Wow, es ist echt irre, wie viele Leute wir nun bei synyx geworden sind. Wenn ich das mit dem letzten Raclette-Essen\nvergleiche, war es dieses Mal bedeutend mehr Aufwand. Nicht nur, dass Rebecca und ich einiges mehr einzukaufen und somit\nauch einiges mehr zu schleppen hatten. Nein, wir mussten sogar noch einen weiteren Tisch aufbauen. Aber nun mal langsam.\nUm was geht es hier überhaupt?",[18,28453,28454],{},"Also…..",[18,28456,28457],{},"Wie jedes Jahr im Dezember richten wir unseren monatlichen Stammtisch bei synyx im Büro aus und zwar mit einem\ngemütlichen Raclette-Essen. Wieder hatten sich einige fleißige Helferlein in der Küche eingefunden, um das ganze Gemüse\nund das Fleisch zu schnippeln, auf Platten anzurichten – alles was eben dazu gehört.",[18,28459,28460,28464],{},[1794,28461],{"alt":28462,"src":28463},"\"helfer\"","https://media.synyx.de/uploads//2012/12/helfer.jpg",[1794,28465],{"alt":28466,"src":28467},"\"zutaten\"","https://media.synyx.de/uploads//2012/12/zutaten.jpg",[18,28469,28470],{},"Das war schon eine ganze Menge. Als alles fertig war, mussten nur noch die Tische hergerichtet werden. Tja, wir mussten\ndas erste Mal sogar das Admin-Zimmer, welches an die Küche angrenzt, in Beschlag nehmen. Der Platz hätte sonst nicht\nausgereicht. Insgesamt 5(!) Raclette-Geräte wurden benötigt, damit jeder zumindest ein Pfännchen sein Eigen nennen und\nmit allerlei Leckereien füllen konnte. Nachdem alle ihren Platz eingenommen haben, konnte das lustige Brutzeln beginnen.",[18,28472,28473],{},[1794,28474],{"alt":28475,"src":28476},"\"raclette_viele\"","https://media.synyx.de/uploads//2012/12/raclette_viele.jpg",[18,28478,28479],{},"Ich habe mich natürlich an dem Tisch eingefunden, an dem das Motto hieß „mit Bacon geht alles besser“. Ich behaupte\neinfach mal, dass unser Tisch, mit den wenigsten Personen daran, den höchsten Bacon-Verbrauch hatte 😉 Aber natürlich\nwar auch der Rest extrem lecker.",[18,28481,28482],{},"Die Bäuche spannend ging es dann langsam in den gemütlichen Teil über. Ein paar Bierchen trinken, ein paar Brugal mit\nCola und viel Plaudern. Es waren ja auch ein paar Leute anwesend, welche nicht zum aktuellen synyx-Team gehören. Umso\nmehr gab es zu quatschen.",[18,28484,28485],{},"Die Aussagen, wann sich der Stammtisch aufgelöst hat, sind unterschiedlich 😉 Aber das macht ja nichts, denn Alles im\nAllem war der Abend absolut gelungen. Wir freuen uns schon auf das nächste Mal.",{"title":48,"searchDepth":86,"depth":86,"links":28487},[],[614],"2012-12-14T13:00:01","Wow, es ist echt irre, wie viele Leute wir nun bei synyx geworden sind. Wenn ich das mit dem letzten Raclette-Essen\\nvergleiche, war es dieses Mal bedeutend mehr Aufwand. Nicht nur, dass Rebecca und ich einiges mehr einzukaufen und somit\\nauch einiges mehr zu schleppen hatten. Nein, wir mussten sogar noch einen weiteren Tisch aufbauen. Aber nun mal langsam.\\nUm was geht es hier überhaupt?","https://synyx.de/blog/raclette-essen-in-neuen-dimensionen/",{},"/blog/raclette-essen-in-neuen-dimensionen",{"title":28442,"description":28451},"blog/raclette-essen-in-neuen-dimensionen",[28497,28498,3122],"feier","raclette","Wow, es ist echt irre, wie viele Leute wir nun bei synyx geworden sind. Wenn ich das mit dem letzten Raclette-Essen vergleiche, war es dieses Mal bedeutend mehr Aufwand. Nicht…","nFE8Mdau59AdCgX0PILxCgfwEUF-OxIlWSdIqNvtUxY",{"id":28502,"title":28503,"author":28504,"body":28505,"category":28584,"date":28585,"description":28586,"extension":617,"link":28587,"meta":28588,"navigation":499,"path":28589,"seo":28590,"slug":28509,"stem":28592,"tags":28593,"teaser":28597,"__hash__":28598},"blog/blog/professional-scrum-master-schulung.md","Professional Scrum Master Schulung",[21597],{"type":11,"value":28506,"toc":28581},[28507,28510,28519,28528,28531,28537,28540,28564,28567,28573,28576,28578],[14,28508,28503],{"id":28509},"professional-scrum-master-schulung",[18,28511,28512,28513,28518],{},"„Scrum ist ein Framework zur nachhaltigen Entwicklung komplexer Produkte“ (\nQuelle: ",[585,28514,28517],{"href":28515,"rel":28516},"http://www.scrum.org/Scrum-Guides",[589],"Scrum Guide",") und wird bei synyx nun schon seit einigen Jahren erfolgreich\neingesetzt. Bisher gab es in unserem Unternehmen mit Fabian Buch nur einen zertifizierten Scrum Master, der auch für die\nEinführung des Frameworks und Umsetzung der damit verbundenen Prinzipien im Unternehmen verantwortlich war. Durch das\nEntstehen von mehr und mehr Teams in denen Scrum eingesetzt wurde, wurden auch mehr Scrum Master für diese Teams\nbenötigt. Mein Kollege Michael Herbold und ich wurden von Fabian Buch in den Grundlagen von Scrum unterrichtet und\narbeiten nun schon seit einiger Zeit neben unserer Entwicklertätigkeit auch als Scrum Master in unterschiedlichen Teams.",[18,28520,28521,28522,28527],{},"Um unsere Grundlagenkenntnisse in Scrum zu vertiefen und natürlich auch um die Professional Scrum Master (PSM)\nZertifizierung zu machen, entschieden wir uns, den PSM Kurs mit Fahd Al-Fatish zu besuchen. Der Kurs wurde von\nder ",[585,28523,28526],{"href":28524,"rel":28525},"http://www.andrena.de/",[589],"andrena objects ag"," veranstaltet und fand am 8. und 9. November in Frankfurt (Main)\nstatt. Da der Kurs in einem Hotel direkt am Bahnhof statt fand und es zudem eine sehr passende Verbindung gab, konnten\nwir ohne Probleme mit dem Zug pendeln.",[18,28529,28530],{},"Inhaltlich war der Kurs gut strukturiert. Als erste Grundlage sprachen wir über Agilität: wie sie definiert ist, was sie\nfür ein Unternehmen bedeutet und warum es wünschenswert ist, sie zu erreichen. Anschließend wurden die vier\ngrundlegenden Prinzipien von Scrum vorgestellt und diskutiert, wie durch die Einhaltung dieser Prinzipien Agilität\nerreicht werden kann.",[18,28532,28533],{},[1794,28534],{"alt":28535,"src":28536},"\"Scrum Prinzipien\"","https://media.synyx.de/uploads//2012/11/20121109_1731021.jpg",[18,28538,28539],{},"Alle folgenden Themen die sich detaillierter mit einzelnen Aspekten von Scrum befassten, wurden stets in Bezug zu diesen\nam Anfang definierten Grundlagen gesetzt, wodurch der Kurs ein sehr stimmiges Gesamtbild von Scrum vermittelte. Die\ndetaillierten Themen beinhalteten unter anderem:",[577,28541,28542,28549,28552,28555,28558,28561],{},[580,28543,28544,28545,28548],{},"Scrum Regeln (basierend auf dem ",[585,28546,28517],{"href":28515,"rel":28547},[589]," von Jeff Sutherland und Ken Schwaber)",[580,28550,28551],{},"Scrum Planung",[580,28553,28554],{},"Teams (Formierung, Motivation, Konfliktbewältigung)",[580,28556,28557],{},"‘Defintion of Done’",[580,28559,28560],{},"Skalierung von Scrum (Scrum of Scrum)",[580,28562,28563],{},"Rolle des Scrum Masters",[18,28565,28566],{},"Der Kursleiter, Fahd Al-Fatish, überzeugte von Anfang an durch seine detaillierten Fachkenntnisse und seinen angenehmen\nVortragsstil. Zusätzlich zu den sehr gut vorbereiteten Präsentationsfolien, skizzierte er grundlegende Prinzipien und\nTechniken auch auf Flipcharts und verteilte die Blätter im Verlauf der beiden Tage an den Wänden des Seminarraums. Somit\nhatte man als Teilnehmer die wichtigsten Aspekte der präsentierten Themen ständig vor Augen und konnte diese leicht\nverinnerlichen.",[18,28568,28569],{},[1794,28570],{"alt":28571,"src":28572},"\"PSM Schulung\"","https://media.synyx.de/uploads//2012/11/20121109_111413.jpg",[18,28574,28575],{},"Besonders vorteilhaft war dies für die zahlreichen ‘Excercises’, die Bestandteil des Kurses waren. Dabei handelte es\nsich um konkrete Fragestellungen oder Anwendungsbeispiele, die in 4er Teams bearbeitet wurden und dazu dienten, die\nerlernten Inhalte (vor allem die Scrum Grundlagen) zu reflektieren und direkt anzuwenden. Die Besprechung der Ergebnisse\nführte oft zu sehr ausführlichen Diskussionen, in denen Fahd sich viel Zeit nahm die Fragen der Kursteilnehmer zu\nbeantworten. Zusätzlich sorgten diese Übungen für eine angenehme Auflockerung und erleichterten es sich anschließend\nwieder zu konzentrieren.",[3469,28577,969],{"id":968},[18,28579,28580],{},"Obwohl wir mit vielen der im Kurs angesprochenen Themen schon vertraut waren, konnten wir doch einige wertvolle neue\nErkenntnisse aus den zwei Tagen mitnehmen. Vor allem die ausgiebige Auseinandersetzung mit den Grundprinzipien von Scrum\nund dem Prinzip der Agilität, bietet uns eine gute Grundlage für unsere Tätigkeit als Scrum Master. Viele Fragen, die\nich vor dem Kurs formuliert hatte und von denen ich hoffte, dass sie im Kurs beantwortet würden, wurden nicht direkt\nbehandelt. Allerdings fühle ich mich nun in der Lage diese Fragen selbst zu beantworten, indem ich mich an den\nPrinzipien orientiere und mir verdeutliche, welches Ziel erreicht werden soll (Agilität). Genau das ist es schließlich\nauch, was Fahd selbst in seinem Kurs beschreibt: Ein guter Coach löst keine Probleme, sondern gibt einem die Werkzeuge\nin die Hand um seine Probleme selbst zu lösen.",{"title":48,"searchDepth":86,"depth":86,"links":28582},[28583],{"id":968,"depth":86,"text":969},[614],"2012-11-19T14:05:09","„Scrum ist ein Framework zur nachhaltigen Entwicklung komplexer Produkte“ (\\nQuelle: Scrum Guide) und wird bei synyx nun schon seit einigen Jahren erfolgreich\\neingesetzt. Bisher gab es in unserem Unternehmen mit Fabian Buch nur einen zertifizierten Scrum Master, der auch für die\\nEinführung des Frameworks und Umsetzung der damit verbundenen Prinzipien im Unternehmen verantwortlich war. Durch das\\nEntstehen von mehr und mehr Teams in denen Scrum eingesetzt wurde, wurden auch mehr Scrum Master für diese Teams\\nbenötigt. Mein Kollege Michael Herbold und ich wurden von Fabian Buch in den Grundlagen von Scrum unterrichtet und\\narbeiten nun schon seit einiger Zeit neben unserer Entwicklertätigkeit auch als Scrum Master in unterschiedlichen Teams.","https://synyx.de/blog/professional-scrum-master-schulung/",{},"/blog/professional-scrum-master-schulung",{"title":28503,"description":28591},"„Scrum ist ein Framework zur nachhaltigen Entwicklung komplexer Produkte“ (\nQuelle: Scrum Guide) und wird bei synyx nun schon seit einigen Jahren erfolgreich\neingesetzt. Bisher gab es in unserem Unternehmen mit Fabian Buch nur einen zertifizierten Scrum Master, der auch für die\nEinführung des Frameworks und Umsetzung der damit verbundenen Prinzipien im Unternehmen verantwortlich war. Durch das\nEntstehen von mehr und mehr Teams in denen Scrum eingesetzt wurde, wurden auch mehr Scrum Master für diese Teams\nbenötigt. Mein Kollege Michael Herbold und ich wurden von Fabian Buch in den Grundlagen von Scrum unterrichtet und\narbeiten nun schon seit einiger Zeit neben unserer Entwicklertätigkeit auch als Scrum Master in unterschiedlichen Teams.","blog/professional-scrum-master-schulung",[28594,6241,28595,4505,3122,28596],"andrena","psm","zertifizierung","„Scrum ist ein Framework zur nachhaltigen Entwicklung komplexer Produkte“ (Quelle: Scrum Guide) und wird bei synyx nun schon seit einigen Jahren erfolgreich eingesetzt. Bisher gab es in unserem Unternehmen mit…","ezctbwERVX6okGtAvaaHxvY_2DiGJ34ppeAiaL91SL4",{"id":28600,"title":28601,"author":28602,"body":28603,"category":28710,"date":28711,"description":28712,"extension":617,"link":28713,"meta":28714,"navigation":499,"path":28715,"seo":28716,"slug":28607,"stem":28717,"tags":28718,"teaser":28725,"__hash__":28726},"blog/blog/synyx-besucht-die-mdc-2012-in-stuttgart.md","synyx besucht die MDC 2012 in Stuttgart",[25771],{"type":11,"value":28604,"toc":28701},[28605,28608,28611,28620,28623,28627,28630,28633,28636,28639,28642,28645,28649,28653,28656,28659,28662,28666,28669,28672,28676,28679,28682,28685,28689,28692,28695,28698],[14,28606,28601],{"id":28607},"synyx-besucht-die-mdc-2012-in-stuttgart",[18,28609,28610],{},"Dieses Jahr hatte unsere Mobile Developer Reisegruppe das Glück die MDC 2012 quasi vor der Haustüre, nämlich in\nStuttgart, vorzufinden. Das machte den Besuch natürlich noch viel reizvoller. Darüber hinaus kündigte sich mit Robert\nVirkus, dem Gründer eines unserer Partnerunternehmens, Enough Software aus Bremen, ein spannender Talk über das , meiner\nMeinung nach derzeit heißeste Thema im Mobile Bereich, an. Doch dazu später mehr.",[18,28612,28613,28614,28619],{},"Weitere spannende Talks versprachen Markus Jungingers GreenDAO Talk und natürlich auch ",[585,28615,28618],{"href":28616,"rel":28617},"http://vogella.de",[589],"Lars Vogel","\nseine angekündigte Übersicht über die Neuerungen von Android 4(.2)",[18,28621,28622],{},"Da unsere Gruppe aus iOS als auch Android Developern bestand war schnell klar, dass man sich unterschiedliche Talks\nanschauen möchte.",[3469,28624,28626],{"id":28625},"_1tag","1.Tag",[18,28628,28629],{},"Los gings am ersten Tag nach der Keynote direkt mit der Einführung von Lars Vogel in die Neuerungen von Android 4.2.\nWie üblich war der Vortrag gespickt mit technischen Neuerungen und auch unsere absoluten Experten in der Android\nEntwicklung konnten doch das eine oder andere noch mitnehmen: beispielsweise die Tatsache, dass man sich mit den\naktuellsten ADT Tools versorgen lassen kann, wenn man weiss wo die Checkbox versteckt ist, die einem Zugriff darauf\nermöglicht.",[18,28631,28632],{},"Es war, wie meist bei Lars, ein rundum gelungener Vortrag. Man spürt bei ihm einfach diesen gewissen Enthusiasmus,\nwelchen man wohl braucht um solche, nicht unbedingt einfachen, Themen dennoch spannend zu vermitteln.",[18,28634,28635],{},"Nach einer kurzen Pause, auf das Catering gehe ich separat ein :-), war schnell das nächste Thema gefunden und mit\nData-Handling bei Offline-Apps ging es weiter",[18,28637,28638],{},"Über diesen Ausflug möchte ich nicht allzu viele Worte verlieren, ich würde mich wiederholen. Wieder kam ich mir fehl am\nPlatz vor. Um dies zu untermauern möchte ich nur ein paar kurze Zitate wiedergeben:",[18,28640,28641],{},"“Leute beachtet bitte, MD5 ist kein gutes Verschlüsselungsverfahren” worauf aus dem Publikum mehrfach die Frage kam\n“Warum denn nicht?”.",[18,28643,28644],{},"“Hat hier wer schon mal mit SQL gearbeitet?” Ich würde mal sagen, ca 25% der Teilnehmer haben sich hierauf gemeldet…",[3469,28646,28648],{"id":28647},"_2-tag","2. Tag",[649,28650,28652],{"id":28651},"_1-robert-virkus","1. Robert Virkus",[18,28654,28655],{},"Roberts Vortrag war für uns insbesondere deshalb spannend, da wir mit ihm schon einige Projekte realisiert haben und wir\nauf die Statements bzgl. Hybrid Apps und dem HTML5-Hype gespannt waren. Der Vortrag war sehr spannend gehalten, es\nwaren wohl die besten Folien der gesamten Konferenz, da einfach unterhaltsam. Robert zeigte gekonnt auf, warum HTML5\nwohl nicht die Lösung aller Appentwicklungsprobleme ist, zeigte die Grenzen auf und hatte durch den riesigen\nErfahrungsschatz von Enough auch einige spannende Anekdoten auf Lager.",[18,28657,28658],{},"Generell teilt er unsere Einschätzung zu HTML5 Apps, bei den Hybrid-Apps sah dies etwas anders aus. Letztlich wurde\naber deutlich klar dass man aufwendige, performance oder speicherkritische Dinge auf jeden Fall nativ implementieren\nwill, während man Handbücher, Tutorials oder dergleichen mittels HTML abbilden kann.",[18,28660,28661],{},"Vielen Dank an Robert für den kontroversen Vortrag, da er hiermit bestimmt den einen oder anderen Berater gegen sich\naufgebracht hat 🙂 Schliesslich wird mit HTML5 Beratung im Mobilen Bereich derzeit ordentlich Geld verdient.",[649,28663,28665],{"id":28664},"_2-testdriven-ios-development","2. Testdriven iOS Development",[18,28667,28668],{},"Für mich als Android Developer war spannend zu sehen, wie komplett anders die Entwicklung unter iOS wohl wahrgenommen\nwird. Die Toolchain wirkt irgendwie kopiert, einige Dinge wurden aus der Java Welt nachgebaut. Alles wirkte ein wenig\n“under engineered” und deutlich mehr visuell getrieben. Die Softwaretechnik wird deutlich weniger wahrgenommen. Ich kam\nmir teilweise fehl am Platz vor, was aber nicht am Vortrag selbst lag sondern viel mehr an der Tatsache, das die meisten\num mich herum wirklich vieles noch nicht gehört hatten bzw. auch nicht wirklich verstanden, warum man denn Testdriven\narbeiten will.",[18,28670,28671],{},"Wüsste ich es nicht besser da wir selbst bei synyx auch iOS Developer haben würde ich hier mehr… nein ich lasse es 🙂",[649,28673,28675],{"id":28674},"_3-greendao-von-markus-junginger","3. GreenDAO von Markus Junginger",[18,28677,28678],{},"Dieser Vortrag wurde mit Spannung erwartet aufgrund der Tatsache das wir sehen wollten, wie eine DAO Implementierung\nsich innerhalb der Android Entwicklung auswirkt. Bislang hatten wir noch nicht das Bedürfnis solche Techniken innerhalb\nunserer Projekte zu nutzen. Zum einen da es eine Menge Flexibilität und Möglichkeiten zunichte macht, zum anderen da wir\nnoch keine solch großen Datenmengen Clientseitig speichern mussten.",[18,28680,28681],{},"Markus verstand es hervorragend die seiner Meinung nach spannenden Einsatzgebiete aufzuzeigen und Vergleiche mit anderen\nDAO-Implementierungen zu ziehen. Was uns leider fehlte, war ein Vergleich der Performance, wenn man KEINE derartige\nImplementierung nutzt. Ansonsten wusste er auf die meisten aufkommenden Fragen eine Antwort und war auch nach dem\neigentlichen Talk noch zu einer kurzen Diskussionsrunde zu haben. Danke dafür!",[18,28683,28684],{},"Danach ging es mit einer sehr spannend gehaltenen Keynote zu Ende und es wurde Zeit sich auf den Weg nach Hause zu\nmachen.",[3469,28686,28688],{"id":28687},"blicke-über-den-tellerrand","Blicke über den Tellerrand:",[18,28690,28691],{},"Allgemein war die Orga bis auf wenige Kleinigkeiten hervorragend, die Technik klappte fast ausnahmslos sehr gut (am\n2.ten Tag hatte ich kleine WLAN Aussetzer im hintersten Konferenzraum und ein Beamer meinte ab und an er müsse abheben,\nzumindest hörte er sich so an) und auch das Catering war geschmacklich erste Wahl!",[18,28693,28694],{},"Als einzigen Kritikpunkt am Catering möchte ich dennoch anbringen dass es mir als Vegetarier nicht möglich war alleine\nherauszufinden, was denn wohl für mich geeignet ist und was nicht. Auch das Personal, welches reichlich vorhanden war,\nkonnte mir diese Fragen nicht beantworten, so dass ein Koch!! gerufen wurde, welcher es dann exakt bestimmt hat. Hier\nkönnte man doch einfach Schildchen machen, oder aber es wie bei der Devoxx einfach die Essensausgaben separieren.",[18,28696,28697],{},"Ich denke wir sind 2013 wieder am Start, diesmal dann eventuell mit eigenen Vorträgen um bestimmte Themen gezielt\nanspruchsvoller zu gestalten…",[18,28699,28700],{},"Das war die MDC 2012, vielen Dank an Florian Bender und sein Team!!!",{"title":48,"searchDepth":86,"depth":86,"links":28702},[28703,28704,28709],{"id":28625,"depth":86,"text":28626},{"id":28647,"depth":86,"text":28648,"children":28705},[28706,28707,28708],{"id":28651,"depth":126,"text":28652},{"id":28664,"depth":126,"text":28665},{"id":28674,"depth":126,"text":28675},{"id":28687,"depth":86,"text":28688},[614],"2012-11-08T18:47:07","Dieses Jahr hatte unsere Mobile Developer Reisegruppe das Glück die MDC 2012 quasi vor der Haustüre, nämlich in\\nStuttgart, vorzufinden. Das machte den Besuch natürlich noch viel reizvoller. Darüber hinaus kündigte sich mit Robert\\nVirkus, dem Gründer eines unserer Partnerunternehmens, Enough Software aus Bremen, ein spannender Talk über das , meiner\\nMeinung nach derzeit heißeste Thema im Mobile Bereich, an. Doch dazu später mehr.","https://synyx.de/blog/synyx-besucht-die-mdc-2012-in-stuttgart/",{},"/blog/synyx-besucht-die-mdc-2012-in-stuttgart",{"title":28601,"description":28610},"blog/synyx-besucht-die-mdc-2012-in-stuttgart",[5834,28719,28720,6240,28721,28722,28723,13052,28724,3122],"apple","ausbildung","html5","ios","mdc","objective-c","Dieses Jahr hatte unsere Mobile Developer Reisegruppe das Glück die MDC 2012 quasi vor der Haustüre, nämlich in Stuttgart, vorzufinden. Das machte den Besuch natürlich noch viel reizvoller. Darüber hinaus…","zC6fwExJgqo4oUeUk3333-6HnFJZSw5LAHTK2ushCto",{"id":28728,"title":28729,"author":28730,"body":28731,"category":28750,"date":28751,"description":28752,"extension":617,"link":28753,"meta":28754,"navigation":499,"path":28755,"seo":28756,"slug":28757,"stem":28758,"tags":28759,"teaser":28761,"__hash__":28762},"blog/blog/die-verruckten-kommen.md","Die Verrückten kommen",[11098],{"type":11,"value":28732,"toc":28748},[28733,28736,28739,28742],[14,28734,28729],{"id":28735},"die-verrückten-kommen",[18,28737,28738],{},"Seit etwas über fünf Jahren arbeite ich nun bei synyx. In dieser Zeit verändert sich innerhalb der Firma natürlich auch\nso manches. So mancher Mitarbeiter geht, aber dafür kommen auch immer wieder neue hinzu. Und über die Zeit gesehen ist\nein stetiger Anstieg der Mitarbeiterzahl zu beobachten. Dies spiegelt sich natürlich auch in den Büroräumen wieder. Zum\nBegin meiner Arbeit bei synyx gab es in der Karlstraße 68 ein Stockwerk in welchem sich alle Mitarbeiter befanden.\nInnerhalb diesem wurde es dann allerdings recht schnell sehr “kuschlig”. Wir brauchten einfach mehr Platz! Als\nZwischenlösung gab es dann mal ein weiteres Zimmer im 5. Stock – das entschärfte die Platzproblematik etwas, bei\nmehrmaligem auf und ab am Tag war die dazwischen liegende Treppe dann aber doch recht sportlich. Besser wurde dies als\ninnerhalb des Hauses das zweite Stockwerk hinzu genommen werden konnte. Diese auch heute noch vorhandene Lösung\nfunktioniert recht gut, da die zwei Stockwerke direkt übereinander liegen. Allerdings wird es so langsam auch schon\nwieder eng, und so sind wir auf der Suche nach einer neuen Bleibe.",[18,28740,28741],{},"Synyx wäre nicht synyx, wenn das hier nicht auch etwas anders funktionieren würde wie in einer “normalen” Firma. So gibt\nes viele Anforderungen an die neuen Räume. Darunter finden sich neben solchen wie ‘genügend Platz’, ‘hell’, ‘ruhig’ auch\nsolche wie ‘schnelles Internet’, ‘gemütlich’, ‘gute Rauchermöglichkeiten’, ‘Grillmöglichkeit’ und ‘gute öffentliche\nVerkehrsanbindung bei zentraler Lage’. Leider gibt es dadurch schon recht wenige Büros welche überhaupt die\n“Einstiegshürde” nehmen. Das macht die Suche natürlich etwas schwerer, aber letztendlich sind wir auf der Suche nach\nUNSEREM Büro, dort wo wir in Zukunft die meiste unserer Zeit verbringen werden. Und damit dies nicht nur den Chefs\ngefällt, werden die Mitarbeiter in den “Bürofindungsprozess” mit einbezogen. Neben den Anforderungen haben wir auch die\nMöglichkeit, uns die potenziellen neuen Büroräume im Voraus anzuschauen, um anschließend auch unsere Meinung dazu zu\näußern. So waren wir in den letzten Monaten schon mit “den ganzen Verrückten” zu verschiedenen Besichtigungen. Besonders\ngut ist dabei, dass jeder an etwas anderes denkt, auf verschiedenes Wert legt, und wir somit recht Effektiv die Vor-\nund Nachteile der jeweiligen Optionen erfassen können.",[18,28743,28744],{},[1794,28745],{"alt":48,"src":28746,"title":28747},"https://media.synyx.de/uploads//2012/09/buero.jpg","Bürobesichtigung",{"title":48,"searchDepth":86,"depth":86,"links":28749},[],[614],"2012-10-08T11:07:41","Seit etwas über fünf Jahren arbeite ich nun bei synyx. In dieser Zeit verändert sich innerhalb der Firma natürlich auch\\nso manches. So mancher Mitarbeiter geht, aber dafür kommen auch immer wieder neue hinzu. Und über die Zeit gesehen ist\\nein stetiger Anstieg der Mitarbeiterzahl zu beobachten. Dies spiegelt sich natürlich auch in den Büroräumen wieder. Zum\\nBegin meiner Arbeit bei synyx gab es in der Karlstraße 68 ein Stockwerk in welchem sich alle Mitarbeiter befanden.\\nInnerhalb diesem wurde es dann allerdings recht schnell sehr “kuschlig”. Wir brauchten einfach mehr Platz! Als\\nZwischenlösung gab es dann mal ein weiteres Zimmer im 5. Stock – das entschärfte die Platzproblematik etwas, bei\\nmehrmaligem auf und ab am Tag war die dazwischen liegende Treppe dann aber doch recht sportlich. Besser wurde dies als\\ninnerhalb des Hauses das zweite Stockwerk hinzu genommen werden konnte. Diese auch heute noch vorhandene Lösung\\nfunktioniert recht gut, da die zwei Stockwerke direkt übereinander liegen. Allerdings wird es so langsam auch schon\\nwieder eng, und so sind wir auf der Suche nach einer neuen Bleibe.","https://synyx.de/blog/die-verruckten-kommen/",{},"/blog/die-verruckten-kommen",{"title":28729,"description":28738},"die-verruckten-kommen","blog/die-verruckten-kommen",[28760,3122],"buro","Seit etwas über fünf Jahren arbeite ich nun bei synyx. In dieser Zeit verändert sich innerhalb der Firma natürlich auch so manches. So mancher Mitarbeiter geht, aber dafür kommen auch…","dqOg9zlkDT_M-d3EeqEpyr3L1_cDmJmnEGpySOEpQBc",{"id":28764,"title":28765,"author":28766,"body":28767,"category":28822,"date":28823,"description":28774,"extension":617,"link":28824,"meta":28825,"navigation":499,"path":28826,"seo":28827,"slug":28771,"stem":28828,"tags":28829,"teaser":28834,"__hash__":28835},"blog/blog/synyx-goes-to-europa-park.md","synyx goes to Europa Park",[28180],{"type":11,"value":28768,"toc":28820},[28769,28772,28775,28778,28781,28787,28790,28793,28796,28799,28802,28805,28811,28814,28817],[14,28770,28765],{"id":28771},"synyx-goes-to-europa-park",[18,28773,28774],{},"Freitag früh, um kurz nach 7 in Karlsruhe…",[18,28776,28777],{},"Noch ziemlich verschlafen und müde schlagen die ersten Mitarbeiter im synyx-Büro auf. Eine fast unmenschliche Zeit für\nunsere Verhältnisse, denn normalerweise fangen wir doch etwas später an zu arbeiten. Aber was tut man nicht alles für\neinen Betriebsausflug? So mancher hatte schon die Vermutung, es könne nur ein Trick sein und man versuche die\nMitarbeiter so zu einer früheren Zeit ans Arbeiten zu bringen. Es ist der erste Betriebsausflug ausserhalb unserer\nSommer- und Winterfeiern. Auch wenn noch alle sehr müde waren, so spürte man doch schon eine gewisse Vorfreude auf den\nAusflug in den Europa Park.",[18,28779,28780],{},"Zunächst durfte unsere Kaffeemaschine ersteinmal ihren Dienst verrichten und uns mit Kaffee versorgen. Wie gut, dass wir\nauch „Coffee-to-go“-Becher haben. Nach der ersten Dosis Koffein wurden wir auch so langsam wach und konnten in einem\neinigermaßen fitten Zusatand das Büro verlassen. Um 7.30 Uhr stand, pünktlich zur vereinbarten Abfahrtszeit, der Bus\nfür uns bereit. Die frühe Abfahrt war geplant, damit wir sofort zur Eröffnung des Parks da sein konnten. Wir wollten ja\nschließlich jede Minute, die der Europa Park geöffnet hat auskosten.",[18,28782,28783],{},[1794,28784],{"alt":28785,"src":28786},"\"europapark\"","https://media.synyx.de/uploads//2012/10/europapark.jpg",[18,28788,28789],{},"Nachdem jeder seinen Platz gefunden hatte, ging es gut gelaunt gen Rust. Dort angekommen stürmten wir sofort in den Park\nin dem unser erstes Ziel gleich die Silver Star war. So war konnten wir gleich zu Beginn unseren Adrenalinpegel so\nrichtig pushen. So voller Adrenalin machten wir zunächst noch in der großen Gruppe ein oder zwei weitere Achterbahnen\nunsicher. Danach teilte sich die Gruppe dann so langsam in immer kleinere Gruppen auf. Es bekommt ja auch nicht jedem\njede Achterbahn 😉",[18,28791,28792],{},"Die Truppe mit der ich unterwegs war machte dann so ziemlich jede Achterbahn unsicher. Natürlich durften Blue Fire und\ndie neue Holzachterbahn dabei nicht fehlen. Große Freude konnten wir Thomas bereiten, indem wir zur Schiffsschaukel\ngingen. Dort hielt es ihn gleich mehrere Fahrten fest. Weiß noch jemand, wie oft hintereinander Thomas Vindjammer\ngefahren ist?",[18,28794,28795],{},"So langsam stellte sich bei den meisten der Hunger ein und wir machten uns auf die Suche nach etwas Essbarem, an Auswahl\nmangelte es dort ja nicht. Gut gesättigt ging es dann gleich wieder los zu den nächsten Fahrgeschäften. Eurosat und\n-MIR, Posseidon, Cassandra, Matterhorn-Blitz, Schweizer Bobbahn, Alpenexpress und viele andere bekannte Achterbahnen\nund Fahrgeschäfte durften dabei natürlich nicht fehlen.",[18,28797,28798],{},"Da uns auch das Wetter gut gesonnen war, nutzten wir die Gelegenheit zum Fjord-Rafting. Denn klar ist, dass es immer\nirgendwen treffen wird, der hier nass wird. Klar, gibt es ja auch Ponchos zu kaufen. Aber das war ja etwas für Weicheier\n😉 Unsere Truppe wurde hier diesmal so richtig nass. Es traf nicht nur einen, sondern wirklich uns alle. Wir waren froh,\ndass es wirklich warm genug war um schnell wieder zu trocknen. Das wir so nass waren hielt uns auch nicht davon ab\nweiter zu gehen und uns eine Portion „Gruselschocker“ in der Geisterbahn abzuholen.",[18,28800,28801],{},"Mittlerweile war unsere Truppe auf 4 Leute geschrumpft, trotzdem hatten wir wahnsinnig viel Spaß. Lustig war auch, egal\nwo man hinkam, ein bekanntes Gesicht hat man immer irgendwo gesehen. Und sobald einem synyxler über den Weg liefen gab\nes ein großes „Hallo“, man tauschte sich kurz aus, was man gerade gemacht hat oder wo es als nächstes hinging und dann\nzog man weiter seines Weges.",[18,28803,28804],{},"Zum entspannen nutzte dann der Ein oder Andere den Monorail-Express, den kleinen Bummelzug oder so wie wir das Volo da\nVinci. So langsam war jeder schon ziemlich geschafft von der ganzen rumlauferei und dem vielen Achterbahnfahren. Zum\nEnde hin mobilisierten einige nochmal ihre Kräfte und holten sich einen letzten Adrenalinkick in der Blue Fire oder\nSilver-Star.",[18,28806,28807],{},[1794,28808],{"alt":28809,"src":28810},"\"europapark_02\"","https://media.synyx.de/uploads//2012/10/europapark_02.jpg",[18,28812,28813],{},"Treffpunkt war dann um 18.30 Uhr wieder am Bus, um wieder gemeinsam zurück zum Büro zu fahren. Hier merkten wir dann so\nrichtig, wie fertig wir alle waren. Zwar wurden zu Beginn noch rege Erlebnisse ausgetauscht, aber es wurde mit der Zeit\nmerklich ruhiger im Bus und man ertappte so manchen dabei, wie er während der Fahrt ein Nickerchen hielt.",[18,28815,28816],{},"Im Büro angekommen traf man sich dann noch kurz in der Küche, hielt nochmal einen kurzen Plausch über den Ausflug und so\nganz langsam löste sich die Gruppe dann auf. Ziemlich kaputt haben wir uns dann doch gefreut, endlich nach Hause zu\nkommen und nur noch alle Viere von sich zu Strecken.",[18,28818,28819],{},"Fazit: Es war ein gelungener Ausflug, an den wir uns gerne Erinnern. Vielen Dank an unsere Chefs, die uns den schönen\nTag ermöglicht haben. Auch wenn man im Europa Park nicht ständig mit allen etwas gemeinsam gemacht hat, war es doch so,\ndass es das Gemeinschaftsgefühl gestärkt hat. Wir freuen uns schon auf den nächsten Betriebsausflug und sind gespannt\nwohin es dann geht 🙂",{"title":48,"searchDepth":86,"depth":86,"links":28821},[],[614],"2012-10-01T16:35:30","https://synyx.de/blog/synyx-goes-to-europa-park/",{},"/blog/synyx-goes-to-europa-park",{"title":28765,"description":28774},"blog/synyx-goes-to-europa-park",[28830,28831,28832,28833,3122],"achterbahn","betriebsausflug","europa-park","rust","Freitag früh, um kurz nach 7 in Karlsruhe… Noch ziemlich verschlafen und müde schlagen die ersten Mitarbeiter im synyx-Büro auf. Eine fast unmenschliche Zeit für unsere Verhältnisse, denn normalerweise fangen…","4ZUMDpwJD6HGYtMqbfJBUcv0zb-RlEy-9rV3L4Ncu4E",{"id":28837,"title":28838,"author":28839,"body":28841,"category":28882,"date":28883,"description":28884,"extension":617,"link":28885,"meta":28886,"navigation":499,"path":28887,"seo":28888,"slug":28845,"stem":28889,"tags":28890,"teaser":28891,"__hash__":28892},"blog/blog/sommerfest.md","Sommerfest",[28840],"schlicht",{"type":11,"value":28842,"toc":28880},[28843,28846,28849,28856,28859,28865,28868,28871,28874],[14,28844,28838],{"id":28845},"sommerfest",[18,28847,28848],{},"Bei strahlendem Sonnenschein treffen wir uns im Klettergarten im Hardtwald und plündern erstmal unseren Kühlwagen bevor\nes auf die Bäume geht. In kleinen Gruppen werden wir jeweils einem Trainer zugeteilt, der uns den Klettergurt erklärt\nund aufpasst, dass keiner vergisst das Sicherungsseil festzuhalten.",[18,28850,28851,28855],{},[1794,28852],{"alt":28853,"src":28854},"\"The Pole\"","https://media.synyx.de/uploads//2012/08/P10809531-e1345923184341.jpg","\nGanz gruppendynamisch halten die Kollegen Seile fest, während ein oder zwei mehr oder weniger Furchtlose den Baumkronen\nentgegen klettern. Das einfachste Klettergerät ist eine sehr lange Leiter, die an Seilen von acht Leuten in der\nSenkrechten gehalten wird. Schwierig wird es an der Stelle, wo der Blick in die Tiefe geht, die Hände nix mehr zum\nfesthalten haben und doch noch ein paar Sprossen übrig sind. Besonders interessant ist das ganze natürlich für\ndiejenigen, die ein bisschen Höhenangst haben. Oder für Lucien, der mit verbundenen Augen über eine löchrige Hängebrücke\nspringt.",[18,28857,28858],{},"Irgendwann finde ich mich auf einer tellergroßen Plattform zwischen den Wipfeln wieder, ohne Geländer. 20 Meter unter\nmir stehen acht Menschen, die zwei Seile festhalten. Wie groß ist also die Wahrscheinlichkeit, das ich heil runter\nkomme? 20 zu zwei Achtel?",[18,28860,28861],{},[1794,28862],{"alt":28863,"src":28864},"\"Stairway\"","https://media.synyx.de/uploads//2012/08/P10900061.jpg",[18,28866,28867],{},"Die größte sportliche Herausforderung ist eine “Leiter” aus waagrechten Holzbalken. Die Balken haben einen Abstand von\neineinhalb Metern, so dass man nur mit Hilfe einer Seilschlaufe hochkommt. Nur mit Schlaufe? Ach was, meinen Seb und\nMacmac und wieseln sich einfach so nach oben.",[18,28869,28870],{},"Nach ein paar Stunden hat jeder seine Dosis Adrenalin gehabt und wir wenden uns dem üppigen Grillbüffet zu. Schnell\nwerden noch Öl für den Grill und Eis für den stromlosen Kühlwagen besorgt, dann kann es endlich losgehen. Wir schlemmen\nuns durch Schnitzel, Lammspieße, Maiskolben und andere leckere Sachen und vergessen am Ende fast, den Nachtisch\naufzutischen. Nebenher fliegen die Diabolos, man lernt ehemalige und zukünftige synyxer kennen und auch der Nachwuchs\nhat sich schon angefreundet.",[18,28872,28873],{},"Als der Klettergarten schließlich seine Bänke zusammen räumt, macht sich der harte Kern auf zum Schloss um dort\nweiterzufeiern. Wir stellen fest, dass es recht dunkel sein kann, wenn das Licht aus ist, finden aber doch alle den Weg.",[18,28875,28876],{},[1794,28877],{"alt":28878,"src":28879},"\"Grillen\"","https://media.synyx.de/uploads//2012/08/P10507881.jpg",{"title":48,"searchDepth":86,"depth":86,"links":28881},[],[614],"2012-08-25T22:53:23","Bei strahlendem Sonnenschein treffen wir uns im Klettergarten im Hardtwald und plündern erstmal unseren Kühlwagen bevor\\nes auf die Bäume geht. In kleinen Gruppen werden wir jeweils einem Trainer zugeteilt, der uns den Klettergurt erklärt\\nund aufpasst, dass keiner vergisst das Sicherungsseil festzuhalten.","https://synyx.de/blog/sommerfest/",{},"/blog/sommerfest",{"title":28838,"description":28848},"blog/sommerfest",[],"Bei strahlendem Sonnenschein treffen wir uns im Klettergarten im Hardtwald und plündern erstmal unseren Kühlwagen bevor es auf die Bäume geht. In kleinen Gruppen werden wir jeweils einem Trainer zugeteilt,…","BheQMvQxt1R0Pvh8XKqmYbLh7x6PJpzSsUfoD3NwoVY",{"id":28894,"title":28895,"author":28896,"body":28897,"category":28987,"date":28988,"description":28906,"extension":617,"link":28989,"meta":28990,"navigation":499,"path":28991,"seo":28992,"slug":28901,"stem":28993,"tags":28994,"teaser":28995,"__hash__":28996},"blog/blog/ein-jahr-bei-synyx-aus-sicht-eines-studenten.md","Ein Jahr bei synyx aus Sicht eines Studenten.",[19312],{"type":11,"value":28898,"toc":28985},[28899,28902,28907,28910,28913,28922,28927,28930,28933,28939,28942,28945,28948,28953,28956,28966,28976,28979,28982],[14,28900,28895],{"id":28901},"ein-jahr-bei-synyx-aus-sicht-eines-studenten",[18,28903,28904],{},[27,28905,28906],{},"Und wo ist das Büro?",[18,28908,28909],{},"Nach meiner Bewerbung bei synyx, wurde ich nach einer detaillierteren Auflistung meiner schon durchgeführten Projekte\ngefragt, die ich in der Bewerbung erwähnt hatte. Natürlich habe ich alles aufgezählt, an das ich einen Finger angesetzt\nhatte. So vermittelte ich zwar vielseitiges Interesse an Entwicklung in der Java-Umgebung, hatte jedoch wenige\nKenntnisse über Frameworks und Tools. Das Gespräch durfte ich mit Thomas und Flo halten. Immerhin ein Chef mit im\nMeeting, Grund genug, aufgeregt zu sein. Mein erster Gedanke jedoch war: “Zum Glück hab ich keinen Anzug angezogen,\nsogar das Hemd hätte ich im Schrank lassen können.” Nach der Vorstellung der Firma und einem Gespräch über meine\nKenntnisse und Interessen wurde mir das Büro gezeigt.",[18,28911,28912],{},"Ich war mir nicht sicher, ob ich mich wirklich in einem Büro befinde oder in einer von Nerds eingerichteten Wohnung.",[18,28914,28915,28916,28921],{},"Angefangen bei einem Poster von ",[585,28917,28920],{"href":28918,"rel":28919,"title":28920},"http://www.fabianbuch.com/",[589],"Fabian Buch"," (mit 3d Brille), über ominöse\nKalender in einem von männlichen Entwicklern beherrschten Büroraum, einem riesigen Aquarium, natürlich mit Webcam, einer\nCafé Lounge mit Retro-Games bis hin zu einer großen Küche mit ebenso großer Getränkeauswahl und leckerem Kaffee. Das\nalles vermittelte in einem Altbau mit hohen Stuckdecken und Parkettboden ein heimeliges Gefühl.",[18,28923,28924],{},[27,28925,28926],{},"Lernen, lernen, lernen",[18,28928,28929],{},"Durch Basteleien an unserer ehemaligen Homepage wurde ich an das Content Management System OpenCMS herangeführt. Hier\nimplementierte ich einen RSS Reader, der unsere Beiträge aus dem externen Blog in Kurzform auf der Homepage darstellt.\nDer Struktur von OpenCMS angenähert, wurde ich in ein Produktiv-Projekt integriert und kam das erste Mal mit Scrum in\nBerührung. Seitdem will ich Dailies nicht mehr missen. Strukturiert, immer auf dem neuesten Stand und als Student\ngleichermaßen wahrgenommen wie Projektleiter oder Festangestellter, programmiert es sich am einfachsten (oder am\nliebsten?).",[18,28931,28932],{},"Dazu kommt ein wöchentliches Freitagsmeeting, wodurch jeder einen Überblick über Entwicklungen in allen anderen\nProjekten bekommt und Berührungspunkte bemerkt. Damit werden wiederkehrende Probleme schnell identifiziert und gelöst.\nAußerdem werden Führungsentscheidungen kommuniziert was z.B. Sales oder HR angeht, bzw. Themen wie der aktuell\nanstehende Umzug diskutiert.",[18,28934,28935,28936,986],{},"Tools, die ich durch synyx intensiver, teils durch täglichen Gebrauch, (kennen-)gelernt habe: ChilliProject (früher\nRedmine) zur Projektverwaltung, Maven (bald vllt auch mal gradle) als Buildtool, svn und git zur Versionierung, Nexus,\nSonar, Jenkins, Konzepte wie Continuous-",[53,28937,28938],{},"Deployment|Integration|Delivery",[18,28940,28941],{},"Allgemein wird hier, nicht zuletzt durch ein internes Code Projekt und interne Schulungen (schule@synyx), sehr viel Wert\nauf Codequalität gelegt.",[18,28943,28944],{},"Mittlerweile habe ich in diversen Projekten ausgeholfen und da man als Student genauso behandelt wird wie feste\nMitarbeiter, kam es auch mal zu der Situation, dass ich in meinem Projekt für den Kunden der einzige Ansprechpartner bei\neinem Deployment war. Aber man wächst ja mit Verantwortung!",[18,28946,28947],{},"Der gesamte Arbeitstag wird durch einen IRC Chat begleitet, der zur internen und externen Kommunikation verwendet wird.\nVon Essensplanung über lustige Webfundstücke zu schnell diskutierten Themen wird hier alles angerissen. Man braucht\nseine Zeit, bis man die teilweise sehr nerdigen Insider intus hat.",[18,28949,28950],{},[27,28951,28952],{},"Und täglich grüßt das Murmeltier, aber nur ohne (Eigen-)Initiative",[18,28954,28955],{},"Etwa alle zwei Wochen gehen die einigermaßen sportlichen Mitarbeiter, Ehemalige und Freunde zum synoccer. Das wird in\nletzter Zeit von mir auf den letzten Drücker organisiert, wenn ich es nicht mal vergesse. Dann heißt es in der Halle\noder auch mal auf einem Freiplatz den Chef tunneln!",[18,28957,28958,28959,28965],{},"Als nächstes größeres Projekt steht bei mir die Diplomarbeit an. Dafür darf ich mir aus unserem durch\ndas ",[585,28960,28964],{"href":28961,"rel":28962,"title":28963},"http://www.ka-news.de/wirtschaft/karlsruhe/Karlsruher-Open-Source-Dienstleister-synyx-erhaelt-Foerderpreis;art127,907822",[589],"synyx bei Ka-News","Zentrale Innovationsprogramm Mittelstand (ZIM)","\ngeförderten Projekt einen Aspekt herauspicken und in Angriff nehmen.",[18,28967,28968,28969,28975],{},"Unser Arbeitsplatz-, Konferenzbudget, montl. Stammtische, Sommer-, Winterfest für Mitarbeiter, Ehemalige und Verwandte\nund die",[585,28970,28974],{"href":28971,"rel":28972,"title":28973},"http://kmu4family.mfg.de/de/best-practices/kochmuddi-und-co-bei-synyx-1.10804",[589],"Kochmuddi und co","Kochmuddi","\nzeigen, dass auf die ganz eigene Firmenkultur nicht nur Wert gelegt wird, sie wird auch gelebt. Was wohl auch die\nMaklerin fand, als fast die ganze Belegschaft das potentielle neue Büro begutachtet hat.",[18,28977,28978],{},"Man sollte bei synyx dazulernen wollen und Initiative zeigen, dann ist man hier richtig, dann macht es Spaß.",[18,28980,28981],{},"Ich könnte noch viel mehr erzählen, aber der Beitrag ist jetzt schon viel länger geworden, als ich eigentlich wollte.",[18,28983,28984],{},"Fazit: Bei synyx werden die Haare länger, aber nicht grau (außer bei Oli ",{"title":48,"searchDepth":86,"depth":86,"links":28986},[],[614],"2012-07-14T07:43:51","https://synyx.de/blog/ein-jahr-bei-synyx-aus-sicht-eines-studenten/",{},"/blog/ein-jahr-bei-synyx-aus-sicht-eines-studenten",{"title":28895,"description":28906},"blog/ein-jahr-bei-synyx-aus-sicht-eines-studenten",[],"Und wo ist das Büro? Nach meiner Bewerbung bei synyx, wurde ich nach einer detaillierteren Auflistung meiner schon durchgeführten Projekte gefragt, die ich in der Bewerbung erwähnt hatte. Natürlich habe ich…","N-EqIgcd3ZNt1zWR2sbNG0wqdpYHQ_43qvTAX27YYpg",{"id":28998,"title":28999,"author":29000,"body":29001,"category":29039,"date":29040,"description":29041,"extension":617,"link":29042,"meta":29043,"navigation":499,"path":29044,"seo":29045,"slug":29005,"stem":29046,"tags":29047,"teaser":29049,"__hash__":29050},"blog/blog/synyx-open-source-projekte-jetzt-auf-github.md","synyx Open Source Projekte jetzt auf GitHub",[21028],{"type":11,"value":29002,"toc":29037},[29003,29006,29009,29025,29028],[14,29004,28999],{"id":29005},"synyx-open-source-projekte-jetzt-auf-github",[18,29007,29008],{},"Wer sich öfters auf unserer Webpräsenz umschaut, hat sicherlich bemerkt, dass wir unsere Open Source Projekte bisher auf\nsynyx.org veröffentlicht haben. Die Pflege von synyx.org, z.B. das manuelle Freischalten neuer User, nahm viel Zeit in\nAnspruch, und ehrlich gesagt, programmieren wir lieber als User zu verwalten.",[18,29010,29011,29012,13322,29018,29024],{},"Seit Ende letzten Jahres haben wir einige Projekte auch auf GitHub veröffentlicht. Bis jetzt liefen beide Plattformen\nparallel. Wir haben uns entschieden, synyx.org abzuschalten, und unsere Open Source Projekte komplett auf GitHub\numzuziehen. Die Vorteile liegen eindeutig auf der Hand: GitHub bietet einfache Mechanismen,\nwie ",[585,29013,29017],{"href":29014,"rel":29015,"title":29016},"https://de.wikipedia.org/wiki/Abspaltung_%28Softwareentwicklung%29",[589],"Wikipedia: Forking / Abspaltung","Forks",[585,29019,29023],{"href":29020,"rel":29021,"title":29022},"http://www.heise.de/glossar/entry/Git-Pull-Request-397971.html",[589],"Heise: Pull Request","Pull Requests",", an um\nInteressierten die Möglichkeit zu bieten an unseren Projekten mitzuarbeiten.",[18,29026,29027],{},"Dank GitHub API, svn2git, Textile/Markdown in Gollum und Git war die Migration vom Redmine-basierten synyx.org zu\nGitHub relativ problemlos.",[18,29029,29030,29031,29036],{},"Wer an unseren Open Source Projekten Interesse hat, kann sich\nauf ",[585,29032,29033],{"href":29033,"rel":29034,"title":29035},"https://github.com/synyx/",[589],"GitHub synyx"," einfach mal umschauen.",{"title":48,"searchDepth":86,"depth":86,"links":29038},[],[614],"2012-06-26T11:00:57","Wer sich öfters auf unserer Webpräsenz umschaut, hat sicherlich bemerkt, dass wir unsere Open Source Projekte bisher auf\\nsynyx.org veröffentlicht haben. Die Pflege von synyx.org, z.B. das manuelle Freischalten neuer User, nahm viel Zeit in\\nAnspruch, und ehrlich gesagt, programmieren wir lieber als User zu verwalten.","https://synyx.de/blog/synyx-open-source-projekte-jetzt-auf-github/",{},"/blog/synyx-open-source-projekte-jetzt-auf-github",{"title":28999,"description":29008},"blog/synyx-open-source-projekte-jetzt-auf-github",[17568,20837,29048],"redmine","Wer sich öfters auf unserer Webpräsenz umschaut, hat sicherlich bemerkt, dass wir unsere Open Source Projekte bisher auf synyx.org veröffentlicht haben. Die Pflege von synyx.org, z.B. das manuelle Freischalten neuer…","-2nTQFX94lk0-P6SIZtLNuZgY8Yx4uf4o138Cj--5IA",{"id":29052,"title":29053,"author":29054,"body":29055,"category":29089,"date":29090,"description":29062,"extension":617,"link":29091,"meta":29092,"navigation":499,"path":29093,"seo":29094,"slug":29095,"stem":29096,"tags":29097,"teaser":29098,"__hash__":29099},"blog/blog/kochen-fur-die-kochmuddi.md","Kochen für die Kochmuddi",[28180],{"type":11,"value":29056,"toc":29087},[29057,29060,29063,29066,29069,29072,29075,29078,29081,29084],[14,29058,29053],{"id":29059},"kochen-für-die-kochmuddi",[18,29061,29062],{},"Gestern gab es bei synyx ein besonderes Event!",[18,29064,29065],{},"Unsere Kochmuddi hatte gestern ihren 50. Geburtstag. Das haben wir uns natürlich zum Anlass genommen, ihr einmal eine\nbesondere Freude zu machen und uns für das viele leckere Essen bei ihr zu bedanken.",[18,29067,29068],{},"Die Planung startete bereits letzte Woche. Was können wir machen? Was soll man ihr schenken? Aus den Reihen der Kollegen\nkam dann die Idee, warum kochen wir nicht einfach für unsere Kochmuddi? Die Idee fand großen Anklang und so überlegten\nwir uns, was wir denn Gutes zaubern könnten. Schnell stand fest, es sollte was regionales sein. Die Wahl fiel dann auf\nKartoffelsuppe mit Apfelküchle.",[18,29070,29071],{},"Nun war noch die Frage: Wie können wir unsere Kochmuddi davon abhalten zu kochen und sie trotzdem unter einem Vorwand\nherlocken? Und noch wichtiger, sie sollte davon ja nichts mitbekommen!",[18,29073,29074],{},"So ganz ohne kleine Schwindelei ging das dann doch nicht. Daher haben wir sie am Dienstag angerufen und ihr erklärt,\ndass sich keiner zum Essen angemeldet habe. Das hat sie doch ersteinmal geschockt und ihr leider eine etwas schlaflose\nNacht bereitet, da sie sich Sorgen gemacht hat, ob das letzte Essen so schlecht war. Wir erklärten ihr dann noch, sie\nmüsse aber trotzdem kommen, da wir noch einen wichtigen Kunden erwarten würden und die Meetingräume doch ganz dringend\nnoch gereinigt werden müssten. Das würde erst um 12.30 Uhr gehen, da vorher noch ein anderes Meeting stattfindet. Zum\nGlück hat sie es uns abgekauft!",[18,29076,29077],{},"Bereits am Dienstag wurde schon der Großeinkauf erledigt. Unser Chef Thomas stand sogar Dienstag Nachmittag in der Küche\nund machte ein tolles Dessert. Beim zweiten Versuch klappte es auch mit der Sahne, die vorher zu Butter geworden war (\nAnmerkung: Wir könnten uns an ein Dessert a la Chef gewöhnen).",[18,29079,29080],{},"Viele Helfer standen Mittwoch früh mit Küchenwerkzeug bewaffnet schon um 9 Uhr bereit, damit alles pünktlich fertig\nwerden konnte. So legten wir Morgens gleich los mit Kartoffeln schälen und schnippeln. Einen Berg von 9 kg hatten wir\nvor uns liegen. Immerhin mussten ca. 24 hungrige Mäuler gestopft werden. Wir kamen uns vor, wie in einer Großküche.\nAnschließend mussten noch die 26 Äpfel geschält, entkernt und geschnitten werden, sowie der Teig für die Apfelküchle\nangerührt werden. 30 Eier und 1,5 kg Mehl, was für ein Act! In Rekordzeit schafften wir es, die ganzen Apfelküchle noch\nrechtzeitig zum Essen auszubraten. Dank der kleinen Verspätung unserer Kochmuddi war also wirklich alles fertig, als sie\nkam.",[18,29082,29083],{},"Sie schaute schon etwas verdutzt, dass sich so viele in der Küche tummelten als sie ankam. Kurzerhand verfrachteten wir\nunsere Kochmuddi auf einen Stuhl, gratulierten ihr und unsere Chefs überreichten ihr das Present, dass wir noch\norganisiert hatten. Dabei erklärten wir ihr auch, dass sie heute mit uns mitessen muss, da wir extra für sie gekocht\nhaben. Unsere Kochmuddi war völlig sprachlos und mit Tränen in den Augen. Selbstverständlich freute sich jeder, dass die\nÜberraschung so gut geglückt war und sie sich so darüber gefreut hat. Sogar unser Essen hat ihr sehr gut geschmeckt.",[18,29085,29086],{},"Aber ganz ehrlich… wir sind froh, dass wir den Job nicht machen müssen und für die Menge kochen! Hoffentlich kommt sie\nganz schnell aus ihrem verdienten Urlaub wieder und kann uns dann alle wieder köstlich bekochen! Kochmuddi, du bist die\nBeste und hoffentlich bleibst du uns noch lange bei synyx erhalten!",{"title":48,"searchDepth":86,"depth":86,"links":29088},[],[614],"2012-06-14T14:54:40","https://synyx.de/blog/kochen-fur-die-kochmuddi/",{},"/blog/kochen-fur-die-kochmuddi",{"title":29053,"description":29062},"kochen-fur-die-kochmuddi","blog/kochen-fur-die-kochmuddi",[],"Gestern gab es bei synyx ein besonderes Event! Unsere Kochmuddi hatte gestern ihren 50. Geburtstag. Das haben wir uns natürlich zum Anlass genommen, ihr einmal eine besondere Freude zu machen…","uOWQAEe8MI4bip4n5brPYQCbmOpfdWXtKiDdqdreHOA",{"id":29101,"title":29102,"author":29103,"body":29104,"category":29135,"date":29136,"description":29137,"extension":617,"link":29138,"meta":29139,"navigation":499,"path":29140,"seo":29141,"slug":29142,"stem":29143,"tags":29144,"teaser":29145,"__hash__":29146},"blog/blog/schauspieltechniken-fur-beruf-und-alltag-braucht-man-das.md","Schauspieltechniken für Beruf und Alltag – Braucht man das?",[28180],{"type":11,"value":29105,"toc":29133},[29106,29109,29112,29115,29118,29121,29124,29127,29130],[14,29107,29102],{"id":29108},"schauspieltechniken-für-beruf-und-alltag-braucht-man-das",[18,29110,29111],{},"Zunächst war ich etwas skeptisch, als ich die Anmeldebestätigung vom CyberForum für den Workshop “Schauspieltechniken\nfür Beruf und Alltag” erhielt, für den Katja uns einfach angemeldet hat. Wozu braucht man das überhaupt? Man will doch\nseinem Umfeld nichts vorspielen? Ehrlichkeit ist doch das A und O in zwischenmenschlichen Beziehungen! Es ging hier\njedoch nicht darum, anderen etwas “vorzuspielen”, das sollte ich im Verlauf des Workshops noch feststellen.",[18,29113,29114],{},"Somit ließ ich mich einfach überraschen und ging eher ohne große Erwartungen am vergangenen Donnerstag mit Katja\ndorthin. Der Workshop fand im Staatstheater in Karlsruhe, in einem der Probenräume, statt. Frau Daniela Vöge, die\nLeiterin des Workshops, ist Diplom-Politologin, Schauspielerin, Kulturmanagerin und Theaterpädagogin (BuT). Sie war\nfünf Jahre Leitende Theaterpädagogin am Staatstheater in Karlsruhe und ist Lehrbeauftragte am KIT.",[18,29116,29117],{},"Zunächst stellte sich jeder Teilnehmer kurz vor und tat seine Erwartungen kund. Nach der kurzen Vorstellung bat uns Frau\nVöge dann alle einfach mal kreuz und quer durch den Raum zu laufen. Erst normal, dann zügig, danch sollten wir uns immer\nein Ziel suchen, auf das wir zuliefen. Derweil wir so durch den Raum liefen, ohne eine wirkliche Ahnung wozu diese Übung\ngut sein sollte, erklärte uns Frau Vöge den nächsten Schritt. Wir sollten also weiterlaufen und auf ihr Zeichen warten.\nSobald sie “Stopp” gesagt hat, sollten wir stehenbleiben, die Augen schließen und auf die Person zeigen, die sie uns an\nHand eines Kleidungstückes beschrieben hat. Diese Übung war gar nicht so einfach, da man sich auf sein “Ziel”\nkonzentriert hat und dabei nicht unbedingt auf die anderen Teilnehmer geachtet hat, wo diese stehen oder was sie\nanhaben. Mit der Zeit klappte die Übung allerdings auch etwas besser.",[18,29119,29120],{},"Für die nächste Übung wurden wir in zwei Gruppen aufgeteil. Auch hier sollten wir wieder durch den Raum laufen. Diesmal\nbekam jedoch immer eine Gruppe die Anweisung stehen zubleiben, der Rest sollte weiterlaufen. Nachdem das wirklich\neinfach war, sollten die Gruppen selbständig stehenbleiben oder weiterlaufen. Hier musste also jeder auf seine Gruppe\nachten. Diese Übung war zwar wesentlich einfacher, man spürte aber auch deutlich, dass man mit der Zeit anfing\nwesentlich mehr wahrzunehmen als nur sein “Ziel”.",[18,29122,29123],{},"Die nächste Übung wurde dann richtig spannend. Wir sollten uns vorstellen, dass sich das sich die nächste Situation an\neiner Bushaltestelle abspielt.Vier der Teilnehmer waren die Darsteller und der Rest Beobachter. Jeder der Darsteller\nsollte nun eine Person mit hohem oder niedrigen Status spielen (auf vier Stufen aufgeteilt). Nun sollten die Beobachter\nan Hand der Körpersprache sehen, welchen Status welcher Darsteller hat. Es war wirklich interessant, denn auch ohne das\nein Wort gesprochen wurde, lagen wir mit unserer Bewertung richtig. In der nächsten Stufe wurde das nocheinmal etwas\nschwieriger, denn hier gab es dann fünf Stufen, somit eine “neutrale” Person. Aber auch hier konnte man das an der\nKörpersprache gut erkennen.",[18,29125,29126],{},"Als nächstes gab es dann noch ein paar kurze Rollenspiele, die wir in Zweier-Gruppen vorführen durften. Auch hier stand\ndie Körpersprache im Vordergrund. Besonders lustig wurde es, als sich jeder ein Fantasiewort zusammenstellen sollte,\nmeins war “fassdeuschakratet”, und damit dann eine Szene spielen sollte. Das Wort diente dazu, um zu zeigen, dass es\nnicht unbedingt darauf ankommt WAS man sagt, sondern WIE und was man vorab schon durch die Körpersprache zum Ausdruck\nbringt.",[18,29128,29129],{},"Fazit: Mich hat der Workshop wirklich überzeugt. Ich bin mit dem Gefühl dort rausgegangen, etwas Sicherheit zu bekommen,\nwenn ich anderen gegenüberstehe und etwas sage. Auch ist mir bewusst geworden, wie viel wir doch durch unsere\nKörpersprache schon preisgeben und es dadurch unserem Gegenüber manchmal leichter oder aber auch schwerer machen uns zu\nmanipulieren. Denn merkt mein Gegenüber, dass ich unsicher bin weil ich das durch meine Körperhaltung zum Ausdruck\nbringe, wird es für mich umso schwieriger mein Vorhaben rüberzubringen und davon zu überzeugen.",[18,29131,29132],{},"Ich freue mich jetzt schon auf den Fortsetzungskurs im Juli und bin gespannt, was ich dort dann für mich selbst\nmitnehmen kann.",{"title":48,"searchDepth":86,"depth":86,"links":29134},[],[614],"2012-05-04T15:04:26","Zunächst war ich etwas skeptisch, als ich die Anmeldebestätigung vom CyberForum für den Workshop “Schauspieltechniken\\nfür Beruf und Alltag” erhielt, für den Katja uns einfach angemeldet hat. Wozu braucht man das überhaupt? Man will doch\\nseinem Umfeld nichts vorspielen? Ehrlichkeit ist doch das A und O in zwischenmenschlichen Beziehungen! Es ging hier\\njedoch nicht darum, anderen etwas “vorzuspielen”, das sollte ich im Verlauf des Workshops noch feststellen.","https://synyx.de/blog/schauspieltechniken-fur-beruf-und-alltag-braucht-man-das/",{},"/blog/schauspieltechniken-fur-beruf-und-alltag-braucht-man-das",{"title":29102,"description":29111},"schauspieltechniken-fur-beruf-und-alltag-braucht-man-das","blog/schauspieltechniken-fur-beruf-und-alltag-braucht-man-das",[],"Zunächst war ich etwas skeptisch, als ich die Anmeldebestätigung vom CyberForum für den Workshop “Schauspieltechniken für Beruf und Alltag” erhielt, für den Katja uns einfach angemeldet hat. Wozu braucht man…","3ymSzNWbApVf9wzLF-MB_7V2Kswo-omkjDp6qIZqCSA",{"id":29148,"title":29149,"author":29150,"body":29151,"category":29252,"date":29253,"description":29254,"extension":617,"link":29255,"meta":29256,"navigation":499,"path":29257,"seo":29258,"slug":29155,"stem":29259,"tags":29260,"teaser":29263,"__hash__":29264},"blog/blog/my-take-on-things-java-community-events-vs-java-conferences.md","My take on things – Java Community events vs. Java Conferences",[25771],{"type":11,"value":29152,"toc":29250},[29153,29156,29159,29164,29167,29172,29177,29184,29187,29192,29197,29200,29203,29207,29212,29215,29218,29223,29226,29229,29234,29237,29240,29243,29247],[14,29154,29149],{"id":29155},"my-take-on-things-java-community-events-vs-java-conferences",[18,29157,29158],{},"Heute will ich einmal die Gelegenheit nutzen und die beiden wohl populärsten Konferenzen für Java-Entwicklung innerhalb\nEuropas gegenüberstellen. Dazu muss ich aber fairerweise anmerken, dass ich die Devoxx’2011 komplett besuchte, während\nich auf der JAX’2012 leider nur 2 Tage sein konnte.",[18,29160,29161],{},[27,29162,29163],{},"Organisation:",[18,29165,29166],{},"Hier können beide Konferenzen eindeutig punkten. Die JAX war an den beiden Tagen meines Besuchs hervorragend\norganisiert, es gab kaum Wartezeiten oder aber überfüllte Säle, selbst bei den recht beliebten Keynotes nicht. Beide\nVeranstaltungen profitieren natürlich von den hervorragenden Locations. Dies macht die Organisation deutlich einfacher,\nwas man wirklich an vielen, vielen Kleinigkeiten bemerkt. Die Devoxx liegt hier aber aufgrund der Tatsache das sie in\neinem der größten Kinos in Europa stattfindet noch einen Punkt besser im Rennen. Die Bequemlichkeit der Säle ist einfach\nungeschlagen (Kinosessel der modernsten Art!) und natürlich auch die Sicht. Während man im einen oder anderen Talk auf\nder JAX auf einmal eine Säule oder den Beamer im Weg hatte (ist eben nicht besser machbar) gibt es aufgrund der\nperfekten Location auf der Devoxx solche Probleme nicht.",[18,29168,29169],{},[573,29170,29171],{},"+1 für die Devoxx",[18,29173,29174],{},[27,29175,29176],{},"Verpflegung:",[18,29178,29179,29180,29183],{},"Die Verpflegung ist ja immer so eine Sache auf Konferenzen, die einen brauchen nur Kaffee, die anderen dauernd\nNervenfutter und Süßes für ihre ",[573,29181,29182],{},"Konzentration."," Die Devoxx bietet mit dauernden Kaffeetankstellen als auch dauernd\ngefüllten Kühlschränken recht ordentliche Ausstattung. Auch für Frühstück, Mittagessen und einen Nachmittagssnack ist\ngesorgt. An für sich gibt es hier keine Klagen. Ach doch, bitte, bitte liebe Devoxxianer … sorgt für besseren Kaffee!!!!\nIch bezahle gerne ein wenig mehr 🙂",[18,29185,29186],{},"Das Angebot der Devoxx ist allerdings in keinster Weise mit dem Angebot der JAX zu vergleichen. Auf der JAX gab es\nwährend der 2 Tage alles, was das Herz begehrt. Guten Kaffee, hervorragende Zwischensnacks und ein Buffet zu quasi jeder\nTageszeit, natürlich unterschiedlichst befüllt. Hierfür muss ich großen Respekt zollen. Das war einfach unfassbar gut\nund lecker! Einzig eine Kleinigkeit der Verbesserung fällt mir noch ein. Man könnte Beschildern, was wirklich\nvegetarisch oder aber vegan ist. Das Personal am Buffet konnte aber nahezu jede Frage beantworten und so hatte man auch\nals Vegetarier das gute Gefühl ordentlich zu essen 🙂",[18,29188,29189],{},[573,29190,29191],{},"+1 für die JAX",[18,29193,29194],{},[27,29195,29196],{},"Technische Ausstattung:",[18,29198,29199],{},"Ja die technische Ausstattung ist natürlich so eine Sache. Die Devoxx ist hier klar im Vorteil durch die wirklich\ngeniale Location. Gegen solch einen Sound und eine Sicht und eine Lichtstärke der Beamer und Projektoren ist natürlich\nkein Gras gewachsen.",[18,29201,29202],{},"Vergleichbar sind also letztlich nur die kleineren Dinge wie Mikrofone oder aber die Gadgets. Auf beiden Seiten\narbeiteten aufopferungssvoll die Techniker an einer perfekten Situation. Ein kleiner Pluspunkt für die Devoxx vielleicht\naufgrund der sehr gut angenommenen Twitterwall und den einfach unschlagbar guten Apps für die Mobile Devices. Auf der\nDevoxx ist das WLan auch eindeutig besser, da man in einigen Sälen der JAX schlicht keines hatte (zumindest ging es mir\nund meinen Kollegen so für die Räume im Keller).",[18,29204,29205],{},[573,29206,29171],{},[18,29208,29209],{},[27,29210,29211],{},"Anspruch Sessions, Workshops:",[18,29213,29214],{},"Hier erspare ich mir einen Vergleich, da es einfach kaum zu vergleichen ist. Die Devoxx wird seit 2 Jahren von den\ngroßen Firmen hinter Java als Podest genutzt und ist einfach auch besser international erreichbar, daher sind die\nSpeaker rein namentlich schon kaum zu schlagen (für den der Wert darauf legt). Oracle als auch Google oder Springsource\nhaben regelmäßig ihre TopSpeaker an Bord. Auf der JAX wirken die Talks auch deutlich lösungsorientierter, während es auf\nder Devoxx sehr sehr viel um die reine Entwicklung geht. Hier spürt man meiner Meinung nach einfach auch die Geschichte\nbeider Konferenzen noch sehr. Die Devoxx welche aus der Community entstand, während die JAX ein kommerzielles Event ist.",[18,29216,29217],{},"Daher erspare ich mir auch den Vergleich der Kosten, das macht reichlich wenig Sinn und jeder sollte für sich\nentscheiden, was hier ein gutes Maß ist und was nicht. Eine Kleinigkeit aber, die die Devoxxianer bereits seit einigen\nJahren machen, sollte sich hier die JAX doch noch abschauen: Den Talks ein Level mitgeben, für wen sie geeignet sind (\nbsp. Beginner, Senior, Expert oder vgl..) Ich saß dann doch ein zwei Mal in einem Talk, wo einfach das eigene Wissen\ngrößer war als das des Speakers.",[18,29219,29220],{},[27,29221,29222],{},"Speaker:",[18,29224,29225],{},"Die Speaker sind natürlich eine sehr schwer vergleichbare Sache, alleine schon durch die oben bereits erwähnte Tatsache,\ndass die Devoxx von den großen drei als Bühne genutzt wird, während die JAX hier nicht so populär ist. Allerdings kann\nauch die JAX mit sehr namhaften und erfahrenen Speakern punkten und holt hier aus meiner Sicht Jahr für Jahr auf.",[18,29227,29228],{},"Ich mag hier keinen Punkt für die eine oder andere Seite geben.",[18,29230,29231],{},[27,29232,29233],{},"Umgebung:",[18,29235,29236],{},"Die JAX findet in einer echten Konferenzlocation statt, während die Devoxx, wie bereits erwähnt in einem der größten\nKinokomplexe Europas stattfindet. Das macht sich natürlich auch in der Umgebung bemerkbar, könnte man meinen. Aber: Das\nKino ist wirklich derart am Ende von Antwerpen, dass dies viel eher ein Nachteil ist, denn ein Vorteil. Die\nRheingoldhalle in der die JAX nun seit 2011 stattfindet ist deutlich direkter in der Stadt selbst, was für das Programm\ndanach sehr von Vorteil ist.",[18,29238,29239],{},"Für mich als Besucher aus Süddeutschland ist die JAX natürlich eine Top-Location, da ich sogar pendeln kann, wenn ich\nmag. Die Devoxx schlägt hier direkt noch mit einer 5 Stunden Anfahrt zu, ist allerdings auch per Flieger direkt zu\nerreichen, während man für Mainz wohl am besten über FFM fliegt und dann noch ein wenig die DB genießt. Allerdings kann\nder Vorteil des direkten Flughafens in der Stadt wohl doch bei internationalen Speakern punkten.",[18,29241,29242],{},"Dennoch gebe ich aufgrund meiner persönlichen Situation hier den Punkt an die JAX.",[18,29244,29245],{},[573,29246,29191],{},[18,29248,29249],{},"Zusammenfassend kann man wohl sagen, dass beide Konferenzen ihre Fans haben und sich auch nicht so ähnlich sind, dass\nman nicht beide besuchen könnte. Ich persönlich werde wohl auch dieses Jahr wieder die Devoxx besuchen und dann im\nFrühjahr 2013 wieder die JAX… 😉",{"title":48,"searchDepth":86,"depth":86,"links":29251},[],[614],"2012-04-25T09:44:39","Heute will ich einmal die Gelegenheit nutzen und die beiden wohl populärsten Konferenzen für Java-Entwicklung innerhalb\\nEuropas gegenüberstellen. Dazu muss ich aber fairerweise anmerken, dass ich die Devoxx’2011 komplett besuchte, während\\nich auf der JAX’2012 leider nur 2 Tage sein konnte.","https://synyx.de/blog/my-take-on-things-java-community-events-vs-java-conferences/",{},"/blog/my-take-on-things-java-community-events-vs-java-conferences",{"title":29149,"description":29158},"blog/my-take-on-things-java-community-events-vs-java-conferences",[29261,6240,29262,290,5836,9250],"community","devoxx-conference","Heute will ich einmal die Gelegenheit nutzen und die beiden wohl populärsten Konferenzen für Java-Entwicklung innerhalb Europas gegenüberstellen. Dazu muss ich aber fairerweise anmerken, dass ich die Devoxx’2011 komplett besuchte,…","LlCT-W2p4EzOxwXO4tBpBQx5VG80g60BW-CYXAspPV0",{"id":29266,"title":29267,"author":29268,"body":29269,"category":29358,"date":29359,"description":29360,"extension":617,"link":29361,"meta":29362,"navigation":499,"path":29363,"seo":29364,"slug":29273,"stem":29366,"tags":29367,"teaser":29369,"__hash__":29370},"blog/blog/meine-erste-konferenz-jax-2012.md","Meine erste Konferenz: JAX 2012",[21597],{"type":11,"value":29270,"toc":29353},[29271,29274,29283,29289,29298,29301,29307,29342,29346],[14,29272,29267],{"id":29273},"meine-erste-konferenz-jax-2012",[18,29275,26598,29276,29282],{},[585,29277,29281],{"href":29278,"rel":29279,"title":29280},"http://jax.de/",[589],"JAX2012","JAX 2012"," war durch ihren (für uns) günstig gelegenen Veranstaltungsort in Mainz mit\neiner Anfahrtszeit von unter zwei Stunden ein leicht zu erreichendes Ziel und daher entschloss auch ich mich an der\nKonferenz teilzunehmen. Eine Unterkunft hatte ich mir auch schnell besorgt, da ein alter Freund von mir in Mainz wohnt.\nIch hatte mich für den JavaEE Workshop von Adam Bien am Montag entschieden und wollte dann noch den ersten Tag der\nHauptkonferenz am Dienstag besuchen. Da dies meine erste Konferenz war, war ich sehr gespannt, was mich erwarten würde.",[3469,29284,29286],{"id":29285},"montag",[27,29287,29288],{},"Montag",[18,29290,29291,29297],{},[585,29292,29296],{"href":29293,"rel":29294,"title":29295},"http://it-republik.de/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=jax2012&id=21327",[589],"\"Java EE: einfacher ist unmöglich\"","“Java EE: einfacher ist unmöglich”","\nmit Adam Bien",[18,29299,29300],{},"Obwohl wir bei synyx nicht mit JavaEE arbeiten, sondern in erster Line auf Spring aufbauen, erwartete ich einige\nwertvolle Erkenntnisse aus dem Workshop mitnehmen zu können. Zum einen wurde mir Adam Bien als ein sehr pragmatischer\nund praxisnaher Redner empfohlen und zum anderen sollte man als Softwareentwickler neben den Frameworks, die man selbst\nverwendet, auch immer die Alternativen im Auge behalten. Von Adam Bien als Leiter des Workshops war ich schnell\nüberzeugt. Man merkte sofort, dass er ein hohes Maß an technischem Know-how und Projekterfahrung mitbringt und er\nversteht es durch einen lockeren und offenen Vortragsstil sein Wissen an seine Zuhörer weiterzugeben. Nicht zuletzt sind\nes auch seine pragmatischen und teilweise recht provokanten Ansichten, welche seine Vorträge interessant machen. So\nbekam ich an diesem Tag viele interessante Denkanstöße und musste auch einige meiner Ansichten überdenken. Ein Beispiel\nwar hier etwa die Nutzung von externen Libraries immer konsequent nach ihrer Notwendigkeit und dem tatsächlichen Nutzen\nfür das Projekt zu hinterfragen und im Zweifelsfall immer auf zusätzliche Abhängigkeiten zu verzichten. Die konkreten\nJavaEE Themen brachten mir zwar weniger relevante Erkenntnisse als ich anfangs gehofft hatte, aber ich konnte trotzdem\neinige Ideen für konkret anstehende Probleme in unseren Projekten übernehmen. Ein Problem während des Workshops war das\nhohe Vortragstempo. Zwar konnte ich ihm stets folgen und meist alles nachvollziehen, allerdings dauerte es immer eine\nWeile bis ich das Gesagte so weit nachvollziehen konnte, dass ich mir Konsequenzen und entsprechende Fragen dazu\nüberlegen konnte. Da wir bis dahin meist schon längst bei einem ganz anderen Thema angelangt waren, wurden relativ wenig\nFragen gestellt, obwohl Adam Bien ständig für solche offen war. Praktisch war hier allerdings, dass er den Code, den er\nwährend des Workshops mit uns entwickelte, sofort Online stellte und auch in den Pausen für Fragen zur Verfügung stand.",[3469,29302,29304],{"id":29303},"dienstag",[27,29305,29306],{},"Dienstag",[18,29308,29309,29310,29315,29316,29321,29322,29327,29328,29334,29335,29341],{},"Der Dienstag startete mit einer offiziellen Begrüßung der Teilnehmer zur Hauptkonferenz und der\nanschließenden ",[585,29311,29314],{"href":29312,"rel":29313,"title":29314},"http://it-republik.de/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=jax2012&id=21733",[589],"Keynote von Dennis Leung",".\nNach dem aus meiner Sicht etwas trägen Vortrag freute ich mich auf einen weiteren Vortrag von Adam Bien zum\nThema ",[585,29317,29320],{"href":29318,"rel":29319,"title":29320},"http://it-republik.de/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=jax2012&id=21328",[589],"Stresstests",".\nDieser gefiel mir auch inhaltlich sehr. Zum einen beleuchtete Bien den Umgang mit Unittests und prangerte an, dass in\nvielen Unternehmen nur die reinen Prozentzahlen für Codeabdeckung betrachtet würden und nicht darauf geachtet würde, die\ntatsächlich kritischen Stellen im Code zu testen. Zum anderen ging er auf die Vorteile von regelmäßigen Stresstests ein\nund warum diese schon beim Start eines Projekts viele wichtige Erkenntnisse bringen können. Während die naive\nBetrachtung von Codeabeckung für synyx kein Thema sein dürfte, hoffe ich meine gewonnen Erkenntnisse zu Stresstests in\nmeine aktuelle Projektarbeit einbringen zu können. In den Pausen hatte ich die Gelegenheit mir die unterschiedlichen\nStände der anwesenden Unternehmen anzuschauen und mehr als einmal wurde ich mit Einstellungen und Philosophien\nkonfrontiert, mit denen ich mich gar nicht anfreunden konnte. Die wichtigste Erkenntnis für mich war hier: Ich bin froh,\ndass ich bei synyx arbeite! Ein Highlight an diesem Tag war dann\nder ",[585,29323,29326],{"href":29324,"rel":29325,"title":29326},"http://it-republik.de/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=jax2012&id=21679",[589],"Vortrag über Big Data","\nvon Chris Blessington im Rahmen der Key Note nach dem Mittagessen (welches übrigens wie die gesamte Verpflegung während\nder beiden Tage sehr gelungen war). Obwohl hier wenig technisches Wissen vermittelt wurde, war der Vortrag für mich eine\nsehr gute Einführung in eine Thematik, mit der ich mich bisher noch kaum befasst habe. Außerdem waren die vorgestellten\nMöglichkeiten und Visionen mit Big Data sehr beeindruckend. Anschließend besuchte ich den Vortrag von Michael Plöd und\nOlaf Siefart zum\nThema ",[585,29329,29333],{"href":29330,"rel":29331,"title":29332},"http://it-republik.de/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=jax2012&id=21067",[589],"\"Best Practices für große Wicket-Anwendungen\"","“Best Practices für große Wicket-Anwendungen”",",\nwelcher der Hauptgrund für meine Teilnahme an diesem Konferenztag war. Wir setzen Wicket in unserem aktuellen\nCode-Clinic Projekt ein und daher konnte ich einige nützliche Hinweise für unsere tägliche Arbeit mitnehmen. Mein\nletzter Vortrag für diesen Tag\nwar ",[585,29336,29340],{"href":29337,"rel":29338,"title":29339},"http://it-republik.de/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=jax2012&id=20784",[589],"\"Java Persistence: Standard meets Reality\"","“Java Persistence: Standard meets Reality”","\nvon Arne Limburg. Leider hatte ich übersehen, dass dieser Vortrag Teil des JavaEE days war und daher wenig allgemeine\nInformationen zu JPA enthielt. Trotzdem war es auch hier interessant den Vergleich zur Nutzung von JPA in Spring und\nJavaEE zu sehen.",[3469,29343,29344],{"id":968},[27,29345,969],{},[18,29347,29348,29349,29352],{},"Die JAX war auf jeden Fall eine sehr interessante Erfahrung für mich und ich freue mich schon auf meine nächste\nKonferenz. Ich habe viele Eindrücke zu Themen sammeln können, von denen ich vorher noch kaum etwas gehört habe.\nBesonders intensiv war hierbei der Einblick in die JavaEE Welt, was mir vor allem eine andere Sichtweise auf das von uns\neingesetzte Spring Framework eröffnete. Trotzdem war meine Themenauswahl hier wohl etwas ungünstig, da in den JavaEE\nVorträgen sowie im Workshop doch sehr viele Details vorgestellt wurden, die für meine tägliche Arbeit kaum relevant\nsind. Dennoch konnte ich auch für die konkret anstehenden Probleme in unserem Projekt durch die Vorträge von Adam Bien\nund den Vortrag über Best Practices mit Wicket einige Ideen sammeln, was mich die ",[585,29350,29281],{"href":29278,"rel":29351,"title":29280},[589],"\nschlussendlich als Erfolg verbuchen lässt.",{"title":48,"searchDepth":86,"depth":86,"links":29354},[29355,29356,29357],{"id":29285,"depth":86,"text":29288},{"id":29303,"depth":86,"text":29306},{"id":968,"depth":86,"text":969},[614],"2012-04-19T10:03:46","Die JAX 2012 war durch ihren (für uns) günstig gelegenen Veranstaltungsort in Mainz mit\\neiner Anfahrtszeit von unter zwei Stunden ein leicht zu erreichendes Ziel und daher entschloss auch ich mich an der\\nKonferenz teilzunehmen. Eine Unterkunft hatte ich mir auch schnell besorgt, da ein alter Freund von mir in Mainz wohnt.\\nIch hatte mich für den JavaEE Workshop von Adam Bien am Montag entschieden und wollte dann noch den ersten Tag der\\nHauptkonferenz am Dienstag besuchen. Da dies meine erste Konferenz war, war ich sehr gespannt, was mich erwarten würde.","https://synyx.de/blog/meine-erste-konferenz-jax-2012/",{},"/blog/meine-erste-konferenz-jax-2012",{"title":29267,"description":29365},"Die JAX 2012 war durch ihren (für uns) günstig gelegenen Veranstaltungsort in Mainz mit\neiner Anfahrtszeit von unter zwei Stunden ein leicht zu erreichendes Ziel und daher entschloss auch ich mich an der\nKonferenz teilzunehmen. Eine Unterkunft hatte ich mir auch schnell besorgt, da ein alter Freund von mir in Mainz wohnt.\nIch hatte mich für den JavaEE Workshop von Adam Bien am Montag entschieden und wollte dann noch den ersten Tag der\nHauptkonferenz am Dienstag besuchen. Da dies meine erste Konferenz war, war ich sehr gespannt, was mich erwarten würde.","blog/meine-erste-konferenz-jax-2012",[6241,29368,5836],"jax","Die JAX 2012 war durch ihren (für uns) günstig gelegenen Veranstaltungsort in Mainz mit einer Anfahrtszeit von unter zwei Stunden ein leicht zu erreichendes Ziel und daher entschloss auch ich…","_1ARPKZ3-ver_QDrFlZLPWO43tcULzzRbItAFTc9o9I",{"id":29372,"title":29373,"author":29374,"body":29376,"category":29587,"date":29588,"description":48,"extension":617,"link":29589,"meta":29590,"navigation":499,"path":29591,"seo":29592,"slug":29380,"stem":29593,"tags":29594,"teaser":29595,"__hash__":29596},"blog/blog/konferenz-logbuch-bedcon-2012.md","Konferenz-Logbuch BedCon 2012",[29375],"kannegiesser",{"type":11,"value":29377,"toc":29580},[29378,29381,29383,29392,29396,29399,29402,29405,29408,29417,29420,29423,29427,29430,29437,29440,29443,29446,29449,29458,29461,29470,29473,29476,29479,29482,29485,29488,29491,29494,29503,29512,29515,29519,29522,29525,29528,29531,29534,29543,29546,29549,29552,29561,29570,29573,29576],[14,29379,29373],{"id":29380},"konferenz-logbuch-bedcon-2012",[649,29382,29306],{"id":29303},[18,29384,29385,29386,29391],{},"15:32 Rebecca gibt mir die Unterlagen, Tickets und Infos zur ",[585,29387,29390],{"href":29388,"rel":29389},"http://bed-con.org",[589],"BedCon",". Perfekt organisiert – sie hat\nsich bereits um alles gekümmert.",[649,29393,29395],{"id":29394},"mittwoch-anreise","Mittwoch – Anreise",[18,29397,29398],{},"16:32 Flo, Aljona und ich brechen mit Sack und Pack und einer Ikea-Tasche mit Bier in Richtung Hbf auf. Unterwegs stößt\nMarkus dazu.",[18,29400,29401],{},"17:00 Wir sind im Zug und es geht los. Wir öffnen ein Bier – eine Stunde vor der offiziellen synyx Bier-Time.",[18,29403,29404],{},"17:50 Mittlerweile sind wir in Mannheim umgestiegen in den ICE Sprinter der nur noch in Frankfurt hält und dann bis\nBerlin durchfährt. Die Zugbegleiterin weist bereits zum dritten mal auf diesen Umstand hin. Markus hat uns ein\nunreserviertes Abteil gefunden, und wir machen es uns gemütlich. Kurz darauf halten wir doch nochmal um verpeilte\nFahrgäste rauszulassen die nicht nach Berlin wollen. Es folgen viele Gespräche – Gradle, synyx, Projekte, Konferenzen,\nPrivates. Markus recherchiert gefühlt 70% der Zeit die Verbindung vom Bahnhof zum Hotel per Google Maps, DB App und\nverschiedenen anderen Hilfsmitteln.",[18,29406,29407],{},"21:07 Unser Reiseproviant ist leer, wir siedeln um ins Bordbistro.",[18,29409,29410,29411,29416],{},"22:10 Markus’ intensive Recherche zahlt sich aus, denn er navigiert uns astrein zum Hotel. Das Zimmer\nbzw. ",[585,29412,29415],{"href":29413,"rel":29414},"http://www.residenz-2000.de/",[589],"das Hotel"," allgemein ist super.",[18,29418,29419],{},"22:30 Wir sind schon wieder raus. Auf der Suche nach Nahrung gehen wir zu einem Italiener um die Ecke. Top Location.\nGemütlich und sehr gutes Essen.",[18,29421,29422],{},"1:14 Uhr die Italiener wollen Feierabend machen, kehren uns quasi raus. Markus verlangt noch ein letztes Glas Wein, wir\nbekommen noch einen guten Grappa und verschwinden dann ins Bett.",[649,29424,29426],{"id":29425},"donnerstag-erster-konferenztag","Donnerstag – Erster Konferenztag",[18,29428,29429],{},"6:45 Mein Wecker klingelt, ich bin müde. Ich quäle mich unter die Dusche, mache mich fertig und bin um 7:30 unten beim\nFrühstück. Anschließend brechen wir auf.",[18,29431,29432,29433,29436],{},"8:40 Wir kommen nach einer kurzen Suche im Informatikerbau der ",[585,29434,25219],{"href":25217,"rel":29435},[589]," an\nund holen unsere Badges ab.",[18,29438,29439],{},"9:00 Ich sitze mit Aljona im ersten Talk: “Wie wird mein Code testbar?”. Ein guter Talk, für unsere Arbeitsweise nichts\nneues, jedoch eine Bestätigung.",[18,29441,29442],{},"9:45 Der Talk ist zu Ende, es gibt recht spannende Fragen und Diskussionen zum Thema Testen, TDD und Methodik.",[18,29444,29445],{},"10:15 Wir hören Philosophie. Kann Software schön sein? Interessante Aspekte, es geht um Kant, Schönheit im Bezug auf\nSoftware. Der Speaker ist extrem gut und das Thema ist ansprechend. Ich bin jetzt schon von der BedCon begeistert.",[18,29447,29448],{},"11:24 Modularisierung wagen – Recht witzig gemachte Two Man Show über die Modularisierung von monolitischen Builds,\nquasi ein Erfahrungsbericht.",[18,29450,29451,29452,29457],{},"11:40 Die Erfahrungen der Jungs decken sich mehr und mehr mit denen die ich bei unseren Builds bei synyx auch gemacht\nhabe. Es gibt dennoch immer wieder neue Ideen und Anregungen die ich mir merke. Ich nehme mir vor, endlich\ndas ",[585,29453,29456],{"href":29454,"rel":29455},"http://maven.apache.org/plugins/maven-enforcer-plugin/",[589],"Maven Enforcer Plugin"," einzusetzen.",[18,29459,29460],{},"13:24 Was tut ein guter Softwarearchitekt? Eberhard erklärt mir mein Aufgabengebiet. Seine Vorstellungen und Meinungen\nsind interessant und decken sich großteils mit meinen Vorstellungen und Tätigkeiten.",[18,29462,29463,29464,29469],{},"13:42 Ich werde an ",[585,29465,29468],{"href":29466,"rel":29467},"http://www.hello2morrow.com/products/sonargraph",[589],"SonarGraph"," erinnert und daran, dass ich ein Tool\nzur Architekturanalyse / Architekturforcierung probieren will. Man merkt dass im Projektgeschäft doch leider oft die\nZeit fehlt neues wirklich auszuprobieren und umzusetzen.",[18,29471,29472],{},"14:05 Ich fühle mich alt weil der Speaker gerade das Lemmings (Computerspiel) erklärt. Es ist offentsichtlich nicht mehr\nselbstverständlich das zu kennen.",[18,29474,29475],{},"14:37 Continuous Delivery in der Praxis – Ein Erfahrungsbericht mit vielen interessanten Punkten. Spannendster Aspekt\nfür mich ist mit CD direkt bei Projektbeginn anzufangen und es mit dem Projekt iterativ wachsen zu lassen (aus einem\nShellskript-Commithook mit scp wird irgendwann eine Build-Pipeline).",[18,29477,29478],{},"15:37 Auf dem Gang verwickle ich mich in Gespräche über die Arbeitsweise in anderen Firmen und freue mich, bei synyx zu\narbeiten.",[18,29480,29481],{},"16:00 Matt in drei Iterationen – Ein unterhaltsamer Talk über die iterative Entwicklung einer Schach-Engine. Ich lerne\nviel über Schach und ein kleines bisschen was über Architektur.",[18,29483,29484],{},"16:34 Mir fällt auf dass die Schach-Engine wohl das beste Beispiel für Code / Entwicklung etc ist, das ich bislang\ngesehen habe, weil es das perfekte Maß an Komplexität hat.",[18,29486,29487],{},"17:10 Letzter Talk für heute: Design Thinking. Mein Kopf ist langsam voll. Wenig Bezug zur Software aber dennoch\ninteressant. Es geht darum, wie man interdisziplinär wirklich neue Ideen entwickleln kann.",[18,29489,29490],{},"18:12 Wahnsinn. Erst in der Nachspielzeit des Talks fällt bei mir der Groschen: Strukturen aufbrechen, kreativer werden,\neine neue (firmen)Kultur kreieren. Darum geht es hier. Ich glaube der Bezug zu meinem Job ist doch gar nicht so gering.",[18,29492,29493],{},"19:00 Treffen in der Lobby des Hotels zum Abmarsch nach Kreuzberg zur Nahrnugsaufnahme.",[18,29495,29496,29497,29502],{},"20:12 Wir landen in einem Laden namens “",[585,29498,29501],{"href":29499,"rel":29500},"http://www.knofi.de/",[589],"Knofi","“. Es gibt leckeres orientalisches Essen. Alle sind\nbegeistert, nur es war kaum Knoblauch drin.",[18,29504,29505,29506,29511],{},"21:32 Lars von Upstruct stößt zu uns, wir bestellen noch ein Bier und lassen uns etwas später von ihm in eine\nKreuzberger Kneipe führen: Das ",[585,29507,29510],{"href":29508,"rel":29509},"http://franken-bar.de/",[589],"Franken",". Wir trinken Bier und Cuba Libre.",[18,29513,29514],{},"2:34 Wir kommen mit dem Taxi nach Hause und ich falle totmüde ins Bett.",[649,29516,29518],{"id":29517},"freitag-zweiter-konferenztag","Freitag – Zweiter Konferenztag",[18,29520,29521],{},"6:45 zzzZzzZz grmpf zzZzz argh grml. Aufstehen, duschen, Frühstück, packen. Hmpf.",[18,29523,29524],{},"7:55 Gefühlte 10 russische Schulklassen versperren die komplette Hotel-Lobby. Wir freuen uns, dass die nicht alle beim\nFrühstück waren und quetschen uns durch in Richtung BedCon.",[18,29526,29527],{},"9:01 Wir sitzen im ersten Talk – eine Einführung in Scala. Da ich mich bislang noch nicht mit der Sprache beschäftigt\nhabe schaue ich es mir an. Ganz interessant, ich sehe aber derzeit keinen Bedarf für mich. Ich beschließe irgendwann mir\nden weiterführenden Talk direkt im Anschluß daher nicht anzuschauen. Außerdem versuche ich die Müdigkeit irgendwie zu\nbekämpfen.",[18,29529,29530],{},"10:12 Ich sitze in einem Talk über JBoss 7 (Blazing Fast). zzzZzzZz. Es interessiert mich nicht wirklich, ob der\nApplicationserver in 2.4 oder 1.8 Sekunden hochfährt. Der Speaker gibt einen ganz guten Überblick über die neuen\nFeatures. Ich stelle aber fest, dass mich Applicationserver einfach nicht so wahnsinnig interessieren.",[18,29532,29533],{},"10:40 Der Jboss-Talk ist extrem zu früh fertig und ich treffe Markus im Chillout Raum. Ich setze mich mit meinem\nSchwarztee auf einen Sitzsack und wir unterhalten uns.",[18,29535,29536,29537,29542],{},"11:20 Wir bekommen einen groben Überblick über ",[585,29538,29541],{"href":29539,"rel":29540},"http://www.liquibase.org/",[589],"Liquibase"," und andere Tools zur ordentlichen\nund kontrollierten Datenbank-Schemamigration. Leider wenig neues im Vergleich zu dem, was Jochen letztes Jahr bei\nSchule@Synyx über Liquibase erzählt hat. Es gibt aber spannende Diskussionen zwischendurch.",[18,29544,29545],{},"12:38 In der Mittagspause beschließen Markus und ich was warmes bei einem Restaurant um die Ecke zu essen. Auf die Frage\nob Flo mitkommt antwortet er “Ich bleib hier”. Markus versteht das wohl falsch und sagt nur “Natürlich trinken wir auch\nn Bier.”. Ich verstehe nicht wie man schon wieder an Bier denken kann.",[18,29547,29548],{},"13:18 Der JPA-Vortrag ist dermaßen voll dass ich zum CoffeeScript-Talk gehe: Warum Kaffee gut für Entwickler ist.",[18,29550,29551],{},"13:23 Erstmal geht es 5 Minuten um Kaffee und dessen Zubereitung. Einige sind verwirrt, alle anderen sind begeistert von\neinem unglaublich unterhaltsamen weil humorvollen Talk der zudem inhaltlich gut ist.",[18,29553,29554,29555,29560],{},"13:34 Ich habe jetzt natürlich auf einmal Lust auf nen guten Espresso. Immerhin: Der Kaffee auf der BedCon ist\nverhältnismäßig gut. Ansonsten läuft eine kleine Diskussionsrunde über JavaScript\nund ",[585,29556,29559],{"href":29557,"rel":29558},"http://coffeescript.org/",[589],"CoffeeScript",". Die setzen wir nach dem Talk auf dem Gang noch etwas fort.",[18,29562,29563,29564,29569],{},"14:30 Schemaevolution in einer ",[585,29565,29568],{"href":29566,"rel":29567},"http://www.mongodb.org/",[589],"MongoDB",". Ein Erfahrungsbericht aus dem selben Projekt wie am\nDonnerstag der Bericht über Continuous Delivery. Es gab spannende Erkenntnisse durch den guten Anwendungsfall für eine\nschemafreie Datenbank. Auch die Kombination mit CD ist schlüssig und sinnvoll.",[18,29571,29572],{},"15:31 Wir warten auf den letzten Talk: “Move fast and break Things”. Ein Bericht aus der Arbeit bei Soundcloud inclusive\ninteressanter Meinungen zur Kultur und Arbeitsweise von SW-Entwicklern. Man erkennt viele Parallelen zu unserer\nEntwicklungskultur und es gibt dennoch weitere neue Ideen.",[18,29574,29575],{},"16:36 Die Konferenz ist zu Ende, wir laufen diskutierend Richtung Hotel. Es geht um mögliche Verbesserungen einiger\nDetails bei synyx. Ich freue mich, Erkenntnisse aus der Konferenz direkt anzudenken und einzusetzen. Alles in allem bin\nich unendlich müde und auch sehr zufrieden. Die BedCon hat sich für mich definitiv gelohnt. Der beste Talk war eindeutig\nder Philosophie-Vortrag, gefolgt von CoffeeScript und Schach.",[649,29577,29579],{"id":29578},"eindrücke","Eindrücke",{"title":48,"searchDepth":86,"depth":86,"links":29581},[29582,29583,29584,29585,29586],{"id":29303,"depth":126,"text":29306},{"id":29394,"depth":126,"text":29395},{"id":29425,"depth":126,"text":29426},{"id":29517,"depth":126,"text":29518},{"id":29578,"depth":126,"text":29579},[614],"2012-04-02T13:40:16","https://synyx.de/blog/konferenz-logbuch-bedcon-2012/",{},"/blog/konferenz-logbuch-bedcon-2012",{"title":29373,"description":48},"blog/konferenz-logbuch-bedcon-2012",[11199,6240,6241,5836],"Dienstag 15:32 Rebecca gibt mir die Unterlagen, Tickets und Infos zur BedCon. Perfekt organisiert – sie hat sich bereits um alles gekümmert. Mittwoch – Anreise 16:32 Flo, Aljona und ich…","Ggx5_3JaegPMY935P22HEDM5t41_bL2Gz_4pUVU6xuE",{"id":29598,"title":29599,"author":29600,"body":29601,"category":29632,"date":29633,"description":29634,"extension":617,"link":29635,"meta":29636,"navigation":499,"path":29637,"seo":29638,"slug":29639,"stem":29640,"tags":29641,"teaser":29642,"__hash__":29643},"blog/blog/schlag-den-chef-oder-schlagt-er-dich.md","Schlag den Chef oder schlägt er dich?",[28180],{"type":11,"value":29602,"toc":29630},[29603,29606,29609,29612,29615,29618,29621,29624],[14,29604,29599],{"id":29605},"schlag-den-chef-oder-schlägt-er-dich",[18,29607,29608],{},"Samstag gegen späten Nachmittag haben sich wohl einige Leute gewundert, was sich dort in der Albert-Schweitzer-Halle\nam Mühlburger Tor abspielt. Ein Haufen junger und nicht mehr ganz so junger, verrückt aussehender Leute tummelten sich\nhier. Umherfliegende Seifenblasen machten schon von Weitem darauf aufmerksam, dass dort irgendetwas passiert.",[18,29610,29611],{},"Sollte es hier nun einen Aufstand geben?",[18,29613,29614],{},"Nein! Ganz mit der Ruhe. Es war nur die synyx’sche Winterfeier, die hier stattfinden sollte.",[18,29616,29617],{},"Lange haben die Mitarbeiter auf das Event gewartet. Für mich selbst war es die erste Winterfeier im Hause synyx und man\nhat so einige Geschichten über die vorangegangenen Feiern gehört. Die Sommerfeier war für mich schon ein Highlight das,\nmeiner Meinung nach, kaum noch zu toppen war. Auch gingen vorab viele Gerüchte umher was denn so geplant sei für die\nWinterfeier. Man munkelte, es würde getanzt werden und viele fiese Gemeinheiten für die Mitarbeiter solle man sich\nausgedacht haben. Auch wurde gerätselt, wozu denn Schneebesen, Messbecher, Silikonschläuche und Lebensmittelfarben\nbenötigt würden.",[18,29619,29620],{},"Aber alles der Reihe nach. Genau wie wir Mitarbeiter müsst nun auch ihr Leser euch ein wenig gedulden.",[18,29622,29623],{},"Empfangen wurden die Mitarbeiter also in der Albert-Schweitzer-Halle. Vorne über der Bühne wurde ein großes\n„Willkommen“ projeziert. Schaute man sich so um wirkte das ganze erstmal, bis auf ein paar wenige Ausnahmen, wie eine\ndoch recht formelle Firmenfeier. Aber das sollte sich bald ändern.",[18,29625,29626],{},[1794,29627],{"alt":48,"src":29628,"title":29629},"https://media.synyx.de/uploads//2012/02/P1050328-150x150.jpg","P1050328",{"title":48,"searchDepth":86,"depth":86,"links":29631},[],[614],"2012-02-06T11:30:06","Samstag gegen späten Nachmittag haben sich wohl einige Leute gewundert, was sich dort in der Albert-Schweitzer-Halle\\nam Mühlburger Tor abspielt. Ein Haufen junger und nicht mehr ganz so junger, verrückt aussehender Leute tummelten sich\\nhier. Umherfliegende Seifenblasen machten schon von Weitem darauf aufmerksam, dass dort irgendetwas passiert.","https://synyx.de/blog/schlag-den-chef-oder-schlagt-er-dich/",{},"/blog/schlag-den-chef-oder-schlagt-er-dich",{"title":29599,"description":29608},"schlag-den-chef-oder-schlagt-er-dich","blog/schlag-den-chef-oder-schlagt-er-dich",[28497,3122],"Samstag gegen späten Nachmittag haben sich wohl einige Leute gewundert, was sich dort in der Albert-Schweitzer-Halle am Mühlburger Tor abspielt. Ein Haufen junger und nicht mehr ganz so junger, verrückt…","kOs-n6cDtO_n6u_ZIMPPFh6_WpupLN6dvr9-qBqfGeU",{"id":29645,"title":29646,"author":29647,"body":29648,"category":29673,"date":29674,"description":29675,"extension":617,"link":29676,"meta":29677,"navigation":499,"path":29678,"seo":29679,"slug":29680,"stem":29681,"tags":29682,"teaser":29683,"__hash__":29684},"blog/blog/10-jahre-synyx-ein-besonderes-jubilaum.md","10 Jahre synyx – ein besonderes Jubiläum",[21028],{"type":11,"value":29649,"toc":29671},[29650,29653,29656,29659,29662,29665,29668],[14,29651,29646],{"id":29652},"_10-jahre-synyx-ein-besonderes-jubiläum",[18,29654,29655],{},"Es ist kaum zu glauben, dass es nun schon 10 Jahre her ist, als synyx durch Thomas Kraft, Markus Daniel und Joachim\nArrasz gegründet wurde. Damals – alle drei waren noch Studenten – trafen sie sich, um ihre gemeinsame Vision einer\neigenen Firma in allen Details zu diskutieren. Schnell wurden sie sich einig und so wurde die synyx, damals noch als\nOHG, gegründet.",[18,29657,29658],{},"Zunächst wurde das erste Büro in der Technologiefabrik bezogen, erste Projekte liefen an. 2004 zog synyx in die\nAugustastraße und der erste Student wurde eingestellt. Zu den Bereichen Individualsoftware und Content Management, kam\nein weiteres Standbein “Mobile Solutions” hinzu. Bereits ein Jahr später konnte sich synyx im neuen Geschäftsfeld “Code\nClinic” erfolgreich unter Beweis stellen.",[18,29660,29661],{},"Nur zwei Jahre später, 2006, wurde die synyx OHG in die GmbH & Co. KG umgewandelt. Es wurden immer mehr Mitarbeiter\neingestellt und synyx bezog die Büroräume in der Karlstraße. 2007 konnte synyx ihr 5-jähriges Bestehen feiern. Nachdem\nsynyx bereits Diplomanden betreute, wurde in diesem Jahr auch der erste Azubi eingestellt. Im folgenden Jahr hatte synyx\n20 Mitarbeiter und es wurde sportlich: synyx nahm am Baden-Marathon teil und das „synoccer“ wurde eingeführt. D.h. ein\nMal im Monat treffen sich die Mitarbeiter, um gemeinsam Indoor-Fussball zu spielen. Das war eine willkommene\nAbwechslung zum ständigen Sitzen am Rechner.",[18,29663,29664],{},"2009 wurde das Büro um ein zweites Stockwerk erweitert und ein paar Monate später wurde dort die Cafe Lounge eröffnet.\nSeit diesem Jahr sponsort synyx die Java User Group Karlsruhe und unterstützt das Kiva Projekt. 2011 stand dann ganz\nunter dem Zeichen der Öffentlichkeitsarbeit. synyx engagierte sich im Social Media Bereich und forcierte mehr\nPressearbeit. Für die Mitarbeiter gab es ein weiteres Goodie, die Kochmuddi. Sie kocht seitdem für synyx zwei Mal in der\nWoche zum Selbstkostenpreis.",[18,29666,29667],{},"In der zweiten Hälfte des letzten Jahres wurde dann kräftig an der neuen Corporate Identity von synyx gearbeitet. Das\nLogo, das Layout der Website und die Geschäftsausstattung wurde von upstruct kreiert. Pünktlich zum 10-jährigen\nJubiläum geht synyx im neuen Look online.",[18,29669,29670],{},"Wir sind gespannt was die nächsten 10 Jahre bringen. Auf jeden Fall werden wir dieses Ereignis im Sommer 2012 gebührend\nfeiern.",{"title":48,"searchDepth":86,"depth":86,"links":29672},[],[614],"2012-01-02T14:57:49","Es ist kaum zu glauben, dass es nun schon 10 Jahre her ist, als synyx durch Thomas Kraft, Markus Daniel und Joachim\\nArrasz gegründet wurde. Damals – alle drei waren noch Studenten – trafen sie sich, um ihre gemeinsame Vision einer\\neigenen Firma in allen Details zu diskutieren. Schnell wurden sie sich einig und so wurde die synyx, damals noch als\\nOHG, gegründet.","https://synyx.de/blog/10-jahre-synyx-ein-besonderes-jubilaum/",{},"/blog/10-jahre-synyx-ein-besonderes-jubilaum",{"title":29646,"description":29655},"10-jahre-synyx-ein-besonderes-jubilaum","blog/10-jahre-synyx-ein-besonderes-jubilaum",[3122],"Es ist kaum zu glauben, dass es nun schon 10 Jahre her ist, als synyx durch Thomas Kraft, Markus Daniel und Joachim Arrasz gegründet wurde. Damals – alle drei waren…","8i8BZDHmaxnFYm0B4DSkx4mxh1_389zDZYmb0DYy2m0",{"id":29686,"title":29687,"author":29688,"body":29690,"category":30020,"date":30021,"description":30022,"extension":617,"link":30023,"meta":30024,"navigation":499,"path":30025,"seo":30026,"slug":29694,"stem":30027,"tags":30028,"teaser":30029,"__hash__":30030},"blog/blog/developers-developers-developers.md","Developers, Developers, Developers!",[29689],"speaker-schalanda",{"type":11,"value":29691,"toc":30015},[29692,29695,29698,29717,29725,29742,29748,29799,29805,29808,29812,29826,29832,29853,29858,29866,29869,29873,29882,29888,29903,29918,29933,29948,29957,29978,29993,29997,30006,30009],[14,29693,29687],{"id":29694},"developers-developers-developers",[18,29696,29697],{},"Belgium, November 2011. More than three and a half thousand people are surging into Antwerp’s megaplex, the Kinepolis.\nIt’s Devoxx-time!",[18,29699,29700,27359,29705,29710,29711,29716],{},[585,29701,29704],{"href":29702,"rel":29703},"http://vimeo.com/32170355",[589],"Devoxx 2011",[585,29706,29709],{"href":29707,"rel":29708},"http://vimeo.com/royvanrijn",[589],"Roy van Rijn"," on ",[585,29712,29715],{"href":29713,"rel":29714},"http://vimeo.com",[589],"Vimeo"," (\nMit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von Vimeo).",[18,29718,29719,29720,986],{},"From November 14th to November 18th Europe’s biggest community-organized (i.e. not organized by a big corporation) Java\nconference took place in its traditional venue in Antwerp and of course Synyx was there, too. Marc already wrote about\nwhy we like attending Devoxx in ",[585,29721,29724],{"href":29722,"rel":29723},"http://blog.synyx.de/2011/11/reasons-why-i-go-to-devoxx/",[589],"Reasons why I go to Devoxx",[577,29726,29727,29730,29733],{},[580,29728,29729],{},"Few to almost no marketing talks. In contrast to many other conferences there were refreshingly few marketing talks\nfrom the sponsors or other companies. At least the ones I’ve attended were pretty much free of targeted marketing but\nmore stuffed with technical details. Exactly what you like to see as a developer.",[580,29731,29732],{},"Great diversity in intelligent and friendly attendees, which also showed on the ad-hoc polls on the whiteboards\nprovided in the hallway.",[580,29734,29735,29736,29741],{},"Awesome venue for conducting a conference. The cinema chairs are really comfortable – which is too bad if you’re hung\nover from the night before and try to focus on the talk. Also the big screens and powerful sound systems are a great\nasset and I’m sure that the speakers also enjoyed the large rooms where everyone could easily see and hear them.\nBetween talks they showed a big ",[585,29737,29740],{"href":29738,"rel":29739},"https://web.archive.org/web/20171113063602/http://wall.devoxx.com:80/",[589],"Twitter wall","\non the screens in the rooms and on another big screen in the hallway which was nice for having quick feedback how\npeople liked the previous talk or which rooms got crowded very fast.",[18,29743,29744],{},[1794,29745],{"alt":29746,"src":29747},"\"Devoxx 2011 - Twitter wall\"","https://media.synyx.de/uploads//2011/11/devoxx11_twitterwall.jpg",[577,29749,29750,29790,29793,29796],{},[580,29751,29752,29753,99,29758,99,29763,99,29768,99,29773,99,29778,29783,29784,29789],{},"Large spectrum of (Java- and JVM-related) topics with great diversity. There were a lot of talks about alternative\nlanguages on the JVM\nlike ",[585,29754,29757],{"href":29755,"rel":29756},"http://www.scala-lang.org/",[589],"Scala",[585,29759,29762],{"href":29760,"rel":29761},"http://www.jruby.org/",[589],"JRuby",[585,29764,29767],{"href":29765,"rel":29766},"http://clojure.org/",[589],"Clojure",[585,29769,29772],{"href":29770,"rel":29771},"https://groovy-lang.org/",[589],"Groovy",[585,29774,29777],{"href":29775,"rel":29776},"http://confluence.jetbrains.net/display/Kotlin/Welcome",[589],"Kotlin",[585,29779,29782],{"href":29780,"rel":29781},"http://fantom.org/",[589],"Fantom",",\nand ",[585,29785,29788],{"href":29786,"rel":29787},"http://ceylon-lang.org/",[589],"Ceylon",". There were also many talks on Android (a little too many if you’d ask me) and\nHTML5; both topics were dominated by speakers from Google, which was a Premium Partner for the first time.",[580,29791,29792],{},"Free and (mostly) stable WiFi. The organizers did a great job with the conference WiFi which is not easy to operate\nfor more than 3,500 people, many with more than one device and eager to use it. Although some people had problems\ngetting a connection the wireless pretty much just worked for me over the course of the five days.",[580,29794,29795],{},"Free mugs and bags. In celebration of the 10th anniversary of Javapolis Javoxx Devoxx there were complementary coffee\nmugs with three different motives (HTML5, Android, or Java) available to pick up for the conference attendees. Instead\nof the traditional backpacks, the organizers prepared messenger bags this time for the conference attendees.",[580,29797,29798],{},"Merchandise. Like on every other conference there were quite a few exhibiting companies with which you could trade\nyour personal data (very convenient with the bar codes and QR code on the wristband) for a T-Shirt, a stress ball, or\nsome other form of merchandise.",[18,29800,29801],{},[1794,29802],{"alt":29803,"src":29804},"\"Devoxx 2011 - Big screen\"","https://media.synyx.de/uploads//2011/11/devoxx11_screen1.jpg",[18,29806,29807],{},"My highlights this year were mainly during the university days of Devoxx. The conference is split in two large parts,\nthe university and the conference days. Usually the university days are less packed and have longer (3 hours), in-depth\nsession while there are more 1 hour talks during the conference days.",[3469,29809,29811],{"id":29810},"university-days","University days",[18,29813,17525,29814,29819,29820,29825],{},[585,29815,29818],{"href":29816,"rel":29817},"http://devoxx.com/display/DV11/Continuous+Delivery",[589],"Continuous Delivery"," by David Farley was really good. He\nrecapped some things I already knew from reading the book he co-authored (see\nmy ",[585,29821,29824],{"href":29822,"rel":29823},"http://blog.synyx.de/2011/08/continuous-delivery-or-how-i-learned-to-stop-worrying-and-love-the-pipeline/",[589],"Review of Continuous Delivery",")\nbut also told a lot about how they implemented continuous delivery at LMAX.",[18,29827,29828],{},[1794,29829],{"alt":29830,"src":29831},"\"Devoxx 2011 - The well-grounded Java developer\"","https://media.synyx.de/uploads//2011/11/devoxx11_wellgrounded2.jpg",[18,29833,29834,29835,29840,29841,29846,29847,29852],{},"Another very informative and entertaining talk\nwas ",[585,29836,29839],{"href":29837,"rel":29838},"http://devoxx.com/display/DV11/The+Well-Grounded+Java+Developer",[589],"The Well-Grounded Java Developer"," by Martijn\nVerburg and Ben Evans. While it didn’t really contain any breaking news – you probably have heard or read about the\nfeatures of Java 7 around 365 times before and have heard about the concurrency\npackage ",[585,29842,29845],{"href":29843,"rel":29844},"http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html",[589],"java.util.concurrent"," as\nwell – it was a very well executed talk and forced the audience to pay attention to these important topics. Also the\nlive-action play with a set of Dukes was priceless as well as the cameos of the diabolical developer and\nthe ",[585,29848,29851],{"href":29849,"rel":29850},"http://en.wikipedia.org/wiki/Otter",[589],"otter"," metaphore for the concurrency part of the session.",[18,29854,29855],{},[1794,29856],{"alt":29830,"src":29857},"https://media.synyx.de/uploads//2011/11/devoxx11_well_grounded1.jpg",[18,29859,29860,29865],{},[585,29861,29864],{"href":29862,"rel":29863},"http://devoxx.com/display/DV11/Jenkins++From+Continuous+Integration+to+Continuous+Delivery",[589],"Jenkins: From Continuous Integration to Continuous Delivery","\nin the Tools in Action track was also interesting as John Smart described and showed how to use Jenkins and a battery of\nplugins to implement Continuous Delivery. Since we use Jenkins internally as our CI product, I took some good ideas out\nof this talk.",[18,29867,29868],{},"In the evening of the second university day there was the Fireside chat with Tim Bray, Cameron Purdy, Mark Reinhold and\nHenrik Ståhl which is a very interesting format but started way too slow in my opinion. When the participants had warmed\nup after half an hour it got a lot better.",[3469,29870,29872],{"id":29871},"conference-days","Conference days",[18,29874,29875,29876,29881],{},"Wednesday was the first of three conference days (as opposed to university days) and started with three keynotes.\nFirst ",[585,29877,29880],{"href":29878,"rel":29879},"http://twitter.com/stephan007",[589],"Stephan Janssen"," started with his welcome speech in which he celebrated the 10th\nanniversary of Devoxx. This was followed by Henrik Ståhl’s keynote which positively surprised me. Mr. Ståhl hadn’t\nimpressed too much on the evening before during the fireside chat. The last keynote was held by Cameron Purdy about Java\nEE but it turned into a boring marketing talk after about half way through, which is sad because it started really\npromising.",[18,29883,29884],{},[1794,29885],{"alt":29886,"src":29887},"\"Josh Bloch at Devoxx 2011\"","https://media.synyx.de/uploads//2011/11/devoxx11_joshbloch1.jpg",[18,29889,29890,29891,29896,29897,29902],{},"There were also awesome talks on this day,\nprominently ",[585,29892,29895],{"href":29893,"rel":29894},"http://devoxx.com/display/DV11/Java++The+Good%2C+the+Bad%2C+and+the+Ugly+Parts",[589],"Java: The Good, the Bad, and the Ugly Parts","\nby Joshua Bloch\nand ",[585,29898,29901],{"href":29899,"rel":29900},"http://devoxx.com/display/DV11/Language+++Library+co-evolution+in+Java+SE+8",[589],"Language / Library co-evolution in Java SE 8","\nby Brian Goetz, two Java veterans with a lot of conference speaking experience. As always with high quality talks and\nspeakers, the rooms were crowded during their performances.",[18,29904,29905,29906,29911,29912,29917],{},"Much of the charm of Devoxx are its informal BOF sessions. Particularly\nthe ",[585,29907,29910],{"href":29908,"rel":29909},"http://devoxx.com/display/DV11/Less+annoying+Java+standards",[589],"Less annoying Java standards"," BOF with Ben Evans and\nMartijn Verburg was very interesting. They presented\nthe ",[585,29913,29916],{"href":29914,"rel":29915},"http://java.net/projects/ljc-london-jug/pages/AdoptAJSRProgram",[589],"Adopt a JSR Program"," and discussed how the Java\ncommunity could participate on the JCP more easily.",[18,29919,29920,29921,29926,29927,29932],{},"The second conference day again started with a keynote, this time on Android by Tim Bray, and was packed with good\ntalks. Some talks I attended were really exceptional, so I want to name them quickly. Jonas Bonér\nof ",[585,29922,29925],{"href":29923,"rel":29924},"http://typesafe.com/",[589],"Typesafe"," held a talk about [Above the Clouds: Introducing Akka](",[585,29928,29931],{"href":29929,"rel":29930},"http://akka.io/%3EAkka",[589],"http://akka.io/>Akka","\ntitled \u003Ca href=). Although I don’t warm towards Scala as a programming language, Akka seems to be quite a killer\nframework for solving concurrency-related problems. It comes with a Scala and a Java API but the Scala API looks (\nnaturally?) more elegant.",[18,29934,29935,29936,29941,29942,29947],{},"Another very interesting talk\nwas ",[585,29937,29940],{"href":29938,"rel":29939},"http://devoxx.com/display/DV11/The+Disruptor%2C+High+Performance+Inter-Thread+Messaging",[589],"The Disruptor, High Performance Inter-Thread Messaging","\nwhich was scheduled for Monday (during the university days) but was cancelled on short notice. Fortunately that talk was\nrescheduled for Thursday during the lunch break. Michael Barker gave an introduction to\nthe ",[585,29943,29946],{"href":29944,"rel":29945},"http://code.google.com/p/disruptor/",[589],"Disruptor"," framework and walked the audience through an example utilizing it\nin a simple application.",[18,29949,29950,29951,29956],{},"And even more highlights took place on this day: Dick Wall (of Java Posse fame) talked\nabout ",[585,29952,29955],{"href":29953,"rel":29954},"http://devoxx.com/display/DV11/Courage+in+Software+Development",[589],"Courage in Software Development",". This was a\nnon-technical but very inspiring session and I recommend watching it as soon as it’s uploaded to Parleys.",[18,29958,29959,29960,29965,29966,29971,29972,29977],{},"Following the official conference program (in parallel to the BOF sessions) there was a screening of the recently\nreleased ",[585,29961,29964],{"href":29962,"rel":29963},"https://web.archive.org/web/20151116171536/http://www.us.movie.tintin.com:80/",[589],"Tintin movie"," and after that\nthe anniversary party in the nearby ",[585,29967,29970],{"href":29968,"rel":29969},"https://web.archive.org/web/20120528164636/http://noxxantwerp.eu/",[589],"Noxx"," night\nclub – of course with a dancing ",[585,29973,29976],{"href":29974,"rel":29975},"http://kenai.com/projects/duke",[589],"Duke",". 😉",[18,29979,29980,29981,29986,29987,29992],{},"On the fifth and last day we sadly had only time for\nthe ",[585,29982,29985],{"href":29983,"rel":29984},"http://devoxx.com/display/DV11/Technical+Discussion+Panel",[589],"Technical Discussion Panel"," and one more talk. Most of\nus\nchose ",[585,29988,29991],{"href":29989,"rel":29990},"http://devoxx.com/display/DV11/The+Evolution+of+Java++Past%2C+Present%2C+and+Future",[589],"The Evolution of Java: Past, Present, and Future","\nwhich was again very interresting and in which Joshua Bloch retrospectively reviewed changes to the Java language over\ntime and scored them from “horrible” to “best thing since sliced bread” (or something like that).",[3469,29994,29996],{"id":29995},"summary","Summary",[18,29998,29999,30000,30005],{},"In summary I really enjoyed Devoxx and learned a lot during these five extraordinary days. My days were quite stuffed\nand I wish I had more time for seeing Antwerp but you have to set priorities. I really recommend going to Devoxx (or to\nthe upcoming ",[585,30001,30004],{"href":30002,"rel":30003},"http://www.devoxx.fr/",[589],"Devoxx France",", if you are a French native speaker) to any serious Java (or\nJVM-based language) developer.",[18,30007,30008],{},"And in case you wondered about the title of this blog post:",[18,30010,30011,12348],{},[585,30012,13234],{"href":30013,"rel":30014},"https://www.youtube.com/embed/8To-6VIJZRE",[589],{"title":48,"searchDepth":86,"depth":86,"links":30016},[30017,30018,30019],{"id":29810,"depth":86,"text":29811},{"id":29871,"depth":86,"text":29872},{"id":29995,"depth":86,"text":29996},[614],"2011-12-01T10:33:51","Belgium, November 2011. More than three and a half thousand people are surging into Antwerp’s megaplex, the Kinepolis.\\nIt’s Devoxx-time!","https://synyx.de/blog/developers-developers-developers/",{},"/blog/developers-developers-developers",{"title":29687,"description":29697},"blog/developers-developers-developers",[6240,27430],"Belgium, November 2011. More than three and a half thousand people are surging into Antwerp’s megaplex, the Kinepolis. It’s Devoxx-time! Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von…","3doRV3U2v9GTiPWiYBLxrB8R9wuWA1DUkgZwjc_5OPM",{"id":30032,"title":30033,"author":30034,"body":30035,"category":30082,"date":30083,"description":30084,"extension":617,"link":30085,"meta":30086,"navigation":499,"path":30087,"seo":30088,"slug":30089,"stem":30090,"tags":30091,"teaser":30092,"__hash__":30093},"blog/blog/sommerfeier-bei-synyx-eine-nasse-angelegenheit-2.md","Sommerfeier bei Synyx – eine nasse Angelegenheit",[11916],{"type":11,"value":30036,"toc":30080},[30037,30040,30049,30052,30057,30060,30063,30066,30071,30074,30077],[14,30038,30033],{"id":30039},"sommerfeier-bei-synyx-eine-nasse-angelegenheit",[18,30041,30042,30046],{},[1794,30043],{"alt":30044,"src":30045},"\"Kanu fahren\"","https://media.synyx.de/uploads//2011/08/kanu.jpg",[573,30047,30048],{},"Nicht nur der diesjährige Sommer hat uns oft nasse Bescherung von oben geboten, auch die Sommerfeierei bei Synyx stand\ndieses Jahr ganz im Zeichen des Wassers. Ausflugsziel war nämlich der Altrhein – und zwar nicht zum gemächlichen\nEntenfüttern, sondern zum rasanten Kanufahren in den Stromschnellen des Altrheins.",[18,30050,30051],{},"Für die Meisten war der Startpunkt 13 Uhr im Büro, um sich mit sprudelndem Proviant einzudecken; so eine Kanufahrt macht\nschließlich durstig. Mit der Bahn ging es dann ans Ende der Welt, nach Rappenwörth, wo der Rest der Paddelwilligen zu\nuns stieß. Eine Prise Verwirrung und Ratlosigkeit später („Wo ist denn dieser Kanuverleih überhaupt?“) war unsere Suche\ndoch noch erfolgreich. Wir teilten uns in Zweier- und Dreiergruppen auf und wurden mit Kanus ausgestattet, die wir ans\nUfer hievten, um in See zu stechen. Eines der Kanus bildete sich wohl ein, ein U-Boot zu sein, was zur Folge hatte,\ndass Markus als Erster bis zum Bauch im Wasser stand. Rebecca, ihr Mann und ich sollten das allerdings noch toppen. Denn\nwir fielen beim Einsteigen gleich kopfüber ins Wasser, als unser Kanu kenterte. Zunächst einmal gab es keine weiteren\nOpfer zu beklagen und es hieß für alle: „Volle Fahrt voraus!“.",[18,30053,30054],{},[27,30055,30056],{},"Natürlich wäre gesittetes Benehmen auf dem Kanu viel zu langweilig, weshalb der Altrhein spontan zu einem\nWasserschlachtfeld erklärt wurde.",[18,30058,30059],{},"Feuer lässt sich vielleicht nicht mit Feuer bekämpfen, aber Wasser mit Wasser. Wir lernten schnell, dass sich ein Paddel\nnicht nur zum Paddeln eignet, sondern auch ein sehr effektives Werkzeug zur Bewässerung anderer Kanus und der\nzugehörigen Crew darstellt. Man munkelt, dass das Admin-Kanu noch viel schärfere Geschütze aufgefahren hatte, wie z.B.\nWasserpistolen und Wasserbomben; und ein Megafon hatte wohl sonst auch kein anderes Kanu mit an Bord.",[18,30061,30062],{},"Während der ereignisreichen Seeschlachten hieß es für manche Besatzung leider auch mal: „Mann/Frau über Bord!“ Es steht\nimmer noch Aussage gegen Aussage, wer denn wirklich schuld war am Kentern des Kanus von Thomas, Florian und Lianna; es\ngibt da verschiedene Versionen der Geschichte. Was allerdings sicher feststeht, ist, dass die erwähnten Wasserratten nur\ndurch die Großherzigkeit anderer Besatzungen (anzuführen wären hier das Junggesellen-Kanu, das Admin-Kanu und\nunsereins) gerettet werden konnten – und das gleich zwei Mal innerhalb weniger Minuten.",[18,30064,30065],{},"Während der Fahrt ereilte uns auch tatsächlich noch der angekündigte Regenschauer. Allerdings störte dieser nicht\nweiter, da man ja durch all den Schabernack sowieso schon nass war.",[18,30067,30068],{},[27,30069,30070],{},"Nach circa zweieinhalb Stunden Seeschlacht auf dem Altrhein hatten die vor Brackwasser triefenden Synyx-Piraten\nendlich wieder festen Boden unter den Füßen.",[18,30072,30073],{},"Ein wenig erschöpft und hungrig kehrte man bei den Rheinbrüdern ein. Dort standen schon die Kaltgetränke bereit, während\nder Grill gerade angeschmissen wurde. Neben dem Grillgut hatte das Buffet auch eine Vegetarier-freundliche Auswahl an\nSalaten und Antipasti zu bieten. Als kleines i-Tüpfelchen gab es zum Nachtisch dann noch Kuchen und Eis.",[18,30075,30076],{},"Es wurde reichlich gespeist und getrunken, Seemannsgarn ausgetauscht und miteinander gelacht bis in den Morgen hinein. (\ndie Letzten räumten das Feld gegen drei Uhr früh)",[18,30078,30079],{},"Alles in allem war die Sommerfeier (die gleichzeitig meine erste Feier bei Synyx war) genauso nass wie gelungen, was\nschon viel Vorfreude auf die nächsten Feiern macht.",{"title":48,"searchDepth":86,"depth":86,"links":30081},[],[614],"2011-08-16T13:16:01","Nicht nur der diesjährige Sommer hat uns oft nasse Bescherung von oben geboten, auch die Sommerfeierei bei Synyx stand\\ndieses Jahr ganz im Zeichen des Wassers. Ausflugsziel war nämlich der Altrhein – und zwar nicht zum gemächlichen\\nEntenfüttern, sondern zum rasanten Kanufahren in den Stromschnellen des Altrheins.","https://synyx.de/blog/sommerfeier-bei-synyx-eine-nasse-angelegenheit-2/",{},"/blog/sommerfeier-bei-synyx-eine-nasse-angelegenheit-2",{"title":30033,"description":30048},"sommerfeier-bei-synyx-eine-nasse-angelegenheit-2","blog/sommerfeier-bei-synyx-eine-nasse-angelegenheit-2",[28497,3122],"Nicht nur der diesjährige Sommer hat uns oft nasse Bescherung von oben geboten, auch die Sommerfeierei bei Synyx stand dieses Jahr ganz im Zeichen des Wassers. Ausflugsziel war nämlich der…","uJimB3fTqYzOn4piT2m5_9EK72whVyWNEtrG0jdVEHI",{"id":30095,"title":30096,"author":30097,"body":30098,"category":30128,"date":30129,"description":30130,"extension":617,"link":30131,"meta":30132,"navigation":499,"path":30133,"seo":30134,"slug":30135,"stem":30136,"tags":30137,"teaser":30140,"__hash__":30141},"blog/blog/eine-kochmuddi-fur-hungrige-synyx-mitarbeiter.md","Eine Kochmuddi für hungrige Synyx-Mitarbeiter",[21028],{"type":11,"value":30099,"toc":30126},[30100,30103,30110,30113,30116,30119],[14,30101,30096],{"id":30102},"eine-kochmuddi-für-hungrige-synyx-mitarbeiter",[18,30104,30105,30109],{},[1794,30106],{"alt":30107,"src":30108},"\"Kochmellie beim ersten Synyx-Einsatz\"","https://media.synyx.de/uploads//2011/06/mellie.jpg","\nWer kennt das nicht: Die Uhrzeit geht langsam aber sicher auf die Mittagszeit zu und das Loch im Bauch wird immer\ngrößer. Der Magen grummelt. Die Konzentration lässt nach. Und dann stellt sich wie immer die Frage: „Was sollen wir denn\nheute Mittag essen?“",[18,30111,30112],{},"Ständig belegte Brötchen – das ist auf Dauer langweilig. Essen gehen – schön und gut, aber recht kostenintensiv und\nzeitaufwendig. Daher kochen bei Synyx ab und an Mitarbeiter für Mitarbeiter zum Selbstkostenpreis. Das macht zwar Spaß,\naber auch das kostet viel Zeit.",[18,30114,30115],{},"Aus diesem Grund haben die Synyx Chefs uns Mitarbeitern mal wieder was echt Gutes gegönnt: eine Kochmuddi! Zwei bis drei\nMal die Woche kommt Mellie, die Kochmuddi oder besser gesagt die Kochmellie ;-), bei uns vorbei und verwöhnt uns mit\nihren Kochkünsten.",[18,30117,30118],{},"Es gibt eine vegetarische und eine fleischhaltige Variante zum Selbstkostenpreis. Heute stand auf dem „Menüplan“ Nudeln\nmit Bolognese oder Nudeln mit Tomate-Zucchini-Soße. Dazu gab es Salat. Das Essen war ausgesprochen lecker. Weiter so!",[18,30120,30121],{},[585,30122,30125],{"href":30123,"rel":30124},"http://www.hypersmash.com/dreamhost/",[589],"Dreamhost promotion code",{"title":48,"searchDepth":86,"depth":86,"links":30127},[],[614],"2011-06-14T13:35:06","\\nWer kennt das nicht: Die Uhrzeit geht langsam aber sicher auf die Mittagszeit zu und das Loch im Bauch wird immer\\ngrößer. Der Magen grummelt. Die Konzentration lässt nach. Und dann stellt sich wie immer die Frage: „Was sollen wir denn\\nheute Mittag essen?“","https://synyx.de/blog/eine-kochmuddi-fur-hungrige-synyx-mitarbeiter/",{},"/blog/eine-kochmuddi-fur-hungrige-synyx-mitarbeiter",{"title":30096,"description":30109},"eine-kochmuddi-fur-hungrige-synyx-mitarbeiter","blog/eine-kochmuddi-fur-hungrige-synyx-mitarbeiter",[30138,30139,3122],"kochen","mitarbeiter","Wer kennt das nicht: Die Uhrzeit geht langsam aber sicher auf die Mittagszeit zu und das Loch im Bauch wird immer größer. Der Magen grummelt. Die Konzentration lässt nach. Und…","K-fyhzn_D2LovH6cZp_mKMDWsSCoE8fQIZqnRuFxyTs",{"id":30143,"title":30144,"author":30145,"body":30146,"category":30179,"date":30180,"description":30181,"extension":617,"link":30182,"meta":30183,"navigation":499,"path":30184,"seo":30185,"slug":30150,"stem":30187,"tags":30188,"teaser":30190,"__hash__":30191},"blog/blog/opencms-modul-integriert-externe-blogs.md","OpenCms Modul integriert externe Blogs",[21028],{"type":11,"value":30147,"toc":30177},[30148,30151,30164],[14,30149,30144],{"id":30150},"opencms-modul-integriert-externe-blogs",[18,30152,30153,30157,30158,30163],{},[1794,30154],{"alt":30155,"src":30156},"\"opencms-modul\"","https://media.synyx.de/uploads//2011/05/opencms-modul1.jpg","\nDie Synyx Hompage wird mittels dem Content Management System ",[585,30159,30162],{"href":30160,"rel":30161},"http://www.opencms.org/de/",[589],"OpenCms"," umgesetzt; unser Blog\nmit WordPress. Um neue Blogposts auch auf der Homepage anzuzeigen, musste bisher beides parallel bearbeitet und gepflegt\nwerden. Das ist umständlich und kostet viel Zeit.",[18,30165,20403,30166,30170,30171,30176],{},[585,30167,30169],{"href":8464,"rel":30168},[589],"Synyx OpenCms Team"," hat nun Abhilfe geschaffen. Sie entwickelten ein Modul\nfür OpenCms, welches die Aggregation, bzw. Integration von externen Blogs ins System ermöglicht. So werden jetzt auf\nder ",[585,30172,30175],{"href":30173,"rel":30174},"https://synyx.de/de/",[589],"Startseite unserer Homepage"," automatisch alle Blogs angezeigt. Der Synyx Blog hat drei\nunterschiedliche Blogkategorien. Damit dies auf der Homepage übersichtlich dargestellt wird, gibt es auch hier drei\nGruppierungen.",{"title":48,"searchDepth":86,"depth":86,"links":30178},[],[614],"2011-05-30T12:41:00","\\nDie Synyx Hompage wird mittels dem Content Management System OpenCms umgesetzt; unser Blog\\nmit WordPress. Um neue Blogposts auch auf der Homepage anzuzeigen, musste bisher beides parallel bearbeitet und gepflegt\\nwerden. Das ist umständlich und kostet viel Zeit.","https://synyx.de/blog/opencms-modul-integriert-externe-blogs/",{},"/blog/opencms-modul-integriert-externe-blogs",{"title":30144,"description":30186},"\nDie Synyx Hompage wird mittels dem Content Management System OpenCms umgesetzt; unser Blog\nmit WordPress. Um neue Blogposts auch auf der Homepage anzuzeigen, musste bisher beides parallel bearbeitet und gepflegt\nwerden. Das ist umständlich und kostet viel Zeit.","blog/opencms-modul-integriert-externe-blogs",[30189,3122],"opencms","Die Synyx Hompage wird mittels dem Content Management System OpenCms umgesetzt; unser Blog mit WordPress. Um neue Blogposts auch auf der Homepage anzuzeigen, musste bisher beides parallel bearbeitet und gepflegt…","mQZ_7ZI98DNNIvwJYSmzfQgUtfpYNf_WQ2vltd5u4Dc",{"id":30193,"title":30194,"author":30195,"body":30196,"category":30216,"date":30217,"description":30218,"extension":617,"link":30219,"meta":30220,"navigation":499,"path":30221,"seo":30222,"slug":30200,"stem":30223,"tags":30224,"teaser":30226,"__hash__":30227},"blog/blog/aus-zwei-mach-eins.md","Aus Zwei mach Eins",[21028],{"type":11,"value":30197,"toc":30214},[30198,30201,30208,30211],[14,30199,30194],{"id":30200},"aus-zwei-mach-eins",[18,30202,30203,30207],{},[1794,30204],{"alt":30205,"src":30206},"\"zusammenlegung\"","https://media.synyx.de/uploads//2011/04/zusammenlegung2.jpg","\nDen Synyx Corporate Blog und den Mobile Blog gibt es nun über ein Jahr. Bisher liefen beide Blogs eigenständig. Wir\nhaben nun den Mobile Blog in den Corporate Blog integriert. So haben die Leser alle Informationen auf einen Blick und\nman muss nicht mehr zwischen zwei Blogs hin- und herklicken.",[18,30209,30210],{},"Der Mobile Blog war bisher nur in englischer Sprache verfasst. Der Corporate Blog ist zweisprachig. Unternehmensnews\nwerden auf Deutsch verfasst, Blogs aus dem Developer Bereich auf Englisch. Um euch hier auch mehr Komfort zu bieten,\nwird es in Zukunft eine Sprachumschaltung geben, da manche Posts in Englisch und Deutsch verfügbar sein werden.",[18,30212,30213],{},"Ich bin gespannt, wie euch die Idee gefällt und wie ihr damit zurechtkommt.",{"title":48,"searchDepth":86,"depth":86,"links":30215},[],[614],"2011-05-17T10:19:56","\\nDen Synyx Corporate Blog und den Mobile Blog gibt es nun über ein Jahr. Bisher liefen beide Blogs eigenständig. Wir\\nhaben nun den Mobile Blog in den Corporate Blog integriert. So haben die Leser alle Informationen auf einen Blick und\\nman muss nicht mehr zwischen zwei Blogs hin- und herklicken.","https://synyx.de/blog/aus-zwei-mach-eins/",{},"/blog/aus-zwei-mach-eins",{"title":30194,"description":30207},"blog/aus-zwei-mach-eins",[30225,3122],"blog","Den Synyx Corporate Blog und den Mobile Blog gibt es nun über ein Jahr. Bisher liefen beide Blogs eigenständig. Wir haben nun den Mobile Blog in den Corporate Blog integriert.…","yxiS-E04fdrUHs1KeWtRXd9_GINJymcispLko_o23Go",{"id":30229,"title":30230,"author":30231,"body":30232,"category":30275,"date":30276,"description":48,"extension":617,"link":30277,"meta":30278,"navigation":499,"path":30279,"seo":30280,"slug":30236,"stem":30281,"tags":30282,"teaser":30283,"__hash__":30284},"blog/blog/vortrag-von-synyx-entwickler-bei-den-opencms-days.md","Vortrag von Synyx Entwickler bei den OpenCms Days",[21028],{"type":11,"value":30233,"toc":30273},[30234,30237,30243,30270],[14,30235,30230],{"id":30236},"vortrag-von-synyx-entwickler-bei-den-opencms-days",[18,30238,30239],{},[1794,30240],{"alt":30241,"src":30242},"\"Logo OpenCms Days 2011\"","https://media.synyx.de/uploads//2011/05/logo_opencmsdays_2011.jpg",[18,30244,30245,30246,30251,30252,30257,30258,30263,30264,30269],{},"Synyx wird wieder die ",[585,30247,30250],{"href":30248,"rel":30249},"http://www.opencms-days.org/en/index.html",[589],"OpenCms Days"," besuchen. Dieses Mal hält Florian Hopf\neinen ",[585,30253,30256],{"href":30254,"rel":30255},"http://www.opencms-days.org/en/program/sessions/session_s5.html",[589],"Vortrag"," über ein Open Source Modul für OpenCms.\nDieses Modul integriert Solr in OpenCms. Der Such Server ",[585,30259,30262],{"href":30260,"rel":30261},"http://lucene.apache.org/solr/",[589],"Apache Solr"," setzt auf der\nbewährten IR-Bibliothek ",[585,30265,30268],{"href":30266,"rel":30267},"http://lucene.apache.org/",[589],"Apache Lucene"," auf.",[18,30271,30272],{},"Der Vortrag ist am 10.Mai von 10:30-11:30 Uhr. Wir sind schon gespannt. Florian Hopf wird nach den OpenCms Days noch\neinen Blogpost dazu verfassen.",{"title":48,"searchDepth":86,"depth":86,"links":30274},[],[614],"2011-05-08T08:23:26","https://synyx.de/blog/vortrag-von-synyx-entwickler-bei-den-opencms-days/",{},"/blog/vortrag-von-synyx-entwickler-bei-den-opencms-days",{"title":30230,"description":48},"blog/vortrag-von-synyx-entwickler-bei-den-opencms-days",[30189],"Synyx wird wieder die OpenCms Days besuchen. Dieses Mal hält Florian Hopf einen Vortrag über ein Open Source Modul für OpenCms. Dieses Modul integriert Solr in OpenCms. Der Such Server…","XADFzJU3s_yaFy0cd1Oyf9zr9cRBs_ENE9PE52g_Aio",{"id":30286,"title":30287,"author":30288,"body":30289,"category":30344,"date":30345,"description":30346,"extension":617,"link":30347,"meta":30348,"navigation":499,"path":30349,"seo":30350,"slug":30293,"stem":30351,"tags":30352,"teaser":30353,"__hash__":30354},"blog/blog/happy-birthday-synyx-corporate-blog.md","Happy Birthday Synyx Corporate Blog",[21028],{"type":11,"value":30290,"toc":30342},[30291,30294,30301,30304,30307,30310,30336,30339],[14,30292,30287],{"id":30293},"happy-birthday-synyx-corporate-blog",[18,30295,30296,30300],{},[1794,30297],{"alt":30298,"src":30299},"\"Geburtstagskuchen\"","https://media.synyx.de/uploads//2011/04/Fotolia_17342363_XS.jpg","\nKaum zu glauben – ist es tatsächlich schon ein Jahr her, als Synyx den Corporate Blog startete? Die Zeit ist wirklich\nschnell vergangen. Und nun feiert der Synyx Blog seinen ersten Geburtstag.",[18,30302,30303],{},"Die rund 60 Artikel sind noch nicht die Welt – aber wir werden uns weiterhin Mühe geben, euch informative Artikel\nbereitzustellen.",[18,30305,30306],{},"Wir bedanken uns an dieser Stelle bei allen Blog-Lesern, Feed-Abonnenten und Twitter-Followern. Aber auch bei den\nMitarbeitern von Synyx. Durch ihr Mitwirken sind viele interessante Artikel entstanden.",[18,30308,30309],{},"Hier die 3 erfolgreichsten Blogposts:",[5899,30311,30312,30320,30328],{},[580,30313,30314,30319],{},[585,30315,30318],{"href":30316,"rel":30317,"title":30316},"http://blog.synyx.de/tag/document-management/",[589],"Template based document generation using ODFDOM","\nvon Florian Hopf",[580,30321,30322,30327],{},[585,30323,30326],{"href":30324,"rel":30325,"title":30326},"http://blog.synyx.de/2010/07/dependency-hell-or-including-jsr303-into-a-hibernated-javaee-app/",[589],"Dependency Hell or Including JSR303 into a hibernated JavaEE App","\nvon Joachim Arrasz",[580,30329,30330,30335],{},[585,30331,30334],{"href":30332,"rel":30333,"title":30334},"http://blog.synyx.de/2011/01/spring-ide-into-eclipse/",[589],"Spring IDE into eclipse"," von Sascha\nRüssel",[18,30337,30338],{},"Uns interessiert natürlich eure Meinung: Was gefällt euch an dem Blog, was fehlt euch noch? Welche Themen wären für euch\nnoch interessant? Was können wir besser machen? Wir sind schon gespannt auf euer Feedback.",[18,30340,30341],{},"Auf ein weiteres erfolgreiches Blog-Jahr!",{"title":48,"searchDepth":86,"depth":86,"links":30343},[],[614],"2011-04-21T12:31:10","\\nKaum zu glauben – ist es tatsächlich schon ein Jahr her, als Synyx den Corporate Blog startete? Die Zeit ist wirklich\\nschnell vergangen. Und nun feiert der Synyx Blog seinen ersten Geburtstag.","https://synyx.de/blog/happy-birthday-synyx-corporate-blog/",{},"/blog/happy-birthday-synyx-corporate-blog",{"title":30287,"description":30300},"blog/happy-birthday-synyx-corporate-blog",[],"Kaum zu glauben – ist es tatsächlich schon ein Jahr her, als Synyx den Corporate Blog startete? Die Zeit ist wirklich schnell vergangen. Und nun feiert der Synyx Blog seinen…","VXABdwX1EiIfOYTe1yYampLKGQJRP3R3QfBolEpkkts",{"id":30356,"title":30357,"author":30358,"body":30360,"category":30408,"date":30409,"description":30410,"extension":617,"link":30411,"meta":30412,"navigation":499,"path":30413,"seo":30414,"slug":30364,"stem":30416,"tags":30417,"teaser":30418,"__hash__":30419},"blog/blog/farewell-not-goodbye.md","Farewell not Goodbye",[30359],"linsin",{"type":11,"value":30361,"toc":30406},[30362,30365,30373,30382,30403],[14,30363,30357],{"id":30364},"farewell-not-goodbye",[18,30366,30367,30368,30372],{},"About one and a half years ago I decided to change companies. I was sick and tired of producing low quality software at\nmy previous employer. I joined ",[585,30369,30371],{"href":24942,"rel":30370},[589],"Synyx",", a small team of highly skilled developers with the same\npassion and mindset, that I have.",[18,30374,30375,30376,30381],{},"One thing that got my attention, while looking for a new jobs was Synyx’s vision of Open Source. Having worked at Synyx\nfor quite a while now, I can say it is more than a slogan here. We are not only using open source software, but also\nproducing it. There’s dedicated time to polish and release, whatever you think is helping fellow developers out there.\nAs for me, I was able to plan and organize the ",[585,30377,30380],{"href":30378,"rel":30379},"http://jug-ka.de",[589],"local Java User Group here in Karlsruhe"," during\nworking hours.",[18,30383,30384,30385,30390,30391,30396,30397,30402],{},"About a year ago, I got the opportunity to spearhead the ",[585,30386,30389],{"href":30387,"rel":30388},"http://mobile.synyx.de",[589],"mobile development efforts"," here at\nSynyx. It was an amazing opportunity, which helped me to realize, in which direction my future career is heading. Next\nto Android, the mobile team was able to build up substantial knowledge in iOS and the mobile market in general. We\nreleased our very first App for Android and iOS,\ncalled “",[585,30392,30395],{"href":30393,"rel":30394},"http://mobile.synyx.de/2010/09/i-think-i-spider-1-0-released/",[589],"I think I spider","“. It was a joined effort with\nthe talented designer at “",[585,30398,30401],{"href":30399,"rel":30400},"http://upstruct.com",[589],"upstruct","“.",[18,30404,30405],{},"Working with the folks at Synyx was one of the most enjoyable experiences of my career. I’d like to thank each and\neveryone of them for the opportunities and support over the past one and a half years.",{"title":48,"searchDepth":86,"depth":86,"links":30407},[],[614],"2011-02-25T13:27:37","About one and a half years ago I decided to change companies. I was sick and tired of producing low quality software at\\nmy previous employer. I joined Synyx, a small team of highly skilled developers with the same\\npassion and mindset, that I have.","https://synyx.de/blog/farewell-not-goodbye/",{},"/blog/farewell-not-goodbye",{"title":30357,"description":30415},"About one and a half years ago I decided to change companies. I was sick and tired of producing low quality software at\nmy previous employer. I joined Synyx, a small team of highly skilled developers with the same\npassion and mindset, that I have.","blog/farewell-not-goodbye",[13052,3122],"About one and a half years ago I decided to change companies. I was sick and tired of producing low quality software at my previous employer. I joined Synyx, a…","RZB0DpytAB4ZD8wrGoAt8FIlor6bKayjPUP69gCmV3o",{"id":30421,"title":30422,"author":30423,"body":30424,"category":30474,"date":30475,"description":30476,"extension":617,"link":30477,"meta":30478,"navigation":499,"path":30479,"seo":30480,"slug":30428,"stem":30481,"tags":30482,"teaser":30484,"__hash__":30485},"blog/blog/synyx-team-bekommt-drei-neue-gesichter-und-das-ist-noch-nicht-alles.md","Synyx Team bekommt drei neue Gesichter und das ist noch nicht alles …",[21028],{"type":11,"value":30425,"toc":30472},[30426,30429,30436,30439,30442,30445,30448,30451,30454,30457,30460,30463,30466],[14,30427,30422],{"id":30428},"synyx-team-bekommt-drei-neue-gesichter-und-das-ist-noch-nicht-alles",[18,30430,30431,30435],{},[1794,30432],{"alt":30433,"src":30434},"\"Neue Gesichter bei Synyx\"","https://media.synyx.de/uploads//2011/02/neue_mitarbeiter.jpg","\nBereits seit Ende 2010 war Synyx auf der Suche nach personeller Verstärkung in verschiedenen Bereichen. Wie sich aber\nschnell herausstellte, erwies sich die Suche nach den passenden Persönlichkeiten schwieriger als erwartet. Es gab zwar\neine große Anzahl von Bewerbern, doch häufig waren für die umfangreichen und verantwortungsvollen Aufgabengebiete nicht\ndie entsprechenden Bewerber dabei.",[18,30437,30438],{},"Nach einer letztendlich getroffenen Vorauswahl und einigen Vorstellungsgesprächen wurde uns dann schnell klar, wer die\npassenden Neulinge im Synyx-Team sind.",[18,30440,30441],{},"Aus diesem Grund wollen wir die neuen Synyxler einmal vorstellen.",[18,30443,30444],{},"Für den Bereich Office-Management haben wir Sabine David ins Boot geholt.",[18,30446,30447],{},"Die gelernte Bürokauffrau war zuvor als kaufmännische Angestellte tätig und sucht die Herausforderung in einem sehr\numfangreichen und verantwortungsvollen Tätigkeitsfeld.",[18,30449,30450],{},"Als neues „altes“ Gesicht begrüßen wir Jochen Schalanda in unserem Team.",[18,30452,30453],{},"Der Diplominformatiker (FH) war bereits während seines Praxissemesters und anschließender Diplomarbeit von 2008-2009\nein wertvolles Mitglied von Synyx. Das Thema seiner Diplomarbeit umfasste den Entwurf und die Umsetzung einer auf REST\naufsetzenden Interoperabilitäts-Schnittstelle und deren Integration in eine JEE-basierte Geschäftsanwendungen. Nach\nseiner Diplomarbeit und einer 13-monatigen Zeit als Software Engineer in Riad (Saudi Arabien) kehrt Jochen Schalanda\njetzt als Senior Developer zu Synyx zurück.",[18,30455,30456],{},"Und dann war da noch…",[18,30458,30459],{},"Andreas Weigel, der während seines Informatikstudiums (9.Semester(KIT)) bei uns arbeitet. Derzeit erweitert er sein\nWissen in OpenCms. Der Java – Erfahrene Student wird zukünftig die einzelnen Projektteams tatkräftig unterstützen.",[18,30461,30462],{},"Alle drei Neuankömmlinge heißen wir nochmals herzlich willkommen!",[18,30464,30465],{},"Zur weiteren Verstärkung unseres Teams suchen wir kreative Java-Entwickler, sowie eine/n Auszubildende/n zum\nFachinformatiker/in Systemintegration und eine/n Auszubildende/n zum Fachinformatiker/in Anwendungsentwicklung.",[18,30467,30468,30469,986],{},"Nähere Informationen dazu gibt es auf der ",[585,30470,26708],{"href":3097,"rel":30471},[589],{"title":48,"searchDepth":86,"depth":86,"links":30473},[],[614],"2011-02-22T16:20:28","\\nBereits seit Ende 2010 war Synyx auf der Suche nach personeller Verstärkung in verschiedenen Bereichen. Wie sich aber\\nschnell herausstellte, erwies sich die Suche nach den passenden Persönlichkeiten schwieriger als erwartet. Es gab zwar\\neine große Anzahl von Bewerbern, doch häufig waren für die umfangreichen und verantwortungsvollen Aufgabengebiete nicht\\ndie entsprechenden Bewerber dabei.","https://synyx.de/blog/synyx-team-bekommt-drei-neue-gesichter-und-das-ist-noch-nicht-alles/",{},"/blog/synyx-team-bekommt-drei-neue-gesichter-und-das-ist-noch-nicht-alles",{"title":30422,"description":30435},"blog/synyx-team-bekommt-drei-neue-gesichter-und-das-ist-noch-nicht-alles",[30139,3122,30483],"team","Bereits seit Ende 2010 war Synyx auf der Suche nach personeller Verstärkung in verschiedenen Bereichen. Wie sich aber schnell herausstellte, erwies sich die Suche nach den passenden Persönlichkeiten schwieriger als…","3UZuyLwS4FxS_Fc9443qyXu5SWrRhh7fCVG2X2cth8c",{"id":30487,"title":30488,"author":30489,"body":30491,"category":30506,"date":30507,"description":30508,"extension":617,"link":30509,"meta":30510,"navigation":499,"path":30511,"seo":30512,"slug":30495,"stem":30514,"tags":30515,"teaser":30516,"__hash__":30517},"blog/blog/synyx-sponsort-die-opencms-days.md","Synyx sponsort die OpenCms-Days",[30490],"hopf",{"type":11,"value":30492,"toc":30504},[30493,30496],[14,30494,30488],{"id":30495},"synyx-sponsort-die-opencms-days",[18,30497,30498,30499,30503],{},"Vom 09. bis zum 10. Mai finden, rechtzeitig zum Release von OpenCms 8, die 3. ",[585,30500,30502],{"href":30248,"rel":30501},[589],"OpenCms-Days"," in Köln statt. Synyx unterstützt die Entwicklerkonferenz\nwie in den vergangenen Jahren gerne, wir sind gespannt auf die Neuerungen in OpenCms 8 und interessante Vorträge.",{"title":48,"searchDepth":86,"depth":86,"links":30505},[],[614],"2011-02-02T21:31:27","Vom 09. bis zum 10. Mai finden, rechtzeitig zum Release von OpenCms 8, die 3. OpenCms-Days in Köln statt. Synyx unterstützt die Entwicklerkonferenz\\nwie in den vergangenen Jahren gerne, wir sind gespannt auf die Neuerungen in OpenCms 8 und interessante Vorträge.","https://synyx.de/blog/synyx-sponsort-die-opencms-days/",{},"/blog/synyx-sponsort-die-opencms-days",{"title":30488,"description":30513},"Vom 09. bis zum 10. Mai finden, rechtzeitig zum Release von OpenCms 8, die 3. OpenCms-Days in Köln statt. Synyx unterstützt die Entwicklerkonferenz\nwie in den vergangenen Jahren gerne, wir sind gespannt auf die Neuerungen in OpenCms 8 und interessante Vorträge.","blog/synyx-sponsort-die-opencms-days",[30189],"Vom 09. bis zum 10. Mai finden, rechtzeitig zum Release von OpenCms 8, die 3. OpenCms-Days in Köln statt. Synyx unterstützt die Entwicklerkonferenz wie in den vergangenen Jahren gerne, wir…","NeDaL5qGIwTEnwvsk4Hvl5qP2x5f_A7WfQkxOBAPM2s",{"id":30519,"title":30520,"author":30521,"body":30522,"category":30588,"date":30589,"description":30590,"extension":617,"link":30591,"meta":30592,"navigation":499,"path":30593,"seo":30594,"slug":30526,"stem":30595,"tags":30596,"teaser":30597,"__hash__":30598},"blog/blog/mit-spannung-in-die-retrowinterfeier.md","Mit Spannung in die RetroWinterfeier",[21028],{"type":11,"value":30523,"toc":30586},[30524,30527,30530,30533,30536,30545,30553,30556,30563,30566,30573,30576,30583],[14,30525,30520],{"id":30526},"mit-spannung-in-die-retrowinterfeier",[18,30528,30529],{},"Dieses Jahr war alles ein wenig anders. Meistens organisieren wir Mitarbeiter die Synyx-Feiern selbst, doch dieses Mal\nhaben es sich die 3 Geschäftsführer nicht nehmen lassen, haben diesen Part selbst übernommen und wollten uns\nMitarbeiter, Partner und Freunde von Synyx damit überraschen.",[18,30531,30532],{},"Fest stand nur, wir treffen uns hier im Büro und es geht mit der Bahn weiter. Aber wohin? Ganz klar, dies ließ im\nVorfeld viele wilde Spekulationen zu. Auch ich war sehr gespannt.",[18,30534,30535],{},"Nichts ahnend sind die meisten im Büro gegen 18 Uhr angekommen. Kurz danach hieß es dann ab zur Bahnhaltestelle.\nNatürlich rätselten wir alle, wohin es geht. Die Andeutungen seitens der Cheffen machten es uns nicht leichter. Dafür\nhatten die 3 Herren ihren Spaß an unserer Raterei. Nachdem wir dann noch mal umsteigen mussten, war die Richtung klar\nund die Spekulationen wurden konkreter. Lago-Center oder der Gotec-Club, in dem auch RetroGames e.V. seine\nRäumlichkeiten hat? Thomas hat uns noch kurz versucht zu irritieren und blieb vor dem Lago-Center stehen. Kann das\nsein? Jedoch teilte er uns lediglich mit, dass wir da nicht hingehen 😉",[18,30537,30538,30539,30544],{},"Also ab in den Gotec-Club, besser gesagt in die Hallen von ",[585,30540,30543],{"href":30541,"rel":30542},"http://www.retrogames.info/",[589],"RetroGames",". Der 2002\ngegründete Verein RetroGames e.V. möchte die Kultur der elektronischen Videospiele in Deutschland erhalten, fördern und\neiner breiteren Öffentlichkeit zugänglich machen. Jeden Dienstag ab 20 Uhr ist Mitgliedertreffen, jeden Samstag öffnet\nRetroGames ab 21 Uhr für Publikum.",[18,30546,30547,30548,30552],{},"In einem Nebenraum waren Tische und Bänke für uns aufgestellt, Kaltgetränke bereitgestellt. Schnell ein Getränk\nergattern und dann ab an die\nSpielautomaten.",[1794,30549],{"alt":30550,"src":30551},"\"flipper\"","https://media.synyx.de/uploads//2011/02/flipper.jpg","\nErst mal daddeln. Das war äußerst lustig. Schnell fühlt man sich in seine Jugendzeit zurückversetzt. Da werden\nErinnerungen wach, das kann ich euch sagen!",[18,30554,30555],{},"Unser Host und Betreuer an diesem Abend war Mike, seines Zeichens Gründungsmitglied von RetroGames und auch langjähriger\nFreund von einigen Synyx-lern. Er war Aufpasser, Automatenerklärer und DJ in Personalunion und hat einen nicht\nunerheblichen Anteil zu der familiären Feier-Atmosphäre beigetragen. Ein herzliches Dankeschön daher in seine Richtung,\ndass er es mit der Rasselbande so lange ausgehalten hat.",[18,30557,30558,30562],{},[1794,30559],{"alt":30560,"src":30561},"\"cheffe\"","https://media.synyx.de/uploads//2011/02/cheffe.jpg","\nNur kurze Zeit später wurde vom Caterer das Essen angeliefert und aufgebaut. Noch ein wenig zocken und dann trommelte\nThomas alle zusammen.",[18,30564,30565],{},"Die Rede! Jaja, auch das gibt es bei uns. Dieses Jahr ließ es sich Thomas nicht nehmen, zu jedem Mitarbeiter gab es\neinen kleinen, geistreichen Spruch. So wurde die Rede etwas länger als üblich, aber dafür gabs auch einige Lacher. Auch\nwenn unser Magen knurrte, mussten wir danach noch kurz ausharren, da es nun das Präsent für unsere Cheffen gab. Wir\nhoffen mal, sie haben sich gefreut.",[18,30567,30568,30572],{},[1794,30569],{"alt":30570,"src":30571},"\"buffet\"","https://media.synyx.de/uploads//2011/02/buffet.jpg","\nAlso los gings, ab zum Buffet. Hey, das war echt riesig und für jeden was dabei. Selbstverständlich auch für die\nVegetarier unter uns. Ich von meiner Seite aus kann sagen, dass es äußert lecker war. Ich konnte mich gar nicht\nentscheiden, was ich zuerst essen sollte. Viele warme Gerichte aber auch Fingerfood. Lecker, lecker!",[18,30574,30575],{},"Und nachdem die Bäuche vollgeschlagen waren, mussten wir das Ganze an den Spielautomaten wieder “abtrainieren”. Mein\nFavorite war natürlich “Tetris” und “Arkanoid”. Und weil wir ja erst gegessen haben, gabs dann Nachtisch. Mousse au\nChocolat und Pana Cotta. Ebenfalls sehr lecker.",[18,30577,30578,30582],{},[1794,30579],{"alt":30580,"src":30581},"\"sascha\"","https://media.synyx.de/uploads//2011/02/sascha.jpg","\nIch bin dann auch bereits um 1 Uhr gegangen, da meine letzte Bahn fuhr. Ich habe mir aber erzählen lassen, dass der eine\noder andere erst gegen halb neun den Heimweg angetreten ist, nachdem die Tanzfläche vom Gotec noch erobert wurde.",[18,30584,30585],{},"Also ein durchweg gelungenes Fest! Naja, aber wir Synyx-ler können halt auch feiern!",{"title":48,"searchDepth":86,"depth":86,"links":30587},[],[614],"2011-02-01T11:40:35","Dieses Jahr war alles ein wenig anders. Meistens organisieren wir Mitarbeiter die Synyx-Feiern selbst, doch dieses Mal\\nhaben es sich die 3 Geschäftsführer nicht nehmen lassen, haben diesen Part selbst übernommen und wollten uns\\nMitarbeiter, Partner und Freunde von Synyx damit überraschen.","https://synyx.de/blog/mit-spannung-in-die-retrowinterfeier/",{},"/blog/mit-spannung-in-die-retrowinterfeier",{"title":30520,"description":30529},"blog/mit-spannung-in-die-retrowinterfeier",[28497,3122],"Dieses Jahr war alles ein wenig anders. Meistens organisieren wir Mitarbeiter die Synyx-Feiern selbst, doch dieses Mal haben es sich die 3 Geschäftsführer nicht nehmen lassen, haben diesen Part selbst…","RzosusKIPrCpkKKK12ERcFwy8St5DnSBBtUymCPdSqg",{"id":30600,"title":30601,"author":30602,"body":30603,"category":30616,"date":30617,"description":48,"extension":617,"link":30618,"meta":30619,"navigation":499,"path":30620,"seo":30621,"slug":30622,"stem":30623,"tags":30624,"teaser":30625,"__hash__":30626},"blog/blog/debian-sqeeze-countdown.md","join the countdown to squeeze",[18956],{"type":11,"value":30604,"toc":30614},[30605,30608],[14,30606,30601],{"id":30607},"join-the-countdown-to-squeeze",[18,30609,30610],{},[1794,30611],{"alt":30612,"src":30613},"Debian squeeze countdown","http://news.debian.net/wp-content/uploads/2011/squeeze_countdown.png",{"title":48,"searchDepth":86,"depth":86,"links":30615},[],[614],"2011-01-27T10:32:04","https://synyx.de/blog/debian-sqeeze-countdown/",{},"/blog/debian-sqeeze-countdown",{"title":30601,"description":48},"debian-sqeeze-countdown","blog/debian-sqeeze-countdown",[],"Since about a week the Debian project invites everyone to join in the countdown to the brand rustynew version of Debian. While waiting for the official squeeze release, one can…","bd6MQetbkCgOiPoM5jVBx7JQdAQNiLrYNOV2LWpxycA",{"id":30628,"title":30629,"author":30630,"body":30631,"category":30703,"date":30704,"description":30705,"extension":617,"link":30706,"meta":30707,"navigation":499,"path":30708,"seo":30709,"slug":30635,"stem":30710,"tags":30711,"teaser":30714,"__hash__":30715},"blog/blog/one-firefox-for-two-x-servers.md","One firefox for two X servers",[18956],{"type":11,"value":30632,"toc":30701},[30633,30636,30639,30648,30655,30658,30669,30672,30675,30688,30698],[14,30634,30629],{"id":30635},"one-firefox-for-two-x-servers",[18,30637,30638],{},"Like a lot of it-staff nowadays, I’ve got two displays connected to my Linux Box. Most of my colleagues like having one\nbig workspace using Xinerama / TwinView, but I prefer 2 independent workspaces, even if I can’t use drag and drop\nbetween them.",[18,30640,30641,30642,30647],{},"Since I’m using that layout for years, I rarely run in problems, but today I faced a problem. Currently I use a\ngraphical IRC Client called ",[585,30643,30646],{"href":30644,"rel":30645},"http://quassel-irc.org/",[589],"quassel",", which is running on my right Display. My firefox is\nrunning on the left display, and due to “poor” default settings of Ubuntu, clicking a link within quassel fires up\nkonqueror on my right display, instead of handing it over to the Firefox.",[18,30649,30650,30651,30654],{},"Following the “Ubuntu” way, I did ",[50,30652,30653],{},"update-alternatives --config x-www-browser"," to update the browser settings of my\nmachine to firefox.",[18,30656,30657],{},"This fixed the starting of konqueror, so after clicking on a link in quassel, firefox gets invoked, and presents the\nError “Firefox is already running, but is not responding. To open a new window, you must first close the existing\nFirefox process, or restart your system.”, which in this case simply means that there’s already a Firefox running on the\nother display.",[18,30659,30660,30661,30664,30665,30668],{},"So, firefox needs help to find itself. After checking how my X server labels my left display (:0.1) by executing\n",[50,30662,30663],{},"echo $DISPLAY"," in a shell, and checking Firefox startup options, it seemed clear that adding ",[50,30666,30667],{},"--display=:0.1"," to\nfirefox startup, will fix the issue.",[18,30670,30671],{},"So I created a small script in my homedir ‘~/bin/firefox’, `#!/bin/bash",[18,30673,30674],{},"/usr/bin/firefox --display=:0.1 \"$@\"`, and added the dir ‘~/bin/’ to my PATH environment variable, restarted the\ncorresponding shell, and failed.",[18,30676,30677,30678,30681,30682,30685,30686,986],{},"Why? When I call ‘firefox’ from my shells, ",[50,30679,30680],{},"~/bin/firefox"," gets executed, but quassel still starts\n",[50,30683,30684],{},"/usr/bin/x-www-browser",", which was set by ",[50,30687,30653],{},[18,30689,30690,30691,30694,30695,30697],{},"So I added my personal script, to the alternatives list by\n",[50,30692,30693],{},"update-alternatives --install /usr/bin/x-www-browser x-www-browser /home/ferstl/bin/firefox 110",". As you’ve may\nspotted, I gave my version of the start script an priority of 110, so it’s usually chosen over konqueror by automated\nconfiguration. After performing another ",[50,30696,30653],{}," and choosing my script, clicking\nlinks in quassel worked.",[18,30699,30700],{},"Due to update-alternatives setting system wide configuration for all users, I added a problem for other users on my\nmachine. That could be fixed by checking for my user in the startup script, but usually I’m the only one using this\ncomputer, so that’s not a big issue.",{"title":48,"searchDepth":86,"depth":86,"links":30702},[],[614],"2011-01-20T13:44:46","Like a lot of it-staff nowadays, I’ve got two displays connected to my Linux Box. Most of my colleagues like having one\\nbig workspace using Xinerama / TwinView, but I prefer 2 independent workspaces, even if I can’t use drag and drop\\nbetween them.","https://synyx.de/blog/one-firefox-for-two-x-servers/",{},"/blog/one-firefox-for-two-x-servers",{"title":30629,"description":30638},"blog/one-firefox-for-two-x-servers",[30712,15067,30713],"firefox","ubuntu","Like a lot of it-staff nowadays, I’ve got two displays connected to my Linux Box. Most of my colleagues like having one big workspace using Xinerama / TwinView, but I…","EOFRI2e8ZIglLn7ksz0GQIIro2GYcXaCuiiRzYFXgUY",{"id":30717,"title":30718,"author":30719,"body":30721,"category":30878,"date":30879,"description":30880,"extension":617,"link":30881,"meta":30882,"navigation":499,"path":30883,"seo":30884,"slug":30725,"stem":30885,"tags":30886,"teaser":30887,"__hash__":30888},"blog/blog/bash-prompt-for-git.md","Bash-Prompt for Git",[30720],"buch",{"type":11,"value":30722,"toc":30876},[30723,30726,30729,30735,30871,30874],[14,30724,30718],{"id":30725},"bash-prompt-for-git",[18,30727,30728],{},"Since Florian Hopf asked me today how I made my Bash prompt show the current git branch, here’s the relevant .bashrc\npart (which evloved from code found on some other blogs I don’t remember anymore).",[18,30730,30731],{},[1794,30732],{"alt":30733,"src":30734},"\"screenshot_git_bashpromt\"","https://media.synyx.de/uploads//2011/01/screenshot_git_bashpromt.png",[43,30736,30738],{"className":11460,"code":30737,"language":11462,"meta":48,"style":48},"function parse_git_branch {\ngit branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \\(.*\\)/(\\1)/'\n}\nfunction promptl {\nlocal BLUE=\"\\[\\033[0;34m\\]\"\nlocal RED=\"\\[\\033[0;31m\\]\"\nlocal LIGHT_RED=\"\\[\\033[1;31m\\]\"\nlocal GREEN=\"\\[\\033[0;32m\\]\"\nlocal LIGHT_GREEN=\"\\[\\033[1;32m\\]\"\nlocal WHITE=\"\\[\\033[1;37m\\]\"\nlocal LIGHT_GRAY=\"\\[\\033[0;37m\\]\"\ncase $TERM in\nxterm*)\nTITLEBAR='\\[\\033]0;\\u@\\h:\\w\\007\\]'\n;;\n*)\nTITLEBAR=\"\"\n;;\nesac\nPS1=\"${TITLEBAR}\\\n$BLUE[$RED\\$(date +%H:%M)$BLUE]\\\n$BLUE[$RED\\u@\\h:\\w$GREEN\\$(parse_git_branch)$BLUE]\\\n$GREEN\\$ $LIGHT_GRAY\"\nPS2='> '\nPS4='+ '\n}\npromptl\n",[50,30739,30740,30745,30750,30754,30759,30764,30769,30774,30779,30784,30789,30794,30799,30804,30809,30813,30818,30823,30827,30832,30837,30842,30847,30852,30857,30862,30866],{"__ignoreMap":48},[53,30741,30742],{"class":55,"line":56},[53,30743,30744],{},"function parse_git_branch {\n",[53,30746,30747],{"class":55,"line":86},[53,30748,30749],{},"git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \\(.*\\)/(\\1)/'\n",[53,30751,30752],{"class":55,"line":126},[53,30753,282],{},[53,30755,30756],{"class":55,"line":163},[53,30757,30758],{},"function promptl {\n",[53,30760,30761],{"class":55,"line":186},[53,30762,30763],{},"local BLUE=\"\\[\\033[0;34m\\]\"\n",[53,30765,30766],{"class":55,"line":221},[53,30767,30768],{},"local RED=\"\\[\\033[0;31m\\]\"\n",[53,30770,30771],{"class":55,"line":242},[53,30772,30773],{},"local LIGHT_RED=\"\\[\\033[1;31m\\]\"\n",[53,30775,30776],{"class":55,"line":273},[53,30777,30778],{},"local GREEN=\"\\[\\033[0;32m\\]\"\n",[53,30780,30781],{"class":55,"line":279},[53,30782,30783],{},"local LIGHT_GREEN=\"\\[\\033[1;32m\\]\"\n",[53,30785,30786],{"class":55,"line":496},[53,30787,30788],{},"local WHITE=\"\\[\\033[1;37m\\]\"\n",[53,30790,30791],{"class":55,"line":503},[53,30792,30793],{},"local LIGHT_GRAY=\"\\[\\033[0;37m\\]\"\n",[53,30795,30796],{"class":55,"line":509},[53,30797,30798],{},"case $TERM in\n",[53,30800,30801],{"class":55,"line":515},[53,30802,30803],{},"xterm*)\n",[53,30805,30806],{"class":55,"line":521},[53,30807,30808],{},"TITLEBAR='\\[\\033]0;\\u@\\h:\\w\\007\\]'\n",[53,30810,30811],{"class":55,"line":527},[53,30812,18705],{},[53,30814,30815],{"class":55,"line":533},[53,30816,30817],{},"*)\n",[53,30819,30820],{"class":55,"line":539},[53,30821,30822],{},"TITLEBAR=\"\"\n",[53,30824,30825],{"class":55,"line":545},[53,30826,18705],{},[53,30828,30829],{"class":55,"line":4941},[53,30830,30831],{},"esac\n",[53,30833,30834],{"class":55,"line":4949},[53,30835,30836],{},"PS1=\"${TITLEBAR}\\\n",[53,30838,30839],{"class":55,"line":4957},[53,30840,30841],{},"$BLUE[$RED\\$(date +%H:%M)$BLUE]\\\n",[53,30843,30844],{"class":55,"line":4966},[53,30845,30846],{},"$BLUE[$RED\\u@\\h:\\w$GREEN\\$(parse_git_branch)$BLUE]\\\n",[53,30848,30849],{"class":55,"line":4973},[53,30850,30851],{},"$GREEN\\$ $LIGHT_GRAY\"\n",[53,30853,30854],{"class":55,"line":4978},[53,30855,30856],{},"PS2='> '\n",[53,30858,30859],{"class":55,"line":4984},[53,30860,30861],{},"PS4='+ '\n",[53,30863,30864],{"class":55,"line":5001},[53,30865,282],{},[53,30867,30868],{"class":55,"line":5007},[53,30869,30870],{},"promptl\n",[18,30872,30873],{},"Feel free to copy into your .bashrc to have a colored prompt showing the current git branch if you are in a git\nrepository.",[607,30875,989],{},{"title":48,"searchDepth":86,"depth":86,"links":30877},[],[614],"2011-01-14T18:15:05","Since Florian Hopf asked me today how I made my Bash prompt show the current git branch, here’s the relevant .bashrc\\npart (which evloved from code found on some other blogs I don’t remember anymore).","https://synyx.de/blog/bash-prompt-for-git/",{},"/blog/bash-prompt-for-git",{"title":30718,"description":30728},"blog/bash-prompt-for-git",[],"Since Florian Hopf asked me today how I made my Bash prompt show the current git branch, here’s the relevant .bashrc part (which evloved from code found on some other…","kPwut3xxxpA6o-JCIvAwJftzlQDqVbvWODS2_rP53OY",{"id":30890,"title":30891,"author":30892,"body":30894,"category":30931,"date":30932,"description":30901,"extension":617,"link":30933,"meta":30934,"navigation":499,"path":30935,"seo":30936,"slug":30898,"stem":30937,"tags":30938,"teaser":30939,"__hash__":30940},"blog/blog/das-jahr-2010-geht-zu-ende.md","Das Jahr 2010 geht zu Ende",[30893],"ruessel",{"type":11,"value":30895,"toc":30929},[30896,30899,30902,30905,30911,30914,30920,30923,30926],[14,30897,30891],{"id":30898},"das-jahr-2010-geht-zu-ende",[18,30900,30901],{},"… Und es war ein erfolgreiches Jahr!",[18,30903,30904],{},"Um gemeinsam darauf anzustoßen, noch bevor uns die Weihnachts-Urlaubs-Welle erwischt, veranstalteten wir letzten\nFreitag ein zum Jahresende traditionelles Raclette mit, zur kalten Jahreszeit passend, heißem Glühwein.",[18,30906,30907],{},[1794,30908],{"alt":30909,"src":30910},"\"reich gedeckter Gabentisch\"","https://media.synyx.de/uploads//2010/12/gabentisch.jpg",[18,30912,30913],{},"Durch fleißige Schnippel-Helfer, einem reich gedeckten Gabentisch, genügend Raclette-Geräten und einem gefüllten\nGlühweinkocher waren die Vorraussetzungen für ein gemütliches Beisammensein schnell geschaffen.",[18,30915,30916],{},[1794,30917],{"alt":30918,"src":30919},"\"Vorfreude auf Leckeres vom Grill\"","https://media.synyx.de/uploads//2010/12/P10801421.jpg",[18,30921,30922],{},"Andere zuträgliche Komponenten wie gute Laune und Vorfreude auf Leckeres vom Grill ließen nicht lange auf sich warten.\nZwar war knuspriger Bacon (mit dem sich angeblich wirklich alles verbessern lässt) der absolute Hit, aber auch unsere\nVegetarier kamen mit genügend grünen Alternativen voll auf ihre Kosten. Im Laufe des Abends stellte sich auch heraus,\ndass karamelisierte Ananas mit etwas Zimt eine köstliche und obendrein vegetarische Leckerei abgibt.",[18,30924,30925],{},"Das Essen war natürlich nur ein Teil der Festlichkeit, unter anderem fand auch noch eine Krönung zum “Git-König” statt.\nFür die Ideengebung mit git-svn sei besser zu mergen wurde unser Neuzugang Florian Krupicka festlich mit\nPapier-Krönchen gekürt.",[18,30927,30928],{},"So haben wir das Jahr 2010 gebührend verabschiedet und freuen uns schon auf ein gemeinsames, erfolgreiches Jahr 2011.",{"title":48,"searchDepth":86,"depth":86,"links":30930},[],[614],"2010-12-22T17:20:01","https://synyx.de/blog/das-jahr-2010-geht-zu-ende/",{},"/blog/das-jahr-2010-geht-zu-ende",{"title":30891,"description":30901},"blog/das-jahr-2010-geht-zu-ende",[],"… Und es war ein erfolgreiches Jahr! Um gemeinsam darauf anzustoßen, noch bevor uns die Weihnachts-Urlaubs-Welle erwischt, veranstalteten wir letzten Freitag ein zum Jahresende traditionelles Raclette mit, zur kalten Jahreszeit…","Md6eJxMhDLvLJwJd7ncBaowiKocN3DhY_gwANzQNVh0",{"id":30942,"title":30943,"author":30944,"body":30945,"category":31029,"date":31030,"description":31031,"extension":617,"link":31032,"meta":31033,"navigation":499,"path":31034,"seo":31035,"slug":31036,"stem":31037,"tags":31038,"teaser":31039,"__hash__":31040},"blog/blog/neue-synyx-lounge-schafft-atmosphare.md","Neue Synyx Lounge schafft Atmosphäre",[21028],{"type":11,"value":30946,"toc":31027},[30947,30950,30959,30968,30971,30974,30979,30982,30988,30991,30997,31000,31006,31009,31015,31018,31024],[14,30948,30943],{"id":30949},"neue-synyx-lounge-schafft-atmosphäre",[18,30951,30952,30956],{},[1794,30953],{"alt":30954,"src":30955},"\"informatiker\"","https://media.synyx.de/uploads//2010/10/informatiker.png",[27,30957,30958],{},"Trister Büroalltag eines Informatikers: Großraumbüro, Monitor neben Monitor, Schreibtisch neben Schreibtisch,\nFachlektüre und Kundenmappen stapeln sich in den Ablagen. Karges Licht von Leuchtstoffröhren bestimmen den\nArbeitsalltag. Ist dies Vorurteil oder entspricht es der Realität? Synyx zeigt, dass es auch anders geht. Denn\nWohlfühlen schafft Kreativität und fördert die Leistung eines Einzelnen.",[18,30960,30961,30962,30967],{},"Bereits 2009 erweiterte Synyx die Räumlichkeiten in der Karlstraße um eine zusätzliche Etage. So entstanden vier weitere\nkomfortable Arbeitsbereiche. Durch das Geschäftsfeld ",[585,30963,30966],{"href":30964,"rel":30965},"http://www.synyx.de/de/leistungen/code-clinic.html",[589],"“Code Clinic”","\nwurde der Bedarf an Haus-interen Workshops immer bedeutender. Hierzu benötigte man selbstverständlich Räumlichkeiten\nmit einer guten Infrastruktur und effektivem Arbeitsklima.",[18,30969,30970],{},"So entstand im ersten Stock der Karlstraße ein weiterer Meetingraum und die sogenannte „Synyx Lounge“ mit Kaffeebar. Die\nLounge-Atmosphäre verschafft den Mitarbeitern, die Möglichkeit der kurzen Entspannung oder aber auch kleinere Meetings\nabzuhalten. Um das Ganze abzurunden, gibt es in der „Synyx Lounge“ ein „Games-Corner“ mit diversen Spielkonsolen, einem\nTischkicker und dem Synyx Info-Terminal. Besucher können sich hier weitere Informationen über das Unternehmen einholen\noder im Web surfen. Auch der neue Meetingraum wird bereits rege für zahlreiche Workshops genutzt und hat sich dadurch\nlängst bewährt.",[18,30972,30973],{},"Marius van Herpen, CONTARGO trimodal network:",[18,30975,30976],{},[573,30977,30978],{},"“Beim ersten Besuch in eurem Haus fiel schon die gemütliche Sitzecke auf, wo man sich mal vor Anfang der Arbeit, oder\nzwischendurch zur Pause hinsetzen kann. Die Computer aus der 80er Jahren riefen auch noch ein Paar Erinnerungen aus\ndieser Zeit auf. Und auch nicht gerade unwichtig, der Kaffee schmeckt auch gut!”",[18,30980,30981],{},"Verschaffen Sie sich einen kleinen Eindruck von unseren neuen Räumlichkeiten:",[18,30983,30984],{},[1794,30985],{"alt":30986,"src":30987},"\"lobby_05\"","https://media.synyx.de/uploads//2010/10/lobby_05.png",[18,30989,30990],{},"Die Synyx Lounge",[18,30992,30993],{},[1794,30994],{"alt":30995,"src":30996},"\"lobby_03\"","https://media.synyx.de/uploads//2010/10/lobby_03.png",[18,30998,30999],{},"Gemütliches Meeting bei einer Tasse Kaffee",[18,31001,31002],{},[1794,31003],{"alt":31004,"src":31005},"\"gamecorner_01\"","https://media.synyx.de/uploads//2010/10/gamecorner_01.png",[18,31007,31008],{},"Games-Corner: Um mal abzuspannen stehen hier den Mitarbeitern und Besuchern diverse Spielekonsolen zur Verfügung (Wii,\nSuper Nintendo, Schneider CPC 464, C64). Weiterhin gibt es hier unser Info-Terminal.",[18,31010,31011],{},[1794,31012],{"alt":31013,"src":31014},"\"regal_01\"","https://media.synyx.de/uploads//2010/10/regal_01.png",[18,31016,31017],{},"Es stehen ausreichend Fachliteratur und aktuelle Fachzeitschriften zur Verfügung.",[18,31019,31020],{},[1794,31021],{"alt":31022,"src":31023},"\"meetingraum_03\"","https://media.synyx.de/uploads//2010/10/meetingraum_03.png",[18,31025,31026],{},"Der Meetingraum kann individuell angepasst werden, je nachdem für wie viel Personen oder welchen Zweck er benötigt wird.",{"title":48,"searchDepth":86,"depth":86,"links":31028},[],[614],"2010-10-26T09:49:02","Trister Büroalltag eines Informatikers: Großraumbüro, Monitor neben Monitor, Schreibtisch neben Schreibtisch,\\nFachlektüre und Kundenmappen stapeln sich in den Ablagen. Karges Licht von Leuchtstoffröhren bestimmen den\\nArbeitsalltag. Ist dies Vorurteil oder entspricht es der Realität? Synyx zeigt, dass es auch anders geht. Denn\\nWohlfühlen schafft Kreativität und fördert die Leistung eines Einzelnen.","https://synyx.de/blog/neue-synyx-lounge-schafft-atmosphare/",{},"/blog/neue-synyx-lounge-schafft-atmosphare",{"title":30943,"description":30958},"neue-synyx-lounge-schafft-atmosphare","blog/neue-synyx-lounge-schafft-atmosphare",[],"Trister Büroalltag eines Informatikers: Großraumbüro, Monitor neben Monitor, Schreibtisch neben Schreibtisch, Fachlektüre und Kundenmappen stapeln sich in den Ablagen. Karges Licht von Leuchtstoffröhren bestimmen den Arbeitsalltag. Ist dies Vorurteil oder…","mpekOvBG0vrBHfC_vCiZ5iTglZm6AB-TJbiefxNcAOc",{"id":31042,"title":31043,"author":31044,"body":31045,"category":31115,"date":31116,"description":31117,"extension":617,"link":31118,"meta":31119,"navigation":499,"path":31120,"seo":31121,"slug":31123,"stem":31124,"tags":31125,"teaser":31130,"__hash__":31131},"blog/blog/fragile-agile-von-pavlo-baron-und-michael-huttermann.md","'Fragile Agile' von Pavlo Baron und Michael Hüttermann",[25771],{"type":11,"value":31046,"toc":31113},[31047,31051,31069,31074,31077,31080,31085,31088,31093,31096,31099,31102,31105,31108],[14,31048,31050],{"id":31049},"fragile-agile-von-pavlo-baron-und-michael-hüttermann","\"Fragile Agile\" von Pavlo Baron und Michael Hüttermann",[18,31052,31053,31057,31058,1628,31063,31068],{},[1794,31054],{"alt":31055,"src":31056},"\"fragile_agile\"","https://media.synyx.de/uploads//2010/09/fragile_agile.png","\nGespannt habe ich auf das neue Buch der Kollegen ",[585,31059,31062],{"href":31060,"rel":31061},"http://www.pbit.org",[589],"Baron",[585,31064,31067],{"href":31065,"rel":31066},"http://huettermann.net/",[589],"Hüttermann","\nüber die Zerbrechlichkeit der Agilität gewartet. Zu oft habe ich selbst Erfahrung damit gemacht, wie missverständlich\nAgilität aufgenommen und interpretiert werden kann. Zu oft habe ich selbst gesehen, wie man Agilität missbrauchen kann,\nsei es als Schutzschild für eigene Versäumnisse, sei es um ein Buzzword mehr in seinem Lebenslauf zu haben.",[18,31070,31071],{},[573,31072,31073],{},"“In der freien Wirtschaft ist nur selten Platz für rein technische Spielereien. Gut, bei Google oder Microsoft\nvielleicht, deswegen zieht es da ja auch so viele Geeks hin, als wäre ihr Logo mit Honig beschmiert”",[18,31075,31076],{},"Heutzutage wird Agilität fast immer direkt gleichgesetzt mit Scrum und/oder Kanban.",[18,31078,31079],{},"Damit beginnt das Buch und räumt hier auch direkt mit dieser Fehlinterpretation auf, um in den folgenden Kapiteln\nMissverständnis für Missverständnis aufzuräumen. Hierbei gelingt es den Kollegen, man merkt ihnen die vielen Jahre\nErfahrung an, durch geschickte Metaphern, trotz des eigentlich sehr anstrengenden Stoffs, den Leser bei Laune und beim\nLesen und Verstehen zu halten. Zumindest erging es mir so. Es gibt wenige Fachbücher, die ich in 2 ICE-Sessions\ndurchgelesen hatte und direkt auch rezensieren wollte.",[18,31081,31082],{},[573,31083,31084],{},"“Truckfaktor: Die Anzahl von Menschen im Projektteam, die von einem Truck erfasst werden müssen, bevor das Projekt in\nernsthafte Schwierigkeiten gerät”",[18,31086,31087],{},"Das Buch erläutert sachlich, manchmal durchaus auch ein wenig (bewusst) polemisch, direkte Implikationen innerhalb von\nTeams. Besonderen Wert legen die Autoren hier auf die sozialen Komponenten des Menschen im Teams: Motivation,\nKommunikation und Nachhaltigkeit, wobei Letzteres aus meiner Sicht ein klein wenig zu kurz kommt.",[18,31089,31090],{},[573,31091,31092],{},"“Sie arbeiten schnell und somit agil? Falsch! Agil heißt, den Kunden zufriedenzustellen, nicht schnell etwas\nherunterzuklopfen”",[18,31094,31095],{},"Was man aber nicht erwarten darf, sind die 10 Tipps, die es dem Mitarbeiter im Projekt einfacher machen, erfolgreicher,\neffizienter zu arbeiten. Vermutlich ist das auch Absicht, damit der Leser mehr nachdenkt und nicht “stumpf” einem\nKatalog von Pattern folgt 😉",[18,31097,31098],{},"Die Beispiele und Berichte aus der realen Welt sind durchaus stimmig gewählt und bringen viele der Argumente noch klarer\nzum Vorschein. Besonders in den Kapiteln 9 und 10 (Funktionierende Software, Nachhaltige Geschwindigkeit) wird sich\nsicherlich fast jeder Entwickler wieder finden und die Argumente bestätigen können.",[18,31100,31101],{},"Als Ergänzung liegt dem Buch übrigens ein Gutscheincode für einen eBook Download bei! Hierfür muss man dem Hanser Verlag\ndicken Respekt zollen!",[18,31103,31104],{},"Ich kann dieses Buch jedem Projektleiter, jedem Entwickler aber auch jedem “Chef” nur wärmstens empfehlen, um zu\nbegreifen, wie die sozialen Aspekte direkt auf den Projekterfolg einwirken. Was ich besonders gelungen finde, ist das\nsich das Buch nicht an Knaben oder Serum entlang hangelt, sondern auch deutlich macht, dass Agilität zuerst einmal\nnichts mit einem Prozess- / Vorgehensmodell zu tun hat, sondern eigentlich schlicht das Zusammenwirken sozialer\nKomponenten in einem Team von “Machern” ist.",[18,31106,31107],{},"Das ist eines der Bücher, obwohl deutschsprachig, welches wirklich jeder einmal lesen sollte, der es mit Agilität ernst\nnimmt! Kurz, knackig, ohne Buzzwordanhäufung und wilde Tipps, sondern viel mehr zum selbst nachdenken anregend! (und das\nist aus meiner Sicht wiederum agil 🙂 )",[18,31109,31110],{},[573,31111,31112],{},"“Design is not what it looks like and feels like. Design is how it works!” (Steve Jobs)",{"title":48,"searchDepth":86,"depth":86,"links":31114},[],[614],"2010-09-28T09:17:01","\\nGespannt habe ich auf das neue Buch der Kollegen Baron und Hüttermann\\nüber die Zerbrechlichkeit der Agilität gewartet. Zu oft habe ich selbst Erfahrung damit gemacht, wie missverständlich\\nAgilität aufgenommen und interpretiert werden kann. Zu oft habe ich selbst gesehen, wie man Agilität missbrauchen kann,\\nsei es als Schutzschild für eigene Versäumnisse, sei es um ein Buzzword mehr in seinem Lebenslauf zu haben.","https://synyx.de/blog/fragile-agile-von-pavlo-baron-und-michael-huttermann/",{},"/blog/fragile-agile-von-pavlo-baron-und-michael-huttermann",{"title":31043,"description":31122},"\nGespannt habe ich auf das neue Buch der Kollegen Baron und Hüttermann\nüber die Zerbrechlichkeit der Agilität gewartet. Zu oft habe ich selbst Erfahrung damit gemacht, wie missverständlich\nAgilität aufgenommen und interpretiert werden kann. Zu oft habe ich selbst gesehen, wie man Agilität missbrauchen kann,\nsei es als Schutzschild für eigene Versäumnisse, sei es um ein Buzzword mehr in seinem Lebenslauf zu haben.","fragile-agile-von-pavlo-baron-und-michael-huttermann","blog/fragile-agile-von-pavlo-baron-und-michael-huttermann",[22578,31126,31127,26135,31128,31129,4505],"baron","huttermann","productivity","project-management","Gespannt habe ich auf das neue Buch der Kollegen Baron und Hüttermann über die Zerbrechlichkeit der Agilität gewartet. Zu oft habe ich selbst Erfahrung damit gemacht, wie missverständlich Agilität aufgenommen…","i8BRfnraw8pkykCcNeMsM3fcbvrjInhdaciQUi0tPj8",{"id":31133,"title":31134,"author":31135,"body":31136,"category":31163,"date":31164,"description":31165,"extension":617,"link":31166,"meta":31167,"navigation":499,"path":31168,"seo":31169,"slug":31140,"stem":31170,"tags":31171,"teaser":31172,"__hash__":31173},"blog/blog/sommerfeier-2010.md","Sommerfeier 2010",[18956],{"type":11,"value":31137,"toc":31161},[31138,31141,31148,31151,31158],[14,31139,31134],{"id":31140},"sommerfeier-2010",[18,31142,31143,31147],{},[1794,31144],{"alt":31145,"src":31146},"\"raw_DSC_0136\"","https://media.synyx.de/uploads//2010/09/raw_DSC_01361.jpg","\nVor knapp einem Monat, am 28.08 fand die Synyx Sommerfeier mit Kollegen, Partnern und ehemaligen Kollegen statt. Die\nFeier fand auf dem Gelände des PHV statt, welches im Karlsruher Westen, am Rande von Knielingen liegt, und damit auch\nfür unsere Kollegen aus der Pfalz der Anfahrtsweg nicht allzu lang ist.",[18,31149,31150],{},"Wie es sich für ein Sommerfest gehört, wurde natürlich gegrillt, was nicht nur bei unseren Karnivoren, sondern auch bei\nunseren Veganern und Vegetariern das Wasser im Mund zusammenlaufen ließ. Nachdem wir durch unseren Hunger getrieben uns\nam Grillgut und den Salaten gesättigt hatten, konnten wir die angrenzende Wiese mit Hilfe eines Fussballs und Frisbees\ndie frischen Kalorieen gleich abbauen.",[18,31152,31153,31157],{},[1794,31154],{"alt":31155,"src":31156},"\"infinitive loop\"","https://media.synyx.de/uploads//2010/09/raw_DSC_0185.jpg","\nDurch die leider nicht ganz sommerlichen Temperaturen, verlagerte sich die Feier nach und nach in das Vereinslokal des\nPHV, in welchem schon 2 unserer Geschäftsführer nach unsere Pfeife tanzten, und für die durstigen Kehlen leckere\nCocktails mixten. Durch looping louie, Bällen zum Jonglieren, Jojos und anderem Utensil verstrich die Zeit wie im Flug,\nund das Ende des Abends war wie im Flug erreicht.",[18,31159,31160],{},"Nun bleibt uns nur noch, uns an die schönen Momente zu erinnern, und auf die Nächste Feier zu freuen.",{"title":48,"searchDepth":86,"depth":86,"links":31162},[],[614],"2010-09-21T11:07:39","\\nVor knapp einem Monat, am 28.08 fand die Synyx Sommerfeier mit Kollegen, Partnern und ehemaligen Kollegen statt. Die\\nFeier fand auf dem Gelände des PHV statt, welches im Karlsruher Westen, am Rande von Knielingen liegt, und damit auch\\nfür unsere Kollegen aus der Pfalz der Anfahrtsweg nicht allzu lang ist.","https://synyx.de/blog/sommerfeier-2010/",{},"/blog/sommerfeier-2010",{"title":31134,"description":31147},"blog/sommerfeier-2010",[],"Vor knapp einem Monat, am 28.08 fand die Synyx Sommerfeier mit Kollegen, Partnern und ehemaligen Kollegen statt. Die Feier fand auf dem Gelände des PHV statt, welches im Karlsruher Westen,…","6fKSZyKdeIEP4CyDKVeunN1ZupL-A2oD3Eg2h3QPNek",{"id":31175,"title":31176,"author":31177,"body":31178,"category":31226,"date":31227,"description":31185,"extension":617,"link":31228,"meta":31229,"navigation":499,"path":31230,"seo":31231,"slug":31182,"stem":31232,"tags":31233,"teaser":31234,"__hash__":31235},"blog/blog/baden-lief-und-wir-waren-dabei.md","Baden lief und wir waren dabei",[30893],{"type":11,"value":31179,"toc":31224},[31180,31183,31186,31189,31209,31218,31221],[14,31181,31176],{"id":31182},"baden-lief-und-wir-waren-dabei",[18,31184,31185],{},"Gestern am Sonntag den 19.09.2010 war es wieder so weit, der alljährliche Baden-Marathon fand statt.",[18,31187,31188],{},"Als Informatiker sind wir natürlich nicht alle einen separaten 42,195 km langen Marathon gelaufen, sondern teilten diese\nStrecke beim 6. “PSD Business-Marathon” zu dritt als Staffel.",[18,31190,31191,31196,31197,31202,31203,31208],{},[585,31192,31195],{"href":31193,"rel":31194},"http://blog.synyx.de/autoren/?uid=17",[589],"Florian"," lief 21,1 km, ",[585,31198,31201],{"href":31199,"rel":31200},"http://blog.synyx.de/autoren/?uid=20",[589],"Ich"," lief die 15\nkm, und ",[585,31204,31207],{"href":31205,"rel":31206},"http://blog.synyx.de/autoren/?uid=6",[589],"Markus",", der heute übrigens Geburtstag hat (Alles Gute an dieser Stelle),\ndie 6 km zum Ziel ins Beiertheim-Stadion.",[18,31210,31211,31212,31217],{},"Wir haben mit einer zufriedenstellenden Zeit von 4:30:29 den Marathon erfolgreich absolviert, und unterwegs eine Menge\nSpaß mit den Zuschauern und verschiedenen Bands und Tanzgruppen, die einen förmlich über\ndie ",[585,31213,31216],{"href":31214,"rel":31215},"http://www.badenmarathon.de/cms/fileadmin/Inhalte/Inhaltsbilder/strecke2010.jpg",[589],"schöne Laufstrecke"," trugen,\ngehabt.",[18,31219,31220],{},"Für nächstes Jahr peilen wir eine noch bessere Zeit, ob beim separaten Halbmarathon oder bei der Herausforderung als\nTeam, an.",[18,31222,31223],{},"Doch auch dann wird hoffentlich wieder die Freude über das gemeinsame Meistern der Herausforderung überwiegen.",{"title":48,"searchDepth":86,"depth":86,"links":31225},[],[614],"2010-09-20T11:20:07","https://synyx.de/blog/baden-lief-und-wir-waren-dabei/",{},"/blog/baden-lief-und-wir-waren-dabei",{"title":31176,"description":31185},"blog/baden-lief-und-wir-waren-dabei",[],"Gestern am Sonntag den 19.09.2010 war es wieder so weit, der alljährliche Baden-Marathon fand statt. Als Informatiker sind wir natürlich nicht alle einen separaten 42,195 km langen Marathon gelaufen, sondern…","vfHWyV1vcwvjr4ys_1vcmVC5KC5HebrqyicqYXO_jrY",{"id":31237,"title":31238,"author":31239,"body":31240,"category":31288,"date":31289,"description":31290,"extension":617,"link":31291,"meta":31292,"navigation":499,"path":31293,"seo":31294,"slug":31295,"stem":31296,"tags":31297,"teaser":31299,"__hash__":31300},"blog/blog/wer-zu-spat-kommt-den-bestraft-die-scrum-fail-tasse.md","Wer zu spät kommt, den bestraft die Scrum-Fail-Tasse.",[21028],{"type":11,"value":31241,"toc":31286},[31242,31245,31252,31261,31270,31283],[14,31243,31238],{"id":31244},"wer-zu-spät-kommt-den-bestraft-die-scrum-fail-tasse",[18,31246,31247,31251],{},[1794,31248],{"alt":31249,"src":31250},"\"scrum_02\"","https://media.synyx.de/uploads//2010/09/scrum_02.jpg","\nNiemand ist perfekt, das ist allgemein bekannt. Manchmal muss man auch zu weniger makellosen Eigenschaften stehen und\nversuchen das Beste daraus zu machen. So versuchen die Mitarbeiter von Synyx in erster Linie die Untugend des\nZuspätkommens erst gar nicht aufkommen zu lassen. Sollte es aber doch mal nicht funktionieren, dann in etwas Sinnvolles\nund Positives umzuwandeln.",[18,31253,31254,31255,31260],{},"Für die Daily ",[585,31256,31259],{"href":31257,"rel":31258},"https://synyx.de/https-synyx-de-agile-arbeitsmethoden/",[589],"Scrums"," ist es wichtig, dass sie pünktlich\nanfangen, sprich, dass alle Beteiligten ohne Verspätung zum Meeting kommen. Für den ein oder anderen ist das nicht immer\nso leicht, auch wenn es sich in diesem Fall oftmals nur um eine Minute handelt. Die Gründe dafür sind vielfältig,\nspielen aber hier keine Rolle. Denn Ziel ist es, Verspätungen zu vermeiden. Folglich wurde die “Scrum-Fail-Kasse”\neingeführt. Wer also zu spät zum Daily Scrum erscheint, hat einen gewissen Betrag in eben diese Kasse zu zahlen. Im\nLaufe der Zeit kann sich da durchaus etwas ansammeln.",[18,31262,31263,31264,31269],{},"Und was ist daran jetzt sinnvoll? Ganz einfach: ",[585,31265,31268],{"href":31266,"rel":31267},"http://www.kiva.org/",[589],"Kiva",", eine wohltätige Organisation (NGO), bietet\ndie Möglichkeit, Mikrokredite direkt an einen selbst ausgesuchten Kreditnehmer in einem Entwicklungsland zu vergeben.\nMenschen auf der ganzen Welt können so mit kleinen Beträgen – schon ab 25 US-Dollar – anderen Menschen in Armut helfen,\neine Existenzgrundlage aufzubauen.",[18,31271,31272,31276,31277,31282],{},[585,31273,28920],{"href":31274,"rel":31275},"http://blog.synyx.de/autoren/?uid=14",[589],", Scrum Master bei Synyx, hat sich in Absprache mit den Teams für\ndiesen Weg entschieden, um den Betrag der Scrum Fail Kasse sinnvoll einzusetzen. Inzwischen konnten bereits einige\nProjekte unterstützt werden, wie auf der ",[585,31278,31281],{"href":31279,"rel":31280},"http://www.kiva.org/team/synyx",[589],"Kiva Lending Team Seite"," von Synyx nachzulesen\nist.",[18,31284,31285],{},"Auch wenn sich der Scrum Master stets über Pünktlichkeit freut, kann er mit einem zwinkernden Auge, das Positive daran\nsehen 😉",{"title":48,"searchDepth":86,"depth":86,"links":31287},[],[614],"2010-09-07T15:38:04","\\nNiemand ist perfekt, das ist allgemein bekannt. Manchmal muss man auch zu weniger makellosen Eigenschaften stehen und\\nversuchen das Beste daraus zu machen. So versuchen die Mitarbeiter von Synyx in erster Linie die Untugend des\\nZuspätkommens erst gar nicht aufkommen zu lassen. Sollte es aber doch mal nicht funktionieren, dann in etwas Sinnvolles\\nund Positives umzuwandeln.","https://synyx.de/blog/wer-zu-spat-kommt-den-bestraft-die-scrum-fail-tasse/",{},"/blog/wer-zu-spat-kommt-den-bestraft-die-scrum-fail-tasse",{"title":31238,"description":31251},"wer-zu-spat-kommt-den-bestraft-die-scrum-fail-tasse","blog/wer-zu-spat-kommt-den-bestraft-die-scrum-fail-tasse",[31298,4505],"kiva","Niemand ist perfekt, das ist allgemein bekannt. Manchmal muss man auch zu weniger makellosen Eigenschaften stehen und versuchen das Beste daraus zu machen. So versuchen die Mitarbeiter von Synyx in…","-82TgZjoSmCTpAZH7I8veHScnfFHO9hzN_rscjR8G2c",{"id":31302,"title":31303,"author":31304,"body":31305,"category":31351,"date":31352,"description":31353,"extension":617,"link":31354,"meta":31355,"navigation":499,"path":31356,"seo":31357,"slug":31358,"stem":31359,"tags":31360,"teaser":31365,"__hash__":31366},"blog/blog/iphone-partner-und-spinnen-holl-the-woodfairy.md","iPhone, Partner und Spinnen – holla the woodfairy",[21028],{"type":11,"value":31306,"toc":31349},[31307,31310,31317,31330,31339],[14,31308,31303],{"id":31309},"iphone-partner-und-spinnen-holla-the-woodfairy",[18,31311,31312,31316],{},[1794,31313],{"alt":31314,"src":31315},"\"ithinkispider\"","https://media.synyx.de/uploads//2010/08/ithinkispider.png","\nWie passt das alles zusammen? Ganz einfach …",[18,31318,31319,31320,31324,31325,31329],{},"“Holla the woodfairy – holla die Waldfee”. Was haben wir gelacht über diese und noch viele weitere “Übersetzungen” auf\nder Website “",[585,31321,30395],{"href":31322,"rel":31323,"title":30395},"http://ithinkispider.com/",[589],"“. Und da lachen bekanntlich gesund ist,\nkamen wir schnell zu dem Entschluss noch mehr Menschen zum Lachen zu bringen. Was liegt da also näher, als eine iPhone\nApp zu diesem Thema zu entwickeln? David Linsin, Ansprechpartner für den\nGeschäftsbereich ",[585,31326,31328],{"href":8464,"rel":31327,"title":31328},[589],"Mobile Solutions",", war sofort begeistert von\ndieser Idee und nahm Kontakt mit dem Betreiber der Website auf. Mit seiner Erlaubnis fiel der Startschuss für die\nunkommerzielle Entwicklung der App.",[18,31331,31332,31333,31338],{},"Eine gut durchdachte und funktionierende App ist aber nicht alles. Das Auge isst bekanntlich mit. Also hieß es für uns\njemanden zu finden, der genauso begeistert von dieser Idee ist und das Ganze auch noch grafisch umsetzen kann. Dieser\nwar schnell gefunden: Lars von ",[585,31334,30401],{"href":31335,"rel":31336,"title":31337},"http://www.upstruct.com",[589],"upstuct berlin oslo",". Die Zusammenarbeit hat\nhervorragend geklappt und wir sehen auch für die Zukunft gemeinsame Projekte vor.",[18,31340,31341,31342,31348],{},"Entstanden ist eine feine, kleine, lustige App, welche sich zurzeit in der Betaphase befindet. Wir sind schon auf das\nFeedback gespannt und freuen uns auf die Version 1.0! Wer auf dem Laufenden bleiben will, soll einfach\nden ",[585,31343,31347],{"href":31344,"rel":31345,"title":31346},"https://synyx.de/blog/kategorien/mobile-blog/",[589],"Synyx Mobile Solution Blog","Mobile Solutions Blog"," im Auge\nbehalten. Dort werden alle Neuigkeiten und Infos zu dem Thema gepostet.",{"title":48,"searchDepth":86,"depth":86,"links":31350},[],[614],"2010-08-17T15:03:53","\\nWie passt das alles zusammen? Ganz einfach …","https://synyx.de/blog/iphone-partner-und-spinnen-holl-the-woodfairy/",{},"/blog/iphone-partner-und-spinnen-holl-the-woodfairy",{"title":31303,"description":31316},"iphone-partner-und-spinnen-holl-the-woodfairy","blog/iphone-partner-und-spinnen-holl-the-woodfairy",[31361,31362,31363,13052,31364],"app","i-think-i-spider","iphone","partner","Wie passt das alles zusammen? Ganz einfach … “Holla the woodfairy – holla die Waldfee”. Was haben wir gelacht über diese und noch viele weitere “Übersetzungen” auf der Website “I…","G4_XhelDHZHiOOL23vLCH1H3qngECE4EzdgesoshZ0A",{"id":31368,"title":30326,"author":31369,"body":31370,"category":31574,"date":31575,"description":31576,"extension":617,"link":31577,"meta":31578,"navigation":499,"path":31579,"seo":31580,"slug":31374,"stem":31582,"tags":31583,"teaser":31587,"__hash__":31588},"blog/blog/dependency-hell-or-including-jsr303-into-a-hibernated-javaee-app.md",[25771],{"type":11,"value":31371,"toc":31572},[31372,31375,31382,31389,31392,31535,31542,31545,31556,31567,31570],[14,31373,30326],{"id":31374},"dependency-hell-or-including-jsr303-into-a-hibernated-javaee-app",[18,31376,31377,31378,12114],{},"Today i integrated the JSR303 reference implementation, which is Hibernate-Validator 4.x, into an existing JavaEE\napplication. The application is built on Spring 3.0 and uses our Synyx Hades project, which is also based on Spring, as\nan OR-Mapper. (",[585,31379,31380],{"href":31380,"rel":31381},"http://redmine.synyx.org/projects/show/hades",[589],[18,31383,31384,31385,12114],{},"First I just followed the Spring tutorial which is quite simple and straight\nforward. (",[585,31386,31387],{"href":31387,"rel":31388},"http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/validation.html#validation-beanvalidation-spring",[589],[18,31390,31391],{},"After a redeploy and writing an example bean and a test for it, it was just disappointing because nothing worked and the\nstacktrace was not really helping at a first look.",[43,31393,31395],{"className":11460,"code":31394,"language":11462,"meta":48,"style":48},"testProperty(org.synyx.jsr303.validation.ValidatorTest) Time elapsed: 0.002 sec \u003C\u003C\u003C ERROR!\njava.lang.NoSuchMethodError: javax.persistence.Persistence.getPersistenceUtil()Ljavax/persistence/PersistenceUtil;\nat org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:33)\nat org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:112)\nat org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:47)\nat org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:761)\nat org.hibernate.validator.engine.ValidatorImpl.validatePropertyForGroup(ValidatorImpl.java:562)\nat org.hibernate.validator.engine.ValidatorImpl.validateProperty(ValidatorImpl.java:496)\nat org.hibernate.validator.engine.ValidatorImpl.validateProperty(ValidatorImpl.java:131)\nat org.springframework.validation.beanvalidation.SpringValidatorAdapter.validateProperty(SpringValidatorAdapter.java:118)\nat org.synyx.jsr303.validation.ValidatorTest.testProperty(ValidatorTest.java:64)\nat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\nat java.lang.reflect.Method.invoke(Method.java:597)\nat org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)\nat org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)\nat org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)\nat org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)\nat org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)\nat org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)\nat org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)\nat org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)\nat org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)\nat org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)\nat org.apache.maven.surefire.Surefire.run(Surefire.java:177)\nat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\nat java.lang.reflect.Method.invoke(Method.java:597)\nat org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)\nat org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)\n\n",[50,31396,31397,31402,31407,31412,31417,31422,31427,31432,31437,31442,31447,31452,31457,31462,31467,31472,31477,31482,31487,31492,31497,31502,31507,31512,31517,31521,31525,31530],{"__ignoreMap":48},[53,31398,31399],{"class":55,"line":56},[53,31400,31401],{},"testProperty(org.synyx.jsr303.validation.ValidatorTest) Time elapsed: 0.002 sec \u003C\u003C\u003C ERROR!\n",[53,31403,31404],{"class":55,"line":86},[53,31405,31406],{},"java.lang.NoSuchMethodError: javax.persistence.Persistence.getPersistenceUtil()Ljavax/persistence/PersistenceUtil;\n",[53,31408,31409],{"class":55,"line":126},[53,31410,31411],{},"at org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:33)\n",[53,31413,31414],{"class":55,"line":163},[53,31415,31416],{},"at org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:112)\n",[53,31418,31419],{"class":55,"line":186},[53,31420,31421],{},"at org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:47)\n",[53,31423,31424],{"class":55,"line":221},[53,31425,31426],{},"at org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:761)\n",[53,31428,31429],{"class":55,"line":242},[53,31430,31431],{},"at org.hibernate.validator.engine.ValidatorImpl.validatePropertyForGroup(ValidatorImpl.java:562)\n",[53,31433,31434],{"class":55,"line":273},[53,31435,31436],{},"at org.hibernate.validator.engine.ValidatorImpl.validateProperty(ValidatorImpl.java:496)\n",[53,31438,31439],{"class":55,"line":279},[53,31440,31441],{},"at org.hibernate.validator.engine.ValidatorImpl.validateProperty(ValidatorImpl.java:131)\n",[53,31443,31444],{"class":55,"line":496},[53,31445,31446],{},"at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validateProperty(SpringValidatorAdapter.java:118)\n",[53,31448,31449],{"class":55,"line":503},[53,31450,31451],{},"at org.synyx.jsr303.validation.ValidatorTest.testProperty(ValidatorTest.java:64)\n",[53,31453,31454],{"class":55,"line":509},[53,31455,31456],{},"at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n",[53,31458,31459],{"class":55,"line":515},[53,31460,31461],{},"at java.lang.reflect.Method.invoke(Method.java:597)\n",[53,31463,31464],{"class":55,"line":521},[53,31465,31466],{},"at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)\n",[53,31468,31469],{"class":55,"line":527},[53,31470,31471],{},"at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)\n",[53,31473,31474],{"class":55,"line":533},[53,31475,31476],{},"at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)\n",[53,31478,31479],{"class":55,"line":539},[53,31480,31481],{},"at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)\n",[53,31483,31484],{"class":55,"line":545},[53,31485,31486],{},"at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)\n",[53,31488,31489],{"class":55,"line":4941},[53,31490,31491],{},"at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)\n",[53,31493,31494],{"class":55,"line":4949},[53,31495,31496],{},"at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)\n",[53,31498,31499],{"class":55,"line":4957},[53,31500,31501],{},"at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)\n",[53,31503,31504],{"class":55,"line":4966},[53,31505,31506],{},"at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)\n",[53,31508,31509],{"class":55,"line":4973},[53,31510,31511],{},"at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)\n",[53,31513,31514],{"class":55,"line":4978},[53,31515,31516],{},"at org.apache.maven.surefire.Surefire.run(Surefire.java:177)\n",[53,31518,31519],{"class":55,"line":4984},[53,31520,31456],{},[53,31522,31523],{"class":55,"line":5001},[53,31524,31461],{},[53,31526,31527],{"class":55,"line":5007},[53,31528,31529],{},"at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)\n",[53,31531,31532],{"class":55,"line":5016},[53,31533,31534],{},"at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)\n",[18,31536,31537,31538,31541],{},"Why did I get an exception from a class called PersistenceUtil while just doing some validations via JSR303? Well, after\nreading the specification for JSR303 and some related blog entries, the solution is quite simple. JSR303 specification\nmanifests, that if a class PersistenceUtil is in the classpath, the JPATraversalResolver has to be integrated into the\nvalidation as well. If afterwards the method ",[573,31539,31540],{},"getPersistenceUtil()"," is getting called, its obvious that this method is\nnot available due to the fact that it is just a simple name matching.",[18,31543,31544],{},"Now I had THREE questions instead of one 🙂:",[577,31546,31547,31550,31553],{},[580,31548,31549],{},"Why is there a class called PersistenceUtil in my classpath while I DON’T use any JPA2 library (And this class is\nonly relevant for JPA2) – well this is surely just because the Hibernate guys had chosen the same name. Anyway, why the\nJPA2 guys used names like “PersistenceUtil” ????",[580,31551,31552],{},"Why the specification manifests that if a class called PersistenceUtil is in classpath, there must be also a JPA\nvalidation?",[580,31554,31555],{},"Why they do not additionally check against the needed method getPersistenceUtil() as well?",[18,31557,31558,31559,31562,31563,31566],{},"Anyway, as I needed a workaround, I checked the projects classpath… and I found my class ",[573,31560,31561],{},"PersistenceUtil"," but it was in\na jar called “ejb3-persistence-1.0.1GA.jar” – don’t ask me, why there also is a class called PersistenceUtil (btw. I\nhate ANY classes with ",[573,31564,31565],{},"UTIL"," in its name). I googled around a bit and found more people, who had the same problem and\nthe fix is really really easy. The guys who maintained the jar, fixed the problem due a little refactoring in version\n1.0.2GA.",[18,31568,31569],{},"So the only thing to do was to update this dependency in pom.xml to 1.0.2GA and everything went fine… Took me three\nhours to find out 🙁",[607,31571,989],{},{"title":48,"searchDepth":86,"depth":86,"links":31573},[],[614],"2010-07-20T16:10:45","Today i integrated the JSR303 reference implementation, which is Hibernate-Validator 4.x, into an existing JavaEE\\napplication. The application is built on Spring 3.0 and uses our Synyx Hades project, which is also based on Spring, as\\nan OR-Mapper. (http://redmine.synyx.org/projects/show/hades)","https://synyx.de/blog/dependency-hell-or-including-jsr303-into-a-hibernated-javaee-app/",{},"/blog/dependency-hell-or-including-jsr303-into-a-hibernated-javaee-app",{"title":30326,"description":31581},"Today i integrated the JSR303 reference implementation, which is Hibernate-Validator 4.x, into an existing JavaEE\napplication. The application is built on Spring 3.0 and uses our Synyx Hades project, which is also based on Spring, as\nan OR-Mapper. (http://redmine.synyx.org/projects/show/hades)","blog/dependency-hell-or-including-jsr303-into-a-hibernated-javaee-app",[31584,31585,31586,290,17569,3122],"architecture","dependencyhell","dependencymanagement","Today i integrated the JSR303 reference implementation, which is Hibernate-Validator 4.x, into an existing JavaEE application. The application is built on Spring 3.0 and uses our Synyx Hades project, which…","jaMqXSr9rHWkAW8ml4UhHnhi_9ybaohJ2bmPFJ0BOnA",{"id":31590,"title":31591,"author":31592,"body":31593,"category":31674,"date":31675,"description":31676,"extension":617,"link":31677,"meta":31678,"navigation":499,"path":31679,"seo":31680,"slug":31682,"stem":31683,"tags":31684,"teaser":31685,"__hash__":31686},"blog/blog/inintivative-rheumapreis-interview-mit-christian-vedder-bih.md","Initiative Rheumapreis: Interview mit Christian Vedder (BIH)",[21028],{"type":11,"value":31594,"toc":31672},[31595,31598,31621,31624,31629,31632,31637,31640,31643,31646,31651,31654,31659,31662,31665],[14,31596,31591],{"id":31597},"initiative-rheumapreis-interview-mit-christian-vedder-bih",[18,31599,31600,31604,31605,31608,31609,31614,31615,31620],{},[1794,31601],{"alt":31602,"src":31603},"\"logo_rheumapreis\"","https://media.synyx.de/uploads//2010/06/logo_rheumapreis1.gif","\nHeute blogge ich zu einem Thema, welches auf den ersten Blick recht wenig mit ",[585,31606,30371],{"href":24942,"rel":31607},[589]," zu tun hat.\nIm Interview mit Christian Vedder, Geschäftsführer der ",[585,31610,31613],{"href":31611,"rel":31612},"http://www.integrationsaemter.de",[589],"BIH",",\nzur ",[585,31616,31619],{"href":31617,"rel":31618},"http://www.rheumapreis.de/aktuelles/rheumapreis-geht-in-die-zweite-runde/",[589],"Initiative Rheumapreis"," wird erörtert,\nwas sich hinter der Initiative verbirgt. Aber was hat das nun mit Synyx zu tun? Unsere Unternehmensphilosophie\nbeinhaltet unter anderem, sich für soziale Zwecke einzusetzen. Dazu gehört auch, am Arbeitsplatz den Mitarbeitern die\nbestmöglichen Bedingungen zu schaffen. Egal, ob sich das auf die technische Entwicklungsumgebung, den Wissenstransfer\noder auf die physischen Arbeitsplatzbedingungen bezieht. Mit der BIH besteht bereits seit Jahren eine Zusammenarbeit,\nmit der Initiative Rheumapreis seit ca. 2 Jahren. Und so ist es für uns selbstverständlich unsere Unterstützung\nanzubieten, um dieses Thema aktuell zu halten.",[18,31622,31623],{},"Und nun zum Interview.",[18,31625,31626],{},[27,31627,31628],{},"Über Christian Vedder und die BIH",[18,31630,31631],{},"Die Abkürzung BIH steht für (Bundesarbeitsgemeinschaft der Integrationsämter und Hauptfürsorgestellen). Die BIH ist der\nZusammenschluss aller Integrationsämter und HauptfürsorgesteIlen in Deutschland. Sie erarbeitet Empfehlungen zur\nUmsetzung des Schwerbehindertenrechts, vertritt ihre Mitglieder in Gremien auf Bundesebene und bei Absprachen mit\nanderen gesetzlichen Leistungsträgern. Die Integrationsämter nehmen gesetzliche Aufgaben im Rahmen der Beschäftigung\nschwerbehinderter Menschen auf dem allgemeinen Arbeitsmarkt wahr und fördern die berufliche Chancengleichheit von\nschwerbehinderten Menschen. Christian Vedder ist Geschäftsführer der BIH.",[18,31633,31634],{},[27,31635,31636],{},"Was verbirgt sich hinter der Initiative RheumaPreis?",[18,31638,31639],{},"Der RheumaPreis ist eine Initiative mit dem Ziel, die beruflichen Chancen von Menschen mit entzündlich-rheumatischen\nErkrankungen zu verbessern und zu mehr Offenheit im Umgang mit dem Thema „Rheuma in der Arbeitswelt“ anzuregen. Im\nMittelpunkt stehen dabei die Patienten, aber auch die kreativen Lösungen, die sie mit ihrem Arbeitgeber gefunden haben,\num Arbeitsfähigkeit und Selbstständigkeit am Arbeitsplatz zu erhalten. Die Geschichten der Preisträger sollen\nVorbildcharakter haben, denn noch immer scheiden viele Arbeitnehmer mit Rheuma vorzeitig aus dem Berufsleben aus. Meist\ngeschieht dies weniger aus medizinischer Notwendigkeit heraus, als vielfach aufgrund mangelnden Wissens über die zur\nVerfügung stehenden Möglichkeiten für eine berufliche Integration. Auch darauf möchte die Initiative aufmerksam machen.",[18,31641,31642],{},"**Mit welchen Beweggründen unterstützt die BIH den RheumaPreis? Was für eine Bedeutung hat der RheumaPreis für den BIH?\n**",[18,31644,31645],{},"Die berufliche Integration behinderter Menschen ist nicht allein mit Gesetzen und finanziellen Mitteln zu erreichen.\nSondern es braucht kreative Ideen, die anderen als Vorbild dienen, so wie die RheumaPreis-Beispiele. Die Initiative\nverbindet alle Elemente, die auch für die BIH wichtig sind: Einfallsreichtum und Innovation, aber auch Bodenhaftigkeit\nund Umsetzungswillen. Genau deshalb unterstützen wir den RheumaPreis.",[18,31647,31648],{},[27,31649,31650],{},"Wie ist das Auswahlverfahren der Preisträger(-innen)? Welche Aspekte berücksichtigen Sie besonders?",[18,31652,31653],{},"Es ist natürlich nicht einfach, die Gewinner aus all den Bewerbungen auszuwählen. Denn die vorgestellten Lösungsansätze\nsind so verschieden und deshalb schwer miteinander zu vergleichen. Dennoch haben wir feste Kriterien, anhand derer wir\nunsere Wahl festmachen, damit die Auswahl objektiv bleibt. Grundsätzlich wichtig ist für uns zu sehen, ob die Lösungen\nauch tatsächlich dauerhaft umsetzbar sind. Mit Blick auf die Zusammenarbeit achten wir besonders auf das\nEinfühlungsvermögen, Verständnis und Entgegenkommen der Arbeitgeber. Eine positive Einstellung und der Wille nicht\naufzugeben sind Faktoren, die wir beim Arbeitnehmer verstärkt berücksichtigen.",[18,31655,31656],{},[27,31657,31658],{},"Was für eine Bedeutung hat der RheumaPreis für die Gewinner?",[18,31660,31661],{},"Für die Gewinner ist der RheumaPreis sicherlich mehr als nur „ein Preis“. Viele von ihnen mussten in ihrer beruflichen\nLaufbahn diverse Hürden überwinden, Niederschläge verkraften und haben dennoch niemals aufgegeben. Der RheumaPreis soll\nden Gewinnern zeigen, dass sich dieser harte Weg gelohnt hat und sie sehr vielen Menschen in Deutschland damit als\nVorbild gelten sollten. Er zeichnet ihren Mut, ihr Durchhaltevermögen, ihren Willen und ihren Optimismus in besonderer\nWeise aus.",[18,31663,31664],{},"Vielen Dank für das Interview.",[18,31666,31667],{},[585,31668,31671],{"href":31669,"rel":31670},"https://media.synyx.de/uploads//2010/06/RhPreis2010_PatientenFlyer_DINlang.pdf",[589],"Download Infomationsbroschüre",{"title":48,"searchDepth":86,"depth":86,"links":31673},[],[614],"2010-06-24T13:44:46","\\nHeute blogge ich zu einem Thema, welches auf den ersten Blick recht wenig mit Synyx zu tun hat.\\nIm Interview mit Christian Vedder, Geschäftsführer der BIH,\\nzur Initiative Rheumapreis wird erörtert,\\nwas sich hinter der Initiative verbirgt. Aber was hat das nun mit Synyx zu tun? Unsere Unternehmensphilosophie\\nbeinhaltet unter anderem, sich für soziale Zwecke einzusetzen. Dazu gehört auch, am Arbeitsplatz den Mitarbeitern die\\nbestmöglichen Bedingungen zu schaffen. Egal, ob sich das auf die technische Entwicklungsumgebung, den Wissenstransfer\\noder auf die physischen Arbeitsplatzbedingungen bezieht. Mit der BIH besteht bereits seit Jahren eine Zusammenarbeit,\\nmit der Initiative Rheumapreis seit ca. 2 Jahren. Und so ist es für uns selbstverständlich unsere Unterstützung\\nanzubieten, um dieses Thema aktuell zu halten.","https://synyx.de/blog/inintivative-rheumapreis-interview-mit-christian-vedder-bih/",{},"/blog/inintivative-rheumapreis-interview-mit-christian-vedder-bih",{"title":31591,"description":31681},"\nHeute blogge ich zu einem Thema, welches auf den ersten Blick recht wenig mit Synyx zu tun hat.\nIm Interview mit Christian Vedder, Geschäftsführer der BIH,\nzur Initiative Rheumapreis wird erörtert,\nwas sich hinter der Initiative verbirgt. Aber was hat das nun mit Synyx zu tun? Unsere Unternehmensphilosophie\nbeinhaltet unter anderem, sich für soziale Zwecke einzusetzen. Dazu gehört auch, am Arbeitsplatz den Mitarbeitern die\nbestmöglichen Bedingungen zu schaffen. Egal, ob sich das auf die technische Entwicklungsumgebung, den Wissenstransfer\noder auf die physischen Arbeitsplatzbedingungen bezieht. Mit der BIH besteht bereits seit Jahren eine Zusammenarbeit,\nmit der Initiative Rheumapreis seit ca. 2 Jahren. Und so ist es für uns selbstverständlich unsere Unterstützung\nanzubieten, um dieses Thema aktuell zu halten.","inintivative-rheumapreis-interview-mit-christian-vedder-bih","blog/inintivative-rheumapreis-interview-mit-christian-vedder-bih",[],"Heute blogge ich zu einem Thema, welches auf den ersten Blick recht wenig mit Synyx zu tun hat. Im Interview mit Christian Vedder, Geschäftsführer der BIH, zur Initiative Rheumapreis wird…","nHhULE04Hcp8I38oQ4wNS9huMvOLcKJJGKBmw81Jh_E",{"id":31688,"title":31689,"author":31690,"body":31692,"category":31721,"date":31722,"description":31723,"extension":617,"link":31724,"meta":31725,"navigation":499,"path":31726,"seo":31727,"slug":31729,"stem":31730,"tags":31731,"teaser":31732,"__hash__":31733},"blog/blog/jug-ka-20-grunde-warum-man-keine-architekten-braucht-eine-personliche-meinung.md","jug-ka: '20 Gründe warum man keine Architekten braucht', eine persönliche Meinung",[31691],"daniel",{"type":11,"value":31693,"toc":31719},[31694,31698,31707,31710,31713,31716],[14,31695,31697],{"id":31696},"jug-ka-20-gründe-warum-man-keine-architekten-braucht-eine-persönliche-meinung","jug-ka: \"20 Gründe warum man keine Architekten braucht\", eine persönliche Meinung",[18,31699,31700,31701,31706],{},"Am 12.05.2010 fand die Java User Group Karlsruhe\nVeranstaltung “",[585,31702,31705],{"href":31703,"rel":31704},"http://jug-karlsruhe.de/content/20-gruende-warum-man-keine-architekten-braucht/",[589],"20 Gründe warum man keine Architekten braucht","”\nstatt.",[18,31708,31709],{},"Da ich die letzten Treffen versäumt habe wollte ich, auch als Getränkelieferant, mal wieder dabei sein.Die\nTeilnehmerliste versprach, einige Leute zu treffen, die ich schon lange nicht mehr gesehen hatte. Der angekündigte\nSprecher sagte mir nichts und das Thema schien mir provokant aber nicht wichtig.",[18,31711,31712],{},"Der Vortrag schilderte Situationen in großen Unternehmen, untermalte diese mit witzigen Bildern, die allerdings auch\nprovokant und teilweise am Rande des guten Geschmacks waren.",[18,31714,31715],{},"Zusammenfassend schien es um die Problematik zu gehen, dass der “Architekt” zu weit von der jeweiligen Projekt- und\nEntwicklertätigkeit entfernt ist und um die sich daraus ergebenden Problematiken. Da ich in einem Unternehmen ohne\ndedizierte Architektenrolle zu hause bin, war das für mich interessant aber nicht akut. Schön fand ich, dass es dem\nSprecher trotz seiner provokanten Art gelungen ist auf ebenfalls provokante Fragen ruhig und sachliche zu reagieren,\nobwohl einige Fragen nicht unbedingt als sachlich anzusehen sind.",[18,31717,31718],{},"Sich im Anschluss bei einem Bier bzw. Cola noch auszutauschen hat das Ganze abgerundet.",{"title":48,"searchDepth":86,"depth":86,"links":31720},[],[614],"2010-05-22T11:39:04","Am 12.05.2010 fand die Java User Group Karlsruhe\\nVeranstaltung “20 Gründe warum man keine Architekten braucht”\\nstatt.","https://synyx.de/blog/jug-ka-20-grunde-warum-man-keine-architekten-braucht-eine-personliche-meinung/",{},"/blog/jug-ka-20-grunde-warum-man-keine-architekten-braucht-eine-personliche-meinung",{"title":31689,"description":31728},"Am 12.05.2010 fand die Java User Group Karlsruhe\nVeranstaltung “20 Gründe warum man keine Architekten braucht”\nstatt.","jug-ka-20-grunde-warum-man-keine-architekten-braucht-eine-personliche-meinung","blog/jug-ka-20-grunde-warum-man-keine-architekten-braucht-eine-personliche-meinung",[],"Am 12.05.2010 fand die Java User Group Karlsruhe Veranstaltung “20 Gründe warum man keine Architekten braucht” statt. Da ich die letzten Treffen versäumt habe wollte ich, auch als Getränkelieferant, mal…","qCYhhIkzcPhqv8u1NAJvi5XEkBKoXYsmLxAaf2n-KnE",{"id":31735,"title":31736,"author":31737,"body":31738,"category":31765,"date":31766,"description":31767,"extension":617,"link":31768,"meta":31769,"navigation":499,"path":31770,"seo":31771,"slug":31742,"stem":31772,"tags":31773,"teaser":31774,"__hash__":31775},"blog/blog/synyx-bloggt.md","Synyx bloggt",[21028],{"type":11,"value":31739,"toc":31763},[31740,31743,31746,31749,31752,31760],[14,31741,31736],{"id":31742},"synyx-bloggt",[18,31744,31745],{},"Paralell zur Überarbeitung der Synyx Homepage, starten wir unseren Corporate Blog. Interessenten werden dadurch stets\nüber Neues und Wissenswertes von Synyx informiert:",[18,31747,31748],{},"Unsere Entwickler berichten über aktuelle Themen aus ihrem Arbeitsalltag und geben ihre Tipps und Tricks zum besten.\nDazu gehören auch Blogs rund um das Thema Open Source.",[18,31750,31751],{},"Weiterhin wird es Einblicke hinter die Kulissen von Synyx geben. Lasst euch überraschen!",[18,31753,31754,31755,31759],{},"Doch das ist noch nicht alles! Seit einer Woche gibt es\neinen",[585,31756,31347],{"href":30387,"rel":31757,"title":31758},[589],"Mobile Solutions Blog",", welcher sich rund um die Themen Apple\niPhone, Google Android und MeeGo dreht. In diesem Blog steht vor allem die Technik im Vordergrund. Er soll Ihnen\nInformationen zu den neusten Entwicklungen und Applikationen widerspiegeln.",[18,31761,31762],{},"S7634VKZC748",{"title":48,"searchDepth":86,"depth":86,"links":31764},[],[614],"2010-04-30T15:03:05","Paralell zur Überarbeitung der Synyx Homepage, starten wir unseren Corporate Blog. Interessenten werden dadurch stets\\nüber Neues und Wissenswertes von Synyx informiert:","https://synyx.de/blog/synyx-bloggt/",{},"/blog/synyx-bloggt",{"title":31736,"description":31745},"blog/synyx-bloggt",[13052,3122],"Paralell zur Überarbeitung der Synyx Homepage, starten wir unseren Corporate Blog. Interessenten werden dadurch stets über Neues und Wissenswertes von Synyx informiert: Unsere Entwickler berichten über aktuelle Themen aus ihrem…","KsZ6He7TW5ziYsmaKrqRP-q1xjPb64j0nRZGtFPzsFo",[31777,31779,31782,31785,31787,31790,31792,31795,31796,31797,31799,31801,31804,31807,31809,31812,31814,31815,31817,31819,31822,31825,31827,31830,31833,31835,31838,31839,31841,31843,31845,31847,31849,31852,31854,31857,31859,31862,31863,31866,31869,31871,31873,31876,31878,31881,31883,31885,31888,31890,31892,31894,31897,31900,31902,31904,31907,31908,31911,31913,31916,31918,31921,31923,31926,31928,31931,31933,31936,31938,31940,31942,31945,31948,31950,31952,31954,31957,31959,31960,31963,31965,31968,31970,31973,31976,31979,31981,31984,31987,31990,31993,31996,31998,32001,32004,32007,32010,32013,32015,32018,32020,32023,32026,32027,32029,32032,32034,32036,32038,32041,32043,32045,32047,32050,32053,32056,32058,32061,32064,32067,32070,32072,32075,32078,32080,32083,32086,32089,32092,32093,32096,32098,32101,32104,32107,32110,32112,32114,32117,32119,32122],{"slug":2808,"name":31778},"Jennifer Abel",{"slug":31780,"name":31781},"allmendinger","Otto Allmendinger",{"slug":31783,"name":31784},"antony","Ben Antony",{"slug":25771,"name":31786},"Joachim Arrasz",{"slug":31788,"name":31789},"bauer","David Bauer",{"slug":24196,"name":31791},"Janine Bechtold",{"slug":31793,"name":31794},"boersig","Jasmin Börsig",{"slug":30720,"name":28920},{"slug":11916,"name":10766},{"slug":9,"name":31798},"Julia Burgard",{"slug":8337,"name":31800},"Caspar Schwedes",{"slug":31802,"name":31803},"christina-schmitt","Christina Schmitt",{"slug":31805,"name":31806},"clausen","Michael Clausen",{"slug":11099,"name":31808},"Thomas Pötzsch",{"slug":31810,"name":31811},"damrath","Sebastian Damrath",{"slug":31691,"name":31813},"Markus Daniel",{"slug":13209,"name":10576},{"slug":3814,"name":31816},"Joffrey Denman",{"slug":13208,"name":31818},"Daniel Fuchs",{"slug":31820,"name":31821},"dobler","Max Dobler",{"slug":31823,"name":31824},"dobriakov","Vladimir Dobriakov",{"slug":31826,"name":31826},"dreiqbik",{"slug":31828,"name":31829},"dschaefer","Denise Schäfer",{"slug":31831,"name":31832},"dschneider","Dominik Schneider",{"slug":31834,"name":10527},"duerlich",{"slug":31836,"name":31837},"dutkowski","Bernd Dutkowski",{"slug":21597,"name":21597},{"slug":633,"name":31840},"Tim Essig",{"slug":18956,"name":31842},"Maximilian Ferstl",{"slug":6624,"name":31844},"Prisca Fey",{"slug":6389,"name":31846},"Leonard Frank",{"slug":3920,"name":31848},"Arnold Franke",{"slug":31850,"name":31851},"frischer","Nicolette Rudmann",{"slug":21541,"name":31853},"Petra Fuchs",{"slug":31855,"name":31856},"gari","Sarah Gari",{"slug":5843,"name":31858},"Gast",{"slug":31860,"name":31861},"graf","Johannes Graf",{"slug":1758,"name":10855},{"slug":31864,"name":31865},"guthardt","Sabrina Guthardt",{"slug":31867,"name":31868},"haeussler","Johannes Häussler",{"slug":31870,"name":20805},"hammann",{"slug":5724,"name":31872},"Julian Heetel",{"slug":31874,"name":31875},"heft","Florian Heft",{"slug":11098,"name":31877},"Sebastian Heib",{"slug":31879,"name":31880},"heisler","Ida Heisler",{"slug":3444,"name":31882},"Patrick Helm",{"slug":19195,"name":31884},"Michael Herbold",{"slug":31886,"name":31887},"hofmann","Peter Hofmann",{"slug":30490,"name":31889},"Florian Hopf",{"slug":5723,"name":31891},"Alina Jaud",{"slug":11208,"name":31893},"Robin De Silva Jayasinghe",{"slug":31895,"name":31896},"jbuch","Jonathan Buch",{"slug":31898,"name":31899},"junghanss","Gitta Junghanß",{"slug":31901,"name":10659},"kadyietska",{"slug":29375,"name":31903},"Marc Kannegiesser",{"slug":31905,"name":31906},"karoly","Robert Károly",{"slug":21028,"name":25317},{"slug":31909,"name":31910},"kaufmann","Florian Kaufmann",{"slug":25528,"name":31912},"Mike Kesler",{"slug":31914,"name":31915},"kirchgaessner","Bettina Kirchgäßner",{"slug":23953,"name":31917},"Yannic Klem",{"slug":31919,"name":31920},"klenk","Timo Klenk",{"slug":21122,"name":31922},"Tobias Knell",{"slug":31924,"name":31925},"knoll","Anna-Lena Knoll",{"slug":26919,"name":31927},"Matthias Knorre",{"slug":31929,"name":31930},"koenig","Melanie König",{"slug":19716,"name":31932},"Thomas Kraft",{"slug":31934,"name":31935},"krupicka","Florian Krupicka",{"slug":12538,"name":31937},"Christian Kühn",{"slug":12369,"name":31939},"Christian Lange",{"slug":16750,"name":31941},"Luca Arrasz",{"slug":31943,"name":31944},"leist","Sascha Leist",{"slug":31946,"name":31947},"lihs","Michael Lihs",{"slug":30359,"name":31949},"David Linsin",{"slug":4335,"name":31951},"Christian Maniyar",{"slug":3001,"name":31953},"Björnie",{"slug":31955,"name":31956},"martin-koch","Martin Koch",{"slug":27499,"name":31958},"Tobias Matt",{"slug":10931,"name":25320},{"slug":31961,"name":31962},"menz","Alexander Menz",{"slug":10932,"name":31964},"Frederick Meseck",{"slug":31966,"name":31967},"messner","Oliver Messner",{"slug":10315,"name":31969},"Michael Plöd",{"slug":31971,"name":31972},"mies","Marius Mies",{"slug":31974,"name":31975},"mihai","Alina Mihai",{"slug":31977,"name":31978},"moeller","Jörg Möller",{"slug":28180,"name":31980},"Rebecca Mohr",{"slug":31982,"name":31983},"moretti","David Moretti",{"slug":31985,"name":31986},"mueller","Sven Müller",{"slug":31988,"name":31989},"muessig","Alexander Müssig",{"slug":31991,"name":31992},"neupokoev","Grigory Neupokoev",{"slug":31994,"name":31995},"nussbaecher","Carmen Nussbächer",{"slug":15985,"name":31997},"Pascal Ochs",{"slug":31999,"name":32000},"oelhoff","Jan Oelhoff",{"slug":32002,"name":32003},"oengel","Yasin Öngel",{"slug":32005,"name":32006},"oezsoy","Enis Özsoy",{"slug":32008,"name":32009},"posch","Maya Posch",{"slug":32011,"name":32012},"ralfmueller","Ralf Müller",{"slug":32014,"name":32014},"redakteur",{"slug":32016,"name":32017},"reich","Michael Reich",{"slug":1840,"name":32019},"Karl-Ludwig Reinhard",{"slug":32021,"name":32022},"rmueller","Rebecca Müller",{"slug":32024,"name":32025},"rosum","Jan Rosum",{"slug":21374,"name":21374},{"slug":30893,"name":32028},"Sascha Rüssel",{"slug":32030,"name":32031},"sauter","Moritz Sauter",{"slug":3921,"name":32033},"Julian Schäfer",{"slug":32035,"name":10812},"scherer",{"slug":28840,"name":32037},"Anne Schlicht",{"slug":32039,"name":32040},"schmidt","Jürgen Schmidt",{"slug":19196,"name":32042},"Tobias Schneider",{"slug":6623,"name":32044},"Benjamin Seber",{"slug":16288,"name":32046},"Marc Sommer",{"slug":32048,"name":32049},"speaker-fels","Jakob Fels",{"slug":32051,"name":32052},"speaker-gierke","Oliver Gierke",{"slug":32054,"name":32055},"speaker-krupa","Malte Krupa",{"slug":32057,"name":25439},"speaker-mader",{"slug":32059,"name":32060},"speaker-meusel","Tim Meusel",{"slug":32062,"name":32063},"speaker-milke","Oliver Milke",{"slug":32065,"name":32066},"speaker-paluch","Mark Paluch",{"slug":32068,"name":32069},"speaker-schad","Jörg Schad",{"slug":29689,"name":32071},"Jochen Schalanda",{"slug":32073,"name":32074},"speaker-schauder","Jens Schauder",{"slug":32076,"name":32077},"speaker-unterstein","Johannes Unterstein",{"slug":32079,"name":15332},"speaker-wolff",{"slug":32081,"name":32082},"speaker-zoerner","Stefan Zörner",{"slug":32084,"name":32085},"stefan-belger","Stefan Belger",{"slug":32087,"name":32088},"steinegger","Roland Steinegger",{"slug":32090,"name":32091},"stern","sternchen synyx",{"slug":3122,"name":3122},{"slug":32094,"name":32095},"szulc","Mateusz Szulc",{"slug":23735,"name":32097},"Tamara Tunczinger",{"slug":32099,"name":32100},"theuer","Tobias Theuer",{"slug":32102,"name":32103},"thieme","Sandra Thieme",{"slug":32105,"name":32106},"thies-clasen","Marudor",{"slug":32108,"name":32109},"toernstroem","Olle Törnström",{"slug":11847,"name":32111},"Max Ullinger",{"slug":19049,"name":32113},"Stephan Ulrich",{"slug":32115,"name":32116},"wagner","Stefan Wagner",{"slug":19312,"name":32118},"Andreas Weigel",{"slug":32120,"name":32121},"werner","Fabian Werner",{"slug":32123,"name":32124},"wolke","Sören Wolke",["Reactive",32126],{"$scookieConsent":32127,"$ssite-config":32129},{"functional":32128,"analytics":32128},false,{"_priority":32130,"env":32134,"name":32135,"url":13320},{"name":32131,"env":32132,"url":32133},-10,-15,0,"production","nuxt-app",["Set"],["ShallowReactive",32138],{"category-synyx-blog":-1,"authors":-1},"/blog/kategorien/synyx-blog"]