Month: April 2020

Open Source Methodologies – Design Document Driven

We use design documents at work to ensure a clear understanding between the requestors, product owners, and developers. There’s a request document that outlines what they’re looking to accomplish, we produce a design document that outlines what we’re doing and how that will be accomplished. External dependencies use the design document to implement their required services — if I have a design document that says I’ll pass x (required), y (required), and z (optional) to a WSDL and end up with an object in the application database where a=x, b=y, and, optionally, c=z … they’ll whip up an endpoint that takes the parameters, performs the required actions, and builds the object I need. Once everyone is in agreement that it’s what they want, it’s reasonable (security, ROI), and possible … developers get to work. Tests are built against the documented functionality, and we know we’re done when the tests pass. If the users want something changed, the design document is amended, a quick feasibility/reason-ability review is performed, and development work commences.

I thought of this process after observing some people push PRs for major overhaults into a few open source projects only to have the PRs rejected as, essentially, not the direction “we” want to go. On the other extreme … I’ve made some changes to open source apps — in some cases, those were bug fixes, and I’ve pushed the changes back to the main project. But, when I’ve changed functionality. I’ve made those changes to address a specific need I have, and I leave the changes in my own fork. Which has the detriment of, potentially, not providing useful functionality to the main project. While it’s perfectly reasonable to put a lot of time into a major change that you need anyway (and, potentially, offer those changes back to the community) … it is terrible to put a lot of your time into something for someone else and have it rejected. And while not engaging with the project maintainers to see if they’re interested in my derivative work saves effort for me, it reduces innovation (how many people actually run through all of the forks of a project to see if anything ‘interesting’ happened elsewhere?).

Obviously, the answer isn’t for projects to accept effort just because it’s a significant investment on the contributor’s part — there should be some mechanism for ensuring what you’re about to delve into is something the project maintainers actually want. Which is what made me think of the design documents we use at work.

If a project had a design document that detailed what it waned to do, how it was doing it, and potentially a section for desired future features and functionality … it would provide a guideline to anyone looking to contribute. A change that doesn’t impact functionality (e.g. a bugfix) can be worked on and submitted for inclusion in the project as occurs normally. If you want to change something about how the application works, you first submit a PR against the design document. Outline what you want to do, how you want to do it … maybe even a quick mock-up (I use Pencil Project for mock-ups where I’m uncertain the final project will be approved, HTML web code when I know the project is a go and want a head-start on my development … but I also accept the risk that I ‘wasted’ a few hours building the design document wireframe if the project gets dropped). Want to work on one of the ‘desired future’ items? Modify the design document to include that functionality and how it’ll be implemented. Discussion about the approach refines what you’ll actually be doing, and you’ll understand if the project maintainers are interested in your contribution before dedicating hundreds of hours to development.

Some projects are interested in “bugfixes only” — which can be stated in the contributing guidelines. In this example, I developed a quick script to produce in-scope user lists. I don’t want to include other details about the identified users, I don’t want to find the first n levels of reports, etc. It’s exactly what I needed, and I’m putting it on GitHub as an example — using Python to search an LDAP directory and using recursion with back-linked attributes.

Projects that are open for collaborative contributions, though, can include the design document location in their contributing guidelines. Initial contributions are made against the design document, discussed, and approved or rejected. Once approved, code can be developed to the new design.

Microsoft Teams – Background Images

Teams has had the ability to blur your background for a while – a nice way to obscure “stuff” written on the whiteboard behind your desk or hide the stack of papers and books on your desk. It isolates the foreground – hopefully you – and blurs out the background. You can now overlay the identified foreground with a background image. I currently see this feature in the desktop client – my Linux, mobile, and web clients do not have this feature.

When you are in a meeting and have your camera enabled, click on the ellipses in the meeting control bar and select “Show background effects”

Select one of the images – we’ll load custom images in a bit. Select one of the stock options and click “Apply”

Voila, you’ve been greenscreened over some stock image. One of the most useful cases I see for the background image is a call with vendors. Each individual selects their company logo as a background, and participants have a visual clue who is speaking. But that requires a custom image. Luckily, you can add custom images to the background selection.

Now that you’ve selected a stock image, you’ll have a folder on your computer that holds the image. Open %appdata\Microsoft\Teams\Backgrounds\Uploads

Copy in your custom png files

Repeat the process to select a background image in Teams, and you will see your custom image.

A small file can look blurry – a 1920×1080 image looks decent. My 150×120 little glif … not so great. Also notice that the image is inverted – a bunch of balloons or a sunny beach … works either way. My logo? I need to flip it horizontally or you see a backwards R

Note too – if you want to blur your background, that option has been moved into the background effects. It’s the upper right-hand background – right next to ‘no background image’.

When joining a scheduled meeting, you can adjust the background settings prior to beginning the call using what used to be the background blur slider.

Using ‘Meet now’, this slider does not appear. I voted for the UserVoice suggestion to have a default background setting that would apply to all video call types without one-off configuration for the meeting.

Microsoft Teams: End Meeting For All Attendees

