The Curious Engineer

All blogs / Distributed systems / cloud

Advanced Web Machinery

advancedweb.hu

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

  1. Backups with Restic: 2-year retrospective
  2. NixOS first impressions: writing system-level tests
  3. Designing safer listItems and getItem permissions
  4. ESP32 time bootstrap problem
  5. My first two months using AI
  6. I'm changing my mind about serverless

2025 4

  1. Why I prefer multi-tenant systems
  2. AppSync subscriptions: waiting for start_ack can still result in missing events
  3. Closing issues because they are unplanned is bad UX
  4. Hardening with Firejail, Landlock, and bubblewrap

2019 31

  1. How to use the AWS SQS CLI to receive messages
  2. Adding continuous rendering to the PlantUML server
  3. How to paginate the AWS JS SDK using async generators
  4. How to clean up Lambda logs
  5. Differences between PUT and POST S3 signed URLs
  6. How to use S3 POST signed URLs
  7. How to use S3 PUT signed URLs
  8. Limit permissions with roles for signed URLs
  9. How to get near-realtime logs for a Terraform-managed Lambda function
  10. Cacheable S3 signed URLs
  11. Why AWS access and secret keys should not be in the codebase
  12. Taking notes on a conference with smartphone and Bluetooth keyboard
  13. Why a multi-account setup is essential for secure systems
  14. CloudFormation CLI workflows
  15. How to check if your Reserved Instances are used
  16. How Service Control Policies help to secure AWS accounts
  17. AWS: How to query the available CPU credits for t2/t3 instances
  18. AWS: How to limit Lambda and API Gateway scalability
  19. AWS: Increase instance security by allowing SSH only from your IP
  20. AWS: How to get notified on compromised credentials
  21. Optimized SPA deployment CloudFormation template
  22. How to automate development tasks using NPX
  23. Keep costs under control when using t3 instances
  24. AWS: How to secure access keys with MFA
  25. Managing EC2 servers at scale: Ansible and RunCommand
  26. AWS: How to get notified on IAM user logins
  27. AWS: How to get notified on root account login
  28. The rocky path to delete an AWS Organizations member account
  29. How to use the PhysicalResourceId for CloudFormation Custom Resources
  30. Custom resources in CloudFormation templates: Lessons learned
  31. How to manage S3 Objects in CloudFormation templates

2018 35

  1. How to manage custom CloudFormation resources with Lambda
  2. The anatomy of a CloudFormation template with a simple Lambda function
  3. Customizable monitoring script on AWS Lambda
  4. How to secure different types of CloudFront origins
  5. How Origin Access Identity works
  6. The differences between S3 and CloudFront signed URLs
  7. How to use S3 signed URLs with CloudFront
  8. How CloudFront signed URLs work
  9. How S3 Signed URLs work
  10. How to handle mixed content with CSP
  11. How I failed to implement CSP
  12. How to securely check your LastPass vault against the Pwned Passwords database
  13. How to compare file revisions with fugitive.vim
  14. Dive into Git history with fugitive.vim
  15. Why certificate pinning with HPKP is a bad idea
  16. HTTPS security best practices
  17. How to use Let's Encrypt with Node.js and Express
  18. Using Let's Encrypt with Supervisor
  19. Supervisor with Docker: Lessons learned
  20. Let's Encrypt hooks use cases
  21. Working with the system clipboard in Vim
  22. When to use Let's Encrypt's webroot and standalone authorization
  23. Let's Encrypt tips
  24. Getting started with Let's Encrypt
  25. Tips on window management in Vim
  26. Use last-position-jump to recover context after reopening a file with Vim
  27. The need for an additional refactor phase in TDD
  28. Two ways of skipping tests in Maven
  29. Best practices on how to work with collections in Javascript
  30. Dependency Injection Boundaries
  31. What to expect when you decide to migrate from Javascript to Typescript
  32. JUnit and Cucumber test reports based on source code and behavior
  33. Introducing: Array#Extras email course
  34. Effective debugging with breakpoints
  35. Reuse code with domain-specific steps in collection pipelines

