Frederik Handberg's avatar
Frederik Handberg
npub1nj0c...2gqz
23 🇩🇰 Studying for a degree in Software Engineering while building fun projects and working freelance as a News Photographer 📷 I share my software projects, photos and videos from my work as a news photographer, and progress updates as I learn to sew garments. Basically, I just write about my hobbies. frederikhandberg.com
The big #AI companies told everyone that they could build a whole app using an #LLM. The real software developers like myself quickly found out that it was absolutely not true, unless it’s a simple little app/website. AI is definitely useful, but it still requires you to know programming if you want to build something awesome. Because of this, much of the hype has died off. There’s still hype, but people are getting much more realistic about what current LLMs are capable of. I think a lot people has gotten an app idea at some point - not only developers, but also completely normal people. The normal people were told that they could use LLMs to build their app ideas. Then they tried, and quickly figured out that it’s actually way harder and the AI still requires a lot of guidance. You can’t just write a prompt and expect the AI to give you a perfectly usable and functional app. If you don’t know how to program, you can’t read and understand the code that the AI writes, which makes it impossible to guide it in a precise way. I suppose this is the reason for why tools like Lovable are getting less Google searches. A lot of these LLM tools were made for people who couldn’t code and now those people seem to be using AI a lot less for trying to build their app ideas. Basically, they gave up, which means many AI tools are experiencing less growth and perhaps even a decline.
#Nostr is enshittification-proof. If a client or relay becomes enshittified, you have the freedom to move.
I have worked on implementing the #JSON structure for my notes app. All notes are saved as JSON files, except for the #Markdown files. Unfortunately, I have put them on a hold because I’m having too much trouble with developing the live-preview feature, so for now, I’m concentrating on JSON. I need to have a format that allows all formatting options you can think of, and defining a JSON structure allows me to build this. Markdown is too limiting, but great for really simple notes - and this is why the plan is to keep it (perhaps Asciidoc in the future as well). I have defined all the different blocks as models. Each type of supported object is its own type of block, such as text, image, video, code-block, bullet point list, checklist, etc. Each block can then have styling, but it depends on the specific block which styling is supported. For example, it doesn’t make sense to support bold formatting for an image, only for text-related blocks. I have decided to basically support all formatting options. All the way from simple things like bold and italic, to text and highlight colors, alignment (left, center, and right), etc. The rendering works, but it’s not editable yet - well, you can click options in the toolbar and that works (like clicking button to toggle bold styling), but can’t write or delete anything. Still figuring out the best way. I’m using an AttributedString and perhaps it will work well with NSTextView. First time working with AttributedString, so need to do some experimenting… View quoted note →
There’s really nothing preventing us from having algorithms on #Nostr like what’s found on Threads, X, Reddit, and so on. It’s completely doable from a development standpoint, but it's not free to run. Me personally, if I were to develop a recommendation algorithm for Nostr, I’d probably start with a service that scrapes public relays and stores all notes. Storage is cheap, especially for text, so this is not a problem. The great thing about Nostr is that everything is public, so scraping data is incredibly easy. Next, I would map user behavior by fetching all user interactions for a specific npub (the npub who wishes to use an algorithm). These interactions could be likes, replies, reposts, follows, and so on. This is to figure out what kind of content the user engages with most. I would then assign a ranking to each note (could be from 1-10) based on how closely the note matches the user’s observed interests and relationships. Notes from npubs they follow or interact with often would score higher. The same with notes that resemble content they’ve previously liked or replied to. Over time, the algorithm would adapt dynamically, so it keeps learning from new interactions. LLMs have certainly made ranking easier. **The problem:** This is the part that gets expensive (the ranking of notes), and especially when tailored to each user. View quoted note →
I have implemented a fullscreen search view in my notes app. This means, the app now has two search functions: - Search in sidebar - The fullscreen search However, the button to access the fullscreen search only appears after closing the sidebar. Because otherwise, the user can use the search function directly inside the sidebar. The UI in the fullscreen search is not finished yet. The search results should show a mini-preview of the note’s content. I also need to get the filters menu working. It can open and close, I can toggle the filters options, but the filters aren’t actually doing anything right now, as the logic has not been implemented correctly yet. I suppose it would also be a good idea to show a close button with “ESC” text, so users realize they can click `ESC` key to unfocus the search input and close fullscreen search. #dev #Swift #AppKit #macOS
Explaining what #Nostr is and the parts that make up Nostr in a non-technical way is difficult. It’s like if you where to explain to normies what email is and what it can do. Everyone knows what email is, but no one really knows it on a technical-level except for devs. Ask a normie what SMTP is and they wouldn’t know, and it’s fine, because they shouldn’t need to know. Likewise, people don’t need to know about NIPs. But very fundamental parts of Nostr that have direct impact on how the user interacts with Nostr are unavoidable for people to understand. Keypair is one example. People need to understand the use of the npub and nsec and how they should manage these (like never sharing the nsec to anyone). Maybe relay, but you can use Nostr without ever worrying about relays - depends on the specific client though. View quoted note →
Haven't tried this solution for removing menu items, but could be interesting to give a try: My current implementation does not actually replace the menu items, it just changes the function they execute. So I could make the 'Close' menu item do something completely different like opening a new window or something weird. Basically, I specify which menu item I would like to manipulate, and then call the function that should be executed. #Swift #AppKit #macOS View quoted note →
Why does it need to be so difficult replacing the default menu items in a native #macOS app??? Like, it's not because the code is super difficult and complex. In fact, the code is really simple, but there is just no documentation provided by Apple on how to manipulate the default menu items, like 'Close' in 'File' menu with the `CMD + W` shortcut. I tried using `CommandGroup(replacing: .saveItem)` and then providing the function I would like to call whenever the user clicks the shortcut `CMD + W`. But no, that didn't work. Googled with limited success, but eventually found something useful on Stackoverflow:
I like scrolling #Nostr a lot more than scrolling the mainstream social networks. I think it’s more philosophical rather than the content that I find on Nostr. Because I can find much more content related to my interests (tech, programming, sewing, nature) on other platforms (Instagram, Threads, Reddit) than on Nostr. But it just feels good using Nostr knowing that I’m supporting a protocol standing for freedom rather than a centralized platform who seeks to capture their users attention to make them doomscrolling all day long. I despise their business practices. But of course, I understand why they work that way. They just seek the most amount of profit. This is probably why they (especially Meta) are pushing AI generated “content”, because humans aren’t producing enough, but AI can generate an infinite amount. I can only hope that people dislike it so much, they end up using the platforms less…
In general, I dislike the cross-platform frameworks. I just find them to always be lacking something. Whether it’s Flutter that uses a “game-engine” and therefore behaves in strange ways on iOS, React Native that has some pretty massive sizes because of the heavy dependencies, or whatever other framework it might be… Nothing beats a completely native app in terms of user experience. Though the developer experience can be trash on native, and better on frameworks, like Flutter which has hot reload while Xcode doesn’t… come on Apple 🙄 View quoted note →
I guess they never heard about AI lying and making up stuff... Not sure how that's possible though. I feel like it's pretty common knowledge that AI can't be trusted.
The pallet finally arrived today with the ironing equipment, which means, I now have everything I need to begin my #sewing project 🪡 **First project:** Sewing a t-shirt.
I have worked on implementing tabs and I think I'm quite happy with the result so far. I have mostly been spending my time getting the UI to look good with some animations _(the animations could use some more work though)_. It's possible to rearrange tabs by dragging a tab left and right. Simple stuff like closing a tab also works. I do need to get the shortcut `CMD + W` to work as well, so it's faster to close tabs. The home-tab cannot be closed, so when the user selects the home-tab (or there is no other tabs except home-tab) and clicks the close-shortcut, it will not close the tab, but instead close the window. **Problem:** It's only possible to drag tabs in the horizontal direction (x-axis). This means, tabs can only be dragged inside the tab-area. But ideally, it should be possible to drag tabs outside the tab-area. When doing so and releasing the tab, it should open the tab in a new window. I'm struggling a bit to get this behavior working. Funny enough, it works fine except when using a ScrollView, because then the tab will clip to the ScrollView. This means the tab will just be hidden in the UI when trying to drag it outside the ScrollView... I am switching between a normal HStack and a ScrollView depending on the amount of tabs. If there are too many tabs to show in the viewport, the app will switch over to using a ScrollView, and this is where the problem begins, because it hides the tab when trying to drag outside. Also, the switching between HStack and ScrollView can cause some glitches. #dev #SwiftUI #AppKit
Portable identities are the biggest reason why I use #Nostr. Before I started using Nostr, I was using #Mastodon, but I was really annoyed that I couldn’t just move to a new instance. Well, Mastodon is a bit complicated, because it is technically possible to move from an instance to some other instances (not all, it depends on the individual instance), but you will lose ALL of your content (posts and replies) which makes moving between instances completely useless. Why would I move instance if I lose all my stuff? With Nostr, there is no reason to worry about this. You just have your keypair and can use any client you want. You can even build your own. Coolest part is, you keep all your stuff like your posts/notes when using your Nostr identity on different clients. View quoted note →
Yeah, _at least for now_ is the important part here. They will keep trying to get this Chat Control proposal passed in the EU. Fighting for privacy rights is a never ending battle, unfortunately. View quoted note →
This mf’er is the biggest threat to online privacy in my country (Denmark), but also a huge threat to the rest of the EU because Denmark is the country really pushing Chat Control. View quoted note →
Will be interesting to see what #Canva is going to do about the #Affinity apps. They acquired the company #Serif more than a year ago. It’s no longer possible to buy or download the Affinity apps. They are gone from the website. However, they seem to have an announcement on October 30. I don’t know what to expect. Could be moving to a subscription-based model 😬 image
Their business model is getting investor money. They are not profitable and will not be anytime soon. Maybe never. They are running on the promise of AGI and later ASI. If they can’t create hype, they fail because investors lose interest at that point. It’s a hype-machine. Something Musk and Altman are excellent at. But AI is here to stay, so whether it’s OpenAI or someone else, I don’t really think it matters. Only way for OpenAI and the others to stop is if all the VC money is suddenly gone. The $20/month and $200/month subscriptions certainly aren’t generating enough money to keep the companies alive. View quoted note →