Sign in

Hirbod

@hirbod.dev
5K followers 104 following 429 posts

SWE @expo.dev 𝝠 ⚡️ hirbod.dev 🐙 github.com/hirbod ✖️ x.com/hirbod_dev Please help my friend: gofund.me/14262c568

PostsRepliesMedia
Hirbod @hirbod.dev · 29/04/2025
I had a lot of moments reconsidering life choices or just raising alpacas instead of migrating, but it’s finally done. New architecture, @expo.dev SDK 53 (RN 0.79.1), and the fastest React Native app we’ve ever built (and I’ve ever seen!). Thanks to all contributors. Amazing achievement.
3375
Hirbod @hirbod.dev · 29/04/2025
Imagine, that change made our app the snappiest and fastest react native app I've ever seen. The fucking FPS counter is finally going up, not down when tapping a button. :D
370
Hirbod @hirbod.dev · 29/04/2025
I added a simple "fuck off" as Label and the rare bug is gone. This is just madness and a really bad default by RNGH and React Native. 2/4
240
Hirbod @hirbod.dev · 29/04/2025
I was exploring a hard to debug memory leak in react native for at least 6 hours today. Turns out that when you don't add accessibilityLabel to RectButton or Pressable, it will fucking traverse all children to find a Text node or View with accessibilityLabel. This is insane. 1/4
4364
Hirbod @hirbod.dev · 03/04/2025
He said „also example ist best of all worlds“ which I translated to „holy grail“. I am not spreading misinformation
140
Hirbod @hirbod.dev · 25/01/2025
Am I taking it too far with @swmansion.com CSS animations? It’s so fun. I am definitely pushing the limits with this example. I love REA v4. Such an amazing beta release. Mark my words: pretty sure this example will run at 60fps soon! Gist: gist.github.com/hirbod/48e45...
1240
Hirbod @hirbod.dev · 25/01/2025
Runs on @expo.dev custom dev client and @swmansion.com Reanimated v4 CSS Animations. Was 5 min initial work and a few minutes to understand sync measurement with Fabric :D If you want to play with it: gist.github.com/hirbod/dc161... The future is React Native.
3865
Hirbod @hirbod.dev · 22/01/2025
15 years...
2411
Hirbod @hirbod.dev · 22/01/2025
RIP to our beloved companion. The last six months have been incredibly difficult for our family, and now we have lost another family member. We will always cherish the memories and unconditional love you gave us. You’ll forever be in our hearts.
155221517
Hirbod @hirbod.dev · 21/01/2025
Imagine we used to write animations like this. @swmansion.com has come a long way.
070
Hirbod @hirbod.dev · 20/01/2025
Like so
      googleServicesFile:
        process.env.GOOGLE_SERVICES_PLIST ?? `${process.env.PWD}/.eas/.env/GOOGLE_SERVICES_PLIST`,
