LIST

Developer experience platforms - Erik Dörnenburg

https://www.thoughtworks.com/en-gb/about-us/events/developer-experience-platforms (1) What does the business want (2) then technology takes over number of releases per day, at the financial times predict how good your IT performs good predictor for business performance Lead Time = time between committing to source control and the feature being live in production often misunderstood Architecture awkward metaphor prestige, high standing awkward: “build & walk away” most software nowadays is built, used better metaphor: “town planning” can evolve, but still have structure eg....

June 30, 2023

Model: superpower

A strength that is developed to the point that it starts to make up for weaknesses An example from me is note taking. I used to be quite decent at note-taking. It was effortless, and gave me energy, and I thought it was nothing special. I mean, it’s just note-taking, everyone can do that, right? Until I got some feedback from someone pointing it out as something not-normal. Which I found weird… And then another person mentioned it....

June 23, 2023

run taiko with brave persisting browser state

npm i taiko export TAIKO_BROWSER_PATH="/Applications/Brave Browser.app/Contents/MacOS/Brave Browser" npx taiko run.js --observe run.js const {openBrowser, goto, click, write, into, textBox} = require('taiko'); const assert = require('assert').strict; (async () => { try { await openBrowser({ args: [ "--user-data-dir=/tmp/taiko/brave-music-float", "--profile-directory=Default", ] }); let title = `some song`; let titleEncoded = encodeURIComponent(title); await goto(`https://music.youtube.com/search?q=${titleEncoded}`); } catch (error) { console.error(error); // await screenshot({path: 'error.png'}) } finally { // closeBrowser(); } })(); I also tried to get it working in my current open browser...

June 16, 2023

Model: When SRE? Mission Critical, Operable, Mutable

should we invest in SRE? a CI/CD pipeline could be critical what about 4am? what about 6am? how a team interacts with a system - day to day maintenance - fixes eg. success disaster -> scale rapidly eg. bad release -> rollback actions can be taken by someone else confidence - monitoring - procedures work how possible it is to change the application - make it more reliable - decrease cost of operation...

June 9, 2023

edit current terminal command in vim

type something in terminal then trigger the edit in vim mode ctrl x ctrl e edit stuff in vim exit vim :wq

June 6, 2023

GCP App Engine

Features auto load balancing & auto scaling managed platform updates application health monitoring application versioning traffic splitting Compute Engine vs App Engine compute E = IAAS app E = Paas, serverless Environments standard - language specific sandbox v1 - java python php go (old versions) python & php -> restricted network access + restricted libs v2 - java, python, php, node, ruby, go (newer versions) flexible - docker containers uses compute engine VMs access to background processes attach local disks Component Hierarchy !...

March 28, 2023

OAuth for Server-Side applications (oauth2 secure backend flow)

toc secure flow original without PKCE secure flow with PKCE detailed flow examples (with PKCE) secure flow original without PKCE state param prevents CSRF 1) [front-channel] browser -> my-app GET [my-app.com/login](http://my-app.com/login) **- generate random value: state** < redirect to [auth-server.com/auth](http://auth-server.com/auth) (response_type, client_id, redirect_uri, scope, **state**) 2) [front-channel] browser -> auth-server GET [auth-server.com/auth](http://auth-server.com/auth) (response_type=code, client_id, redirect_uri, scope, **state**) < redirect to [my-app.com/redirect](http://my-app.com/redirect) (code, state) 3) [front-channel] browser -> my-app/redirect GET [my-app.com/redirect](http://my-app.com/redirect) (code, **state**) **- verifies state** 4) [back-channel] my-app -> auth-server POST [auth-server....

March 25, 2023

circleci pipeline failed notification in google chat (aka gchat, hangouts)

.circleci/config.yml workflows: main: jobs: - xxx - yyy: requires: - xxx commands: notify_failure: description: Notify our gchat channel about the failure steps: - run: name: Notify failure command: ./.circleci/scripts/notify_chat_about_pipeline_failure.sh when: "on_fail" jobs: xxx: steps: - run: echo "step 1" - run: echo "step 2" - notify_failure yyy: steps: - run: echo "step a" - run: echo "step b" - notify_failure .circleci/scripts/notify_chat_about_pipeline_failure.sh #!/usr/bin/env bash message="pipeline failed: branch '$CIRCLE_BRANCH' job: $CIRCLE_JOB committer: @${CIRCLE_USERNAME} url: $CIRCLE_BUILD_URL " curl \ --request POST \ --header "Content-Type: application/json" \ --data "{\"text\":\"$message\"}" \ "$CHAT_WEBHOOK_URL" you can get the webhook url in google chat by gchat channel -> Apps & Integrations -> manage webhooks...

March 24, 2023

jest typescript test fetch

example-service.ts import { OktaAuth } from '@okta/okta-auth-js' export interface FooData { hello: string } export interface FooResult { success: boolean extraInfoForFrontend: string } export async function foo(oktaAuth: OktaAuth, data: FooData): Promise<FooResult> { const accessToken = oktaAuth.getAccessToken() try { const response = await fetch("/foo", { headers: { Authorization: `Bearer ${accessToken}`, }, }) const json = await response.json() return { success: true, extraInfoForFrontend: json.message, } } catch (err) { return { success: false, extraInfoForFrontend: 'Could not get data', } } } example-service....

March 24, 2023

Book: It's not Luck - Eliyahu M Goldratt

Quote_ are you against layoffs Business goals (aka role of the CEO)

March 23, 2023