Friday, February 9, 2024

Code & Coffee - 6/24/2022

 Code & Coffee - 6/24/2022

  1. Talked about microservices and nanoseconds
    1. 75% reduction in database calls but still a bit slower, crossing network more.
    2. Is the speed of light catching up to us?
    3. Link to Grace Hopper on Letterman
      1. https://www.youtube.com/watch?v=oE2uls6iIEU
        1. Nanoseconds are around 4:30
        2. Good thing she was on the show the other guy wasn't that funny
        3. Make sure to stick around until 7:30 to find out about pico seconds
  2. More spitballing on the odd JVM GC behavior
    1. Interactions with Kubernetes and JVM flags is confusing
  3. Puppies
    1. are stressful
    2. training regressions are messy

Probably talked about other stuff too, but apparently this is where my notes left off.

Wednesday, February 7, 2024

OsmAnd & APRS?

Over the weekend I was fiddling with the APIs of OsmAnd & APRSdroid. But why?

The maps in APRSdroid are pretty good and there is even a version with offline map support. So why bother with OsmAnd? There are some interesting potential applications when APRS data is forwarded to OsmAnd.  Things get even more interesting if we can send data from OsmAnd via APRS.

There is already an OsmAnd Tracker app that uses Telegram so why bother with APRS? Telegram requires and account and internet access. For my application I want to be completely offline. Also in my area there are weather stations on APRS, having this data in OsmAnd seems like it could be useful.

Both apps are open source and have documentation OsmAnd & APRSdroid. Should be super simple right? Android is an ever moving target documentation quickly becomes slightly out of date. Slightly wrong is still wrong so it took a bit to figure out what right is enough to run in one version. It may take a little more testing to get it right on various versions, once it is running well in a few version the source code will be published.

The proof of concept is up and running here is a report received via APRS-IS:


OsmAnd is telling me that KE8BSM is about 12 miles NNW from here, I am excited to explore the possibilities that this opens up.

Here is a view with several other stations:

AC8HZ-10 is active so I can see the distance and bearing to that station. In addition OsmAnd allows navigation to that location.  I am wondering about how that will work when AC8HZ moves will the navigation update automatically? If it doesn't the OsmAnd api is very comprehensive the bridge app can watch to see if the destination moves and when it moves beyond a specified threshold update the navigation.

What kind of applications does this open up? 

Think about fox hunting, if I can establish a bearing from a location OsmAnd can remember this and draw it on the map. Travel to a few other points and get more bearing and the intersection is where to look. There are already apps for that. But what if you team up and share bearings via APRS now the initial data gathering is quicker.

What about Search & Rescue? Could we track the movements of the searchers and assign search areas that have not yet been covered?

What if we can do the same bridging via WiFi & Meshtastic? What if we could coordinate all three? Stay tuned ;-)

Friday, May 19, 2023

Monoliths & Microservices

 A modular monolith can be more flexible than a tightly woven set of tiny services. A dogmatic extreme following of either approach will lead to pain.

 

Context matters,  early in a project a modularly build monolith can lend to rapid development.  The current standard leads to having to commit to three or four separate repos with all the associated merge requests builds and hoopla involved.  Not to mention the SG and DA processes involved in some changes.  (The repos: DAO -> BS -> BFF -> UI). Then if things are split into small services this multiplies by the number of services involved.

 

For an early stage project put it all in one repo.  Then when things have been given time to form and service boundaries can be drawn with the benefit of some experience split it as needed. A "monolith" can and should be as modular as a well factored set of services and this approach removes some of the incidental complexity that hampers progress at the beginning of a project.

 

Is there documentation on the <company> theory of services, when and how to split?  Is it easily discoverable?   

 

What does Service Oriented Architecture mean here?  Does it mean an architecture build of a bunch of tiny services glued together with some swagger and http?  Or does it mean systems which map and correlate with the business domains which they serve?  Who and where is this discussed?

 

One thing I am not sure of is how the standards come to be and what flexibility is built in for alternate ideas on the surface it seems that things are quite inflexible and rigid. I like to think I just have not discovered how change comes to be.

 

Vernon Vaughn and Tomasz Jaskula have written an interesting book on this subject, it isn't long and I think definitely something to think about: Strategic Monoliths and Microservices: Driving Innovation Using Purposeful Architecture

 

Vaughn wrote the "Red Book" on DDD: "Implementing Domain Driven Design" which seems well respected and I like it https://learning.oreilly.com/library/view/implementing-domain-driven-design/9780133039900/

 

Vaughn also wrote "Domain Driven Design Distilled" which is a lot shorter, easier to digest and makes a good intro to the red and blue books: https://learning.oreilly.com/library/view/domain-driven-design-distilled/9780134434964/

 

