<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Juha Autero</title>
    <description>The latest articles on DEV Community by Juha Autero (@jautero).</description>
    <link>https://dev.to/jautero</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F40%2F8125.png</url>
      <title>DEV Community: Juha Autero</title>
      <link>https://dev.to/jautero</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jautero"/>
    <language>en</language>
    <item>
      <title>Executable Specifications</title>
      <dc:creator>Juha Autero</dc:creator>
      <pubDate>Mon, 29 Jun 2020 10:06:22 +0000</pubDate>
      <link>https://dev.to/jautero/executable-specifications-1e1</link>
      <guid>https://dev.to/jautero/executable-specifications-1e1</guid>
      <description>&lt;p&gt;I've been listening to Greater Than Code episode 188 "&lt;a href="https://www.greaterthancode.com/going-off-the-rails"&gt;Going Off the Rails with Damien Burke&lt;/a&gt;". It had lots of important discussion and I recommend you to listen it.&lt;/p&gt;

&lt;p&gt;While looking at the episode notes, I read Damien Burke's essay "&lt;a href="https://damienburke.com/specifications-not-tests"&gt;Specifications not Tests&lt;/a&gt;". I think his text misses one point. It's called "Test Driven Development" because those specifications are written as tests. They are not only testable, but also executable.&lt;/p&gt;

</description>
      <category>tdd</category>
    </item>
    <item>
      <title>unexpected char: 0xFFFF</title>
      <dc:creator>Juha Autero</dc:creator>
      <pubDate>Mon, 23 Dec 2019 06:15:56 +0000</pubDate>
      <link>https://dev.to/jautero/unexpected-char-0xffff-35ak</link>
      <guid>https://dev.to/jautero/unexpected-char-0xffff-35ak</guid>
      <description>&lt;p&gt;Since I didn't find anything useful Googling, I decided write this short note.&lt;/p&gt;

&lt;p&gt;When you get "unexpected char: 0xFFFF" from your &lt;a href="https://jenkins.io/doc/book/pipeline/jenkinsfile/"&gt;Jenkinsfile&lt;/a&gt; (or any &lt;a href="http://groovy-lang.org/"&gt;Groovy&lt;/a&gt; script), it basically means "Parse Error: Unexpected End of File". This is because Groovy's parser is implemented with &lt;a href="https://www.antlr.org/"&gt;Antlr&lt;/a&gt; that uses Unicode noncharacter U+0FFFF (&lt;a href="http://www.unicode.org/charts/PDF/UFFF0.pdf"&gt;link&lt;/a&gt; to pdf) to signal end of file.&lt;/p&gt;

&lt;p&gt;In my case the problem was that I hadn't quoted a string. In retrospect the issue is obvious. When specifying environment variables, the values has to follow Groovy syntax i.e. strings need quotation marks unlike in shell.&lt;/p&gt;

