AI v IR

To my knowledge no one is currently taking advantage of camera sensors’ (typically) inherent ability to capture inferred (IR) data. If someone is, good on them. Someone will tell me at some point.

Camera sensors often (always?) are able to collect data beyond the visible spectrum into the inferred (and presumably into the ultraviolet (UV). It seems clear to me that parsing this data can be useful to an autonomous vehicle in identifying human and other animal agents on and near the roadways. (There may be similar benefits available in parsing the UV wavelengths as well.)

There are situations (especially at night) where IR will allow human and other animal agents to stand out against the background in ways the visible spectrum cannot. IR (and UV) may be able to usefully augment the lasers currently being used as well to provide a more robust dataset and thus more complete picture of the world for autonomous vehicles.

This may also help to solve some of the problems associated with windows and similar either reflective or transparent surfaces (as they should typically produce different IR ranges than the surrounding surfaces (and again perhaps UV differences)).

Another related source for potentially useful information would be comparing polarized lens data with standard lens data.

Thoughts?

Share

Powershellish Mailbox Creation

Found these old notes for making a post.  Figured I may as well move the notes here even if they are less relevant.  Maybe it will be useful to someone.

Mailbox Creation

Sometimes those old Exchange gui’s just ain’t enough. Time to bust out the command line. Here is some very useful information about doing just that.
So, of course, there is a special command prompt you will want to use: the Exchange Management Shell.

Main Data

I pulled this directly from the MS helps pages in Exchange. I did, however, add the very important (and neglected) identifier for each of these five mailbox types (at least my best guess):

User Account:

##
New-Mailbox -Name -Database -OrganizationalUnit -Password -UserPrincipalName [-ActiveSyncMailboxPolicy ] [-Alias ] [-DisplayName ] [-DomainController ] [-FirstName ] [-Initials ] [-LastName ] [-ManagedFolderMailboxPolicy ] [-ManagedFolderMailboxPolicyAllowed ] [-ResetPasswordOnNextLogon <$true | $false>] [-SamAccountName ] [-TemplateInstance ]
##

Linked Account:

##
New-Mailbox -Name -Database -LinkedDomainController -LinkedMasterAccount -OrganizationalUnit -UserPrincipalName [-ActiveSyncMailboxPolicy ] [-Alias ] [-DisplayName ] [-DomainController ] [-FirstName ] [-Initials ] [-LastName ] [-LinkedCredential ] [-ManagedFolderMailboxPolicy ] [-ManagedFolderMailboxPolicyAllowed ] [-Password ] [-ResetPasswordOnNextLogon <$true | $false>] [-SamAccountName ] [-TemplateInstance ]
##

Room Account:

##
New-Mailbox -Name -Database -OrganizationalUnit -Room -UserPrincipalName [-ActiveSyncMailboxPolicy ] [-Alias ] [-DisplayName ] [-DomainController ] [-FirstName ] [-Initials ] [-LastName ] [-ManagedFolderMailboxPolicy ] [-ManagedFolderMailboxPolicyAllowed ] [-Password ] [-ResetPasswordOnNextLogon <$true | $false>] [-SamAccountName ] [-TemplateInstance ]
##

Equipment Account:

##
New-Mailbox -Name -Database -Equipment -OrganizationalUnit -UserPrincipalName [-ActiveSyncMailboxPolicy ] [-Alias ] [-DisplayName ] [-DomainController ] [-FirstName ] [-Initials ] [-LastName ] [-ManagedFolderMailboxPolicy ] [-ManagedFolderMailboxPolicyAllowed ] [-Password ] [-ResetPasswordOnNextLogon <$true | $false>] [-SamAccountName ] [-TemplateInstance ]
##

Shared Account:

##
New-Mailbox -Name -Database -OrganizationalUnit -Shared -UserPrincipalName [-ActiveSyncMailboxPolicy ] [-Alias ] [-DisplayName ] [-DomainController ] [-FirstName ] [-Initials ] [-LastName ] [-ManagedFolderMailboxPolicy ] [-ManagedFolderMailboxPolicyAllowed ] [-Password ] [-ResetPasswordOnNextLogon <$true | $false>] [-SamAccountName ] [-TemplateInstance ]
##

Examples in Action

Create a shared mailbox:

##
new-Mailbox -alias testsharedmbx -name TestSharedMailbox -database "Mailbox Database" -org Users -shared -UserPrincipalName testsharedmbx@example.com
##

Realworld example:

##
new-Mailbox -alias sanfrancisco -name SanFrancisco -database "Mailbox Database" -org "simplecompany.lan/simpleCOMPANY/Resource Accounts" -shared -UserPrincipalName sanfrancisco@simplecompany.lan
##

Notes:

  • alias is the whatever@
  • name relates to the display name

Adding Permissions

Main Data

##
Add-MailboxPermission
Add-MailboxPermission -Identity "Some User" -User DonaldK -Accessright Fullaccess -InheritanceType all
##

To this point everything is more or less clear but people find it hard to find more parameters for -Accessright, which is actually the most important part of the command. Here they are:

  • FullAccess
  • SendAs
  • ExternalAccount
  • DeleteItem
  • ReadPermission
  • ChangePermission
  • ChangeOwner

Examples in Action

Realworld example:

##
Add-MailboxPermission -Identity SanFrancisco -User "simpleCompany San Francisco ACL" -Accessright FullAccess -InheritanceType all
##
Share

Fuck Comcast

Comcast used to give me a static IP address for five dollars a month.  This is exorbitant (as you will see below), but it was paradise to pay compared to what they are doing today.

First a word about IP addresses.

For IPv4, this pool is 32-bits (232) in size and contains 4,294,967,296 IPv4 addresses. The IPv6 address space is 128-bits (2128) in size, containing 340,282,366,920,938,463,463,374,607,431,768,211,456 IPv6 addresses.

So for IPv4 (what is most commonly used still) there are about 4.2 x 10^9 and for IPv6 (newish but growing slowly) there are about 3.4 x 10^38 total addresses.  If we were limited to IPv4 we would be having some minor difficulty getting addresses assigned around the globe.  Mostly that’s not an issue because mostly individual computers sit on local networks and don’t need public addresses.  These numbers are really only about pubic facing addresses.

Think about that scale for a moment.  Let’s look at the math.

340282366920938463463374607431768211456 ÷ 7631836561 = 4.458721884×10²⁸

So, every human on the planet could have their own pool of addresses (just from IPv6 because at this point the IPv4 address aren’t even a rounding error by comparison) and they would get a pool of about 4.5 x 10^28 addresses.  To put that in perspective the the mass of the earth is 5.98 x 1027 grams.  How much is a gram of dirt worth?  This is the scale we are at with addresses.

Comcast will charge $30 per month for an IP address (a static address).  Let’s break that down.  In order to get a static address you must have a business account which is an increase in your monthly fee of (at least) $5.  Then you will need to pay the monthly fee they charge for the static lease which is now $15.  Finally, you must rent a modem from Comcast at $10 every month.  (I may have those numbers reversed but either way it’s the same math.)

You may think “oh, I’ll save some money and buy my own modem”.  Good thought.  That’s what I did.  But it turns out they are now geared to fuck anyone who tries to escape that fee.  They are currently refusing to assign static leases to customer-owned modems.

They will tell you it’s not possible, but this is what I do for a living.  You can assigned a static lease to any device on your network by several various means, and it doesn’t matter who owns that device, who made that device, or what sort of device it is.  You only need the MAC address of the device (which is easy to provide and which I have repeatedly offered).

They are lying.  In addition to it being technically possible, I also know this from experience with Comcast.  Remember this is what I do for a living.  I have set up businesses around town with their own modems, with Comcast as an ISP, and with static addresses many times over the years.  I know too of specific business with this arrangement currently.

So, in short Comcast is charging any customer who asks for one thirty dollars for one-tenth of one gram of dirt.

Fuck Comcast.

Share

HowTo: Copy an Array in bash

If you want to make a copy of an array as an array in bash, you must use this specific syntax in order to get the elements parsed as individual elements.

##

export -a "$newArray=(${oldArray[*]})"

#

The asterisk gives access to each element within the original array, and the parentheses ensure the new array is populated also as an array with multiple elements.

Share

Windows Hates USB Drives

Not sure why but Windows is always throwing little tantrums when I attach a USB drive.  None of the other operating systems I use complain, but Windows complains nearly every time.  I think it can smell the Unix.

When I first attach a drive it will probably confront me with this terrifying message of doom.

What to do?
What to do?

Continuing without scanning always works fine, but if I should ask it to scan and fix (as they so thoughtfully recommend) I get the obligatory “are you sure?”, because (of course) “Scan and fix” means “scan and… that’s it”.

Er... repair?
Er… repair?

Oh, shit.  They found errors!  Better fix them.  I mean it’s the only option at this point.  (Canceling is just giving up.)

The No Error!
The No Error!

I’m pretty much doomed.  Save yourself!

Share

So You Wanna Do C++ Programming on Windows

You must update Win10 to the latest version before you will be able to enable the Windows Subsystem for Linux and Ubuntu (which is where you will find bash). It is best to do this over a wired connection as it will go faster and more smoothly.

Enable the subsystem:

  • Hit the Windows key and locate the Control Panel
  • Now locate the Programs and Features panel and double-click on it
  • Click the “Turn Windows features on or off” link on the left
  • Check the box for “Windows Subsystem for Linux” and click the “Ok” button

Install Ubuntu:

  • Hit the Windows key and locate Microsoft Store
  • Search for Ubuntu (“ubu” is probably sufficient)
  • Install Ubuntu (no need to sign in if prompted)

Enable developer mode:

  • Hit the Windows key and click the Settings gear on the left of the Start menu
  • Choose Update & Security (it’s the last entry)
  • Choose “For developers” on the left
  • Choose the “Developer mode” radio button

Reboot:

  • You’ve made some changes; time for a quick reboot
  • Once you are back, launch Ubuntu from the Windows menu and let it set itself up
  • If you let Ubuntu set itself up, these are the same steps as outlined in Setting up Bash

Setting up bash:

  • Open a command prompt (cmd), a PowerShell prompt, or a Terminal in Visual Studio Code (aka VSCode) and type bash
    • (This will cause bash to run through a basic set up.)
  • Enter new UNIX username:
    • Use your Windows username as that’s easiest to remember
  • Enter new UNIX password:
    • Use your login password for Windows again because it’s easiest
  • Retype your UNIX password:
    • Type your login password again so you’re sure it’s correct

If cmd complains bash doesn’t exist…

  • Open the Microsoft Store application
    • Win –> type store
  • Install Ubuntu
    • search for Ubuntu or bash
    • Click the “Get the apps” button in the “C:\> Linux on Windows?” box
    • Choose Ubuntu (free)
    • Click the “Get” button
  • Go back to “Setting up bash” above except you’ll need to locate and launch Ubuntu from the Windows Start menu

Update Ubuntu (the subsystem which is running bash):

  • sudo apt update
    • (you will be asked to invisibly enter your password)
  • sudo apt upgrade
    • (answer y)
  • sudo apt autoremove
  • sudo apt autoclean
  • # or simply use this:
  • sudo apt update && sudo apt upgrade ; sudo apt autoremove ; sudo apt autoclean

(Those last two are not strictly necessary but are a good practice to use.  If too much time passes between any of these sudo commands you will be asked to enter your password again.)

Install the g++ compiler:

(This is not required if you are just adding bash to Windows.  It’s an open source C++ compiler.)

  • sudo apt install g++
    • (answer y)

The final piece of this puzzle is the (optional but pleasant enough) VSCode (free community) version of Visual Studio.  You can get that for Windows, Mac, and Linux directly from this site.

Remember to have fun!

Share