010
Hirbod @hirbod.dev · 15/01/2025
Get children they said, it will be fun they said.
140
Hirbod @hirbod.dev · 06/01/2025
I’m actually really proud so far. I know I could just use FFProbe or MediaInfoLib (WASM), but my aim was to get to the bottom of this using TS only - and it just worked™. MP4, MOV, MKV, WEBM - basically every video, audio, and ISO/IEC 23091-2:2021 mapping is supported.
120
Hirbod @hirbod.dev · 06/01/2025
I've reached feature parity across all containers. My media parser now extracts all fields and has much better performance using BitReader, DataView, and caching. I might explore streaming instead of loading the entire file into memory for parsing. 🧵
170
Hirbod @hirbod.dev · 03/01/2025
The effort it took me to come this far is indescribable. My JS parser is almost on par (at least for the most common codecs) with FFProbe. Almost all fields are now resolved. WebM/Matroska is missing color and HDR detection. Once that's done, I’ll consider AVI/TS.
1230
Hirbod @hirbod.dev · 03/01/2025
I was going back and forth with Claude on a very specific problem for like 30 minutes, and it kept getting worse with every iteration. I threatened that something "really bad" would happen if it messed up one more time, and it just gave me a working fix. What is this bullshit? 😂
240
Hirbod @hirbod.dev · 02/01/2025
Alright, I successfully extracted all the media fields I could natively pull on iOS and Android with ease, now using a fully custom media parser in TS. Next, I just need to map those cryptic codec names to more common values and add the audio bitrate (e.g., 320kbps).
160
Hirbod @hirbod.dev · 31/12/2024
My media parser processes 29 videos (2.41 GB) in ~1 second, extracting key metadata without <video />. It’s not 100% accurate yet for all fields, but it’s blazing fast, and I’m working to make it the fastest in the world!
2140
Hirbod @hirbod.dev · 24/12/2024
Reminds me of a picture I took 15 years ago from my friends puppy 😅
110
Hirbod @hirbod.dev · 15/12/2024
react-native-volume-manager is much more than a volume listener. Plays super nice with @expo.dev expo-video (not expo-av) and let you enable and disable the audio session and category, informs the OS in a way so your music can resume automatically, too. (AppState, useLayoutEffect etc)
140
Hirbod @hirbod.dev · 12/12/2024
Yes, the VSCode extension is bad, and we had to disable import sorting; it wrecked our entire codebase. We ended up adding `"organizeImports": false` to `biome.jsonc` + changes in my image. I've never heard of oxlint. We'll also need to reinstall ESLint because of the React compiler.
  "editor.codeActionsOnSave": {
    "quickfix.biome": "explicit",
    "source.organizeImports": "explicit",
    "source.sortImports": "explicit",
    "source.removeUnusedImports": "explicit"
  },
