All blogs / Distributed systems / cloud
Advanced Web Machinery
Distributed systems / cloudDevOps / SRE / infrastructureJavaScript / TypeScriptEngineering blogs
- Posts
- 460 from 30 Sep 2014 to 22 Jun 2026
- Posting
- monthly (10 in the last year)
- Kind
- personal blog
- Feed
- https://advancedweb.hu/atom.xml
2026 6
2025 4
2019 31
- How to use the AWS SQS CLI to receive messages
- Adding continuous rendering to the PlantUML server
- How to paginate the AWS JS SDK using async generators
- How to clean up Lambda logs
- Differences between PUT and POST S3 signed URLs
- How to use S3 POST signed URLs
- How to use S3 PUT signed URLs
- Limit permissions with roles for signed URLs
- How to get near-realtime logs for a Terraform-managed Lambda function
- Cacheable S3 signed URLs
- Why AWS access and secret keys should not be in the codebase
- Taking notes on a conference with smartphone and Bluetooth keyboard
- Why a multi-account setup is essential for secure systems
- CloudFormation CLI workflows
- How to check if your Reserved Instances are used
- How Service Control Policies help to secure AWS accounts
- AWS: How to query the available CPU credits for t2/t3 instances
- AWS: How to limit Lambda and API Gateway scalability
- AWS: Increase instance security by allowing SSH only from your IP
- AWS: How to get notified on compromised credentials
- Optimized SPA deployment CloudFormation template
- How to automate development tasks using NPX
- Keep costs under control when using t3 instances
- AWS: How to secure access keys with MFA
- Managing EC2 servers at scale: Ansible and RunCommand
- AWS: How to get notified on IAM user logins
- AWS: How to get notified on root account login
- The rocky path to delete an AWS Organizations member account
- How to use the PhysicalResourceId for CloudFormation Custom Resources
- Custom resources in CloudFormation templates: Lessons learned
- How to manage S3 Objects in CloudFormation templates
2018 35
- How to manage custom CloudFormation resources with Lambda
- The anatomy of a CloudFormation template with a simple Lambda function
- Customizable monitoring script on AWS Lambda
- How to secure different types of CloudFront origins
- How Origin Access Identity works
- The differences between S3 and CloudFront signed URLs
- How to use S3 signed URLs with CloudFront
- How CloudFront signed URLs work
- How S3 Signed URLs work
- How to handle mixed content with CSP
- How I failed to implement CSP
- How to securely check your LastPass vault against the Pwned Passwords database
- How to compare file revisions with fugitive.vim
- Dive into Git history with fugitive.vim
- Why certificate pinning with HPKP is a bad idea
- HTTPS security best practices
- How to use Let's Encrypt with Node.js and Express
- Using Let's Encrypt with Supervisor
- Supervisor with Docker: Lessons learned
- Let's Encrypt hooks use cases
- Working with the system clipboard in Vim
- When to use Let's Encrypt's webroot and standalone authorization
- Let's Encrypt tips
- Getting started with Let's Encrypt
- Tips on window management in Vim
- Use last-position-jump to recover context after reopening a file with Vim
- The need for an additional refactor phase in TDD
- Two ways of skipping tests in Maven
- Best practices on how to work with collections in Javascript
- Dependency Injection Boundaries
- What to expect when you decide to migrate from Javascript to Typescript
- JUnit and Cucumber test reports based on source code and behavior
- Introducing: Array#Extras email course
- Effective debugging with breakpoints
- Reuse code with domain-specific steps in collection pipelines
2017 25
- The silver bullet of collection pipelines: Functional composition
- Demystifying chaining in Javascript
- Where Array#Extras fall short
- Effective print debugging
- Ditch for loops. Here is a case study to convince you
- Better collection processing with collection pipelines
- End-to-end manual verification
- Listen to your code: Problem-solving techniques in programming
- 2 cases where Babel fixes your code but it shouldn't
- Generators and ImmutableJS
- Generators in Javascript
- Use Persistent Undo in Vim for maximum comfort
- Never lose a change again: Undo branches in Vim
- Iterables in Javascript
- Iterators in Javascript
- How to create a good Pull Request
- Introducing: Weekly JS Tips & Tricks
- 3 ways to set up author information in Git
- How to create a Theme Plugin for Magento
- Profile-based optimization techniques in the JVM
- Why Webpack 2's Tree Shaking is not as effective as you think
- Getting started with Browserify
- Copy-pasting in Vim without +clipboard
- JSPM basics and review
- Managing Scala projects in Vim with Ag and Ctags
2016 24
- Why Bower is still relevant
- Frontend dependencies without tools
- 3 Common Cucumber Mistakes You've Probably Made
- One year with Vim
- Lessons learned from using xmonad for a year
- Parallel Processing in JS
- JVM JIT optimization techniques - part 2
- Simulating movement with ES6 generators
- Infinite collections with ES6 generators
- JVM JIT optimization techniques
- More readable Javascript without variables
- Fully automated dockerized Let's Encrypt reverse proxy
- Using Java Generics to express variance of Collections and Functions
- Proper random numbers in Javascript
- A brief overview of hack.summit() 2016 (part 3)
- Dealing with async in React
- Detecting errors in the browser with Selenium
- A brief overview of hack.summit() 2016 (part 2)
- A brief overview of hack.summit() 2016 (part 1)
- Getting started with OpenCV for Java on Ubuntu
- The first steps from Grunt to Webpack
- Git to track local history, without a remote
- Custom CSS animations in React
- Global listener patterns in React
2015 28
- Unbroken windows - overengineering in the name of clean code
- React basics
- A tale of two development competitions
- 5 Productivity Power Tools for Software Development on Linux
- Crazy Search Results in Eclipse for Multiple Module Maven Projects
- Walkthrough for a TDD Kata in Eclipse
- Some thoughts on managing small development teams
- Static HTTP preview server using Docker
- Automated tests with Eclipse using MoreUnit
- Revisiting webapp performance on HTTP/2
- Scott: detailed failure reports and hassle free assertions for Java tests
- A solution to Codility Kalium
- Isolating scripts on a page
- A simple proxy to circumvent the SOP
- Calm assertions with Spock
- Historical monitoring on AWS
- Scala development in Vim
- Accessing Google Drive in Javascript
- Using Google auth in Javascript
- Animated failure reports with Selenium and Cucumber
- Deploying Docker images via SSH
- Why you should care about Vim
- MathJax processing on the server-side
- Quick and dirty way to build PhantomJS2 from source
- Log review guided by tests
- Detecting possibly duplicate Strings
- Testing for undesired log output
- Efficient SQLite backup on Android
2014 7
Undated 300
- How to use unique resource names with terraform
- Aws config notifications with cloudwatch events
- How to route to multiple origins with cloudfront
- Magento 2 programmatically recreate the missing catalog search index table
- How to use api gateway with cloudfront
- How to use lambda edge with terraform
- Working with structured data in java
- How to define lambda code with terraform
- How to reproduce a lambda functions environment variables locally
- Encryption in the cloud
- Seamless s3 encryption does not imply better security
- Is access control allow origin star insecure
- How to setup cors for lambda proxy integration
- How cloudfront solves cors problems
- How to target subscribers in an sns topic
- How to run a build script with terraform
- How to deploy a single page application with terraform
- Prototyping with jshell
- How to integrate plantuml into other software
- How to solve cors problems when redirecting to s3 signed urls
- Using external libraries in jshell
- How to manage lambda log groups with terraform
- Automatically schedule emails on mailchimp with rss and aws lambda
- How to lazy load and initialize elements using an intersection observer
- Asynchronous array functions in javascript
- How to use async functions with array reduce in javascript
- How to use async functions with array map in javascript
- How to use async functions with array foreach in javascript
- How to use async functions with array filter in javascript
- How to bash and jq generate statistics for a rest api
- How to use async functions with array some and every in javascript
- Comparing async javascript functions and callbacks on aws lambda
- Secure tempfiles in nodejs without dependencies
- Debugging bash scripts
- Easily run cli commands as an aws role with awsudo
- How to refactor a promise chain to async functions
- Avoid excessive costs and save money with s3 storage classes
- Unit testing bash scripts
- How to mock in bash tests
- What is the optimal password length
- How to use the aws apigatewayv2 api to add an http api to a lambda function
- Function tests in bash and the errexit mode
- Are s3 signed urls secure
- How to change a blogs permalinks and not lose all organic traffic
- Testing bash scripts with the bats testing framework
- Tips to debug nodejs inside docker
- Refresh the browser when a text appears on the terminal
- Generating a crossfaded slideshow video from images with ffmpeg and melt
- How to use async functions with gapi the google drive client and the file picker
- The consequences of memory allocation size for a lambda function
- How to completely lock down an aws account with a service control policy scp
- How to add https for an s3 bucket website with cloudflare
- How to route to an arbitrary s3 bucket website with cloudflare workers
- Aws iam deep dive identity based and resource based policies
- What is cname flattening and how it helps redirecting the apex domain
- How to use a custom domain on cloudfront with cloudflare managed dns
- How to use a custom domain with cloudfront and route53
- How to use async await with postmessage
- How to manage iam user passwords
- How cloudfront routing works
- How cloudfront speeds up content delivery
- How cloudfront determines the origin request url
- The aws account administrators guide to mfa
- Granularity levels in aws iam policies
- Aws iam deep dive how iam users and groups work
- Aws iam deep dive how the policy evaluation logic works
- How to debug cloudfront origin requests
- Iam policy evaluation logic explained with examples
- How to use a break glass role for sensitive admin tasks
- Interactive api documentation using swagger ui deployed with terraform
- How to implement a lambda backend based on openapi
- How to use openapi to deploy an api gateway http api
- Aws iam deep dive how roles work
- How to use openapi with api gateway rest apis
- Use cases for iam roles
- How to add timeout to a promise in javascript
- How to handle timeouts in lambda functions
- How to use sri hashes to secure third party dependencies
- How to serialize calls to an async function
- How to cache ssm getparameter calls in a lambda function
- How firefoxs https only mode solves the first insecure request problem
- What is the async disposer pattern in javascript
- Encryption options for s3 objects
- My aws wishlist
- Rxjs the differences between first take 1 and single
- Rxjs how to use startwith with pairwise
- What is the principle of least privilege and why its such a hard thing to achieve
- Rxjs how to make an ordered mergemap operator
- How to test with a live domain name for free
- How to implement an exponential backoff retry strategy in javascript
- How to use dynamodb batch write with retrying and exponential backoff
- What is end to end encryption and why its such a confusing term
- How to clear a dynamodb table
- How to speed up puppeteer scraping with parallelization
- How to convert between callbacks and promises in javascript
- How to properly implement unique constraints in dynamodb
- Ec2 vpc building blocks
- How to use cfn init to set up ec2 instances with cloudformation
- How to fix the profile support in the aws js sdk v3
- Aws js sdk v3 first impressions
- How to keep accurate counts in dynamodb
- How serverless cold starts change best practices
- How to write a webpack loader
- Aws architecture icons in an npm package
- The async lazy initializer pattern in javascript
- How to implement a persistent file based cache in node js
- 3 genius visual data extraction attacks in javascript
- How to use cloudfront trusted key groups parameter and the trusted key group terraform resource
- What is the await statement in javascript
- Getting started with the jest javascript testing framework
- 9 tips for working with aws iam
- How to integrate a containerized application with the elastic stack
- How to use cloudfront functions to change the origin request path
- Introducing aws iam masterclass video course
- How syncthing provides secure file syncing without sharing your files with a third party
- Lambda development toolbox cli logs watcher
- Why use a single domain for the backend and the frontend
- How authentication and authorization work in aws
- Lambda development toolbox set environment variables locally
- How to avoid uncaught async errors in javascript
- Do not use fs sync methods in javascript use fs promises instead
- Introducing async await in javascript video course
- Aws security case study hardcoded credentials
- Aws security case study unprotected logs
- How to add cognito login to a website
- How to integrate with elastic stack via logstash
- Aws security case study vulnerable roles
- How to secure the cognito login flow with a state nonce and pkce
- How to use the refresh token with cognito
- How token revocation works in cognito
- How to configure cloudfront for the html5 history api
- Cloudfront cache problems and how to solve them
- What is aws appsync
- Aws appsync getting started
- Foreign key constraints in dynamodb
- What are resolvers in appsync and how they work
- How to maintain database consistency in dynamodb
- Anatomy of an appsync resolver
- How to use lambda resolvers with appsync
- How to use dynamodb with appsync
- Pipeline resolvers in appsync
- Custom aggregations in logstash with the ruby filter plugin
- Appsync cognito directives
- How to use cognito with appsync
- How to periodically call a lambda function
- How to implement access control in a graphql api
- How to delay calling a lambda function using step functions
- How to use es6 modules and top level await in aws lambda
- Deploy a serverless telegram bot to aws using terraform
- Error handling in appsync
- Intro to appsheet
- Send notifications to a telegram bot for events in an aws account
- Real time data with appsync subscriptions
- How to run npm ci from terraform
- How to configure auth0 with aws appsync
- How to implement access control for a telegram bot
- How to use lambda authorization with appsync
- How to implement rate limiting for an appsync api
- The easiest way to set up a chat with your telegram bot
- How to write a simple systemd timer
- How to hash passwords and when not to
- How to save entered values in bash
- How to add a custom domain to an appsync api
- How to monitor syncthing
- How to set up amazon rds password rotation with terraform
- How iam permissions work with appsync
- How to remove the rds master user password from the terraform state
- How to run sql scripts against the rds data api with terraform
- How to resolve complex types with appsync resolvers
- The surprising properties of dynamodb pagination
- Efficient filtering in dynamodb
- How to use rds as a data source for appsync
- Use the http data source to interact with http apis directly from appsync
- How to call a protected external api using appsync http data source
- How to call api gateway from appsync with iam authorization
- Modeling common graphql patterns in dynamodb
- How to send notifications to sns sqs and eventbridge from appsync
- How to read values from ssm parameter store and secrets manager with appsync http data source
- Intro to lucene
- How to interact with iot core shadows from appsync
- How to migrate to cloudfront origin access control from origin access identity
- How to sign verify and encrypt jwts in node
- How to invoke a mutation with appsyncs http data source
- What is the identity in the appsync resolver context
- How to generate an https certificate with node forge
- How to escape inputs in appsync resolvers
- How to resolve interfaces and union types in appsync
- How to use ssm parameter store for sensitive inputs in terraform
- How to use appsync enhanced subscription filtering
- Getting started with the aws js sdk v3 included in the node runtime
- How totp works
- Sns to appsync subscription
- The basic building blocks of aws iot core
- How to manage iot core resources with terraform
- How to connect to aws iot core with mqtt js
- Basic aws iot core policy example and breakdown
- How to generate iot core certificates with terraform
- How to use topic rules to react to mqtt messages in aws iot core
- First experiences with the new appsync javascript resolver runtime
- Efficient multi level pagination in graphql
- How to implement file uploads to an appsync api
- Tls certificates in iot core
- How to serve files from an appsync api using s3 signed urls
- Intro to purescript for typescript developers
- How to detect device connection and disconnection in aws iot core
- Announcing building graphql apis with aws appsync book finished
- Lets build a simple mqtt echo on aws iot core
- How to provide information about the backend environment to frontend clients
- Cloudfront function to support html5 history api
- Terraform module to generate secret values and store in ssm parameter store
- How to generate keys for cloudfront url signing with terraform
- How to use the aws lambda streaming response type
- Announcing s3 and cloudfront signed urls first public release
- Cloudfront function to remove part of the request path
- How to use cloudfront signed urls
- A categorized list of all java and jvm features since jdk 8 to 21
- New language features since java 8 to 21
- How to use kms keys with cloudfront signed urls
- How to return a static file with a cloudfront function
- How to securely generate and store iam secret access keys with terraform
- The effects of not maintaining consistency with dynamodb
- Stable s3 signed urls
- The problems with implicit aws resources
- How to remove a resource before creating it with the cdk
- How to use cloudfront signed cookies to serve mpd or hls videos
- Modern javascript library starter
- Using worker pools in nodejs
- How to transfer binary data efficiently across worker threads in nodejs
- Hard to debug unhandled rejection cases
- First experiences with nix shell
- Dynamodb basic operations
- Fooled by encryption
- How to use tagged templates in appsync to send queries to rds
- Git tips and tricks
- Hardcoded assumptions
- Introducing subscriptions to books and courses
- How cognito user pools work
- Samesite cookies and csrf vulnerabilities
- The slow evolution of appsync rds support
- Cloudfront supports oac for lambda except it does not
- My notes on if youre using polyfill io code on your site like 100 000 are remove it immediately
- Aws adds passkeys support warns root users must enable mfa
- My notes on visual studio code extensions are much less secure than browser extensions or even npm packages
- My notes on the security concerns of a javascript sandbox with the node js vm module
- Notes on subdomain takeover ignore this vulnerability at your peril
- My notes on the trough of despair
- Notes on dynamodb now supports cross account access but is that a good idea
- My notes on things you wish you didnt need to know about s3
- Notes on why swifts type checker is so slow
- Notes on navigating corporate giants jeffrey snover and the making of powershell
- How to auto disable leaked iam credentials
- Notes on review your own prs
- Notes on hardest problem in computer science centering things
- Fun fact you can make an unsubscribable subscription to an sns topic
- Cloudformations zipfile still does not support esm imports
- Dataset preparation for training a neural text to speech model with piper tts
- The hidden cost multiplier of fixed price cloud resources
- Aws management account starter pack
- Apollos subscribetomore is the wrong abstraction
- Cloudtrails horrible developer experience
- Graphql non nullable fields can lead to cascading null errors
- The twists of the ballmer puzzle
- How things work matters
- Graphql tip have the subscription types contain all filterable fields on the top level
- Graphql tip only make fields required if they are present for all users
- The new hire test
- Notes on software defaults
- Notes on engineering principles for building financial systems
- Notes on how secure is secure enough in aws
- Thoughts on using ai for coding
- Thoughts on unreliable computing
- Another smart product bites the dust
- My take on how aws needs to change
- A first look into awss new aurora dsql database
- How hard it is to disable an iam user when it does something suspicious
- Deployment circle with cloudfront and terraform
- Finally its possible to host ec2 instances without paying the public ipv4 price using cloudfront vpc origins
- Developer practices for long term product maintainability
- Appsync footgun util error does not work if called with non string arguments
- A one liner for getting the exact versions of applications
- Aws cdk best practice include the region in the stacks id
- What is the iam passrole permission in aws iam
- Thoughts on abstractions
- Javascript best practice use return await
- What is posse and how it changed how i use social media
- What is the expiredtoken error with s3 signed urls and how to avoid it
- The response size of an aws lambda function can be reduced with compression
- Bigger things are usually more complex
- How to install a full linux on a pendrive
- Aws best practice reuse the sdk clients
- Porting my neovim config to nix
- Key management and cryptography
- Retries are still a best practice for serverless architectures
- Edge cases in cloudformation
- Another aws footgun cognito custom attributes
- Aboutus
- Archive
- Books courses
- Dodie
- Weekly js tips newsletter