Is my idea for handling space combat in my setting any good?

I’ve been using a homebrewed system and hard sci-fi setting (not originally designed for tabletop RPGs, but for writing stories and as my worldbuilding project) with a group of friends for a while now and they are ready to leave the starting space station. Thus the first space battle comes ever closer, but I’m uncertain whether my ideas on how to do space combat are any good or not.

The setting is very hard sci-fi set several millions of years in the future, so while technology is very advanced (Torch-drives, antimatter, hand-held energy weapons, nanotechnology, genetic engineering, transhumanism), none of the typical soft sci-fi technologies (FTL-drives, teleportation, useful forcefields, …) exist. This has worked fine so far, yet the players haven’t yet come into contact with truly advanced military equipment like spacecraft.

The hard sci-fi nature of the setting means that space combat is an extremely automated process involving a mind-bogglingly rapid dance of probability and vector math paired with deception and elaborate bluffs. Evasive maneuvering, firing solutions, and tactical decisions must be calculated, made and remade in a matter of nanoseconds. This does obviously mean that human intervention in space combat will be minimal.

Thus my idea was that if players can’t make tactical decisions, having them win battles because of strategic ones and good preparation would be the way to go. If normal combat would be akin to playing Fortnite, my space combat would be akin to Dota Autochess or LoL‘s TFT mode: You make strategic decisions and whether they were good or not, you have to live (or die) with the results). I would describe the strategic options the players have and tell them as the spacecraft AI the probability of success, critical success, failure, and critical failure. Thus the space combat would be very narration heavy opposed to usual dice heavy combat.

It is worth noting that in the absence of energy shields and usable spacecraft armor, the negative outcomes would either be vaporization of the party in a nuclear blast, overheating and thus loss of the vessel’s combat effectiveness or loss of a critical resource or component (main drive, ejection mass, ammunition, …), making victory extremely unlikely. This means that space combat will always involve very high stakes, since there are no fantasy means of getting out of bad situations.


My system in general works by adding up all the related stats a player has to a number of dice he can throw for the roll. Each die is considered a success if it shows more one of the upper 50% of its eyes. (if D6: 1,2,3 == Failed_Roll; 4,5,6 == Succeeded_Roll) For minor decisions, like what kind of loot is found I use a “Destiny_Roll”. I roll a D20 and ask the player in question if he wants high or low numbers. The result may be a yes/no or how good/bad answer, depending on the situation.

In space combat, they will have flat dice boosts due to their vessel’s equipment (adding a railgun or a fresh dagger shield will give extra dice) and maintenance status (attrition during the battle will drain dice if a second round happens). (They will start with an ultra slow solar sailer without armor and only armed with defensive point-defense IR-laser arrays, which is pretty much rock-bottom as far as spacecraft go.) Then they will discuss their battle plan with the spacecraft’s AI, where they can use character skills and creative suggestions to gain extra dice. Additionally, the vessel will have limited resources, namely heat-capacity, heat sinks, reaction mass, power, armor, and slugs whose use-up-rate depends on the players’ decisions and the outcome of the dice rolls. These plans are made prior to the battle or during downtime. (The bad guys shot a volley of missiles at them and it will be an hour before the next volley arrives, thus the strategy can be adjusted.) Short-term adjustments will be handled via “Destiny_Rolls” and will have little impact.

Player decisions would be whether the vessel should focus on defense or offense, how much resources it may use, which weapons to prioritize, what range to keep, etc. Each of these decisions will give specific buffs to the encounter, which won’t necessarily be flat dice boosts (sacrificing dice to gain guaranteed damage on a success, etc.)

What issues might I run into with this system?

Strategies for handling age of maturity dissonance for Aasimar (or other plane-touched) born to humans?

I find the fact that elves don’t reach adulthood until they are 110 relatively straightforward to work with, since the children and parents are aging at the same rate and their cultures are built around their rate of maturity.

