HN user

chubs

1,829 karma
Posts37
Comments552
View on HN
www.splinter.com.au 2y ago

Neural Networks from scratch in Rust #4: Layers of neurons and backpropagation

chubs
3pts3
www.splinter.com.au 2y ago

Using Rust for multithreaded sockets to get real-time stock ticks, step-by-step

chubs
3pts0
github.com 4y ago

Sonic language: Inspired by Swift, but compiles to C so can be used anywhere

chubs
6pts3
www.splinter.com.au 5y ago

Practical examples of async/await in Swift with Xcode 13

chubs
3pts1
www.splinter.com.au 6y ago

Ask HN: Feedback on an indie app idea for native desktop blogging?

chubs
3pts8
www.splinter.com.au 6y ago

Show HN: Way folder sync to Backblaze B2 using Swift

chubs
2pts0
www.splinter.com.au 6y ago

2020 guide to hosting a HTTPS static site on AWS S3 and CloudFront

chubs
1pts1
www.crowdsupply.com 7y ago

HiFive1 RISC-V Board Rev B by SiFive

chubs
3pts0
www.splinter.com.au 8y ago

Pragmatic Reactive Programming for iOS

chubs
2pts0
www.splinter.com.au 9y ago

Show HN: I made Gondola, a media server with clients for iOS, Apple TV, and web

chubs
6pts2
www.splinter.com.au 9y ago

Swift 3 migration

chubs
1pts0
www.kickstarter.com 9y ago

Show HN: Cocoa native Slack desktop app (kickstarter)

chubs
4pts5
www.youtube.com 11y ago

A screencast series on taking an iPhone app from nothing to submitting to Apple

chubs
2pts0
news.ycombinator.com 11y ago

Ask HN: How to market a video course?

chubs
1pts0
www.splinter.com.au 11y ago

Mobile in 2014 – Year in Review

chubs
2pts0
www.splinter.com.au 12y ago

Lossy images for retina iPad apps - JPEG vs WebP

chubs
2pts0
www.splinter.com.au 12y ago

Sydney-based career options I wish I knew about when I was younger

chubs
1pts0
www.splinter.com.au 12y ago

Tactility

chubs
1pts0
www.splinter.com.au 13y ago

Programmatic UI on iOS

chubs
2pts0
www.youtube.com 13y ago

Show HN: I made some free screencasts on iOS dev, should I make more?

chubs
2pts1
www.splinter.com.au 13y ago

Behind enemy lines: 3 months as an iOS developer at Google

chubs
200pts154
news.ycombinator.com 14y ago

Ask HN: How far can you go when disparaging a competitor in your marketing copy?

chubs
2pts6
splinter.com.au 14y ago

I must be crazy

chubs
150pts118
github.com 14y ago

I just open-sourced my iOS password manager with dropbox syncing

chubs
12pts7
splinter.com.au 14y ago

Be generous.

chubs
1pts0
splinter.com.au 14y ago

'Scratch your own itch' vs 'Build what people want'

chubs
2pts2
splinter.com.au 14y ago

Dragging a side project over the finishing line, kicking and screaming.

chubs
2pts0
news.ycombinator.com 14y ago

Ask HN: Best way to derive an AES256 key from a password/passphrase?

chubs
2pts6
splinter.com.au 14y ago

My syncing apps manifesto: Dropbox + YAML = awesome

chubs
1pts0
splinter.com.au 14y ago

Marketing your work as an indie developer: well, that filament doesn't work...

chubs
3pts1

Layman, so bear with me. I'm wondering where they got the amino acids and proteins from? I was under the impressino that cells needed them to be "homochiral" to function, and the artificial 'built from scratch' amino acids are 50:50 of each chirality. In my reading of the NYTimes simplification of this story they mention that the genes were "borrowed from a virus and the ubiquitous microbe Escherichia coli". Mainly just curious how far they managed to get to the 'from scratch' goal. Or is what they've done a bit more of an assembly of bits and pieces? Cheers all.

Oh good point, I didn't think of transitive dependencies. A lot of languages i've worked with unfortunately have a 'do not check in the lockfile' culture, and a common 'blow away the lockfile when the package manager gets stuck' workflow, so that does concern me. Perhaps Cargo is better than average though, and the lockfile never needs nuking, providing this safety. This sounds like a good reason to check in the lockfile! Thanks for the response.