110
Hirbod @hirbod.dev · 11/12/2024
Funny thing, the upgrade to ^1.7.2 is our PR #2000
130
Hirbod @hirbod.dev · 10/12/2024
Can the Bsky Team just buy this domain already? I think I'll update my hosts file to redirect it to bsky.app. I've opened this site by mistake at least 50 times already.
030
Hirbod @hirbod.dev · 09/12/2024
Handing over a Samsung A13 to the legend @jayz.us for the upcoming LegendList and discussing features and APIs in Frankfurt :)
081
Hirbod @hirbod.dev · 05/12/2024
Discovered a bug with @expo.dev router and react-native-screens after upgrading to SDK52 (not seen with react-navigation v7). Navigating from a screen with a header to one without, containing a ScrollView, causes a layout shift when interacting with the view. github.com/expo/expo/is...
2100
Hirbod @hirbod.dev · 28/11/2024
2 crazy weird and hard to debug problems in one week are too much. Property Text doesn't exist? Why does it only happen in release mode, after it was built with EAS, not when compiled locally? We used Text by Skia here. import { Text as SkiaText } .. fixed the issue. I think its Metro or NativeWind
161
Hirbod @hirbod.dev · 25/11/2024
Merci beaucoup 🫡
020
Hirbod @hirbod.dev · 24/11/2024
We have to declare income or money transfers received from outside Germany or the EU to the @bundesbank.de. Their website and portal are absolute trash (like every German government site), and you can’t even submit declarations or reports on weekends. We call that Armutszeugnis
150
Hirbod @hirbod.dev · 21/11/2024
If you encounter inexplicable "foo of undefined" errors with @expo SDK52 in Android release mode only, ensure that you disable: EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH=0 Four hours of debugging. RIP. Unfortunately, this disables the new tree-shaking feature. CC @bacon.bsky.social
290
Hirbod @hirbod.dev · 21/11/2024
@samuel.bsky.team remember when I reported the issue with GIF? Happens on videos too. It definitely seems to trigger “pinch to zoom”. I can manually reproduce when I actually pinch the video and start dragging afterwards.
150
Hirbod @hirbod.dev · 20/11/2024
I think isStale is barely used. We have a really big codebase, and not a single use.
010
Hirbod @hirbod.dev · 18/11/2024
Here, but he is am old boy, almost 15 years, but still active :D
350
Hirbod @hirbod.dev · 18/11/2024
It’s kinda weird that I need to pull down to trigger “flick to dismiss”. It should also work when I flick up, similar to almost all Apps I know.
010
Hirbod @hirbod.dev · 17/11/2024
I am not a Threads fan (content/algo), but it’s a snappy and extremely well made App, not gonna lie. It’s super polished, physics feel so on point everywhere, and I am in love with this card. I already challenged @reactiive.io
360
Hirbod @hirbod.dev · 17/11/2024
My kids love the @swmansion.com elephants 🐘
2250
Hirbod @hirbod.dev · 17/11/2024
The „pinch“ while flick to dimiss issue is still there 😅
000
Hirbod @hirbod.dev · 17/11/2024
Rotating the device while in full screen
180
Hirbod @hirbod.dev · 15/11/2024
Finally met @danabra.mov and @samuel.bsky.team IRL! Hanging out with @notjust.dev and @tsapeta.bsky.social
4662
Hirbod @hirbod.dev · 15/11/2024
Hey there
0142
Hirbod @hirbod.dev · 14/11/2024
Actually, I’m so tired 🥱. I’ve only been sleeping about 3 hours a night for the last two weeks, and it’s starting to show. But I’m still stoked for @reactnativelondon.co.uk! I hope Londons traffic won’t let me down, need to attend Rays workshop
0120
Hirbod @hirbod.dev · 12/11/2024
See you in London guys! 🙏
3101
Hirbod @hirbod.dev · 11/11/2024
I’ll start a little QA thread with findings and ideas if you don’t mind @samuel.bsky.team Disabling horizontal bouncing on the filter scrollview will make it play nicely with fullScreenGestureEnabled. My finger always hits this area when I try to swipe back. Imho that bounce adds no value
4150
Hirbod @hirbod.dev · 11/11/2024
@samuel.bsky.team if I’d work for Bsky, I’d remove the white status bar on my first day and make it translucent, as it was intended to be used 😅
280
Hirbod @hirbod.dev · 11/11/2024
The app screen’s got moves! It’s like it joined a dance party without asking us to DJ.
4260
Hirbod @hirbod.dev · 10/11/2024
When I flick to dismiss, the GIF changes from square to full screen portrait
110
Hirbod @hirbod.dev · 08/11/2024
Secret Expert tip: It's amazing how much FPS you gain on @expo.dev / React Native by rendering directly with `RCTText` and `RCTView` - huge boosts for lists and initial mount time. We migrated many surfaces, seeing up to 20-30 extra FPS in performance gains! gist.github.com/hirbod/03d48...
4474
Hirbod @hirbod.dev · 07/11/2024
Looks good imo.
240
Hirbod @hirbod.dev · 07/11/2024
Pro RN tip: If your app contains many images or videos, memory can deplete faster than usual. Treat this as an "extra", not a solution—use memory wisely by optimizing images and caching options. A config plugin for Android and an app.json flag for iOS. @expo.dev EAS also supports this entitlement!
const { withAndroidManifest } = require('@expo/config-plugins')

module.exports = function withAndroidLargeHeap(config) {
  return withAndroidManifest(config, async (config) => {
    config.modResults.manifest.application[0].$['android:largeHeap'] = 'true'

    return config
  })
}
"ios": {
  "entitlements": {
    "com.apple.developer.kernel.increased-memory-limit": true
  },
}
3474
Hirbod @hirbod.dev · 07/11/2024
What really helps with big multimedia apps (lots of videos, images etc), which BlueSky is or will be, is increasing heap with my config plugin and adding ios.entitlements: { 'com.apple.developer.kernel.increased-memory-limit': true } To your app config
070
Hirbod @hirbod.dev · 07/11/2024
Profiling with Android Studio. Since the light box isn’t a surface that stays mounted for a long time, the memory should free up after unmounting, but I’d still profile and check if memory is correctly freed up after usage.
130