On the other hand, aasimar, tieflings, oreads, etc. seem trickier. Many plane-touched humans are born to two regular human parents (due to plane-touched blood further up their family tree). These children don’t reach maturity until they are 60, but their siblings are adults at 15. If their parents were 25 years old when the child was born, the parent will be 85 when their “little angel” is ready to support himself. In many families, this would mean that plane-touched children will be a terrible burden — likely one born by two or even three generations.


  • Our “little angel” took 4x as long to mature mentally and emotionally as his human siblings, not learning to read until his early-20s, and not safe to leave unattended until his early-30s
  • Our “little angel” took 4x as long to mature physically, crawling until he was 5 years old and staying in diapers until he was 12
  • Our “little angel” will often end up being raised by three generations, with his parents, siblings, and finally nieces or nephews each raising him for 20 years apiece before handing off the young aasimar to their own children.

I don’t have any problem with saying some plane-touched humans live like this…it’s very interesting, plausible, and flavorful.

Saying all plane-touched live like this on the other hand seems counter to the flavor of the world. Frankly, this “kid” (living in a medieval world) is going to likely be seen as stupid and weak, and likely a horrible curse on his poor parents.

Flavor-wise, I’d imagine many plane-touched people are just as fast learners as their sisters and brothers; it’s just that their aging slows to a crawl when they reach adulthood. (This doesn’t seem to be supported by the rules saying they won’t be able to reach 1st level until they are 64+ years old…but the fiction of the world just seems poorer if there aren’t aasimar who are exceptional as youths…for a reason other than exceptional developmental delays.)

How do you play this? Or do you hand-waive it differently?

Has this been addressed by Paizo in any way? (In this case, I’m curious about official statements, but just as interested in how you’ve had success playing it).

Also note, if Alex the Angel has a plane-touched daughter each with Hanna the Human and Emma the Elf, both daughters will reach maturity at 60, but the one with human siblings will see her brothers mature at 15…and the one raised by elves will speed past her fellows, maturing in half their normal rate.

What is google docs solution to handling multiple users editing and reading at the same time?

I have always been curious as to how google solved the solution of real time collaboration in their google docs product where they allow multiple users to edit and read the same document in real time.

I believe this is very similar to the well known readers and writers problem.

In some of the solutions that i have seen, we would need a mutex of some kind whereby the writers will have exclusive lock to the document itself and readers will not be able to read the document at all.

But in the google docs case, it is quite interesting whereby another user can read the document in real time and two users can both edit the same document at the same time without any conflicts which is very impressive to me.

Handling multiple conditions when using concat_ws

I am using mysql and i want to search multiple specific columns. I have this code

select * from table where concat_ws(' ',first_name,last_name)  like '%$  search_term%'; 

that i got from here

For this to work, i need to add more conditions. The condition i have in mind is to specify the user_id. However, i just want the user_id to act as a condition and not a string i want searched.

How can i add more conditions when i want to specify what columns to search in?.

Handling secrets and environmental variables in Docker-k8s-skaffold dev environment

Basically, trying to wrap my brain around how I should be handling secrets using Docker, k8s, and Skaffold in a dev environment. I’m pretty new to this tech, so don’t fully understand all of it.

Just not sure if I should be using a .env, or config.json, that isn’t committed to the repo, or if there is a better way with using Docker.

Ideally, I could just refer to process.env.API_KEY in my code, regardless of environment, and it would just work and grab the correct environmental variables. If it is in production in AWS, it would just grab the keys from Key Management Services. In production, it would just grab them from where ever.

Did come across this, which seems to apply to Docker Swarm so may not be relevant:

So what is the best practice using Docker, k8s, Skaffold for handling environmental variables and secrets in developement?

Handling text overflow in wireframes

This is something that has bothered me a lot on how to approach.

I like to use “ugly data” in my wireframes since my goal isn’t to have pretty wireframes, but functional ones. Using simple single-line words is easy and pretty, but it’s not real.

Here are some ways I can think of to handle longer text in a preview before selecting an item: A list of ways to handle long text in previews But then what if you have a nefarious user who exploits Unicode to overflow these fields? Various ways of exploiting unicode

The first example is the user using either or to create new lines, making a simple character count inaccurate.