The Monolith/Microservice book pairs quite nicely with Dave Farley's book: "Modern Software Engineering" which promotes and encourages an iterative approach with predictions and feedback.  It explains how engineering fits into software and presents an approach that makes a lot of senes. It is not a long book take a peek on O'Reilly online learning: https://www.oreilly.com/library/view/modern-software-engineering/9780137314942/

 

Friday, June 17, 2022

Code & Coffee - 6/17/2022

 

Code & Coffee - 6/17/2022

  1. Fun with load testing and garbage collection
  2. Code camp next weekend
    1. Blockster cars
      1. https://www.dexterindustries.com/gopigo3/
    2. Target middle school kids (12-16)
    3. Give them a car and some basics and watch them go
  3. Getting the nursery ready for the next little one due in February
  4. New puppies!!!
    1. lot of work
    2. but they are cute


Friday, June 3, 2022

Code & Coffee - 6/3/2022

 Code & Coffee - 6/3/2022

  1. Observability
  2. Customer tracking architecture
  3. GraalVM
    1. for Async batch jobs
    2. Trying to get faster startup for lambda functions
      1. startup was dominating run time
      2. when running many per day the economics break
    3. HotSpot vs Growl
      1. mostly competitive except when it isn't.
  4. Test data generation project
    1. Part of an at work "innovation week"

Friday, May 27, 2022

Code & Coffee - 5/27/2022

 Code & Coffee - 5/27/2022

  1. Ceiling fans and Z-Waves and Zigbees
  2. Internships
    1. What makes a good project
    2. Database change management
    3. One first project was a survey engine in MS Access
      1. Say what,  a shared access db on sharepoint?
    4. Birds in ceilings
    5. Hand coded sorting because didn't know about sql sort
  3. Big Query
    1. Partitions and clustering
    2. Querying for a specific field in 13 terabytes took under 2 seconds.
    3. PubSub and implementing CDC and pseudo transaction ish things.
  4. SSIS Upgrade woes
    1. And general database woes causing prod outages
    2. Lets let the new guy fiddle with prod data, sounds like a great idea.
  5. Miss Dig and cable and gas marking.
    1. Fire trucks and Gas trucks show up pretty fast
  6. SAP is going live
  7. Mental health days
    1. Preemptive mental health days may be even better than reactive days.
    2. Preserve instead of chase mental health
  8. Having fun with Cloujure
    1. What does #?@: <some variable name> mean???
    2. Context: [1 2 #?@(:clj [3 4] :cljs [5 6])]
    3. Its a vector with reader conditionals
    4. https://clojure.org/reference/reader#_reader_conditionals
    5. Immutability Changes Everything:
      1. https://queue.acm.org/detail.cfm?id=2884038
      2. http://www.cidrdb.org/cidr2015/Papers/CIDR15_Paper16.pdf
    6. REPLing is fun
      1. Kinda like changing a tire will the car is rolling except without the crashing bit (usually)
    7. qotw: "99% of the code is not sideffectful"
      1. just be careful of the rest
  9. Bitcoin whirlpools and chains and other stuff
      1. Sparrow, samurai, tors and mores
      2. ¯\_(ツ)_/¯

Friday, May 20, 2022

Code & Coffee - 4/29/2022

Code & Coffee - 4/29/2022

 Topic: "Git Tips & Tricks"


  • The first tip came even before we started:
    • "I won't be able to make it tomorrow but I'm sure Dave will bring up many of my favorites, but in case he doesn't, git worktree, git restore, patch mode, git add -N/--intent-to-add ........"
    • git worktree:
    • git restore:
    • Patch mode:
    • git add -N/--intent-to-add ......
      • Inform git that you will be adding a path in the future, this allows you to see the files in the directory when running git status and seeing diffs with git diff.
      • Docs: https://git-scm.com/docs/git-add#Documentation/git-add.txt--N
  • Squashing commits
    • it is part of git merge, dig up docs
  • Signing commits
    • why and how
  • git bisect
    • use case and how to use it
    • it has a mode where you can pass in a script and it will automatically find the issue
  • "Arlo's git notation"
    • find a link
    • commit message prefix indicates the nature of the commit
  • Git log
    • show only merges
  • Git garbage collection
    • what it is for and how it works
    • oops checked in node_modules again
    • oops that password shouldn't have been in there.
  • Pre-commit hooks/hooks in general
    • vulgarity checker.... or maybe just runs the tests and linter
  • Interactive add
    • see git add -N
    • -P will get straight to patch mode without the menu
    • many commands that change the index support patch mode 
  • git reset -tests
  • git diff
  • dave's rebase strategy... 
    • heard only part of it, was in the other meeting already
    • git rerere - setting to help with repeated rebase resolution