Normally, I like that Teams meetings continue after the organizer drops off. It’s a little annoying, as a meeting organizer, to need to stick around just so everyone else can continue talking. But someone may encounter a scenario where they really want the meeting to end, and there wasn’t an easy way to accomplish this. Microsoft has introduced “end meeting” functionality.

Since we don’t use Microsoft’s PSTN dial-in, I’m not sure if that has per-minute accounting that would make someone a lot more concerned about meetings continuing. Honestly, this feature seems like it’s targeted more toward the Education sector – my classroom meeting shouldn’t become a student hang-out once I’m done. (And you can still hang up to disconnect and allow the meeting to continue)

To end a meeting, click the ellipsis in the meeting control bar. Select “End meeting”.

You’ll be asked to confirm that you really want to end the meeting. Click “End” and all participants are dropped.

 

Visualization: Percent of Population Infected with SARS-CoV-2

Updated graph for current infection numbers

And the states kinda like Ohio graph where I still think “distance from NYC” is a pretty significant factor in how many individuals are infected. Ohio, going on a month of kids out of school and entering week three of the shelter-in-place order, isn’t seeing the exponential growth some states with similar population numbers have encountered.

Don’t Privatize USPS

Please text “USPS” to 50409 so that a letter on your behalf can be sent to your state officials petitioning to make financial support of the USPS a priority.

Privatizing USPS seems oddly short-sighted from a bunch of people supported by rural voters. Privatizing the post office may be a bit of OK for people who live up in NYC or down in Miami — they can stop subsidizing delivery out to a cabin in South Dakota that sits on 11,000 acres. Never got much mail, so I don’t know if post office had one employee whose daily route was like eight houses or if delivery was once a week. It’s *not* great, however, for large, low-population-density swaths of the country (i.e. a good bit of the Republican base).

As a private enterprise, increasing profitability is the goal. The Post Office has studies that go into new-line-of-business ideas that are quite clever. They’re paying someone to drive by grandma’s house anyway … you pay a few bucks a month and the delivery person will ring the bell once a week to make sure grandma is OK. It’s *possible* the privatized USPS, without restriction on what they’re allowed to do and what they’re allowed to charge for their services, will branch out into a bunch of lines of business centered around “we have someone driving by there every day anyway”. But petrol is expensive, vehicle maintenance is expensive, and people are very expensive. You see anyone going with an all-electric fleet powered by on-site wind and solar? I’d guess contract workers with no benefits.

If I were operating neo-USPS, I’d become the largest interest-based advertising agency around. Sure, targeted advertising wouldn’t be as many pieces of mail as the grocery flyer that is sent to the entire postal code, but my cost per unit would go up because it’s targeted. And reducing the number of recipients cuts delivery cost. I’d probably sell ad space that I stamped onto mail transiting my system. I’m paying someone to get this delivery to you either way; why not make an extra cent by throwing an ad for a pizza chain on it? Throw a jewelry chain’s logo on the cancellation stamp. Stamps themselves are ad space. And when I don’t sell all of this ad space? I’ll donate it (tax writeoff) and have promos for non-profits.

How will mail delivery work in my neo-USPS? Specifically in rural parts of the country? I’d noticed Amazon pick-up lockers outside the one grocery store in town — that might be a way to keep a relatively local pick-up point. But it eliminates “Postal Customer” delivery … which I suspect is a good bit of the current revenue and an increased share of my new company’s business model. Turning the post office into a package delivery service probably isn’t the way to go. The model I’d follow is called “general delivery” now. I have a few friends with remote off-the-grid type homesteads outside of the carrier delivery area who use this free service. Address a letter to “Bob Smith\nGeneral Delivery\nPost Office City, State ZIP” and the letter/package sits at that post office location waiting for Bob to pick it up. The post office holds mail in the back for x days until they swing by. Which then means they’ve got to swing by the post office every so often.

Unlike PO boxes where the outer area is open 24×7 and you can open your box at 7P on the way home from work or 7A on the way to work, you’ve got to arrive when they are opened and staffed. Office in my town is staffed between 8:30 and 5 with an hour-long lunch break at 11:30 (and open 9A and noon on Saturday). But I’m certain privatized USPS will have better hours. Down side, though, is they’ll have far fewer locations. There won’t be an office five minutes from my house — it’s inefficient. There will be a few offices in Cleveland and the major suburbs. I’ll be getting my mail out of Strongsville or Parma. Maybe Brunswick or Medina. And I live in an area with decently high population density. That cabin out in South Dakota? I’d be driving up to Rapid City about two hours (each way). Four hours of driving? That’s a day right there — my quarterly “stock up in town” trip would become a monthly run.

Maple Peanut Butter Eggs

Maple Peanut Butter Eggs

Recipe by LisaCourse: DessertDifficulty: Easy

Ingredients

  • Peanut Butter Filling
  • 1 cup chunky peanut butter (unsweetened)

  • 1/4 cup maple syrup

  • 1 tbsp vanilla extract

  • 1/4 cup all-purpose flour

  • Maple Chocolate
  • 4 oz 100% cocoa bakers chocolate

  • 2 tbsp coconut oil

  • 1/3 cup maple syrup

  • 1 tbsp maple sugar

