2026-02-22 1:30pm EST
So for anyone else trying to find a way to make Samsung dex work as a dev PC - termux with code-server works for obvious reasons (install extensions in the terminal - extensions don't install well in the UI) and use Claude code for the AI.
Co-pilot doesn't work, and Continue.dev does not work. Have yet to try Codex, but Claude works wonderfully out of the gate.
2024-01-16 9:30pm ADT
Went on a little break for playing video games, and today it was Delver. So far I have:
(Not only blogging on technical stuff - tossing the odd other thing onto here. This is the closest to social media I'll use.)
Good experience, will play again at some point to try to get to some sort of conclusion.
2024-01-15 9:30pm ADT
Finally like a real blog again (last time I ran one was in 2010 or so) so I added a comments section. Took a bit to setup, and uses a selfhosted version of Commento.
Anonymous comments are enabled and manually approved, so go nuts within reason.
It's quite neat I can add this while still doing a static site setup for the actual content here (static-ish - NodeJS packaged site that I commit via git to and it runs a pipeline to publish.) Pretty happy about that since the pageload speed is awesome and I have some flexibility, and can toss into a k8s cluster!
2025-01-15 6:15pm ADT
Lots of little bits of digging I had to do to get Vault working with Github Actions. But, quick summary of how I got it working, using wmb as an example (my webhook-to-IRC bot).
Inside a job, you can add this:
- name: Retrieve wmb info from vault
id: import-secrets-wmb
uses: hashicorp/vault-action@v3.1.0
with:
url: ${{ secrets.VAULT_ADDR }}
method: approle
roleId: ${{ secrets.VAULT_ROLE_ID }}
secretId: ${{ secrets.VAULT_SECRET_ID }}
secrets: |
kv/data/pipeline/wmb WMB_URL ;
kv/data/pipeline/wmb WMB_PASSWORD
exportEnv: true
Then, access the secrets in the job like this:
- name: Notify IRC on Success
run: |
export COMMIT_MSG=$(git log -1 --pretty=%B)
export MESSAGE="Build and push of ghcr.io/${{ github.repository }}:staging completed with commit message: $COMMIT_MSG. See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
curl -X POST -H "Content-Type: application/json" -d "{\"message\": \"$MESSAGE\", \"password\": \"${{ steps.import-secrets-wmb.outputs.WMB_PASSWORD }}\", \"colourcode\": 3}" ${{ steps.import-secrets-wmb.outputs.WMB_URL }}
if: success()
- name: Notify IRC on Failure
run: |
export COMMIT_MSG=$(git log -1 --pretty=%B)
export MESSAGE="Build and push of ghcr.io/${{ github.repository }}:staging failed with commit message: $COMMIT_MSG. See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
curl -X POST -H "Content-Type: application/json" -d "{\"message\": \"$MESSAGE\", \"password\": \"${{ steps.import-secrets-wmb.outputs.WMB_PASSWORD }}\", \"colourcode\": 4}" ${{ steps.import-secrets-wmb.outputs.WMB_URL }}
if: failure()
So in summary for accessing the secrets, put in {{ steps.import-secrets-wmb.outputs.WMB_URL }} and {{ steps.import-secrets-wmb.outputs.WMB_PASSWORD }} to access inside other steps of the job.
The biggest thing I noted was needing to add the ; and have each secret on a newline when accessing multiple secrets, specifically
secrets: |
kv/data/pipeline/wmb WMB_URL ;
kv/data/pipeline/wmb WMB_PASSWORD
And now just set the VAULT_ADDR, VAULT_ROLE_ID, and VAULT_SECRET_ID in the repo secrets for GH actions, and you're good to go.
2025-01-15 9:00am ADT
Lots of misguided information out there right now on how to make Admob work with Expo (as of January 2025, to be specific. Expo 52). And all the LLMs will run you around in a circle.
For one, don't use the expo-ads-admob package - it's deprecated on the latest expo version.
You also do NOT need to eject from expo to use Admob, which is also a deprecated way of doing things. You do however, have to run on Android/iOS vs using Expo go over wifi - which sorts sucks, but a quick USB-C cable to your phone and you're good to go.
To start, add this to your app.json file:
{
"expo": {
...
"plugins": [
"expo-router",
...
[
"react-native-google-mobile-ads",
{
"androidAppId": "ca-app-pub-xxxx",
"iosAppId": "ca-app-pub-xxx"
}
]
],
...
Next, npx expo install react-native-google-mobile-ads to install the required package.
Finally, here's a sample component to use for a small banner ad:
import React from 'react';
import { StyleSheet, View } from 'react-native';
import { BannerAd, BannerAdSize, TestIds } from 'react-native-google-mobile-ads';
interface SmallBannerAdProps {
adUnitId?: string; // Optional: Fallback to TestIds.BANNER if not provided
}
const SmallBannerAd: React.FC<SmallBannerAdProps> = ({ adUnitId }) => {
const adUnit = adUnitId || TestIds.BANNER; // Use TestIds.BANNER for testing
return (
<View style={styles.adContainer}>
<BannerAd
unitId={adUnit}
size={BannerAdSize.ANCHORED_ADAPTIVE_BANNER}
/>
</View>
);
};
const styles = StyleSheet.create({
adContainer: {
width: '100%',
marginTop: 20,
justifyContent: 'center',
alignItems: 'center',
},
});
export default SmallBannerAd;
With this, you can just add <SmallBannerAd /> to your screen and it will show a small banner ad using a test ad unit, so you won't break the terms of service by accidently displaying a real ad.
Finlly, run npx expo prebuild && npx expo run:android to build and run your app (providing it's connected via USB and setup for development) and it'll build & launch. Navigate as required to see the ad, and voila. At this point you can add in your ads as per the react-native-google-mobile-ads docs and you'll be good to go, and you didn't have to get rid of all your expo stuff.