2017 25

  1. The silver bullet of collection pipelines: Functional composition
  2. Demystifying chaining in Javascript
  3. Where Array#Extras fall short
  4. Effective print debugging
  5. Ditch for loops. Here is a case study to convince you
  6. Better collection processing with collection pipelines
  7. End-to-end manual verification
  8. Listen to your code: Problem-solving techniques in programming
  9. 2 cases where Babel fixes your code but it shouldn't
  10. Generators and ImmutableJS
  11. Generators in Javascript
  12. Use Persistent Undo in Vim for maximum comfort
  13. Never lose a change again: Undo branches in Vim
  14. Iterables in Javascript
  15. Iterators in Javascript
  16. How to create a good Pull Request
  17. Introducing: Weekly JS Tips & Tricks
  18. 3 ways to set up author information in Git
  19. How to create a Theme Plugin for Magento
  20. Profile-based optimization techniques in the JVM
  21. Why Webpack 2's Tree Shaking is not as effective as you think
  22. Getting started with Browserify
  23. Copy-pasting in Vim without +clipboard
  24. JSPM basics and review
  25. Managing Scala projects in Vim with Ag and Ctags

2016 24

  1. Why Bower is still relevant
  2. Frontend dependencies without tools
  3. 3 Common Cucumber Mistakes You've Probably Made
  4. One year with Vim
  5. Lessons learned from using xmonad for a year
  6. Parallel Processing in JS
  7. JVM JIT optimization techniques - part 2
  8. Simulating movement with ES6 generators
  9. Infinite collections with ES6 generators
  10. JVM JIT optimization techniques
  11. More readable Javascript without variables
  12. Fully automated dockerized Let's Encrypt reverse proxy
  13. Using Java Generics to express variance of Collections and Functions
  14. Proper random numbers in Javascript
  15. A brief overview of hack.summit() 2016 (part 3)
  16. Dealing with async in React
  17. Detecting errors in the browser with Selenium
  18. A brief overview of hack.summit() 2016 (part 2)
  19. A brief overview of hack.summit() 2016 (part 1)
  20. Getting started with OpenCV for Java on Ubuntu
  21. The first steps from Grunt to Webpack
  22. Git to track local history, without a remote
  23. Custom CSS animations in React
  24. Global listener patterns in React

2015 28

  1. Unbroken windows - overengineering in the name of clean code
  2. React basics
  3. A tale of two development competitions
  4. 5 Productivity Power Tools for Software Development on Linux
  5. Crazy Search Results in Eclipse for Multiple Module Maven Projects
  6. Walkthrough for a TDD Kata in Eclipse
  7. Some thoughts on managing small development teams
  8. Static HTTP preview server using Docker
  9. Automated tests with Eclipse using MoreUnit
  10. Revisiting webapp performance on HTTP/2
  11. Scott: detailed failure reports and hassle free assertions for Java tests
  12. A solution to Codility Kalium
  13. Isolating scripts on a page
  14. A simple proxy to circumvent the SOP
  15. Calm assertions with Spock
  16. Historical monitoring on AWS
  17. Scala development in Vim
  18. Accessing Google Drive in Javascript
  19. Using Google auth in Javascript
  20. Animated failure reports with Selenium and Cucumber
  21. Deploying Docker images via SSH
  22. Why you should care about Vim
  23. MathJax processing on the server-side
  24. Quick and dirty way to build PhantomJS2 from source
  25. Log review guided by tests
  26. Detecting possibly duplicate Strings
  27. Testing for undesired log output
  28. Efficient SQLite backup on Android

2014 7

  1. Attached Maven tests with Cucumber
  2. Practical measurement of the Android Backup Manager
  3. Running LP optimisation from Javascript
  4. Running LP and IP optimisation from Java
  5. Plotting charts with SVG
  6. Integrating Facebook Comment Count Sum
  7. Integrating Facebook Comments

