Avatar
Terry Yiu
2779f3d9f42c7dee17f0e6bcdcf89a8f9d592d19e3b1bbd27ef1cffd1a7f98d1
Building Yeti, Comingle, Nostr SDK for Apple Platforms, Damus, Nostash, SatsPrice

Welp, 10pm and flowers still not delivered. I know which flower delivery service not to use again.

Replying to Avatar Vivek

Hey nostr:npub1yaul8k059377u9lsu67de7y637w4jtgeuwcmh5n7788l6xnlnrgs3tvjmf

The following solution may possibly work. I am not an expert in iOS app development (in fact never done it). So, please take what I say with a pinch of salt :D

The call flow in damus goes like this from my preliminary analysis of the code on Github šŸ‘‡

```

damus.c :: parse_hashtags ==>

cursor.h :: consume_until_boundary ==>

cursor.h :: is_boundary

```

I believe the fix is to change how the `is_boundary` function is implemented in damus.

When we look at the implementation of hashtags from the other clients, the regular expression based matching does not have any check for alphanumerics, but instead just a set of 'prohibited characters' (a black list)

Amethyst regex is this:

```java

"#([^\\s!@#\$%^&*()=+./,\\[{\\]};:'\"?><]+)(.*)"

```

Snort regex is this:

```js

/(#[^\s!@#$%^&*()=+.\/,\[{\]};:'"?><]+)/

```

Both of these regexes try to just write a blacklist of chars that can't be there in a hashtag, instead of whitelisting alphanumerics.

If, in c code, we can come up with a function that will check for blacklisted characters and return a boolean, we could use this to implement international hashtags in damus too.

Not sure if my theory is correct.

I could get behind that idea. Feel free to take a stab at it.

Rebased and moved the popToRoot call to the open profile/event/search functions only. Didn’t want to touch the wallet one because I don’t understand how it’s used and what the implications are.

Saving keys from account creation still doesn’t work for me. Login with autofill does though.

Screen time at the beach. This is the way. Just don’t get sand in your laptop. (Just kidding, taking breaks are the best)

I haven’t heard of MAUI. Looks like XML UI development, which some may or may not like. Regardless, I think multiplatform frameworks are great for developers who are willing to use non-native tools to build a uniform experience that everyone can use while minimizing code duplication, as long as the look and feel seem native feeling to the end users. If someone wants to build one, I’m all for it. More client implementations mean more choices for end users, it’s great for market competition and everyone wins. I think Plebstr is multiplatform but not sure what their stack is, they’re not open source.

I started building native iOS and Android for a new app because I wanted to have experience building purely native apps (I’m usually a backend developer)

This isn’t the right way of thinking about the problem. If you’re trying to draw parallels to Bitcoin Core development, what you’re looking for is not a multiplatform Nostr super app. What you actually want is a multiplatform Nostr SDK client library and relay library that people can use to build their own experiences that conform to the protocol.

Trying to build consensus through a multiplatform super app will fail and no one will rally around that. Consensus, in this case, is achieved through conversation, not technology. The reason why Nostr has worked up to this point is because it’s an open development environment. If you try to limit what developers can do with tooling, it will fail.

If you think Android needs a good Nostr client that doesn’t deviate from the protocol in a breaking way, there are already alternatives that exist. If they aren’t living up to expectations, send feature or issue requests or bounties to the developers. If you’re a developer yourself and the client is open source, contribute pull requests.

I can’t speak to Damus going to other platforms. That’s up to Will. But in my opinion, that’s the wrong way of thinking about the problems discussed in this thread.

I spent a non-trivial amount of time unsuccessfully trying to solve it in Damus by extending the hashtag parsing code to pull in the icu4c library to leverage multilocale Unicode parsing. The API was too confusing so I stopped. Happy to have someone else try. It’s possible my approach isn’t the best.

I'm a sucker for action movies. This is one of my all-time favourites fight scenes, from Ip Man 3. The entire thing from start to finish is a masterpiece of amazing music, camera work, sound editing, and choreography. I must have watched it at least 100 times by now. https://www.youtube.com/watch?v=tQNwoX76IJs

Google is investing into Kotlin Multiplatform for Google Workspace (Docs, Sheets, etc). Their previous approach was transpiling Java down to Objective-C and JavaScript.

https://www.youtube.com/watch?v=C9gCm51RhsU

Meetup.com also built their app for event organizers from the ground up using Kotlin Multiplatform. This talk was incredible.

https://www.youtube.com/watch?v=VtFam_D1USw

All the KotlinConf 2023 talks can be found here: https://kotlinconf.com/talks/

That it’s a grassroots effort, not by some company that needs to satisfy shareholders or VCs. Built by the community for the community and everyone. Made with šŸ’œ

Watching the BlackBerry movie tonight in theaters​.

https://youtu.be/cXL_HDzBQsM

Now that’s a dope album cover.