The second example is the user using a long Unicode character to abuse a character counting method.

The third example is using a whitespace rendering character to create an ellipsis out of seemingly nowhere.

You’d need to somehow not only measure the width of a piece of text, but also make sure it doesn’t flow vertically. Or sanitize inputs so this doesn’t happen in the first place. But these precautions aren’t always technically feasible.

In addition, you need to display the full text somewhere anyways, and it starts getting ridiculous with the longer Unicode characters. As an example, longer title that ends in an ellipsis is 37 characters, below is an example of a 20 character string, if you were to use newlines it would only take 17 characters to completely overflow the screen at that font size.

Too long of strings

With all that in mind, how would you handle this? Do you scroll-overflow the text after a certain height? What if it’s composed of newlines? Do you decrease font size?

I’ve been told that it doesn’t matter because it would be ridiculous to have a user input such long text. I don’t like this response since it does and will happen, and it should be my task to figure out the best way to display these edge-cases.

Handling inactive notifications icons

With our app, there’s currently a list of notification icons in the left side of the page. This are to alert you to events or things to do (e.g. you haven’t contacted customer x for 30 days, you have 3 orders to update).

enter image description here

(click on image to view full size)

The app is a pretty complex ERP system, so there’s always a lot happening on the page. Normally I don’t like hiding elements on the page, unless it’s obvious why they’re hidden. However, these empty notifications don’t do anything (i.e. clicking on an inactive icon does nothing). I have two thoughts on how to progress.

Hide the icons

First, just hide the inactive icons. It will help remove some unnecessary elements, hopefully adding clarity / focus to the page.

enter image description here

(click on image to view full size)

Have a blank slate for the icons

If there’s nothing to notify the user, it would be an opportunity to provide a nice blank slate. For example, for the inactive order icons, it use the pop out menu to talk about how orders work and a link to create your first order. Obviously, this is really only useful for new users to the system. It won’t have any benefit for expert users.

Handling The SharePoint REST API Search Threshold Limit In powershell

We are using SharePoint Online. I would like to search in all sitecollections for the word “passport”. I make it working with the REST api in powershell. But I have now only the problem that it returns only the first 500 results. How can I iterate into all the batches of 500 results?

I found some blog posts how to that in spfx:

This is my powershell code:

    try {     $  searchKeyWord = "passport"      $  secpasswd = ConvertTo-SecureString "123123!" -AsPlainText -Force     $  mycreds = New-Object System.Management.Automation.PSCredential ("", $  secpasswd)      # Connect to SharePoint Online     $  targetSite = ""     $  targetSiteUri = [System.Uri]$  targetSite      Connect-PnPOnline $  targetSite -Credentials $  mycreds      # Retrieve the client credentials and the related Authentication Cookies     $  context = (Get-PnPWeb).Context     $  credentials = $  context.Credentials     $  authenticationCookies = $  credentials.GetAuthenticationCookie($  targetSiteUri, $  true)      # Set the Authentication Cookies and the Accept HTTP Header     $  webSession = New-Object Microsoft.PowerShell.Commands.WebRequestSession     $  webSession.Cookies.SetCookies($  targetSiteUri, $  authenticationCookies)     $  webSession.Headers.Add("Accept", "application/json;odata=verbose")      # Set request variables     $  apiUrl = "$  targetSite" + "_api/search/query?querytext='$  searchKeyWord'&rowlimit=5000"#&rowlimit=$  ($  rowLimit)&startrow=$  ($  startRow)" #&selectproperties='Title,Author,Path'"      # Make the REST request     $  webRequest = Invoke-WebRequest -Uri $  apiUrl -Method Get -WebSession $  webSession      # Consume the JSON result     $  jsonLibrary = $  webRequest.Content | ConvertFrom-Json     $  results = $  jsonLibrary.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results      #MaxRowLimit     Write-Host $  results.Count "Results" -ForegroundColor Green      $  ResultsArray = @()      for($  i=0; $  i -le $  results.length-1; $  i++)     {         $  row = $  results[$  i]         $  obj = New-Object PSObject          for ($  j=0; $  j -le $  row.Cells.results.length-1; $  j++)         {             if ($  row.Cells.results[$  j].Key -eq ‘Title’)             {                 Add-Member -InputObject $  obj -MemberType NoteProperty -Name Title -Value $  row.Cells.results[$  j].Value             }              if ($  row.Cells.results[$  j].Key -eq ‘FileExtension’)             {                 Add-Member -InputObject $  obj -MemberType NoteProperty -Name FileExtension -Value $  row.Cells.results[$  j].Value             }              if ($  row.Cells.results[$  j].Key -eq ‘Path’)             {                 Add-Member -InputObject $  obj -MemberType NoteProperty -Name Path -Value $  row.Cells.results[$  j].Value             }              if ($  row.Cells.results[$  j].Key -eq ‘OriginalPath’)             {                 Add-Member -InputObject $  obj -MemberType NoteProperty  -Name OriginalPath -Value $  row.Cells.results[$  j].Value             }              if ($  row.Cells.results[$  j].Key -eq ‘Author’) #             {                 Add-Member -InputObject $  obj -MemberType NoteProperty -Name Author -Value $  row.Cells.results[$  j].Value             }              if ($  row.Cells.results[$  j].Key -eq ‘HitHighlightedSummary’)             {                 Add-Member -InputObject $  obj -MemberType NoteProperty -Name HitHighlightedSummary -Value $  row.Cells.results[$  j].Value             }              if ($  row.Cells.results[$  j].Key -eq ‘SiteName’)             {                 Add-Member -InputObject $  obj -MemberType NoteProperty -Name SiteName -Value $  row.Cells.results[$  j].Value             }              if ($  row.Cells.results[$  j].Key -eq ‘SPWebUrl’)             {                 Add-Member -InputObject $  obj -MemberType NoteProperty -Name SPWebUrl -Value $  row.Cells.results[$  j].Value             }              if ($  row.Cells.results[$  j].Key -eq ‘IsDocument’)             {                 Add-Member -InputObject $  obj -MemberType NoteProperty -Name IsDocument -Value $  row.Cells.results[$  j].Value             }              if ($  row.Cells.results[$  j].Key -eq ‘ParentLink’)             {                 Add-Member -InputObject $  obj -MemberType NoteProperty -Name ParentLink -Value $  row.Cells.results[$  j].Value             }              if ($  row.Cells.results[$  j].Key -eq ‘ViewsLifeTime’) # aantal hits, niet unieke hits             {                 Add-Member -InputObject $  obj -MemberType NoteProperty -Name ViewsLifeTime -Value $  row.Cells.results[$  j].Value             }              if ($  row.Cells.results[$  j].Key -eq ‘ViewsRecent’) #             {                 Add-Member -InputObject $  obj -MemberType NoteProperty -Name ViewsRecent -Value $  row.Cells.results[$  j].Value             }              if ($  row.Cells.results[$  j].Key -eq ‘Rank’) #             {                 Add-Member -InputObject $  obj -MemberType NoteProperty -Name Rank -Value $  row.Cells.results[$  j].Value             }         }          $  ResultsArray += $  obj     }      $  ResultsArray | Export-Csv -Path "c:\outfile.csv" -NoTypeInformation } catch {     Write-Host $  _.Exception.Message -ForegroundColor Red }  Write-Host "Finished" -ForegroundColor Green 

What is the best strategy for handling a compromised private key within the domain of firmware?

I have a firmware project that uses asymmetric cryptography for assuring integrity and authority of updates. The private key is stored within the company, and the public key is on the firmware to validate the integrity and authenticity of an update attempt.

Currently, the public key to be used for verifying the signature is ‘written’ (in NV data) only on factory updates, so the customer can’t just overwrite the FW by adding it’s own key.

I want to implement a strategy for handling the case of the private key being compromised. Are there any standards or similar documents to refer to?

Some context: The unit with the firmware will not have internet access. A compromised private key would need to have its associated public key replaced manually on-site.