Tuesday, September 13, 2022

An Agile Coach's guide to CapEx and OpEx and Why they Matter


Budgets for services related to agile coaching are lumped into two spending categories: CapEx (capital expenditures) and OpEx (operations expenditures). Your client or your organization will make decisions on what services it's willing to pay for based on which category your service falls under.

Definitions

Just like doing personal taxes, how expenditures get categorized can help or hurt how much profit a company gets taxed against.  Entrepreneurial junior high student Dominque is running a lemon stand.  He's going to pay taxes on the profit made at the lemon stand.  During his grand opening, he made $10.  His friend Joey, whose mom is a CPA, has informed him that if he hasn't accounted for any expenditures, his day's taxable income will be $10.  Joey tells Dominique over a glass of lemonade, "The name of the game is to report expenditures which will reduce the taxable profit of your business."

Expenditures 

To have a lemonade stand, Dominque
had the following expenditures:
  1. $2 serving pitcher
  2. $5 stand
  3. $1 sign
  4. $3 lemons
  5. $3 sugar
  6. $0.10 water
  7. $1 Kate <- Dominique's sister who is working as his employee
Capital expenses are typically one time expenses to get an asset setup.  Operational expenses are typically materials you need to pay for to keep the business going.  When you look through the seven expenditures, how many capex do you see and how many opex do you see?

(The answer written backwards is: eerht capex and ruof opex)

If you got the answer correct, Dominique will be able to report a taxable income of $10 minus opex of $7.10 which equals a taxable income of $2.90.

Digital Transformation

Silvstr, a friend of Dominique has a dad that is an Agile coach.  Silvstr tells Dominique, "There's big money in it if you go digital."  Dominique agrees to digitally transform his lemonade stand.
Silvstr bills the following to Dominique:
  1. $2 design and build website
  2. $0.20 monthly cloud hosting fee
  3. $100 sign redesign service
  4. $5 training service for Kate
That month Dominique makes $300.  Joey asks Dominique to categorize his Digital Transformation expenses.  For the above points, how many are for capex and how many for opex?

(The answer written backwards is: eno for capex and eerht for opex)