Method

  • Line a plate with clingfilm or wax paper
  • Combine the peanut butter filling ingredients and mix to combine
  • In a double boiler, melt coconut oil
  • Add chocolate to coconut oil and melt
  • Stir in maple syrup and maple sugar
  • Take about a tablespoon of peanut butter mixture and roll into an egg shape
  • Roll peanut butter egg in chocolate to coat
  • Carefully remove coated egg from chocolate and place on lined plate
  • Once all eggs are coated, refrigerate for a few hours to solidify

Notes

  • Because coconut oil is used in this chocolate, it has a very low melting point — it’ll make a mess if you hold it in your hand as you eat it. Replacing the coconut oil with butter would raise the melting point.

Reopening

I keep hearing Trump talk about his decision to re-open the country (and how it’ll be the biggest decision he’s ever made). Begs the question how. And I don’t mean “what is the plan to resume somewhat normal inter-personal interactions” (although the process question needs to be answered). I mean procedurally how is he going to *open* the country? He’s never closed it! Individual states have enacted various protective measures as they see fit. He really think he can overrule, say, Ohio’s shelter in place order? Issue an executive order mandating we all eat at a restaurant this weekend and … what? The FBI is gonna haul me out of the house if I don’t?

Dandelion Lotion

Anya has been loving collecting dandelion flowers this Spring. A few years ago, I made a dandelion soap that we’re still using. She wants to make more this year since we’re running out. We started the oil infusion for the soap, and she wanted to collect more dandelions. I’ve seen a lot of recipes for dandelion lotion/salve … so we made some. While the oil infusion for the soap is just dandelion heads in coconut oil sitting on the heater vent in a sunny window for a few weeks, I wanted to make the salve today.

We combined the coconut oil and dandelion flowers in a pot and simmered it over low heat for an hour.

Filter the plant material out of the oil and return it to the pot. I added a little bit of beeswax and a few tablespoons of cocoa butter and heated again to melt the additions. This was poured into glass canning jars.

Once it cooled, we have a bright, sunny yellow lotion with a mild cocoa scent. Anya has been using it daily.

Open Source Methodologies – The Need

Scott and I were discussing methodologies in open source development. In some ways, I find open source development to be “developer’s id”. Unlike a development job, where you need to do all of the tangentially related (or completely unrelated) tasks mandated by your company, you volunteer your time toward whatever you want to work on. If developers don’t find value in project management, then project management won’t be done in the open source project because no one devotes time to project management. If developers don’t find value in testing, testing won’t be done in the open source project because no one dedicates time to testing. Ideally, people who are interested in all aspects of development would get involved in a project, but what I’ve seen in the open source community is developers.

The problem this creates is that a larger project doesn’t really have any direction. The functionality is almost an emergent property of individual development efforts. I had a friend who worked at MicroProse back in the early 90’s. I remember him talking about a debate between military consultants and UX designers about the direction of control in a military aircraft game (IIRC as they built the first mouse-controlled game). They made a decision, and there was a reason for the decision (memory is the “true to real controls” side won and the “logical” side lost). In a company with low turnover, it was easy enough to retain that knowledge. Some new UX tester says “hey, this is counter-intuitive and makes gameplay more difficult”, they get “the spiel” about verisimilitude.

Most companies have evolved from relying on this sort of tribal knowledge. Memory is faulty (I don’t remember why we decided to do xyz ten years ago … you?), low turnover isn’t as common (my most recent hiring adventure clued me into the fact that a long series of 6-18 month contracts is fairly common in IT ops), there’s a significant level of effort involved in maintaining what amounts to an oral tradition (when I worked somewhere with the ‘oral tradition’ approach to IT architecture, I wrote up my day-long spiel so I could hand it to the next new guy and avoid straining my vocal cords), and “we all just know” certainly doesn’t fly if the company is attempting some sort of regulatory or ISO process validation. Software development companies have adopted application lifecycle methodologies, manufacturing companies have adopted production methodologies, etc that include documentation. What we intend to do, why we’re doing it, and how we’re doing it.

In theory, a new software developer coming into a firm that uses ITIL could use their first week to read through the service catalog and gain a fairly decent understanding of their job. As with most theoretical designs, I’ve not encountered a real implementation that was 100% adherent to a standard practice. That may mean that the practice was adapted to fit the individual organization/product/project, or it may mean that the company took the “start somewhere” approach and has implemented the methodology for new projects. But the result, by any road, is that there’s some tribal knowledge.

What does this have to do with open source development methodologies? I’ve started to think of open source projects as companies with really high turnover. Back in the 90’s, 104% annual turnover was a cause for celebration at the call center I supported. As in statistically every single person who worked for the company on 01 January had quit, and by 31 Dec some of their replacements had quit too. Of course, there were long-term employees and a lot of people who only stayed on for a few weeks who averaged out to 104% turnover. But watching development in a few larger open source projects brought the call center to mind. There are a handful of contributors who are consistently involved across multiple years. But there are a lot of people who pop in to create a PR for a single issue or feature that particularly touched them. This creates a scenario where maintaining an oral tradition and allowing PRs to guide the project roadmap is ineffective.