</description>
      <category>jenkins</category>
      <category>pipeline</category>
      <category>groovy</category>
    </item>
    <item>
      <title>PizzaTimer: Starting the project</title>
      <dc:creator>Juha Autero</dc:creator>
      <pubDate>Wed, 23 Oct 2019 08:09:32 +0000</pubDate>
      <link>https://dev.to/jautero/pizzatimer-starting-the-project-2na7</link>
      <guid>https://dev.to/jautero/pizzatimer-starting-the-project-2na7</guid>
      <description>&lt;p&gt;I wanted to learn to write mobile applications and decided to look into React Native. I also think that I eat pizza too often and decided to write an app that tells me how long it has been since I ate pizza. Or rather, when I can eat pizza again. (I'm thinking of trying to limit it once a week.) &lt;/p&gt;

&lt;p&gt;Getting first React native project created was easy following the instructions, but then I run into a snag. I like TDD and wanted to setup&lt;br&gt;
mocha for unit tests. Unfortunately there has been recent changes in both &lt;a href="https://github.com/mochajs/mocha/wiki/compilers-deprecation"&gt;mocha&lt;/a&gt; and &lt;a href="https://babeljs.io/docs/en/env/"&gt;babel&lt;/a&gt;. None of the instructions seemed to work. Finally, I decided that I don't know enough modern JS development with ES2015 style imports and transpilers and gave up. I was going to look into Flutter next but never got around to it.&lt;/p&gt;

&lt;p&gt;That is the problem with instructions that just explain what you should do without telling why. If things don't work you have no idea what you did wrong or how to start debugging your configuration.&lt;/p&gt;

&lt;p&gt;Yesterday I looked at my code again and found the babel link above. I replaced 'babel-preset-es2015' with 'babel-preset-env' and run mocha with '--require @babel/register' and things worked! &lt;/p&gt;

&lt;p&gt;Code is available at &lt;a href="https://github.com/jautero/react-apps"&gt;GitHub&lt;/a&gt;. (I  would use Liquid tag, but it doesn't support repositories that don't have ReadMe.)&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>pizzatimer</category>
      <category>reactnative</category>
    </item>
    <item>
      <title>Starting a Journal</title>
      <dc:creator>Juha Autero</dc:creator>
      <pubDate>Mon, 14 Oct 2019 05:18:46 +0000</pubDate>
      <link>https://dev.to/jautero/starting-a-journal-5hn0</link>
      <guid>https://dev.to/jautero/starting-a-journal-5hn0</guid>
      <description>&lt;p&gt;I'm trying to return to work using work trial and need to find an employer that would need a part-time worker and is willing to support my re-habilitation. In order to motivate myself I have decided to start a journal to keep track of my learning. If only feedback is if I find a job or not, I will not learn much.&lt;/p&gt;

&lt;p&gt;I will write about software development technology and practices here. &lt;br&gt;
I will write about business side in &lt;a href="https://www.linkedin.com/in/juha-autero-49631/"&gt;my linkedin&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>worktrial</category>
    </item>
    <item>
      <title>You Can't Write Carrier Grade Software in Go</title>
      <dc:creator>Juha Autero</dc:creator>
      <pubDate>Sun, 28 Jul 2019 02:45:10 +0000</pubDate>
      <link>https://dev.to/jautero/you-can-t-write-carrier-grade-software-in-go-4ho4</link>
      <guid>https://dev.to/jautero/you-can-t-write-carrier-grade-software-in-go-4ho4</guid>
      <description>&lt;p&gt;because it doesn't have assert. &lt;/p&gt;

</description>
      <category>jokes</category>
    </item>
    <item>
      <title>What is professional software development?</title>
      <dc:creator>Juha Autero</dc:creator>
      <pubDate>Tue, 30 Apr 2019 20:41:23 +0000</pubDate>
      <link>https://dev.to/jautero/what-is-professional-software-development-8df</link>
      <guid>https://dev.to/jautero/what-is-professional-software-development-8df</guid>
      <description>&lt;p&gt;Have you heard of &lt;a href="https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/" rel="noopener noreferrer"&gt;The Joel Test?&lt;/a&gt; It's simple list of 12 &lt;strong&gt;yes&lt;/strong&gt; or &lt;strong&gt;no&lt;/strong&gt; questions. No, &lt;em&gt;wait!Don't follow that link!&lt;/em&gt; It's almost 20 years old and bears almost no relevance to modern software development. Who does &lt;em&gt;daily builds&lt;/em&gt; in the world of &lt;em&gt;CI/CD&lt;/em&gt;? Instead of &lt;em&gt;spec&lt;/em&gt; and &lt;em&gt;schedule&lt;/em&gt; you have &lt;em&gt;backlogs&lt;/em&gt; and &lt;em&gt;sprints&lt;/em&gt;. I have sometimes thought about writing new version of &lt;em&gt;Joel Test&lt;/em&gt; for &lt;em&gt;agile&lt;/em&gt; world.&lt;/p&gt;

&lt;p&gt;I've been thinking about this because a bit over month ago I started working with a small team and their tools and practices remind me of people developing web sites in early 2000s starting with the fact that they use Java and PHP. I'm left to wonder are they unprofessional or am I setting my standards too high?&lt;/p&gt;

&lt;p&gt;One of the problems is that web created a lot of developers that have never used an IDE or a debugger. How many people using Vim have configured it to get code navigation to work instead of just using grep from command line? Do people even know how to use debugger? Did you know that there actually is &lt;a href="https://xdebug.org/" rel="noopener noreferrer"&gt;debugger for PHP&lt;/a&gt;? And &lt;a href="https://mutelight.org/minimal-guide-to-debugging-php-with-xdebug-and-vim" rel="noopener noreferrer"&gt;you can use it from Vim&lt;/a&gt;? &lt;/p&gt;

&lt;p&gt;I think you either develop software in &lt;em&gt;a project&lt;/em&gt; that works on &lt;em&gt;a specification&lt;/em&gt; towards &lt;em&gt;a release&lt;/em&gt; or you implement &lt;em&gt;items&lt;/em&gt; from &lt;em&gt;product backlog&lt;/em&gt; using &lt;em&gt;sprints&lt;/em&gt; or &lt;em&gt;Kanban&lt;/em&gt;. Anything else is just too unplanned to be professional. I think too many developers think project plan or product backlog is just bookkeeping for managers and not a way to organise day-to-day work. This has two consequences. Firstly, it disconnects the plan or the backlog from the actual work turning them &lt;br&gt;
into a piece of fiction that gives only illusion of control. Secondly, developers have to use some other way to organise their work. Most likely they don't organise it at all and the result is "it's ready when it's ready".&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1117858830136664067-867" src="https://platform.twitter.com/embed/Tweet.html?id=1117858830136664067"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1117858830136664067-867');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1117858830136664067&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;What if you don't have &lt;em&gt;CI/CD process&lt;/em&gt; or &lt;em&gt;observability tooling&lt;/em&gt;? What if your &lt;em&gt;test automation&lt;/em&gt; hasn't been run in ages and therefore they all fail? I've been venting about things that bother me. What do you consider as a minimal level of software engineering?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Attacking phone through BT headset</title>
      <dc:creator>Juha Autero</dc:creator>
      <pubDate>Fri, 29 Mar 2019 12:12:36 +0000</pubDate>
      <link>https://dev.to/jautero/attacking-phone-through-bt-headset-47go</link>
      <guid>https://dev.to/jautero/attacking-phone-through-bt-headset-47go</guid>
      <description>&lt;p&gt;I sometimes have these security research project ideas. They are too long to rweet and I'm not on security forums where to post them. Since this is my software engineering blog, I will post them here.&lt;/p&gt;

