Paweł Urbanek
pawelurbanek.com · Personal blog · on HN since 2018
Paweł Urbanek is a Ruby on Rails consultant who writes about Rails, PostgreSQL performance, Heroku and AWS migrations, and personal productivity.
What HN saysHN links it for Rails tips such as ActiveRecord load_async, and the author says the blog let him move into part-time consulting and side projects.
20HN people shared it
12linked it in comments
97stories submitted
1.4Kstory points
6 months agolast shared
2018people per year2026
Most-shared posts
- 1How I spend less time on YouTube4 people · 182 points · first shared 2021 · 209 comments on HN
- 2The In-depth Guide to ActiveRecord load_async in Rails 74 people · 3 points · first shared 2022 · discussion on HN
- 3Show HN: PG Extras – a set of tools for debugging PostgreSQL performance issues2 people · 17 points · first shared 2020 · discussion on HN
- 4Simple Way to Encrypt Data in Rails Without Gem2 people · 4 points · first shared 2019 · discussion on HN
- 5Migrate Your Heroku Postgres Database to AWS RDS2 people · 4 points · first shared 2020 · discussion on HN
- 6Adding GDPR Compliance to My Rails App and Technical Blog2 people · 3 points · first shared 2018 · discussion on HN
- 7How to Perform Concurrent HTTP Requests in Ruby and Rails2 people · 2 points · first shared 2020 · discussion on HN
- 8How to Setup Pi-Hole on a Local Computer Without Raspberry Pi2 people · 2 points · first shared 2020 · discussion on HN
- 9UUID Primary Key in Rails 6 with PostgreSQL and Active Record2 people · 2 points · first shared 2019 · discussion on HN
- 10How to Subscribe to YouTube Channels Without an Account2 people · 1 points · first shared 2023 · discussion on HN
- 11Heroku migrate postgres rds2 people · first shared 2020
- 12How I've built a profitable Slack bot as a side project in Rails1 people · 263 points · first shared 2018 · 34 comments on HN
- 13PostgreSQL query performance bottlenecks1 people · 249 points · first shared 2022 · 41 comments on HN
- 14Building Permanent and Censorship-Resistant Blog with Ethereum ENS and IPFS1 people · 199 points · first shared 2021 · 103 comments on HN
- 15Requests dropped when using Cloudflare’s free tier for a commercial project1 people · 177 points · first shared 2021 · 120 comments on HN
What HN people wrote when they linked it
pawurb · 2023-07-04
https://pawelurbanek.com/ it allowed me transition from full-time dev to on & off consulting and living off my side projects. I try to publish new posts at least once a month.
mike_mg · 2023-02-08
> Does anybody else feel that way?
oh yeah, sure!
2 actionable things that changed my view on this things completely:
1) Huberman lab podcast on dopamine: https://hubermanlab.com/how-to-increase-motivation-and-drive/. It's not some self help BS, all based on science, backed by publications.
TL; DR, you might be riding too high on dopamine / layering too many dopaminergic activities. You might need to lower your base dopamine level.
2) for dealing with youtube specifically, block youtube recommended. Like youtube becomes only search bar, no recommended, no follow up videos etc. Complete game-changer for me.
https://pawelurbanek.com/youtube-addiction-selfcontrol
https://news.ycombinator.com/item?id=29485064
https://news.ycombinator.com/user?id=pawurb
@pawurb, thank you for changing my life by unlocking youtube for me, without the addiction. I am very grateful.
aaws11 · 2023-02-02
here's something I use (more simpler than installing those numerous extensions and bloating your browser) for making youtube less distracting and more productive:
less addictive youtube: https://github.com/AlexisDrain/Less-Addictive-YouTube
and follow the uBlock origin instructions mentioned in this blog post:
https://pawelurbanek.com/youtube-addiction-selfcontrol
bajsejohannes · 2022-05-19
For youtube specifically, I found this great snippet for ublock origin. It removes (almost) all recommendations in youtube, which makes it much easier to quit after just one video:
www.youtube.com###secondary
www.youtube.com##ytd-browse[page-subtype="home"] #primary
www.youtube.com##.ytp-show-tiles.ytp-endscreen-paginate.videowall-endscreen.ytp-player-content.html5-endscreen
Source: https://pawelurbanek.com/youtube-addiction-selfcontrol
viraptor · 2022-08-10
New activerecord allows async queries which is pretty exciting I have to say. https://pawelurbanek.com/rails-load-async
x87678r · 2020-12-05
I dont know much about macs, but googling this looks like it should work for you. https://pawelurbanek.com/pihole-local-computer, though I'd try to use the official compose instead of his version on github. https://github.com/pi-hole/docker-pi-hole
davidverhasselt · 2020-11-12
In a similar vein, I recently purchased this ebook https://pawelurbanek.com/heroku-migrate-postgres-rds - I haven't finished it yet but I enjoy the small, edited format of it.
pipiscrew · 2023-02-16
jrochkind1 · 2022-08-10
Thanks for the anecdotal counterpoint, that is what I was looking for!
I think we're talking about different things though.
I think OP was suggesting/questioning whether a typical Rails apps may spend 90% of it's overall time in I/O.
I am suggesting the reverse, that typical Rails apps (so long as they don't have bugs where they fetch more than they need) will spend spend 60-80% of their time in CPU rather than I/O.
I am curious if this is true of shoppify's app; my guess is it still would be (especially cause I think shopify will not have very many bugs where it's fetching things inefficiently or that it doesn't need to fetch, shopify will be higher-quality than a random rails app).
You are suggesting, I think, that at shopify atypical, problem requests were always due to I/O.
I think all of this can be simultaneously true.
I think a side issue to what I'm talking about, but:
> We spent significant amounts of time finding ways to work around Rail's inability to do these sorts of things in parallel
Rails 7 actually recently introduced a feature to do multiple ActiveRecord fetches concurrently... perhaps motivated by/developed by Shopify? https://pawelurbanek.com/rails-load-async
I haven't used that one yet. In the past when I've needed to do things like external API requests in parallel, I have had success just using futures/promises from Ruby::Concurrent, without even telling Rails about it. I've had to do this only rarely, but I haven't run into too much trouble.…
tomhallett · 2021-09-30
An orthogonal migration issue which I'm hitting right now: we need to migrate from heroku postgres to aws rds postgres, and I'm stressed about the risk and potential downtime in doing so. If there was a way to make a replica in rds based on heroku, promote the rds replica to be the primary, hard switch our apps over to rds, that'd be a lifesaver.
I'm working through this blog post [1] now, but there is still a bit to be defined (including a dependency on heroku's support team) to get this rolling.
Why the migration is required? Heroku postgres doesn't support logical replication, and logical replication is required for any ELT vendor (Fivetran, Stitch, Airbyte) to use Change Data Capture to replicate data from postgres to snowflake (with replicating deleted rows efficiently).
Note: I've also read this ebook [2], but this approach requires downtime.
Note 2: I reached out to heroku support and asked if logical replication was on their short term roadmap. They said they've heard this quite a bit, but nothing tangible is on the roadmap.
If anyone has any thoughts on the above migration, I'd be all ears. :)
1) https://vericred.com/how-we-migrated-a-1tb-database-from-heroku-to-aws…
2) https://pawelurbanek.com/heroku-migrate-postgres-rds
Lio · 2020-11-20
GVL is an implementation detail rather than a feature of the language (I believe the term Global VM Lock replaced GIL in the standard library, sometime around ruby 2.0ish I think).
JRuby, for example, has no GVL including for CPU based code; everything there can run in parallel.
Even in MRI Ruby though, wrapping IO operations in a thread allows you to release the GVL when the IO operation blocks.
e.g.
5.times.map do
Thread.new do
Net::HTTP.get('example.com', '/index.html')
end
end.each(&:join)
Will perform those network requests in parallel rather than sequencially. This is how ActiveRecord can perform asynchronous database calls in parallel on MRI Ruby.
I got that HTTP example from[1], which has a good write up but it's also covered in Working with Ruby Threads by Jesse Storimer[2].
I asked the original question because in the Concurrent-Ruby Readme they discuss Ruby's mutable references and the possibility of thread safety issues because of that.[3]
1. https://pawelurbanek.com/ruby-concurrent-requests
2. https://www.goodreads.com/book/show/17826435-working-with-ruby-threads
3. https://github.com/ruby-concurrency/concurrent-ruby
termsfeed · 2018-05-14
Hopefully this helps.
> Google Analytics:
> - Declare clearly what personal information is collected in your privacy policy. Any simple boiler plate avaible ?
If you only want to disclose what kind of personal information you collect, you don't need special clauses. Simply disclose what personal information you collect.
However, a Privacy Policy should include:
- What personal information you collect
- What are you doing with that information (the purposes)
- What controls users have
- Whom you share the information with (third parties)
> Google Analytics:
> - Have a cookie consent banner for EU that is opt-in i.e. no tracking cookies are set until the user says so. Hardly anyone is doing this yet.
You can have a look at https://privacypolicies.com/cookie-consent/ as it's easy to implement with jQuery to categorize non-important cookies to not load before you get consent from users.
> Google Analytics:
> - Use anonymizeIP function in google analytics i.e. : ga('set', 'anonymizeIp', true);
Yes. This article, aimed at Rails developers, can help as well:
https://pawelurbanek.com/gdpr-compliance-blog-rails
> Google Adwords:
> - Declare clearly what personal information is collected in your privacy policy. Any simple boiler plate avaible ?
Same as above.
> Google Adwords:
> - If you are using re-marketing, either disable it or let it be known in privacy policy ?
You should disclose it in your Privacy Policy and inform users how they can opt-out from behavioral…