If you got the answer correct, Dominique's taxable income will be $300 minus opex (ignoring lemons, sugar, water, and Kate's wages) $105.20 which equals a subtotal (we aren't including the lemons etc) of $194.80.

Said another way, the creation of new software (the website) is a capex expense.  The maintenance of the website (hosting), the sign, and employee training are opex.

Resources Used in Writing this Article



Saturday, December 11, 2021

AndroidStudio Development with an M1 Mac

 


I got to use an M1 Mac as a loaner while my other Mac (2019, 32GB, MBP) was in the shop. So I used Time Machine to restore my work on the M1 MBP with 16GB. This M1 really is impressive in performance and using less power.  Having half the RAM of the Intel Mac wasn't noticeable at all.

Everyone should ditch their Intel and get one of these! That said, there are two impediments I had with getting work done: Android Studio and Open Broadcast Studio.  In this article I'll share how I resolved my issue with Android Studio.

The Issue 

Everything worked "out of the box" with Arctic Fox patch 4 (not a native M1 app), except I still couldn't get the emulator to launch.  But it actually was pretty easy to resolve once I learned a bit more about how Android emulation works.  

When I chose to launch my app, nothing would happen.  What was happening in my case is that it was trying to launch an emulator based on the x86 architecture.  So I needed to change the emulator.  The following is how. There are articles on StackOverflow, Reddit, and Medium but as AndroidStudio frequently releases new versions, a lot of the information is educational but the steps are quickly out of date.  (We are speeding toward the Singularity after all.)

Changing the Virtual Device

Note: As you go through the below images, you'll notice they are a tiny bit fuzzy. This is a compromise to get these big screenshots to fit in this webpage's layout. If you can't read something clearly, click on the image and it'll expand to full size and everything will be clear.

Go into the Android Vertical Device manager (AVD).




Create a new virtual device. 



Select the same phone type you were using before (I'm using Pixel 3a).





Download the version of Android OS you need (notice the ABI is for ARM).



Select the ARM emulator.  (Remember, Apple Silicon is an ARM architecture.)





After clicking finish you're ready to go back to AndroidStudio and launch the app in the emulator. (It will take more time on the first launch as it doesn't have things locally cached.)

Cleanup

When you're happy with the results of the new virtual device, go back into the Android Virtual Device manager and delete your old, unusable device and free up those GBs of storage.

Friday, April 16, 2021

Code Craftspersonship with S.O.L.I.D. (SOLID) for Java, Swift, Kotlin


Code craftspersonship is important as it is what allows code to be adjustable in the future. If it's not adjustable, then you're assuming that you're only releasing ONCE, and who does that? If software is valuable, then we'll keep adding more features the market would like. So it's the job of a professional developer to enable this ability, otherwise, what you are delivering is not as valuable after the first release.

A popular model introduced by Bob Martin in Clean Code is S.O.L.I.D.



Learning how to put SOLID to work and then teach your team will bring a lot of value to your software and organization. Here are resources I recommend for individuals and teams to learn how to apply SOLID to Java, Swift, and Kotlin. (I'll add more as they come up on my day job as a technical coach.)

Language Agnostic Materials

This introduction teaches with cartoons and is my favorite resource on this whole page!  


This next is a slide deck that teaches with CRC diagrams: https://www.slideshare.net/sjabnouni/solid-code-by-example

If you want more details, Code magazine has a very nice article by Derick Bailey that shows how a project starts with something simple and evolves into something requiring more design: https://www.codemag.com/Article/1001061/S.O.L.I.D.-Software-Development-One-Step-at-a-Time

Java


Swift


Kotlin


https://www.slideshare.net/ionutbilica/solid-design-principles-applied-in-java

Thursday, January 7, 2021

Zoom Screen Sharing freezing on MacOS


You're all set. You've got the best presentation ready. Your green screen is shiny and your new pinstripe T-Shirt displaying the M1X logo on the chest is well pressed and lightly starched and you're totally killing it on your 4K webcam, but then one of your participants says, "Oh?  Did you change slides? Your screen sharing is frozen."  

OK.  So you close the sharing and turn it on again and it goes even worse: "Now it's a blank screen."

A NIGHTMARE! And you KNOW your hard wired connection to gigabit ethernet can't be the problem. And they say your are looking GOOD on the webcam. That means this is a screen sharing problem.

Here are some things that worked for me if you're living this nightmare:

Of the following two steps, doing the steps in #1 didn't resolve the issue.  Doing the steps for #2 did.

  1. learn about your Mac's ability to switch video card, know how to identify what card it's using, and configure it to not switch when connected to power.
  2. configure Zoom to avoid the situation
I included the steps of #1 because:
  • sometimes more knowledge will save your bacon, 
  • I wanted to capture these notes, and 
  • if you're a live streamer like me (TDD.Academy Youtube, TDD.Academy Twitch), you may need to "amp things up" to increase your frame rates for your live stream.
It's possible after some time and experience, that I'll go back to #1 and allow my machine to automatically switch video chips while connected to power.  But for now, I've some experiments to try out.

Did you know your Mac could have more than one graphics processor?

Go to your battery settings to see if your Mac has "Automatic graphics switching." If it does, you've got more than one graphics processor.  Here are the steps:




If you're curious about which GPU your machine is using at any time, either open Activity Monitor or click on the apple icon in the menu bar and select "About this mac."  Activity Monitor will tell you if they are using the "high performance" card or not.  About this mac will tell you which GPU (Graphics Processing Unit) is active. Typically the low power GPU is from Intel and the high performance one is from Radeon or Invidea.


To change or turn off the ability to switch GPUs, your can deselect the "Automatic graphics switching." I did this for when my machine is running on power.  I want it to select to the low power GPU when it's running on battery.  When I'm presenting my best face to the world, I'm usually connect to battery and hardwired to the LAN.

Zoom settings that solved this problem

Zoom has two interesting settings.  One of which, I'm sure resolved my problem.  Go into Zoom preferences and turn them both on if your having issues.











Sunday, July 26, 2020

"NodeJS cannot be opened" dialog box on MacOS


If you're using MacOS Catalina or newer, using your IDE may get frustrating.  In Spring, every few seconds I'd get a dialog warning me that nodeJS isn't signed and MacOS can't identify if it's malware. This is an easy problem to solve if you can identify the executable because once you do, you use the context menu to "open" it anyhow which tells MacOS that "yeah, the user knows it's not signed but they are confident in this executable."  However the problem in this case is that because this is happening via the IDE, you've no idea in which of the many locations you've got a Node is the binary your IDE is using.  Not an easy problem to solve.

Here's how to solve it

To narrow down your search for which Node binary by paying attention to the date in the warning dialog.

Put MacOS Finder to work:


Refine the search by date and type:


As you adjust the search criteria below, the list of filenames with "node" will adjust in a reactive manner.  I discovered the "Kind" by adding a "Kind" column to the search results which showed "Kind."  This is also the same "Kind" which you see when selecting a file in Finder and examining its "Info." The Kind of "Unix Executable" is synonymous with Terminal Document in this case.

Then give the "node" executable the "context menu->open" treatment:


The above action will open a terminal window and launch Node. What this does is register the app with MacOS that the user has marked the binary as trusted even though it wasn't signed. Once the terminal running Node is launched, you can close terminal (or double ctrl-C), as we've achieved the result we needed—registering it for execution. At this point, try out your IDE and you shouldn't see the dialog box anymore.




Friday, May 8, 2020

Full Stack Java Web App, Fact or Fiction?

An Agile tech coach's job is never done in a world where relatively few people can do eXtreme Practices such as TDD. Part of the job is entertainer (make training fun), part of the job is teacher (how the heck do I test this!), and part of the job is adoption (how to get my organization to support me doing this). So I'm faced with creating an enjoyable—no, exciting!—experience for training Java developers TDD.  So the formula for success looks like this:
  1. Useful modern technologies for mainstream workers
  2. Fun
  3. TDD
So perfect! I want to take my class on TDD through building a three tier web application, full stack, in Java: DB, micro services, web API.

But WAIT! Can one use Java to build a graphical user interface in the web browser?


Well it turns out you CAN.  However I had to sift through a lot of claims about "full stack Java" which sometimes means building TCP/IP clients for macro test automation. But come on! Nothing impresses the folks at the IT bar like showing off a build that actually works on a smart phone.

But I've got an additional "hangup." To me, modern technologies in the UI ought to be *reactive* (event driven), meaning, when an event happens on the server side, it updates the web clients.

So I went through RayGun's article on 17 popular Java frameworks, investigated them, and filtered the list down to three potential candidates.  See the following table.


Conclusions

So ladies and gentleman, full stack Java Web Apps are FACT!
  • There are actually THREE frameworks that will allow you to use Java to build a web application view!  (See "yes"s in the third column.)
But full stack reactive Java web apps need more investigation.
  • The big problem for me is that none of the reactive choices use Java to describe a view, with the exception of some branches of GWT.
If I care only about reactive and give-up on using Java to build the view, then there are three frameworks that would do the job. But that means bringing in TDD in Javascript (for functionality in the front end) into my Java class.

Next steps

It comes down to the practicality of TDD in one of the GWT branches that are reactive.  If it works, then I'm all good.  If it doesn't do reactive well or if it doesn't make sense to do TDD in GWT, then I move onto one of the other reactive alternatives.

I'll build some POC's and evaluate what will work for a Java TDD course that's fun and uses mainstream technologies.

Monday, April 13, 2020

Splitting a Cell in Excel


I confess to be a Mac fanboy but sometimes I need to work with people who use Excel rather than Numbers. One problem that took twenty minutes of searching to figure out (but is easy to do with Apple's Numbers spreadsheet) is how to split a cell into two pieces.

After watching YouTube and reading comments from others who remained confused, it finally hit me: Excel ONLY provides "merge cell." And you don't technically need "split cell" because you can split cells already with "insert row." So the idea is to insert a row and then merge the parts that you don't want split.

Here are the steps: Insert a row, merge cells that shouldn't be split, done!

Example

Here is an example.  I want to split the cells to the right of the headers that label the days of the week.

Insert Row

Since insert row inserts above the selected row, you need to select the row beneath your target.  So to do Monday, I had to select the row beneath Monday.

Merge other Cells

Select the Monday cell and the cell beneath, then click on "Merge & Center" and then "Merge Cells."

Wrap-up 

So Excel doesn't believe in cell division, only cell fusion. :-) And I'll have to either repeat the process more times for each day of the week or copy paste the formatting. If you want to do something different such as split cells vertically, then follow the same process but insert a column rather than a row.