&lt;p&gt;As I was charging my &lt;a href="https://en-fi.sennheiser.com/pxc-550-wireless"&gt;Bluetooth headset&lt;/a&gt;, I remembered how you shouldn't use unknown USB ports to charge your devices or at least use charging cable that doesn't have USB pins connected. In this case I was using USB charger connected to wall socket. If I don't trust that charger, I shouldn't use it at all. (Interesting side note: If you don't trust Huawei, why do you trust cheap Chinese bulk manufacturers?) &lt;/p&gt;

&lt;p&gt;But it's just a headset, right? What use attacker could possibly have by compromising it? Well, the headset interacts with phone through bluetooth. It could attack the phone by using vulnerability in its bluetooth stack. That could be an interesting project. Write a PoC that uses vulnerability in headset's USB stack to inject code that uses vulnerability in phone's BT stack to inject code into phone.&lt;/p&gt;

&lt;p&gt;I would use cheap headset because you probably need to take it a part to find out the hhardware and software it uses. Cheap headsets also are more likely to have poor security.&lt;/p&gt;

</description>
      <category>security</category>
      <category>project</category>
    </item>
    <item>
      <title>Scrum, Backlog, Product Owner and Project Plan</title>
      <dc:creator>Juha Autero</dc:creator>
      <pubDate>Mon, 20 Nov 2017 01:43:16 +0000</pubDate>
      <link>https://dev.to/jautero/scrum-backlog-product-owner-and-project-plan-3mn</link>
      <guid>https://dev.to/jautero/scrum-backlog-product-owner-and-project-plan-3mn</guid>
      <description>

&lt;p&gt;At my new workplace our team has recently started doing scrum. Our scrum master got his training just this week. When he came back we started discussion about what we are doing "wrong" and how we could improve. I commented how the idea of scrum is to have a prioritised backlog and team selects the most important tasks from it at sprint planning to work with during the sprint. I had some more thoughts about it and decided to write my first post.&lt;/p&gt;

&lt;p&gt;In theory things are pretty straightforward. At the beginning of a sprint team selects from prioritised backlog items that it is going to work on next sprint. During the sprint team only works with those items. At the end of the sprint team reviews with product owner which items got done during the sprint. Product owner owns the backlog and has absolute power over it. They can re-prioritise backlog between every sprint in any way they want. &lt;/p&gt;

&lt;p&gt;There was discussion about how there is too much work and how to communicate customers that there is only so much work the team can get done in a sprint and overwork will eventually backfire. In the end, that is PO's problem, not team's. Team should only avoid overcommitting and make sure that they get tasks they have committed to done. This "single wringable neck" approach gives PO complete control over communication to business side, which is very powerful if used correctly. &lt;/p&gt;

&lt;p&gt;Problem is that usually business is used to traditional Waterfall projects and are trying to work in framework of schedules and deadlines. This creates situation where unstoppable force meets with immovable object, a singularity where neither rules of waterfall or agile apply. &lt;/p&gt;

&lt;p&gt;Software development is traditionally illustrated with "iron triangle" of scope, resources and time. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bRdpPnyv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://www.ambysoft.com/artwork/ironTriangle.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bRdpPnyv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://www.ambysoft.com/artwork/ironTriangle.jpg" alt='"iron triangle" of software development'&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Idea is that you can set two of three corners and third one then adapts to the changes in the project. Changing resources is hard because adapting to new resources creates additional load. That gives rise to Brooks' law:"Adding people to late project makes t even later". Traditional waterfall projects set the scope and then try to estimate time by planning a schedule. Since the requirements are not usually completely understood at the planning phase, the estimates never hold and project is delayed.&lt;/p&gt;

&lt;p&gt;Scrum turns that idea around. Time is set by having fixed sprints and scope is then adjusted by changing priorities of items in backlog. Deadlines hold, you just don't know what will be done when it comes. By keeping the backlog in priority order you can always be sure that at least most important things are completed.&lt;/p&gt;

&lt;p&gt;These two approaches are incompatible. That is probably the most common reason for failure of agile. The whole organisation has to adapt to the idea that scope is not set in stone, but timetable is.&lt;/p&gt;


</description>
      <category>scrum</category>
      <category>backlog</category>
      <category>productowner</category>
      <category>projectplanning</category>
    </item>
  </channel>
</rss>
