<rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0">
  <channel xml:base="https://blog.antontelle.com/">
    <title>.NET Development and Administration</title>
    <description>Latest blog posts</description>
    <a10:link href="https://blog.antontelle.com/" />
    <item>
      <guid isPermaLink="false">https://blog.antontelle.com/post/pivotaltracker-end-of-life–switch-to-bard-tracker</guid>
      <link>https://blog.antontelle.com/post/pivotaltracker-end-of-life%E2%80%93switch-to-bard-tracker</link>
      <a10:author>
        <a10:name />
      </a10:author>
      <title>PivotalTracker End of Life – Switch to BARD Tracker</title>
      <description>&lt;p&gt;We at &lt;a href="https://teamaton.com/"&gt;teamaton&lt;/a&gt; and &lt;a href="https://discoverize.com/"&gt;discoverize&lt;/a&gt; have used &lt;a href="https://www.pivotaltracker.com"&gt;PivotalTracker&lt;/a&gt; from 2012 to 2024 – so for almost the whole time since the founding of our company. Since last year it is clear that PivotalTracker will reach its end-of-live in 2025: &lt;a title="https://www.pivotaltracker.com/blog/2024-09-18-end-of-life" href="https://www.pivotaltracker.com/blog/2024-09-18-end-of-life"&gt;https://www.pivotaltracker.com/blog/2024-09-18-end-of-life&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Already in 2025 we are using &lt;a href="https://clickup.com"&gt;ClickUp&lt;/a&gt; as our planning tool. There were a few reasons for the change:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;using the same tool as the other people in our company (not just developers) – therefore more transparency and collaboration&lt;/li&gt;&lt;li&gt;more flexibility with different lists and views (focus on current sprint, having milestones in the same tool)&lt;/li&gt;&lt;li&gt;subtasks can have same properties as main tasks (description, attachments, …)&lt;/li&gt;&lt;li&gt;better text formatting&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;We still used PivotalTracker in 2024 to search for older user stories with valuable content (for instance bugfixes when encountering the same bug again). Therefore we now needed a replacement where we can still search our vast vault of old USs/Bugs wisdom, even though these searches are getting less frequent.&lt;/p&gt;&lt;p&gt;I first thought about implementing this kind of search myself (importing the Pivotal exports into a new database). This seemed funky (we do funky days once a month), but would have also taken quite some time, and would have had a few drawbacks: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;crude display of user stories without attachments&lt;/li&gt;&lt;li&gt;no editing or deleting of user stories&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I thought about importing our Pivotal data to one of the big tools (ClickUp, JIRA, TargetProcess, Basecamp) but that also disadvantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;difficult import of Pivotal data (possibly without attachments)&lt;/li&gt;&lt;li&gt;too much work to set up (more whistles and bells)&lt;/li&gt;&lt;li&gt;not a good search function of the data&lt;/li&gt;&lt;li&gt;pricy&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Then I came across a few PivotalTracker replacement tools in the making. A good list of alternatives has been compiled here: &lt;a title="https://bye-tracker.net/" href="https://bye-tracker.net/"&gt;https://bye-tracker.net/&lt;/a&gt;. Advantages of these tools:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;same look and feel like PivotalTracker&lt;/li&gt;&lt;li&gt;simple setup and usability&lt;/li&gt;&lt;li&gt;some even as self-hosting option (see &lt;a href="https://github.com/Codeminer42/cm42-central"&gt;cm42-central&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I checked out all the tools in the list. Most are still in development, some in beta. They are trying to attract customers which are switching from Pivotal. Most are still lacking features, for instance attachments.&lt;/p&gt;&lt;p&gt;Finally I decided on &lt;a href="https://bardtracker.com"&gt;BARD Tracker&lt;/a&gt; – id has everything we need:&lt;/p&gt;&lt;p&gt;The import from PivotalTracker is seamless (via API token): with attachments, comments, formatting, tasks, milestones, …&lt;/p&gt;&lt;p&gt;&lt;a href="https://blog.antontelle.com/posts/files/3e9a565d-404a-44bb-9adf-37e5014f0c77.png"&gt;&lt;img width="730" height="255" title="image" style="display: inline; background-image: none;" alt="image" src="https://blog.antontelle.com/posts/files/5a0edf7e-1d68-4f18-a608-642489156620.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;The &lt;a href="https://bardtracker.com/pricing"&gt;pricing&lt;/a&gt; right now is fair, even free for solo accounts (similar to Pivotal): &lt;/p&gt;&lt;p&gt;&lt;a href="https://blog.antontelle.com/posts/files/93d8846d-9a48-441c-b877-1bf7d3606053.png"&gt;&lt;img width="730" height="413" title="image" style="display: inline; background-image: none;" alt="image" src="https://blog.antontelle.com/posts/files/9437076d-6e80-456c-9ede-82ca71c3cb2b.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;The look and feel is very similar to PivotalTracker:&lt;/p&gt;&lt;p&gt;&lt;a href="https://blog.antontelle.com/posts/files/ba8ee6c3-f355-47fa-a72c-199fb4f691a1.png"&gt;&lt;img width="730" height="401" title="image" style="display: inline; background-image: none;" alt="image" src="https://blog.antontelle.com/posts/files/6f063887-b48e-4b4b-90da-0919e7c9d529.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;All in all it took a while to sift through the alternatives, but in the end I have a good feeling with choosing BARD, even if it is for now only for searching through old user stories.&lt;/p&gt;</description>
      <pubDate>Tue, 08 Apr 2025 12:51:19 +0200</pubDate>
      <a10:updated>2025-04-08T12:53:37+02:00</a10:updated>
    </item>
    <item>
      <guid isPermaLink="true">https://blog.antontelle.com/post/open-live-writer:-how-to-change-the-slug-of-a-blog-post</guid>
      <link>https://blog.antontelle.com/post/open-live-writer:-how-to-change-the-slug-of-a-blog-post</link>
      <a10:author>
        <a10:name />
      </a10:author>
      <title>Open Live Writer: How to change the slug of a blog post</title>
      <description>&lt;p&gt;&lt;a href="http://blog.antontelle.com/posts/files/bdcca53a-1999-45b1-b52a-5700405592a7.png"&gt;&lt;img width="501" height="682" title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="image" src="http://blog.antontelle.com/posts/files/b9eff6a8-9b43-41a3-9a68-c764b4ce187c.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;It is unfortunately "hidden" behind "View all" – this opens a window to set all options available for posts in this blog (depends on blog engine).&lt;/p&gt;</description>
      <pubDate>Fri, 01 Mar 2024 17:31:53 +0100</pubDate>
      <a10:updated>2024-03-01T17:32:13+01:00</a10:updated>
    </item>
    <item>
      <guid isPermaLink="true">https://blog.antontelle.com/post/backups-why-what-when-where-how</guid>
      <link>https://blog.antontelle.com/post/backups-why-what-when-where-how</link>
      <a10:author>
        <a10:name />
      </a10:author>
      <title>Backups: Why? What? When? Where? How?</title>
      <description>&lt;p&gt;(This is a blog post in progress. It will change over time. For now it is just an amalgamation of my current thoughts and experiences. I have not yet bothered to read dedicated literature regarding backups. I probably forgot some things I already know. You will probably find a better write-up on backups somewhere else. If you do, please send me your source :). I mean it.)&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;h1&gt;Why backups?&lt;/h1&gt;&lt;p&gt;There are a myriad of reasons why you should back up your data:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;disk failure&lt;/li&gt;&lt;ul&gt;&lt;li&gt;disk sectors not readable anymore&lt;/li&gt;&lt;li&gt;whole disk not readable due to driver error or similar&lt;/li&gt;&lt;li&gt;external physical force destroyed disk&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;accidental erasure&lt;/li&gt;&lt;li&gt;accidental change of data&lt;/li&gt;&lt;li&gt;loss of device with data&lt;/li&gt;&lt;ul&gt;&lt;li&gt;fire or other external hazards&lt;/li&gt;&lt;li&gt;theft&lt;/li&gt;&lt;li&gt;accidentally leaving device somewhere unrecoverable&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;loss of access to a service where your data resides&lt;/li&gt;&lt;ul&gt;&lt;li&gt;service looks you out of your account because of some dispute or because service is down for good&lt;/li&gt;&lt;li&gt;no access to password, email account, etc. to access service&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;It all depends on your personal preferences and how tragic a loss of data would be for you. This might be memories (photos, diaries), time investment (documents, programming code, access to password manager), …&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;h1&gt;What to back up?&lt;/h1&gt;&lt;p&gt;In essence the answer is: everything you want to keep and cannot already restore via some method from somewhere else. Here are a few pointers:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;documents&lt;/li&gt;&lt;li&gt;programming code&lt;/li&gt;&lt;li&gt;databases&lt;/li&gt;&lt;li&gt;hosted web pages&lt;/li&gt;&lt;li&gt;invoices&lt;/li&gt;&lt;li&gt;emails&lt;/li&gt;&lt;li&gt;calendars&lt;/li&gt;&lt;li&gt;bookmarks&lt;/li&gt;&lt;li&gt;software / games downloads (if bought)&lt;/li&gt;&lt;li&gt;software configurations (it can take quite some time to re-configure software so it behaves like with an old installation)&lt;/li&gt;&lt;li&gt;pictures&lt;/li&gt;&lt;li&gt;videos&lt;/li&gt;&lt;li&gt;audio files&lt;/li&gt;&lt;li&gt;data to access your password manager&lt;/li&gt;&lt;li&gt;license keys (for software)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;h1&gt;When to back up?&lt;/h1&gt;&lt;p&gt;As often as possible, but as rarely so that the process does not hinder your "normal" activities. It is a tradeoff between how much data are you willing to lose vs. how much time, money and energy do you want to invest in backups.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;h1&gt;Where to back up to?&lt;/h1&gt;&lt;p&gt;It depends on your personal taste for safety and data access. You can backup your data to an external storage (for instance an external SSD) – external referring to outside your device(s). You could keep that external storage at home, but it could become subject to a fire or to theft along with your devices. So keeping the backup storage in a separate location from the devices is usually good practice, for instance at a friends house.&lt;/p&gt;&lt;p&gt;You can backup your data to the cloud / personal server. Be sure to check your access to the external service / server regularly.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;h1&gt;How to back up and restore?&lt;/h1&gt;&lt;p&gt;This depends on what you want to achieve. Here are a few scenarios:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Disk failure:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;restore last backup image of old disk on new disk&lt;/li&gt;&lt;li&gt;restore data from last backup on new disk (possibly install operating system and software anew)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Accidentally deleted / overwritten data since last backup:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;restore single files from last backup&lt;/li&gt;&lt;li&gt;revert files to a previous state (if using repository-like backup)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Accidentally deleted / overwritten data before last backup:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;restore files from an older backups than the accident&lt;/li&gt;&lt;li&gt;restore files from incremental backups from the time before accident happened&lt;/li&gt;&lt;li&gt;revert files to a state before the accident (if using repository-like backup)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Loss of access to service with data:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;backup data via an export option in the service (choose the appropriate contents and format)&lt;/li&gt;&lt;li&gt;find a service (or local software) where you can import the backup you made from the service to which you lost access&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Loss of device with data:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;get new / used device, install operating system and software anew, restore data from last backup&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Backup Tools:&lt;/h2&gt;&lt;p&gt;Automate as much as you can – if not you will more prone to procrastinate your backups. There are many backup tools out there.&lt;/p&gt;&lt;p&gt;disk image: &lt;a href="https://clonezilla.org/liveusb.php" target="_blank"&gt;Clonezilla&lt;/a&gt;&lt;/p&gt;&lt;p&gt;data backup from one disk to another (external) disk: &lt;a href="https://www.2brightsparks.com/download-syncbackfree.html" target="_blank"&gt;SyncBack&lt;/a&gt;&lt;/p&gt;&lt;p&gt;upload backups to AWS: &lt;a href="https://en.wikipedia.org/wiki/Jungle_Disk" target="_blank"&gt;JungleDisk&lt;/a&gt; (now CyberFortress)&lt;/p&gt;&lt;p&gt;Do not forget to backup your backup configurations if you want to re-setup those services faster next time.&lt;/p&gt;&lt;h2&gt;Restoring:&lt;/h2&gt;&lt;p&gt;Check intermittently that you can restore the data you backed up. It can be very frustrating if you rely on a backup and it is not restorable or does not contain the data you expect.&lt;/p&gt;</description>
      <pubDate>Thu, 29 Feb 2024 16:45:17 +0100</pubDate>
      <a10:updated>2024-03-01T17:20:17+01:00</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">https://blog.antontelle.com/post/basta!-herbst-2023–dienstag</guid>
      <link>https://blog.antontelle.com/post/basta!-herbst-2023%E2%80%93dienstag</link>
      <a10:author>
        <a10:name />
      </a10:author>
      <title>BASTA! Herbst 2023 – Dienstag</title>
      <description>&lt;p&gt;Dieses Jahr nahm ich zum ersten Mal (mit meinen Kollegen) an der &lt;a href="https://basta.net/" target="_blank"&gt;BASTA&lt;/a&gt; teil. Remote, weil ich dafür nicht nach Mainz fahren wollte. Und auch nur zwei Tage: ein Session-Tag (Dienstag) und ein Workshop-Tag (Freitag). Hier ein paar Notizen zu Dienstag…&lt;/p&gt;&lt;h1&gt;&lt;u&gt;Keynote: Zurück in die Zukunft: AI-driven Software Development&lt;/u&gt;&lt;/h1&gt;&lt;p&gt;Präsentation von Jörg Neumann und Neno Loje (&lt;a href="https://entwickler.de/reader/player/aI-driven-software-development" target="_blank"&gt;Link zu Video auf entwickler.de&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Die Keynote hat mir erstaunlich gut gefallen&lt;/strong&gt;. Wahrscheinlich, weil ich bisher noch keine Künstliche Intelligenz beim Arbeiten genutzt habe, das Thema spannend ist, sich viel verändert, und ich es sicherlich in Zukunft einsetzen werde.&lt;/p&gt;&lt;p&gt;allgemein: Codegenerierung via &lt;a href="https://chat.openai.com/" target="_blank"&gt;ChatGPT&lt;/a&gt;, AI auf eigenen Daten trainieren: &lt;a title="https://meetcody.ai/" href="https://meetcody.ai/"&gt;https://meetcody.ai/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Integration von KI in Entwicklung&lt;/strong&gt;: &lt;a href="https://marketplace.visualstudio.com/items?itemName=sourcegraph.cody-ai" target="_blank"&gt;Cody&lt;/a&gt;, &lt;a href="https://github.com/features/copilot" target="_blank"&gt;Github Copilot&lt;/a&gt; (Plugins in VS Code, VS, JetBrains IDE)&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Code schreiben lassen (anhand von Kommentaren)&lt;/li&gt;&lt;li&gt;Code analysieren lassen&lt;/li&gt;&lt;li&gt;Code anpassen / verbessern lassen&lt;/li&gt;&lt;li&gt;UnitTests generieren lassen&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br&gt; Azure: eigenes ChatGPT aufsetzen&lt;br&gt; theforgeai.com: mehrere &lt;strong&gt;KIs miteinander kombinieren&lt;/strong&gt; und Abläufe definieren (verschiedene Rollen - wie im agile team)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Fazit&lt;/strong&gt;: Ich denke, dass KI uns helfen kann: Wir müssten Szenarien identifizieren, wo KI uns helfen kann, und es dann dort ausprobieren. Daten- und Code-Sicherheit muss natürlich gegeben sein. Auch das Know-How um die Anpassungen / Erstellungen der KI zu analysieren, zu verbessern.&lt;br&gt; Wir sind (zu) wenige Leute in unserer Firma: KI kann uns Arbeit abnehmen. Dadurch können wir uns auf andere wichtige Sachen konzentrieren.&lt;/p&gt;&lt;h1&gt;Sessions&lt;/h1&gt;&lt;h2&gt;&lt;u&gt;1. Backends ausfallsicher gestalten&lt;/u&gt;&lt;/h2&gt;&lt;p&gt;Präsentation von Patrick Schnell&lt;/p&gt;&lt;p&gt;Definition Ausfallsicherheit&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Event-Driven-Design&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.antontelle.com/posts/files/f50627b7-bd2b-4736-8111-23286c070939.png"&gt;&lt;img width="644" height="178" title="2023-09-26_11h20_30" style="display: inline; background-image: none;" alt="2023-09-26_11h20_30" src="http://blog.antontelle.com/posts/files/a0711810-77f7-496a-a69d-dc5ca1f71e94.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Module, die über http kommunizieren, entspricht nicht EDD&lt;/p&gt;&lt;p&gt;Event-Hub / Message-Queue&lt;/p&gt;&lt;p&gt;Beispiele: Redis (einfach), RabbitMQ, …&lt;/p&gt;&lt;p&gt;Stateful vs. Stateless: Vor- und Nachteile&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Fazit&lt;/strong&gt;: Nur an der Oberfläche gekratzt. Nicht viel was ich da mitnehmen konnte, oder was wir da nutzen können. Aber gut sich dieses Konzept mal wieder zu vergegenwärtigen.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;h2&gt;&lt;u&gt;2. Simple Ways to Make Webhook Security Better&lt;/u&gt;&lt;/h2&gt;&lt;p&gt;Präsentation von Scott McAllister&lt;/p&gt;&lt;p&gt;&lt;a href="https://webhooks.fyi" target="_blank"&gt;webhooks.fyi&lt;/a&gt;: open source resource for webhook security&lt;/p&gt;&lt;p&gt;Webhook Provider – Webhook Message&lt;/p&gt;&lt;p&gt;why webhooks:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;simple protocol: http&lt;/li&gt;&lt;li&gt;simple payload: JSON, XML&lt;/li&gt;&lt;li&gt;tech stack agnostic&lt;/li&gt;&lt;li&gt;share state between systems&lt;/li&gt;&lt;li&gt;easy to test and mock&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;security issues&lt;/strong&gt;: (listener does not know when a message will come through)&lt;/p&gt;&lt;ul&gt;&lt;li&gt;interception&lt;/li&gt;&lt;li&gt;impersonation&lt;/li&gt;&lt;li&gt;modification / manipulation&lt;/li&gt;&lt;li&gt;replay attacks&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;security measures&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;One Time Verification (example: Smartsheet: verifies that subscriber has control over their domain)&lt;/li&gt;&lt;li&gt;Shared Secret&lt;/li&gt;&lt;li&gt;Hash-based Message Authentication (HMAC)&lt;/li&gt;&lt;li&gt;Asymmetric Keys&lt;/li&gt;&lt;li&gt;Mutual TLS Authentication&lt;/li&gt;&lt;li&gt;Dataless Notifications (listener only gets IDs, listener than has to make API call with authentication)&lt;/li&gt;&lt;li&gt;Replay Prevention (concatenate timestamp to payload with timestamp validation)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;TODOs for Providers&lt;/strong&gt;: https, document all the things (show payload example, demonstrate verification, show end-to-end process)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;TODOs for Listeners&lt;/strong&gt;: check for hash, signature&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Fazit&lt;/strong&gt;: Ein guter Überblick über die potentiellen Schwachstellen. Gut dargestellt anhand eines github Webhooks. Da wir potentiell auch Webhooks bereitstellen (derzeit via "Dataless Notifications"), ist das gut im Hinterkopf zu behalten.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;h2&gt;&lt;u&gt;3. Leveraging Generative AI, Chatbots and Personalization to Improve Your Digital Experience&lt;/u&gt;&lt;/h2&gt;&lt;p&gt;Präsentation von Petar Grigorov&lt;/p&gt;&lt;p&gt;What is the best way for humanity to live / survive on earth: empathy, kindness, sharing stories&lt;/p&gt;&lt;p&gt;AI in CMS&lt;/p&gt;&lt;p&gt;AI in Personalization&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Fazit&lt;/strong&gt;: Etwas langatmiger Vortrag, der zum Punkt zu kommen schien.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;h2&gt;&lt;u&gt;4. Agiles Recruitment und enttäuschte Erwartungshaltungen&lt;/u&gt;&lt;/h2&gt;&lt;p&gt;Präsentation von Candide Bekono&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Agiles Vorstellungsgespräch&lt;/strong&gt;: verschiedene Personen im Einstellungsteam haben (Beurteilung aus unterschiedlichen Perspektiven), Authentizität&lt;/p&gt;&lt;p&gt;Feedback von Kandidaten und Einstellungsteam einholen: nach Gesprächen, warum möchte Kandidat nicht zum Unternehmen&lt;/p&gt;&lt;p&gt;Kandidatenzentrierter Ansatz: Anpassung der Rekrutierungserfahrung an Bedürfnisse, Präferenzen, Erwartungen der Kandidaten&lt;/p&gt;&lt;p&gt;Pipeline Management: Pflege zu potentiellen / ehemaligen Kandidatinnen (aufwendig)&lt;/p&gt;&lt;p&gt;Selektion: Definition wesentlicher Kriterien und die messen&lt;/p&gt;&lt;p&gt;warum agile Rekrutierungsprozesse: schneller lernen was funktioniert, ausprobieren (Anpassung Stellenanzeige), anpassen des Prozesses (requirements, sourcing, …)&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.antontelle.com/posts/files/2df66426-1214-4771-b7df-07e1540eae4d.png"&gt;&lt;img width="398" height="484" title="2023-09-26_16h27_15" style="display: inline; background-image: none;" alt="2023-09-26_16h27_15" src="http://blog.antontelle.com/posts/files/412f9e23-b352-4d89-ba4b-4dd20afbe7df.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Reflektierung der Kandidaten: Job Fit, Unternehmenskultur&lt;/p&gt;&lt;p&gt;Erwartungen der Arbeitgeber:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Fähigkeiten, Erfahrungen&lt;/li&gt;&lt;li&gt;Cultural Fit&lt;/li&gt;&lt;li&gt;Kommunikation, Reaktionszeit&lt;/li&gt;&lt;li&gt;Interesse und Begeisterung der Kandidaten&lt;/li&gt;&lt;li&gt;Langfristiges Engagement&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Fazit&lt;/strong&gt;: Beim Einstellungsprozess kürzere Feedbackzyklen anstreben, Dinge ausprobieren, auswerten, anpassen (agile). Präsentator betonte auch immer wieder, dass das Auswerten nicht vernachlässigt werden darf (aber oft wird – wie bei uns).&lt;/p&gt;&lt;h2&gt;&lt;u&gt;5. Done oder nicht done? Strategien für auslieferfähige Inkremente in jedem Sprint&lt;/u&gt;&lt;/h2&gt;&lt;p&gt;Präsentation von Thomas Schissler&lt;/p&gt;&lt;p&gt;warum Done-Inkremente: Unsicherheiten minimieren, Blindflugzeiten reduzieren&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.antontelle.com/posts/files/a2e019ca-29ab-435c-9693-96e92267e97d.png"&gt;&lt;img width="644" height="470" title="2023-09-26_17h15_57" style="display: inline; background-image: none;" alt="2023-09-26_17h15_57" src="http://blog.antontelle.com/posts/files/5a601f92-b651-42e1-a514-ac1ae91b614e.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;font color="#000000" face="Arial" size="2"&gt;-----&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000" face="Arial" size="2"&gt;Bauen wir das, was den größten Mehrwert liefert?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000" face="Arial" size="2"&gt;Annahmen überprüfen&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000" face="Arial" size="2"&gt;Feedback – nicht nur von Kunden (technisches Feedback von Entwicklern)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000" face="Arial" size="2"&gt;-----&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000" face="Arial" size="2"&gt;Passt unsere Qualität?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000" face="Arial" size="2"&gt;Missverständnisse früh aufdecken&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000" face="Arial" size="2"&gt;Überraschungen vermeiden&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000" face="Arial" size="2"&gt;-----&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000" face="Arial" size="2"&gt;Wie können wir unser Vorgehen verbessern?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000" face="Arial" size="2"&gt;Indikatoren für Verbesserungen&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000" face="Arial" size="2"&gt;Ausprobieren, Lernen, Verbessern&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000" face="Arial" size="2"&gt;-----&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Vorgehen&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Durchstich definieren&lt;/li&gt;&lt;li&gt;Abnahmekriterien definieren&lt;/li&gt;&lt;li&gt;Sonderfälle erstmal weglassen&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Swarming&lt;/strong&gt;: alle Entwickler an einem Projekt, statt an verschiedenen – damit zumindest einige Projekte innerhalb des Sprints fertig sind&lt;/p&gt;&lt;p&gt;Nebeneffekte von Swarming: daily scrum, sprint planning nicht mehr aneinander vorbei / nebeneinander (mehr Interesse da, weil alle am selben Projekt arbeiten)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Continuous Integration&lt;/strong&gt;: Branches sollten eigentlich nicht alt werden – da möglichst innerhalb eines Sprints in development reingemergt (siehe auch feature toggles statt branches)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Continuous Testing&lt;/strong&gt;: nicht erst nach dem Entwickeln testen, sondern schon parallel&lt;/p&gt;&lt;p&gt;Leidenschaft für das Produkt kann durch Done-Inkremente gesteigert werden&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Definition of Done&lt;/strong&gt;: einstellbar durch Developer, immer wieder anpassen (für nächsten Sprint) um bestehende Probleme (nicht auslieferbar, ausbremsende Dinge) zu vermeiden&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Fazit&lt;/strong&gt;: Ein mitreißender Vortrag (vor allem wegen des Vortragenden) über Themen, die wir auch mehr in unseren Alltag integrieren können.&lt;/p&gt;</description>
      <pubDate>Wed, 27 Sep 2023 15:58:01 +0200</pubDate>
      <a10:updated>2023-10-20T09:00:12+02:00</a10:updated>
    </item>
    <item>
      <guid isPermaLink="true">https://blog.antontelle.com/post/a-better-way-to-set-recurring-reminders-in-slack</guid>
      <link>https://blog.antontelle.com/post/a-better-way-to-set-recurring-reminders-in-slack</link>
      <a10:author>
        <a10:name />
      </a10:author>
      <title>A better way to set recurring reminders in Slack</title>
      <description>&lt;h3&gt;&lt;u&gt;the task:&lt;/u&gt;&lt;/h3&gt;&lt;p&gt;Set a recurring reminder in the meetings-channel so that every week a different person (rotating through all the people in the company) has the duty of being meeting-master – with the name of the person who is meeting master that week in the message.&lt;/p&gt;&lt;h3&gt;&lt;u&gt;the obstacle:&lt;/u&gt;&lt;/h3&gt;&lt;p&gt;Setting recurring reminders in &lt;a href="https://slack.com/" target="_blank"&gt;Slack&lt;/a&gt; via the /remind is a pain. (I know the task is possible to set up with the vanilla /remind command, but it always takes me quite a while to figure out the right syntax after not using the command for a year.)&lt;/p&gt;&lt;h3&gt;&lt;u&gt;the occasion:&lt;/u&gt;&lt;/h3&gt;&lt;p&gt;Every two weeks everyone at &lt;a href="https://discoverize.com"&gt;discoverize&lt;/a&gt; has the opportunity to use a few hours for somthing “funky”.&lt;/p&gt;&lt;h3&gt;&lt;u&gt;the path + the solution:&lt;/u&gt;&lt;/h3&gt;&lt;p&gt;At first I thought I would program a .NET Core application which sends messages to Slack at the appriopriate times with the appropriate person as meeting-master. Then my toughts wandered to &lt;a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services" target="_blank"&gt;background tasks&lt;/a&gt; (which right now we also use in a different service). And I found &lt;a href="https://www.hangfire.io/" target="_blank"&gt;Hangfire&lt;/a&gt; which would persist the tasks for me, making my life easier – on the downside of using a third-party app.&lt;/p&gt;&lt;p&gt;I already started to look into our Slack apps to create a new one (to follow &lt;a href="https://medium.com/streamwriter/sending-automatic-messages-to-slack-from-asp-net-core-with-hangfire-86b60d09b289" target="_blank"&gt;this tutorial&lt;/a&gt;), but then realized that there probably already are Slack apps out there doing a better job of helping to create recurring reminders. And since my time was already dwindeling away, I just searched and compared apps. I landed on &lt;a href="https://remindus.app/" target="_blank"&gt;RemindUs&lt;/a&gt;, installed it to our Slack and started using it. It seems to do the job well enough. Task accomplished.&lt;/p&gt;&lt;h3&gt;&lt;u&gt;update:&lt;/u&gt;&lt;/h3&gt;&lt;p&gt;After testing out RemindUs it did not suit our use case well. It did not convert a @user statement in a message to an alert to that user. Furthermore the layout and text was that of a reminder (of course) which felt weird. We just want a message to appear repeatedly as if it was just entered by a bot/user.&lt;/p&gt;&lt;p&gt;I researched other Slack Apps, but only paid ones did the thing I needed. And for this simple usage I do not want to pay a monthly amount of 6 Dollars or more.&lt;/p&gt;&lt;p&gt;So I reverted to &lt;strong&gt;vanilla Slack&lt;/strong&gt; and the &lt;strong&gt;/remind command&lt;/strong&gt;. Here is the usage in our use case: &lt;/p&gt;&lt;p&gt;/remind #_meetings "@anton - you are meeting master this week" on 08.05.2023 every five weeks&lt;/p&gt;&lt;p&gt;And then setting up this reminder for every team member in meeting master rotation one week apart.&lt;/p&gt;</description>
      <pubDate>Mon, 20 Mar 2023 18:24:27 +0100</pubDate>
      <a10:updated>2023-04-21T13:29:02+02:00</a10:updated>
    </item>
    <item>
      <guid isPermaLink="true">https://blog.antontelle.com/post/developer-open-space-2018</guid>
      <link>https://blog.antontelle.com/post/developer-open-space-2018</link>
      <a10:author>
        <a10:name />
      </a10:author>
      <title>Developer Open Space 2018</title>
      <description>&lt;p&gt;This year the &lt;a href="https://devopenspace.de/" target="_blank"&gt;Developer Open Space&lt;/a&gt; took place in a new location: &lt;a href="https://www.basislager.co/" target="_blank"&gt;Basislager Coworking&lt;/a&gt;. (Of course I have that space in my portal: &lt;a title="https://coworking-spaces.info/basislager-coworking-leipzig" href="https://coworking-spaces.info/basislager-coworking-leipzig"&gt;https://coworking-spaces.info/basislager-coworking-leipzig&lt;/a&gt;) The atmosphere has improved, especially since we could use the rooms without having to close for the night between Friday and Sunday. The organization was top as every year – thanks Olga and Torsten. It was a pleasure to attend – I like to go there every year. What follows now are short notes and summaries:&lt;/p&gt; &lt;h2&gt;Workshop: JavaScript, React and GraphQL&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;we used &lt;a href="http://bradfrost.com/blog/post/atomic-web-design/" target="_blank"&gt;Atomic Design&lt;/a&gt; to model our requirements  &lt;li&gt;Mike lectured us about &lt;a href="https://graphql.org" target="_blank"&gt;GraphQL&lt;/a&gt;, we dove into &lt;a href="https://www.apollographql.com" target="_blank"&gt;Apollo GraphQL&lt;/a&gt;  &lt;ul&gt; &lt;li&gt;queries and mutations – separate components accordingly  &lt;li&gt;GraphQL simplifies data details in the queries (in comparison to REST services, for instance): you can specify what data exactly you want to retrieve without having to create a new service endpoint for that (in REST you need multiple end-points for different types and combination of types)  &lt;li&gt;GraphQL saves requests and data transfer, simplifies end-points  &lt;li&gt;many Links possible: decide which service takes care of which queries (client, state, http)&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;a href="https://github.com/MikeBild/racyjs" target="_blank"&gt;Mikes library&lt;/a&gt; (see workshop branch)  &lt;li&gt;&lt;a href="https://www.graphqlhub.com" target="_blank"&gt;GraphQL hub&lt;/a&gt; and &lt;a href="https://www.graphqlhub.com/playground" target="_blank"&gt;playground&lt;/a&gt;  &lt;li&gt;&lt;strong&gt;teamaton&lt;/strong&gt;: We might use it for a side project, but it increases the complexity quite a bit (queries have to written and translated).&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: Cypress&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="https://www.cypress.io/" target="_blank"&gt;cypress&lt;/a&gt; is a framework for frontend testing which can be part of continuous integration (CI –&amp;gt; TeamCity)  &lt;li&gt;is an alternative to Selenium (or coypu)  &lt;li&gt;can run on headless chrome or electron, can run locally  &lt;li&gt;LocalStorage in browser can be manipulated (for instance to simulate logged-in user), to separate testing concerns  &lt;li&gt;cypress provides snapshots for each test step  &lt;li&gt;build up a library example:  &lt;ul&gt; &lt;li&gt;define features in cucumber (usually with QA)  &lt;li&gt;reuse steps where possible  &lt;li&gt;translate steps into cypress language&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;teamaton: &lt;/strong&gt;We might want to write integration tests for important features and run them after each stage deployment.&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: Time Tracking&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="https://www.redmine.org/plugins/redmine_hourglass" target="_blank"&gt;HourGlass&lt;/a&gt; plugin for &lt;a href="https://www.redmine.org/" target="_blank"&gt;RedMine&lt;/a&gt;: connection to US/Bug –&amp;gt; immediate labels, open source, mobile App, Git integration  &lt;li&gt;programmers do not really want to track time – only if needed, it needs to be simple  &lt;li&gt;managers want to have a Freeze Time: everything what came before that (in that project) cannot be changed anymore (has been transferred to an invoice)  &lt;li&gt;&lt;a href="https://www.manictime.com/" target="_blank"&gt;ManicTime&lt;/a&gt;: records which programs you have been working in – can be tagged afterwards  &lt;li&gt;&lt;a href="https://github.com/netresearch/timetracker" target="_blank"&gt;Netresearch TimeTracker&lt;/a&gt;: JIRA synchronization (JIRA could be an alternative for us to Zendesk)  &lt;li&gt;&lt;strong&gt;teamaton&lt;/strong&gt;: lemon: no example on marketing page (getlemon.com), so it cannot be shown very well (we had one in the olden times)  &lt;li&gt;&lt;strong&gt;teamaton&lt;/strong&gt;: An integration with PivotalTracker does not seem reasonable: Starting US/Bug in PT results in starting record in lemon, record will be stopped as soon as US/Bug is finished in PT. Too many exceptions I can think of. Code review and testing would still need manual starts/stops in lemon.&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: Key Performance Indicator&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;formulate goals –&amp;gt; define success parameters –&amp;gt; measure (automated): predefine boundaries for “not good”, “good”, “very good”  &lt;li&gt;for instance “delight customers”: What are success parameters for teamaton? How can we measure them?  &lt;li&gt;ask customers what they want –&amp;gt; formulate goals out of feedback  &lt;li&gt;feature development: KPI: estimation vs. actual hours  &lt;li&gt;use KPIs for self reflection in team (for instance code issues per code line per person) –&amp;gt; celebrate successes  &lt;li&gt;&lt;strong&gt;teamaton&lt;/strong&gt;: Do we have a need to make “delight customers” more measurable? I generally like the “ask customers what they want –&amp;gt; formulate goals out of feedback” – if we think about finding out what portal owners want.&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: BenchmarkDotNet&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;can be used after profiling to measure impact of changes in code  &lt;li&gt;&lt;a href="https://benchmarkdotnet.org/" target="_blank"&gt;BenchmarkDotNet&lt;/a&gt; should only be used on code fragment / function  &lt;li&gt;runs both code versions many, many times and compares results – can take some time  &lt;li&gt;Could it be used in Continuous Integration? Maybe for critical methods which need to be fast?  &lt;li&gt;&lt;strong&gt;teamaton&lt;/strong&gt;: I think we do not need this.&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: Azure, AWS, Google Cloud&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;abstraction of hardware and OS – no need to worry about these, you get CDNs  &lt;li&gt;might cost more on the face of it, but you save admin costs, license costs, scaling costs (paying just what you are using)  &lt;li&gt;Azure functions: lightweight processes  &lt;li&gt;firebase alternative: &lt;a href="https://www.heroku.com/" target="_blank"&gt;heroku&lt;/a&gt;  &lt;li&gt;&lt;strong&gt;teamaton&lt;/strong&gt;: In the long-term we probably need to be more flexible and reactive: adding resources if portals need more, move quickly from faulty instance (server) to another one. Oliver’s proposal to use containers might be a beginning in mid-term. Maybe using VMs to faster setup environments could also help.&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: ASP.NET Core&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;PageModel instead of Controller: controller and model in one  &lt;li&gt;.NET Core is generally faster than .NET Framework: less legacy, re-implemented from scratch  &lt;li&gt;&lt;strong&gt;teamaton&lt;/strong&gt;: Use .NET Core for next new projects!&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: How to Collect Requirements Well&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="https://blog.antontelle.com/posts/files/42ad616b-871a-4ccb-a1bc-b0ad026721aa.jpg"&gt;&lt;img title="path-to-requirements" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: right; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="path-to-requirements" src="https://blog.antontelle.com/posts/files/0cb0e970-1121-4913-8321-49f3c009172d.jpg" width="423" align="right" height="751"&gt;&lt;/a&gt;flow: event storming and/or domain storytelling (customer with sales person) results in User Stories (one US per event or action), structure USs in Epics, add key specifications (gherkin: who+what+why) to USs, use Story Mapping to plan releases, refine USs with Specifications  &lt;li&gt;create prototypes (sketches) for fast feedback  &lt;li&gt;treat customer as part of the team: make sure team can contact customer with follow-up questions  &lt;li&gt;&lt;strong&gt;teamaton&lt;/strong&gt;: Maybe use event storming to show customer discoverize and see where customers process overlaps with our software and where customer needs more features.  &lt;li&gt;&lt;strong&gt;teamaton&lt;/strong&gt;: For more complex features we might want to use part of this flow: to better understand the needs of the customer, to address most questions beforehand, to make better architectural decisions, to implement features faster (because of better specifications).&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: Nothing / Psychology&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;be aware of the psychology of words: for instance “technical debt” – you might want to use a different term, like “software betterment”, “actually ok” – address the reservations  &lt;li&gt;men vs. women: there is a region “nothing” which only gets activated in men’s brains (in MRT): seems like men really can think about nothing if a subject does not fit a category (brain region), women jump from one category to another if something does not fit (I have requested more literature on this, because I could not believe that there is such a definite distinction between the sexes. Will read about that soon.)  &lt;li&gt;“do sometime later” – We should ask ourselves: When is “sometime later”? Is it never?  &lt;li&gt;How can you change the behavior of someone (for instance to use a clean code pattern)?  &lt;ul&gt; &lt;li&gt;invite to make new experiences  &lt;li&gt;be a good role model  &lt;li&gt;prepare the change well  &lt;li&gt;allow for as few obstacles as possible, so that that someone does not have to jump too high / change too much&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;try to do a meeting like an Open Space  &lt;li&gt;&lt;strong&gt;teamaton&lt;/strong&gt;: Do more DiscoTECH: might result in perceptive improvements, could lead to feeling of mastery (one of the key motivators for creative people: autonomy, mastery, purpose)&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: JavaScript Frameworks&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;vue.js  &lt;ul&gt; &lt;li&gt;has an extra GUI to create projects, add libraries, install packets, run server  &lt;li&gt;similar to react/redux (state mangement)  &lt;li&gt;HTML not inline, but in a template  &lt;li&gt;change-management: looks like magic, difficult to grasp for big sites (simpler in react on component level)  &lt;li&gt;relatively light-weight&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;a href="https://www.ag-grid.com/" target="_blank"&gt;ag-grid&lt;/a&gt;: table infrastructure for multiple JS frameworks  &lt;li&gt;Angular:  &lt;ul&gt; &lt;li&gt;a bit unwieldy, large  &lt;li&gt;documentation not as fast as platform development  &lt;li&gt;is here to stay: used by Google and Microsoft for projects&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;a href="https://discordapp.com/" target="_blank"&gt;discordapp&lt;/a&gt;: many discussions about JS frameworks in forums, fast help with problems&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: Team Organization&lt;/h2&gt; &lt;p&gt;&lt;a href="https://blog.antontelle.com/posts/files/3381c2c1-8f13-4a93-8950-5c1b1fd378c1.jpg"&gt;&lt;img title="team-organisation" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="team-organisation" src="https://blog.antontelle.com/posts/files/e81f3398-4d12-4b09-9bcf-89c666ab3269.jpg" width="842" height="475"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;playing :) cooperative game (street kitchen) to test out different communication strategies (silence, without preparation, with preparation, with feedback loop, specialized, one meal per player, …)  &lt;li&gt;best score when everyone has a specialization on one or two tasks, helping out the tasks in the chain before or after, with directions in-between the players&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: Distributed Teams&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;use digital white board when brainstorming or talking about features  &lt;li&gt;Visual Studio has live-sharing option: both people working on same machine, no need to merge  &lt;li&gt;working in different time zones / during different times: it’s just a matter of getting used to  &lt;li&gt;&lt;strong&gt;teamaton&lt;/strong&gt;: information asymmetry due to people being in office or alone: tackle by posting a summary of discussions / infos in slack  &lt;li&gt;&lt;strong&gt;teamaton&lt;/strong&gt;: get together more often (do not forget to repeat Brzezno)&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: Hands-On Configuration of a Azure Function&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;helping in a specific case: update information after every git commit to repository&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: Objectives and Key Results&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;objectives should be inspiring, motivating to help team outperform  &lt;li&gt;objectives should be challenging – therefore not often suitable for continuous development cycles (KPIs have been developed for product development)  &lt;li&gt;choose objectives so that they are achievable in 50% of the cases  &lt;li&gt;break down quarterly OKRs into 4-week priorities, and then into weekly priorities  &lt;li&gt;objectives could be: customer satisfaction, code health metrics like not too many bugs, team satisfaction, number of unit tests  &lt;li&gt;&lt;strong&gt;teamaton&lt;/strong&gt;: Andréj already has looked into OKRs. &lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Session: Culture Hacks (did not attend)&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;how to hack the culture of your firm :)  &lt;li&gt;in real life: &lt;a title="https://www.youtube.com/watch?v=2lXh2n0aPyw" href="https://www.youtube.com/watch?v=2lXh2n0aPyw"&gt;https://www.youtube.com/watch?v=2lXh2n0aPyw&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="https://blog.antontelle.com/posts/files/166546dc-3941-4028-aa26-1992f9f61740.jpg"&gt;&lt;img title="culture-hacks-2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="culture-hacks-2" src="https://blog.antontelle.com/posts/files/9dfa75da-0df6-4c45-8370-38aa5eeb2c4f.jpg" width="1244" height="702"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://blog.antontelle.com/posts/files/b206be45-59e5-4482-8af7-4051eb73932c.jpg"&gt;&lt;img title="culture-hacks-1" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="culture-hacks-1" src="https://blog.antontelle.com/posts/files/2424d7d1-f61d-4260-87c6-8f3679832700.jpg" width="1222" height="1345"&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 23 Oct 2018 18:11:13 +0200</pubDate>
      <a10:updated>2018-10-23T18:15:45+02:00</a10:updated>
    </item>
    <item>
      <guid isPermaLink="true">https://blog.antontelle.com/post/email-server-replies-with-550-when-hmailserver-erroneously-uses-ipv6</guid>
      <link>https://blog.antontelle.com/post/email-server-replies-with-550-when-hmailserver-erroneously-uses-ipv6</link>
      <a10:author>
        <a10:name />
      </a10:author>
      <title>Email server replies with 550 when hMailServer erroneously uses IPv6</title>
      <description>&lt;p&gt;We had the problem that one domain (freenet.de) started replying with “&lt;font face="Arial"&gt;&lt;font face="Courier New"&gt;550-inconsistent or no DNS PTR record for &amp;lt;IPv6&amp;gt; (see RFC 550 1912 2.1)&lt;/font&gt;”.&lt;/font&gt; Seems that they started checking whether the reverse DNS to the IP is a plausible one. (DNS PTR record and Revese DNS Entry are synonyms.)&lt;/p&gt; &lt;h2&gt;Trying to set reverse DNS for IPv6&lt;/h2&gt; &lt;p&gt;On one server we never even set the DNS PTR record for the IPv4 – we adjusted that. Yet the webtropia (our server hoster) interface for the reverse DNS for IPv6 did not work – no feedback, nothing. We asked the support which replied to just disable IPv6 on the server for the network adapter.&lt;/p&gt; &lt;h2&gt;Trying to disable IPv6&lt;/h2&gt; &lt;p&gt;I removed the check for IPv6 in the network adaptor. Now I could send mails to freenet.de again. But a few days later we got the same error. Seemed like our hMailServer still used the IPv6 to send emails. Looking into the issue I was about to disable IPv6 for good via the &lt;a href="https://support.microsoft.com/en-us/help/929852/how-to-disable-ipv6-or-its-components-in-windows" target="_blank"&gt;registry&lt;/a&gt;.&lt;/p&gt; &lt;h2&gt;Setting IP binding in hMailServer&lt;/h2&gt; &lt;p&gt;Before restarting the server I checked the hMailServer logs. Turns out that hMailServer tries to send via the IPv4 first, but gets a "&lt;font face="Courier New"&gt;457 Greylisted, please come back later&lt;/font&gt;" reply. (That is normal behaviour to avoid spams when the triplet (IP, sender, recipient) has not occurred yet.) Only after a few tries hMailServer uses the IPv6 to send, which results in the above mentioned &lt;font face="Courier New"&gt;550&lt;/font&gt; error. Another search brought up a &lt;a href="https://www.hmailserver.com/documentation/v5.3/?page=reference_protocolsmtp" target="_blank"&gt;setting&lt;/a&gt; in hMailServer where you can explicitly state which IP it should use for sending (Settings/Protocols/SMTP –&amp;gt; Advanced –&amp;gt; "Bind to local IP address"). After configuring that sending emails worked again without problems.&lt;/p&gt;</description>
      <pubDate>Fri, 06 Oct 2017 12:27:14 +0200</pubDate>
      <a10:updated>2017-10-06T12:27:14+02:00</a10:updated>
    </item>
    <item>
      <guid isPermaLink="true">https://blog.antontelle.com/post/teamcity:-do-not-allow-further-steps-to-run-after-tests-failed-(nunit)</guid>
      <link>https://blog.antontelle.com/post/teamcity:-do-not-allow-further-steps-to-run-after-tests-failed-(nunit)</link>
      <a10:author>
        <a10:name />
      </a10:author>
      <title>TeamCity: Do not allow further steps to run after Tests failed (NUnit)</title>
      <description>&lt;p&gt;We use multiple build steps in our &lt;a href="https://www.jetbrains.com/teamcity/" target="_blank"&gt;TeamCity&lt;/a&gt; configuration. One build step runs NUnit on our test project dll. If it fails some tests the build status is set to failed but the build step status may not be set to failed (even if process returns 1 – which usually corresponds to failed)!&lt;/p&gt; &lt;p&gt;We use TeamCity Professional 2017.1.3 with the following failure conditions for our configuration:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.antontelle.com/posts/files/8bfbdae0-36ef-4d55-a52d-b8004a1cd202.png"&gt;&lt;img title="2017-08-18_14h05_58" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="2017-08-18_14h05_58" src="http://blog.antontelle.com/posts/files/c36bcec8-78a6-4be8-9a04-ba76dfc97c60.png" width="644" height="171"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;And we used the following setting in all subsequent build steps after the NUnit build step:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.antontelle.com/posts/files/99789dbb-cf00-4f5d-b755-7884a74ce8f0.png"&gt;&lt;img title="2017-08-18_14h07_56" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="2017-08-18_14h07_56" src="http://blog.antontelle.com/posts/files/1df8e8a8-a435-4929-b673-efe897fe001d.png" width="644" height="48"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;We had to change that setting to “Only if build status successful” (thanks to &lt;a href="https://stackoverflow.com/a/26463649/173817" target="_blank"&gt;Ahmed on stackoverflow&lt;/a&gt;):&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.antontelle.com/posts/files/25985983-2e19-4648-9bb5-e4a849d728de.png"&gt;&lt;img title="2017-08-18_14h11_09" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="2017-08-18_14h11_09" src="http://blog.antontelle.com/posts/files/42a78990-b6ae-4b90-a7cd-e087429aca38.png" width="644" height="46"&gt;&lt;/a&gt;&lt;/p&gt;   &lt;p&gt;That way we can stop within one build configuration after unit tests fail and before we deploy :).&lt;/p&gt;</description>
      <pubDate>Fri, 18 Aug 2017 12:12:36 +0200</pubDate>
      <a10:updated>2017-08-18T12:13:27+02:00</a10:updated>
    </item>
    <item>
      <guid isPermaLink="true">https://blog.antontelle.com/post/git-extensions:-no-need-to-enter-password</guid>
      <link>https://blog.antontelle.com/post/git-extensions:-no-need-to-enter-password</link>
      <a10:author>
        <a10:name />
      </a10:author>
      <title>Git Extensions: no need to enter password</title>
      <description>&lt;p&gt;Today something weird happened: When pulling from one specific repository &lt;a href="https://gitextensions.github.io/" target="_blank"&gt;Git Extensions&lt;/a&gt; prompted me for my github login (it did not do that for other repositories). After searching a bit online I came to the solution that I may have used a different URL for cloning. There are two possibilities:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.antontelle.com/posts/files/9cced595-3a95-4f6a-a024-630d4aacf858.png"&gt;&lt;img title="2017-08-14_10h29_30" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="2017-08-14_10h29_30" src="http://blog.antontelle.com/posts/files/bf20c38f-b4e1-47d3-acef-84b508b2b284.png" width="356" height="199"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Using “HTTPS” you will have to enter login and password every time you interact with the remote repository. Using “SSH” will allow Git Extensions to use the private/public key pair you created (and which were used for the other repositories.&lt;/p&gt; &lt;p&gt;To change the settings in Git Extensions go to “Repository” menu –&amp;gt; “Remote repositories…”. There you can change the Url:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.antontelle.com/posts/files/78afeffa-41f7-4fe7-b564-c02867e4f336.png"&gt;&lt;img title="2017-08-14_10h24_39" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="2017-08-14_10h24_39" src="http://blog.antontelle.com/posts/files/cc63eeff-162d-4e6e-baab-b661e8973820.png" width="644" height="316"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;After that everything worked as expected.&lt;/p&gt;</description>
      <pubDate>Mon, 14 Aug 2017 08:35:29 +0200</pubDate>
      <a10:updated>2017-08-14T08:35:29+02:00</a10:updated>
    </item>
    <item>
      <guid isPermaLink="true">https://blog.antontelle.com/post/easily-check-the-spamablity-of-your-domain-and-mail-server</guid>
      <link>https://blog.antontelle.com/post/easily-check-the-spamablity-of-your-domain-and-mail-server</link>
      <a10:author>
        <a10:name />
      </a10:author>
      <title>Easily check the spamablity of your domain and mail server</title>
      <description>&lt;p&gt;If you are using your own domain to send emails, you may get the suspicion that your mails may land in the spam folder of your recipients.&lt;/p&gt; &lt;p&gt;&lt;a href="https://mxtoolbox.com/blacklists.aspx" target="_blank"&gt;MxToolBox&lt;/a&gt; is an easy way to check if your domain (or the IP of your mail server) is listed on a spam list.&lt;/p&gt; &lt;p&gt;With &lt;a href="http://www.mailradar.com/openrelay/" target="_blank"&gt;MailRadar&lt;/a&gt; you can check if you configured your mail server correctly: not allowing others to use it as a relay server.&lt;/p&gt;</description>
      <pubDate>Wed, 21 Jun 2017 14:17:03 +0200</pubDate>
      <a10:updated>2017-06-21T14:17:03+02:00</a10:updated>
    </item>
  </channel>
</rss>