I recently ported an old brickout clone I made to Sokol (a C header-based game library). The whole executable is 500kb (macos), surely could be smaller with eg symbols stripped, and it has a whole 3d engine (not that i'm using much more than one custom shader to blit the screen, but it is using 3d engine infrastructure nonetheless). I was impressed that in this day and age such efficiency is still fashionable in some corners. The whole game is about 2mb zipped. Are shameless plugs allowed? If you're curious have a peek! github.com/chrishulbert/brickwarrior

To mitigate supply chain attacks like this, I've taken to specifying exact versions in my Rust cargo.toml, and when importing new crates, select the previous-to-latest version. Is this a reasonable mitigation? It bugs me that Swift deprecates the concept of specifying exact versions, it actively pushes you towards semver which leaves the door open to this.

"All I could think about was how bored I would eventually get" I used to wonder this. I read the religious answer to this relies on the concept of infinitude: what if an infinite god can invent an infinite number of exciting new... things to do?

I don't understand: Who's lending the $2B in situations like this? Wouldn't they be worried that the above situation (company gutted, then going down the drain) is going to play out and they won't get their $2B back? Or is that the root problem with this whole YC submission: banks are being hit by defaults because of this exact problem?

I largely agree with you. I used to work at Cochlear (hearing aid implants) - their "headphone" equivalents actually had neatly replaceable batteries 10 years ago, it's doable! Larger than airpods, to be sure, however i'm sure Apple could shrink them nicely. But... would anyone want the ability to replace batteries? I wouldn't know. I suspect most people misplace them before the batteries go bad.

I have a bee in my bonnet about this software complexity issue. Perhaps it takes large amounts of humility to accept that your job is fairly mundane, and only needs simple code to get the job done? I mean: who wants to turn spanners on a Toyota when you can imagine you're working for NASA, and introduce fascinating new paradigms to your work, that ultimately add complexity. I suspect that's why i've joined so many teams that have tied themselves up in knots of un-grok-able indirection. Another theory I have is that people encounter bad code, and misdiagnose it, identifying the (wrong) solution as needing a big complex architecture.

This is really disappointing. I used to have a fertility tracking app on the iOS App Store, zero data sharing, all local thus private. But, people don’t want to pay $1 for an app, and I can’t afford the marketing drive that an investor-backed company such as this has… and so we end up with situations like this. Pity :(

Anecdata: Recently spoke with a friend's son who graduated compsci a year-ish ago, he reckons none of his year got jobs, now working in a kitchen. (in australia for context). Very sad. For comparison, I graduated just after the dot-com crash, and our year mostly found jobs, just not very good ones, so maybe they're doing worse than we did. Good luck convincing anyone to study compsci any more.

I'm very positive, however note that when they mention "injection molded polypropylene composite material" - this (i think) is the same material used for Seadoo Spark jetskis. I owned one and had a minor crash, and because this material cannot be repaired, the entire hull needed replacing, it was an insurance write-off. I hope they've thought about how to make this car repairable and not 'disposable' after the first inevitable minor crash. Of course this may not be a fair comparison because jetski hulls are exposed, whereas car chassis' have panels and bumpers.

As a developer I always found these maths-first approaches to Kalman filters impenetrable (I guess that betrays my lack of knowledge, I dare cast no aspersions on the quality of these explanations!). However, if like me, it helps with the learning curve to implement it first, here's a 1-dimensional version simplified from my blog:

  function transpose(a) { return a } // 1x1 matrix eg a single value.
  function invert(a) { return 1/a }

  const qExternalNoiseVariance = 0.1
  const rMeasurementNoiseVariance = 0.1
  const fStateTransition = 1

  let pStateError = 1
  let xCurrentState = rawDataArray[0]
  for (const zMeasurement in rawDataArray) {
    const xPredicted = fStateTransition * xCurrentState
    const pPredicted = fStateTransition * pStateError * transpose(fStateTransition) + qExternalNoiseVariance
    const kKalmanGain = pPredicted * invert(pPredicted + rMeasurementNoiseVariance)

    pStateError = pPredicted - kKalmanGain * pPredicted
    xCurrentState = xPredicted + kKalmanGain * (zMeasurement - xPredicted) // Output!
  }
https://www.splinter.com.au/2023/12/14/the-kalman-filter-for...