Undated 300

  1. How to use unique resource names with terraform
  2. Aws config notifications with cloudwatch events
  3. How to route to multiple origins with cloudfront
  4. Magento 2 programmatically recreate the missing catalog search index table
  5. How to use api gateway with cloudfront
  6. How to use lambda edge with terraform
  7. Working with structured data in java
  8. How to define lambda code with terraform
  9. How to reproduce a lambda functions environment variables locally
  10. Encryption in the cloud
  11. Seamless s3 encryption does not imply better security
  12. Is access control allow origin star insecure
  13. How to setup cors for lambda proxy integration
  14. How cloudfront solves cors problems
  15. How to target subscribers in an sns topic
  16. How to run a build script with terraform
  17. How to deploy a single page application with terraform
  18. Prototyping with jshell
  19. How to integrate plantuml into other software
  20. How to solve cors problems when redirecting to s3 signed urls
  21. Using external libraries in jshell
  22. How to manage lambda log groups with terraform
  23. Automatically schedule emails on mailchimp with rss and aws lambda
  24. How to lazy load and initialize elements using an intersection observer
  25. Asynchronous array functions in javascript
  26. How to use async functions with array reduce in javascript
  27. How to use async functions with array map in javascript
  28. How to use async functions with array foreach in javascript
  29. How to use async functions with array filter in javascript
  30. How to bash and jq generate statistics for a rest api
  31. How to use async functions with array some and every in javascript
  32. Comparing async javascript functions and callbacks on aws lambda
  33. Secure tempfiles in nodejs without dependencies
  34. Debugging bash scripts
  35. Easily run cli commands as an aws role with awsudo
  36. How to refactor a promise chain to async functions
  37. Avoid excessive costs and save money with s3 storage classes
  38. Unit testing bash scripts
  39. How to mock in bash tests
  40. What is the optimal password length
  41. How to use the aws apigatewayv2 api to add an http api to a lambda function
  42. Function tests in bash and the errexit mode
  43. Are s3 signed urls secure
  44. How to change a blogs permalinks and not lose all organic traffic
  45. Testing bash scripts with the bats testing framework
  46. Tips to debug nodejs inside docker
  47. Refresh the browser when a text appears on the terminal
  48. Generating a crossfaded slideshow video from images with ffmpeg and melt
  49. How to use async functions with gapi the google drive client and the file picker
  50. The consequences of memory allocation size for a lambda function
  51. How to completely lock down an aws account with a service control policy scp
  52. How to add https for an s3 bucket website with cloudflare
  53. How to route to an arbitrary s3 bucket website with cloudflare workers
  54. Aws iam deep dive identity based and resource based policies
  55. What is cname flattening and how it helps redirecting the apex domain
  56. How to use a custom domain on cloudfront with cloudflare managed dns
  57. How to use a custom domain with cloudfront and route53
  58. How to use async await with postmessage
  59. How to manage iam user passwords
  60. How cloudfront routing works
  61. How cloudfront speeds up content delivery
  62. How cloudfront determines the origin request url
  63. The aws account administrators guide to mfa
  64. Granularity levels in aws iam policies
  65. Aws iam deep dive how iam users and groups work
  66. Aws iam deep dive how the policy evaluation logic works
  67. How to debug cloudfront origin requests
  68. Iam policy evaluation logic explained with examples
  69. How to use a break glass role for sensitive admin tasks
  70. Interactive api documentation using swagger ui deployed with terraform
  71. How to implement a lambda backend based on openapi
  72. How to use openapi to deploy an api gateway http api
  73. Aws iam deep dive how roles work
  74. How to use openapi with api gateway rest apis
  75. Use cases for iam roles
  76. How to add timeout to a promise in javascript
  77. How to handle timeouts in lambda functions
  78. How to use sri hashes to secure third party dependencies
  79. How to serialize calls to an async function
  80. How to cache ssm getparameter calls in a lambda function
  81. How firefoxs https only mode solves the first insecure request problem
  82. What is the async disposer pattern in javascript
  83. Encryption options for s3 objects
  84. My aws wishlist
  85. Rxjs the differences between first take 1 and single
  86. Rxjs how to use startwith with pairwise
  87. What is the principle of least privilege and why its such a hard thing to achieve
  88. Rxjs how to make an ordered mergemap operator
  89. How to test with a live domain name for free
  90. How to implement an exponential backoff retry strategy in javascript
  91. How to use dynamodb batch write with retrying and exponential backoff
  92. What is end to end encryption and why its such a confusing term
  93. How to clear a dynamodb table
  94. How to speed up puppeteer scraping with parallelization
  95. How to convert between callbacks and promises in javascript
  96. How to properly implement unique constraints in dynamodb
  97. Ec2 vpc building blocks
  98. How to use cfn init to set up ec2 instances with cloudformation
  99. How to fix the profile support in the aws js sdk v3
  100. Aws js sdk v3 first impressions
  101. How to keep accurate counts in dynamodb
  102. How serverless cold starts change best practices
  103. How to write a webpack loader
  104. Aws architecture icons in an npm package
  105. The async lazy initializer pattern in javascript
  106. How to implement a persistent file based cache in node js
  107. 3 genius visual data extraction attacks in javascript
  108. How to use cloudfront trusted key groups parameter and the trusted key group terraform resource
  109. What is the await statement in javascript
  110. Getting started with the jest javascript testing framework
  111. 9 tips for working with aws iam
  112. How to integrate a containerized application with the elastic stack
  113. How to use cloudfront functions to change the origin request path
  114. Introducing aws iam masterclass video course
  115. How syncthing provides secure file syncing without sharing your files with a third party
  116. Lambda development toolbox cli logs watcher
  117. Why use a single domain for the backend and the frontend
  118. How authentication and authorization work in aws
  119. Lambda development toolbox set environment variables locally
  120. How to avoid uncaught async errors in javascript
  121. Do not use fs sync methods in javascript use fs promises instead
  122. Introducing async await in javascript video course
  123. Aws security case study hardcoded credentials
  124. Aws security case study unprotected logs
  125. How to add cognito login to a website
  126. How to integrate with elastic stack via logstash
  127. Aws security case study vulnerable roles
  128. How to secure the cognito login flow with a state nonce and pkce
  129. How to use the refresh token with cognito
  130. How token revocation works in cognito
  131. How to configure cloudfront for the html5 history api
  132. Cloudfront cache problems and how to solve them
  133. What is aws appsync
  134. Aws appsync getting started
  135. Foreign key constraints in dynamodb
  136. What are resolvers in appsync and how they work
  137. How to maintain database consistency in dynamodb
  138. Anatomy of an appsync resolver
  139. How to use lambda resolvers with appsync
  140. How to use dynamodb with appsync
  141. Pipeline resolvers in appsync
  142. Custom aggregations in logstash with the ruby filter plugin
  143. Appsync cognito directives
  144. How to use cognito with appsync
  145. How to periodically call a lambda function
  146. How to implement access control in a graphql api
  147. How to delay calling a lambda function using step functions
  148. How to use es6 modules and top level await in aws lambda
  149. Deploy a serverless telegram bot to aws using terraform
  150. Error handling in appsync
  151. Intro to appsheet
  152. Send notifications to a telegram bot for events in an aws account
  153. Real time data with appsync subscriptions
  154. How to run npm ci from terraform
  155. How to configure auth0 with aws appsync
  156. How to implement access control for a telegram bot
  157. How to use lambda authorization with appsync
  158. How to implement rate limiting for an appsync api
  159. The easiest way to set up a chat with your telegram bot
  160. How to write a simple systemd timer
  161. How to hash passwords and when not to
  162. How to save entered values in bash
  163. How to add a custom domain to an appsync api
  164. How to monitor syncthing
  165. How to set up amazon rds password rotation with terraform
  166. How iam permissions work with appsync
  167. How to remove the rds master user password from the terraform state
  168. How to run sql scripts against the rds data api with terraform
  169. How to resolve complex types with appsync resolvers
  170. The surprising properties of dynamodb pagination
  171. Efficient filtering in dynamodb
  172. How to use rds as a data source for appsync
  173. Use the http data source to interact with http apis directly from appsync
  174. How to call a protected external api using appsync http data source
  175. How to call api gateway from appsync with iam authorization
  176. Modeling common graphql patterns in dynamodb
  177. How to send notifications to sns sqs and eventbridge from appsync
  178. How to read values from ssm parameter store and secrets manager with appsync http data source
  179. Intro to lucene
  180. How to interact with iot core shadows from appsync
  181. How to migrate to cloudfront origin access control from origin access identity
  182. How to sign verify and encrypt jwts in node
  183. How to invoke a mutation with appsyncs http data source
  184. What is the identity in the appsync resolver context
  185. How to generate an https certificate with node forge
  186. How to escape inputs in appsync resolvers
  187. How to resolve interfaces and union types in appsync
  188. How to use ssm parameter store for sensitive inputs in terraform
  189. How to use appsync enhanced subscription filtering
  190. Getting started with the aws js sdk v3 included in the node runtime
  191. How totp works
  192. Sns to appsync subscription
  193. The basic building blocks of aws iot core
  194. How to manage iot core resources with terraform
  195. How to connect to aws iot core with mqtt js
  196. Basic aws iot core policy example and breakdown
  197. How to generate iot core certificates with terraform
  198. How to use topic rules to react to mqtt messages in aws iot core
  199. First experiences with the new appsync javascript resolver runtime
  200. Efficient multi level pagination in graphql
  201. How to implement file uploads to an appsync api
  202. Tls certificates in iot core
  203. How to serve files from an appsync api using s3 signed urls
  204. Intro to purescript for typescript developers
  205. How to detect device connection and disconnection in aws iot core
  206. Announcing building graphql apis with aws appsync book finished
  207. Lets build a simple mqtt echo on aws iot core
  208. How to provide information about the backend environment to frontend clients
  209. Cloudfront function to support html5 history api
  210. Terraform module to generate secret values and store in ssm parameter store
  211. How to generate keys for cloudfront url signing with terraform
  212. How to use the aws lambda streaming response type
  213. Announcing s3 and cloudfront signed urls first public release
  214. Cloudfront function to remove part of the request path
  215. How to use cloudfront signed urls
  216. A categorized list of all java and jvm features since jdk 8 to 21
  217. New language features since java 8 to 21
  218. How to use kms keys with cloudfront signed urls
  219. How to return a static file with a cloudfront function
  220. How to securely generate and store iam secret access keys with terraform
  221. The effects of not maintaining consistency with dynamodb
  222. Stable s3 signed urls
  223. The problems with implicit aws resources
  224. How to remove a resource before creating it with the cdk
  225. How to use cloudfront signed cookies to serve mpd or hls videos
  226. Modern javascript library starter
  227. Using worker pools in nodejs
  228. How to transfer binary data efficiently across worker threads in nodejs
  229. Hard to debug unhandled rejection cases
  230. First experiences with nix shell
  231. Dynamodb basic operations
  232. Fooled by encryption
  233. How to use tagged templates in appsync to send queries to rds
  234. Git tips and tricks
  235. Hardcoded assumptions
  236. Introducing subscriptions to books and courses
  237. How cognito user pools work
  238. Samesite cookies and csrf vulnerabilities
  239. The slow evolution of appsync rds support
  240. Cloudfront supports oac for lambda except it does not
  241. My notes on if youre using polyfill io code on your site like 100 000 are remove it immediately
  242. Aws adds passkeys support warns root users must enable mfa
  243. My notes on visual studio code extensions are much less secure than browser extensions or even npm packages
  244. My notes on the security concerns of a javascript sandbox with the node js vm module
  245. Notes on subdomain takeover ignore this vulnerability at your peril
  246. My notes on the trough of despair
  247. Notes on dynamodb now supports cross account access but is that a good idea
  248. My notes on things you wish you didnt need to know about s3
  249. Notes on why swifts type checker is so slow
  250. Notes on navigating corporate giants jeffrey snover and the making of powershell
  251. How to auto disable leaked iam credentials
  252. Notes on review your own prs
  253. Notes on hardest problem in computer science centering things
  254. Fun fact you can make an unsubscribable subscription to an sns topic
  255. Cloudformations zipfile still does not support esm imports
  256. Dataset preparation for training a neural text to speech model with piper tts
  257. The hidden cost multiplier of fixed price cloud resources
  258. Aws management account starter pack
  259. Apollos subscribetomore is the wrong abstraction
  260. Cloudtrails horrible developer experience
  261. Graphql non nullable fields can lead to cascading null errors
  262. The twists of the ballmer puzzle
  263. How things work matters
  264. Graphql tip have the subscription types contain all filterable fields on the top level
  265. Graphql tip only make fields required if they are present for all users
  266. The new hire test
  267. Notes on software defaults
  268. Notes on engineering principles for building financial systems
  269. Notes on how secure is secure enough in aws
  270. Thoughts on using ai for coding
  271. Thoughts on unreliable computing
  272. Another smart product bites the dust
  273. My take on how aws needs to change
  274. A first look into awss new aurora dsql database
  275. How hard it is to disable an iam user when it does something suspicious
  276. Deployment circle with cloudfront and terraform
  277. Finally its possible to host ec2 instances without paying the public ipv4 price using cloudfront vpc origins
  278. Developer practices for long term product maintainability
  279. Appsync footgun util error does not work if called with non string arguments
  280. A one liner for getting the exact versions of applications
  281. Aws cdk best practice include the region in the stacks id
  282. What is the iam passrole permission in aws iam
  283. Thoughts on abstractions
  284. Javascript best practice use return await
  285. What is posse and how it changed how i use social media
  286. What is the expiredtoken error with s3 signed urls and how to avoid it
  287. The response size of an aws lambda function can be reduced with compression
  288. Bigger things are usually more complex
  289. How to install a full linux on a pendrive
  290. Aws best practice reuse the sdk clients
  291. Porting my neovim config to nix
  292. Key management and cryptography
  293. Retries are still a best practice for serverless architectures
  294. Edge cases in cloudformation
  295. Another aws footgun cognito custom attributes
  296. Aboutus
  297. Archive
  298. Books courses
  299. Dodie
  300. Weekly js tips newsletter