Search
1000 results for “im_a_GDeveloper”
-
I guess I'll do an #introduction, now that I'm here!
Howdy y'all, I'm Em.These days I'm feeling too #queer for shul here in Germany, too religious for the queer "community".
I spend a lot of time thinking about how Whiteness and White supremacism manifest in our society and minds. I'm learning to #decolonize my self and always looking for friends who actively seek the same.
I also spend a lot of time these days thinking about #phenomenology, #animism, #panentheism(/ #monism?), and #nondualism.
I'm a software developer by day, but that world is becoming less and less important to me.
My partner and I have a 70 year old steel sailboat that we're completely overhauling together, and someday we hope to set sail from #Hamburg towards wherever the wind takes us. I'll tag posts about the boat with #SVBellaCiao, you can follow that tag if you want.
Until then, come on over. Let me make you a tea. How ya doin, but I mean it, really. Whatcha thinkin about these days?
-
I cut an initial release (0.1.0-alpha) of the library automerge-repo-swift. A supplemental library to Automerge swift, it adds background networking for sync and storage capabilities. The library extends code I initially created in the Automerge demo app (MeetingNotes), and was common enough to warrant its own library. While I was extracting those pieces, I leaned into the same general pattern that was used in the Javascript library automerge-repo. That library provides largely the same functionality for Automerge in javascript. I borrowed the public API structure, as well as compatibility and implementation details for the Automerge sync protocol. One of my goals while assembling this new library was to build it fully compliant with Swift’s data-race safety. Meaning that it compiles without warnings when I use the Swift compiler’s strict-concurrency mode.
There were some notable challenges in coming up to speed with the concepts of isolation and sendability. In addition to learning the concepts, how to apply them is an open question. Not many Swift developers have embraced strict concurrency and talked about the trade-offs or implications for choices. Because of that, I feel that there’s relatively little available knowledge to understand the trade-offs to make when you protect mutable state. This post shares some of the stumbling blocks I hit, choices I made, and lessons I’ve learned. My hope is that it helps other developers facing a similar challenge.
Framing the problem
The way I try to learn and apply new knowledge to solve these kinds of “new fangled” problems is first working out how to think about the problem. I’ve not come up with a good way to ask other people how to do that. I think when I frame the problem with good first-principles in mind, trade-offs in solutions become easier to understand. Sometimes the answers are even self-obvious.
The foremost principle in strict-concurrency is “protect your mutable state”. The compiler warnings give you feedback about potential hazards and data-races. In Swift, protecting the state uses a concept of an “isolation domain”. My layman’s take on isolation is “How can the compiler verify that only one thread is accessing this bit of data at a time”. There are some places where the compiler infers the state of isolation, and some of them still changing as we progress towards Swift 6. When you’re writing code, the compiler knows what is isolated (and non-isolated) – either by itself or based on what you annotated. When the compiler infers an isolation domain, that detail is not (yet?) easily exposed to developers. It really only shows up when there’s a mismatch in your assumptions vs. what the compiler thinks and it issues a strict-concurrency warning.
Sendability is the second key concept. In my layman’s terms again, something that is sendable is safe to cross over thread boundaries. With Swift 5.10, the compiler has enough knowledge of types to be able to make guarantees about what is safe, and what isn’t.
The first thing I did was lean heavily into making anything and everything
Sendable. In hindsight, that was a bit of a mistake. Not disastrous, but I made a lot more work for myself. Not everything needs to be sendable. Taking advantage of isolation, it is fine – sometimes notably more efficient and easier to reason about – to have and use non-sendable types within an isolation domain. More on that in a bit.My key to framing up the problem was to think in terms of making explicit choices about what data should be in an isolation region along with how I want to pass information from one isolation domain to another. Any types I pass (generally) need to be Sendable, and anything that stays within an isolation domain doesn’t. For this library, I have a lot of mutable state: networking connections, updates from users, and a state machines coordinating it all. All of it needed so a repository can store and synchronize Automerge documents. Automerge documents themselves are Sendable (I had that in place well before starting this work). I made the Automerge documents sendable by wrapping access and updates to anything mutable within a serial dispatch queue. (This was also needed because the core Automerge library – a Rust library accessed through FFI – was not safe for multi-threaded use).
Choosing Isolation
I knew I wanted to make at least one explicit isolation domain, so the first question was “Actor or isolated class?” Honestly, I’m still not sure I understand all the tradeoffs. Without knowing what the effect would be to start off with, I decided to pick “let’s use actors everywhere” and see how it goes. Some of the method calls in the design of the Automerge repository were easily and obviously async, so that seemed like a good first cut. I made the top-level repo an actor, and then I kept making any internal type that had mutable state also be it’s own actor. That included a storage subsystem and a network subsystem, both of which I built to let someone else provide the network or storage provider external to this project. To support external plugins that work with this library, I created protocols for the storage and network provider, as well as one that the network providers use to talk back to the repository.
The downside of that choice was two-fold – first setting things up, then interacting with it from within a SwiftUI app. Because I made every-darn-thing an actor, I hade to await a response, which meant a lot of potential suspension points in my code. That also propagated to imply even setup needed to be done within an async context. Sometimes that’s easy to arrange, but other times it ends up being a complete pain in the butt. More specifically, quite a few of the current Apple-provided frameworks don’t have or provide a clear path to integrate async setup hooks. The server-side Swift world has a lovely “set up and run” mechanism (swift-service-lifecycle) it is adopting, but Apple hasn’t provided a similar concept the frameworks it provides. The one that bites me most frequently is the SwiftUI app and document-based app lifecycle, which are all synchronous.
Initialization Challenges
Making the individual actors – Repo and the two network providers I created – initializable with synchronous calls wasn’t too bad. The stumbling block I hit (that I still don’t have a great solution to) was when I wanted to add and activate the network providers to a repository. To arrange that, I’m currently using a detached Task that I kick off in the SwiftUI App’s initializer:
public let repo = Repo(sharePolicy: .agreeable)public let websocket = WebSocketProvider()public let peerToPeer = PeerToPeerProvider( PeerToPeerProviderConfiguration( passcode: "AutomergeMeetingNotes", reconnectOnError: true, autoconnect: false ))@mainstruct MeetingNotesApp: App { var body: some Scene { DocumentGroup { MeetingNotesDocument() } editor: { file in MeetingNotesDocumentView(document: file.document) } .commands { CommandGroup(replacing: CommandGroupPlacement.toolbar) { } } } init() { Task { await repo.addNetworkAdapter(adapter: websocket) await repo.addNetworkAdapter(adapter: peerToPeer) } }}Swift Async Algorithms
One of the lessons I’ve learned is that if you find yourself stashing a number of actors into an array, and you’re used to interacting with them using functional methods (filter, compactMap, etc), you need to deal with the asynchronous access. The standard library built-in functional methods are all synchronous. Because of that, you can only access non-isolated properties on the actors. For me, that meant working with non-mutable state that I set up during actor initialization.
The second path (and I went there) was to take on a dependency to swift-async-algorithms, and use its async variations of the functional methods. They let you “await” results for anything that needs to cross isolation boundaries. And because it took me an embarrasingly long time to figure it out: If you have an array of actors, the way to get to an AsyncSequence of them is to use the async property on the array after you’ve imported
swift-async-algorithms. For example, something like the following snippet:let arrayOfActors: [YourActorType] = []let filteredResults = arrayOfActors.async.filter(...)Rethinking the isolation choice
That is my first version of this library. I got it functional, then turned around and tore it apart again. In making everything an actor, I was making LOTS of little isolation regions that the code had to hop between. With all the suspension points, that meant a lot of possible re-ordering of what was running. I had to be extrodinarily careful not to assume a copy of some state I’d nabbed earlier was still the same after the await. (I still have to be, but it was a more prominent issue with lots of actors.) All of this boils down to being aware of actor re-entrancy, and when it might invalidate something.
I knew that I wanted at least one isolation region (the repository). I also want to keep mutable state in separate types to preserve an isolation of duties. One particular class highlighted my problems – a wrapper around NWConnection that tracks additional state with it and handles the Automerge sync protocol. It was getting really darned inconvenient with the large number of
awaitsuspension points.I slowly clued in that it would be a lot easier if that were all synchronous – and there was no reason it couldn’t be. In my ideal world, I’d have the type
Repo(my top-level repository) as an non-global actor, and isolate any classes it used to the same isolation zone as that one, non-global, actor. I think that’s a capability that’s coming, or at least I wasn’t sure how to arrange that today with Swift 5.10. Instead I opted to make a single global actor for the library and switch what I previously set up as actors to classes isolated to that global actor.That let me simplify quite a bit, notably when dealing with the state of connections within a network adapter. What surprised me was that when I switched from Actor to isolated class, there were few warnings from the change. The changes were mostly warnings that calls dropped back to synchronous, and no longer needed
await. That was quick to fix up; the change to isolated classes was much faster and easier than I anticipated. After I made the initial changes, I went through the various initializers and associated configuration calls to make more of it explicitly synchronous. The end result was more code that could be set up (initialized) without an async context. And finally, I updated how I handled the networking so that as I needed to track state, I didn’t absolutely have to use the async algorithsm library.A single global actor?
A bit of a side note: I thought about making
Repoa global actor, but I prefer to not demand a singleton style library for it’s usage. That choice made it much easier to host multiple repositories when it came time to run functional tests with a mock In-Memory network, or integration tests with the actual providers. I’m still a slight bit concerned that I might be adding to a long-term potential proliferation of global actors from libraries – but it seems like the best solution at the moment. I’d love it if I could do something that indicated “All these things need a single isolation domain, and you – developer – are responsible for providing one that fits your needs”. I’m not sure that kind of concept is even on the table for future work.Recipes for solving these problems
If you weren’t already aware of it, Matt Massicotte created a GitHub repository called ConcurrencyRecipes. This is a gemstone of knowledge, hints, and possible solutions. I leaned into it again and again while building (and rebuilding) this library. One of the “convert it to async” challenges I encountered was providing an async interface to my own peer-to-peer network protocol. I built the protocol using the Network framework based (partially on Apple’s sample code), which is all synchronous code and callbacks. A high level, I wanted it to act similarly URLSessionWebSocketTask. This gist being a connection has an
async send()and anasync receive()for sending and receiving messages on the connection. With an asyncsendandreceive, you can readily assemble several different patterns of access.To get there, I used a combination of CheckedContinuation (both the throwing and non-throwing variations) to work with what
NWConnectionprovided. I wish that was better documented. How to properly use those APIs is opaque, but that is a digression for another time. I’m particular happy with how my code worked out, including adding a method on the PeerConnection class that used structured concurrency to handle a timeout mechanism.Racing tasks with structured concurrency
One of the harder warnings for me to understand was related to racing concurrent tasks in order to create an async method with a “timeout”. I stashed a pattern for how to do this in my notebook with references to Beyond the basics of structured concurrency from WWDC23.
If the async task returns a value, you can set it up something like this (this is from PeerToPeerConnection.swift):
let msg = try await withThrowingTaskGroup(of: SyncV1Msg.self) { group in group.addTask { // retrieve the next message try await self.receiveSingleMessage() } group.addTask { // Race against the receive call with a continuous timer try await Task.sleep(for: explicitTimeout) throw SyncV1Msg.Errors.Timeout() } guard let msg = try await group.next() else { throw CancellationError() } // cancel all ongoing tasks (the websocket receive request, in this case) group.cancelAll() return msg}There’s a niftier version available in Swift 5.9 (which I didn’t use) for when you don’t care about the return value:
func run() async throws { try await withThrowingDiscardingTaskGroup { group in for cook in staff.keys { group.addTask { try await cook.handleShift() } } group.addTask { // keep the restaurant going until closing time try await Task.sleep(for: shiftDuration) throw TimeToCloseError() } }}With Swift 5.10 compiler, my direct use of this displayed a warning:
warning: passing argument of non-sendable type 'inout ThrowingTaskGroup<SyncV1Msg, any Error>' outside of global actor 'AutomergeRepo'-isolated context may introduce data racesguard let msg = try await group.next() else { ^I didn’t really understand the core of this warning, so I asked on the Swift forums. VNS (on the forums) had run into the same issue and helped explain it:
It’s because
withTaskGroupaccepts a non-Sendableclosure, which means the closure has to be isolated to whatever context it was formed in. If yourtest()function isnonisolated, it means the closure isnonisolated, so callinggroup.waitForAll()doesn’t cross an isolation boundary.The workaround to handle the combination of non-sendable closures and TaskGroup is to make the async method that runs this code
nonisolated. In the context I was using it, the class that contains this method is isolated to a global actor, so it’s inheriting that context. By switching the method to be explicitly non-isolated, the compiler doesn’t complain aboutgroupbeing isolated to that global actor.Sharing information back to SwiftUI
These components have all sorts of interesting internal state, some of which I wanted to export. For example, to provide information from the network providers to make a user interface (in SwiftUI). I want to be able to choose to connect to endpoints, to share what endpoints might be available (from the NWBrowser embedded in the peer to peer network provider), and so forth.
I first tried to lean into AsyncStreams. While they make a great local queue for a single point to point connection, I found they were far less useful to generally make a firehouse of data that SwiftUI knows how to read and react to. While I tried to use all the latest techniques, to handle this part I went to my old friend Combine. Some people are effusing that Combine is dead and dying – but boy it works. And most delightfully, you can have any number of endpoints pick up and subscribe to a shared publisher, which was perfect for my use case. Top that off with SwiftUI having great support to receive streams of data from Combine, and it was an easy choice.
I ended up using Combine publishers to make a a few feeds of data from the PeerToPeerProvider. They share information about what other peers were available, the current state of the listener (that accepts connections) and the browser (that looks for peers), and last a publisher that provides information about active peer to peer connctions. I feel that worked out extremely well. It worked so well that I made an internal publisher (not exposed via the public API) for tests to get events and state updates from within a repository.
Integration Testing
It’s remarkably hard to usefully unit test network providers. Instead of unit testing, I made a separate Swift project for the purposes of running integration tests. It sits in it’s own directory in the git repository and references
automerge-repo-swiftas a local dependency. A side effect is that it let me add in all sorts of wacky dependencies that were handy for the integration testing, but that I really didn’t want exposed and transitive for the main package. I wish that Swift Packages had a means to identify test-only dependencies that didn’t propagate to other packages for situations like this. Ah well, my solution was a separate sub-project.Testing using the Combine publisher worked well. Although it took a little digging to figure out the correct way to set up and use expectations with async XCTests. It feels a bit exhausting to assemble the expectations and fulfillment calls, but its quite possible to get working. If you want to see this in operation, take a look at P2P+explicitConnect.swift. I started to look at potentially using the upcoming swift-testing, but with limited Swift 5.10 support, I decided to hold off for now. If it makes asynchronous testing easier down the road, I may well adopt it quickly after it’s initial release.
The one quirky place that I ran into with that API setup was that
expectation.fulfill()gets cranky with you if you call it more than once. My publisher wasn’t quite so constrained with state updates, so I ended up cobbling a boolean latch variable in asinkwhen I didn’t have a sufficiently constrained closure.The other quirk in integration testing is that while it works beautifully on a local machine, I had a trouble getting it to work in CI (using GitHub Actions). Part of the issue is that the current
swift testdefaults to running all possible tests at once, in parallel. Especially for integration testing of peer to peer networking, that meant a lot of network listeners, and browsers, getting shoved together at once on the local network. I wrote a script to list out the tests and run them one at a time. Even breaking it down like that didn’t consistently get through CI. I also tried higher wait times (120 seconds) on the expectations. When I run them locally, most of those tests take about 5 seconds each.The test that was a real challenge was the cross-platform one. Automerge-repo has a sample sync server (NodeJS, using Automerge through WASM). I created a docker container for it, and my cross-platform integration test pushes and pulls documents to an instance that I can run in Docker. Well… Docker isn’t available for macOS runners, so that’s out for GitHub Actions. I have a script that spins up a local docker instance, and I added a check into the WebSocket network provider test – if it couldn’t find a local instance to work against, it skips the test.
Final Takeaways
Starting with a plan for isolating state made the choices of how and what I used a bit easier, and reaching for global-actor constrained classes made synchronous use of those classes much easier. For me, this mostly played out in better (synchronous) intializers and dealing with collections using functional programming patterns.
I hope there’s some planning/thinking in SwiftUI to update or extend the app structure to accomodate async hooks for things like setup and initialization (FB9221398). That should make it easier for a developer to run an async initializer and verify that it didn’t fail, before continuing into the normal app lifecycle. Likewise, I hope that the Document-based APIs gain an async-context to work with documents to likewise handle asynchronous tasks (FB12243722). Both of these spots are very awkward places for me.
Once you shift to using asynchronous calls, it can have a ripple effect in your code. If you’re looking at converting existing code, start at the “top” and work down. That helped me to make sure there weren’t secondary complications with that choice (such as a a need for an async initializer).
Better yet, step back and take the time to identify where mutable state exists. Group it together as best you can, and review how you’re interacting it, and in what isolation region. In the case of things that need to be available to SwiftUI, you can likely isolate methods appropriately (*cough*
MainActor*cough*). Then make the parts you need to pass between isolation domainsSendable. Recognize that in some cases, it may be fine to do the equivalent of “Here was the state at some recent moment, if you might want to react to that”. There are several places where I pass back a summary snapshot of mutable state to SwiftUI to use in UI elements.And do yourself a favor and keep Matt’s Concurrency Recipes on speed-dial.
Before I finished this post, I listened to episode 43 of the Swift Package Index podcast. It’s a great episode, with Holly Bora, compiler geek and manager of the Swift language team, on as a guest to talk about the Swift 6. A tidbit she shared was that they are creating a Swift 6 migration guide, to be published on the swift.org website. Something to look forward to, in addition to Matt’s collection of recipes!
https://rhonabwy.com/2024/04/29/designing-a-swift-library-with-data-race-safety/
-
Since I’m a web developer for my university’s student paper I have a chance of implementing activitypub stuff with their website. The thing is I have no idea if activitypub would be useful for rich text articles right now. I’ve seen some people post massive blog posts as statuses on mastodon and it looks horrible.
Anyone have insight into that? #actvitypub #Fediverse
-
Okay, here's my overdue #introduction post...
I'm a #JavaScript developer by day and a #fiction writer/editor by night (mostly #SF, #dreampunk in particular). I have a master's in #linguistics and taught in #Japan for a while. I love #art, #cooking, etc.
I'd like to connect with the #writingCommunity here, particularly since I seem to be making a habit of compiling #shortFiction anthologies. The first was #MIRRORMAZE, and a follow-up called #SOMNISCOPE is on the way.
-
#introduction Hi, I'm #Guigui (hashtag included) I'm a game developer and artist of all kinds, whether it be 2D, 3D, or pixel. I'm from Burgundy, in France, and speak both French and English. I have two game projects: - Corrupted Worlds (#corruptedworlds), a game about breaking the game itself and piecing back together a world reduced to garbage data - shellrhythm (#shellrhythm), a command-line rhythm game about hitting keys on your keyboard (yes, all of them, in varying order) Additionally, I am a custom level creator for Rhythm Doctor, and the official current french localizer for A Dance of Fire and Ice. (Talk about a busy schedule... /j) Thirdly, the furry side of my brain came up with a custom species called "Aerions", you're going to see them often around here. I'd say that if you want more info, you could head to aerocity.site, but the website is not ready yet :( Fourthly, I sometimes post art on my pixelfed account, @[email protected]. Also, I'm still in high school. I hate it. Finally, you'll sometimes see me retoot pooltoy and/or tf art. Sorry in advance, be warned. (though, all I retoot will be SFW, if I somehow retoot NSFW please tell me immediately I'm sorry) -
Hi!
I'm a queer guy, currently employed as a Technical Product Owner in a company focused on #hearinghealth.To satisfy my more creative side, I do cosplay and draw (when I have time, which is rarely).
Once a game developer (with only a few gamejam games finished), for now I've settled as a player.Current top 5: Pokemon, Persona, Doctor Who, Bleach, I Was a Teenage Exocolonist
Photo by pictures.by.ina on instagram.
-
@AborigenGTS I know that #Stripe rejects all erotic content in their terms of service. It's very possible they will kick me off too at some point. They are not friendly towards small businesses in general either. But for now it's the only integration for the software I'm using for my website and I'm not a developer who can make their own. I'm already looking for alternatives and I haven't even launched the subscription.
-
Hello Fediverse!
#Introduction time for me.
Érico Andrei, a software developer, retrocomputing aficionado, and open source evangelist. Based in São Paulo, 🇧🇷.
Nowadays, I'm a #Plone core developer, #Python developer, maintainer of #Cookiecutter, and member of the Brazilian #Plone and #Python communities. Former president of the @plone Foundation.
Touts will be in #en and I may go off-topic and post about #politics, #scifi, #soccer and #Mooca.
#LLAP -
> Hello fediverse, here's my #introduction post.
Welcome to #fosstoden!
> I'm a software developer and a long time Linux/#FOSS user. I maintain packages in #Fedora, but recently been also exploring #guix.
I've been exploring #guix too, both as a user and by trying to update the #rakulang packages. It's a fascinating distro, but certainly has a learning curve.
Do you think you'll stick with it?
-
I'm a Python developer specializing in backend development and data processing. I'm actively seeking new opportunities and excited to contribute to innovative projects. #OpenToWork #FediHire #PythonJobs #getfedihired
-
I'm a Python developer specializing in backend development and data processing. I'm actively seeking new opportunities and excited to contribute to innovative projects. #OpenToWork #FediHire #PythonJobs #getfedihired
-
I'm a Python developer specializing in backend development and data processing. I'm actively seeking new opportunities and excited to contribute to innovative projects. #OpenToWork #FediHire #PythonJobs #getfedihired
-
I'm a Python developer specializing in backend development and data processing. I'm actively seeking new opportunities and excited to contribute to innovative projects. #OpenToWork #FediHire #PythonJobs #getfedihired
-
Back from conference travels in NY, and returning to my usual schedule of coding streams! A number of folks I chatted with at #LeadDev were curious about what watching a developer stream their day-to-day work looks like, so here's an official invite. Every Monday, Wednesday and Friday I stream myself developing from 1PM until I finish for the day (usually at least 3-4 hours, sometimes more if I'm in a groove.)
Drop by twitch.tv/brainbetter to watch! I'm building a jigsaw puzzle game in #Godot4 using C#. I'm told it's nice second-screen viewing if you miss the vague sense of having a co-worker at the next desk over while working from home.
-
I've been a licensed amateur since 1992. I was a teenager then and after a couple of years, life (parties, friends, girls) took over and I didn't do much with radio. Late 2021 and early 2022, I had some extreme health issues that made me reevaluate my free time. I'm a software developer and a CIO for a tech company, so my free time was really still working time. I've scaled back extra work time for radio and family time.
-
📝 basics:
• I'm a software developer by day and content creator by night
• About 10 years developing in the field of #boardgames, #roleplaying games. I know a lot about #warhammer40k, #malifaux👤 identity:
• having an interesting emotional experience, experiencing #derealization as a consequence of #dissociativeidentitydisorder
• made #obsidian a center for organizing the thoughts of 2 people in 1 body💖 likes:
#pkm #LLM #webdesign #biotech #CSS #DevOps #ML #typography #rust -
📝 basics:
• I'm a software developer by day and content creator by night
• About 10 years developing in the field of #boardgames, #roleplaying games. I know a lot about #warhammer40k, #malifaux👤 identity:
• having an interesting emotional experience, experiencing #derealization as a consequence of #dissociativeidentitydisorder
• made #obsidian a center for organizing the thoughts of 2 people in 1 body💖 likes:
#pkm #LLM #webdesign #biotech #CSS #DevOps #ML #typography #rust -
🚀🔧 Ah yes, the classic "let's duct-tape #Rust onto Java" strategy—you know, because nothing says "I'm a serious developer" like turning a memory-safe language into a DIY memory management nightmare. 🤦♂️ Ever wonder where your weekends went? They're now spent deciphering #JNI error messages! 😂
https://medium.com/@greptime/how-to-supercharge-your-java-project-with-rust-a-practical-guide-to-jni-integration-with-a-86f60e9708b8 #Java #DuctTape #MemoryManagement #DeveloperHumor #HackerNews #ngated -
🚀🔧 Ah yes, the classic "let's duct-tape #Rust onto Java" strategy—you know, because nothing says "I'm a serious developer" like turning a memory-safe language into a DIY memory management nightmare. 🤦♂️ Ever wonder where your weekends went? They're now spent deciphering #JNI error messages! 😂
https://medium.com/@greptime/how-to-supercharge-your-java-project-with-rust-a-practical-guide-to-jni-integration-with-a-86f60e9708b8 #Java #DuctTape #MemoryManagement #DeveloperHumor #HackerNews #ngated -
🚀🔧 Ah yes, the classic "let's duct-tape #Rust onto Java" strategy—you know, because nothing says "I'm a serious developer" like turning a memory-safe language into a DIY memory management nightmare. 🤦♂️ Ever wonder where your weekends went? They're now spent deciphering #JNI error messages! 😂
https://medium.com/@greptime/how-to-supercharge-your-java-project-with-rust-a-practical-guide-to-jni-integration-with-a-86f60e9708b8 #Java #DuctTape #MemoryManagement #DeveloperHumor #HackerNews #ngated -
#introduction time, finally!
Hi, I'm Fabio! I'm a software #developer based in #Toronto #Canada, originally from #Rio #Brazil
I work mainly with #ruby and #js, but I also dabble in #c, #python, #elixir and I've been meaning to try #rust
Aside from #programming I'm also into #mechanicalkeyboard, #retrocomputing, #musicproduction, #trackermusic, #drumming and I'm also a very rusty #aerialist (mainly trapeze)
Moar hashtags for discoverability 👍: #ableton #PolyendTracker #rails #webdev
-
After six years of working at the previous place, I quit my job. So I'm looking for a new job opportunities.
I'm a frontend developer based in Warsaw, Poland. I'm open to remote work.
I've got experience with Wordpress, React, Next.js. I don't want to say frontend is my passion, but frontend is my passion, especially: HTML,CSS, JS.
And here's my resume: https://resume.jakubiwanowski.dev/
#FediHire #LookingForANewjob #CSS #javascript #HTML #frontend #WebDev #React #Next
-
Time for a new #introduction!
Hi all, I'm Mike!
I'm a software developer working in the #video streaming space. Specifically, I've been working on Media over QUIC (MoQ), #WebRTC, and other "ultra low latency" technologies. I write mostly #Rust at work these days.
I'm still living the #RemoteLife and now work for a big SF-based company from the woods of #Michigan.
In my free time I enjoy #hiking and playing games with my family, and playing with radio waves.
-
I guess I should do an #introduction post.
I’m a Software Engineer focusing on PHP and React, helping my team be proficient by not re-inventing the wheel, designing happy path patterns, encouraging use of software and design patterns that are idiomatic to their communities, and best practices at large.
I sell add-ons for #ExpressionEngine and #CraftCMS on the side at https://www.buzzingpixel.com.
I’m also trying to get healthier and more fit, which is a challenge as a software developer.
-
Follow up: I've installed Nova and cloned a git repository from 11ty. This is a sentence full of words I believe are 1) real and 2) syntactically-correct.
So I guess I'm a web developer now? Am I able to hack mainframes? What about IPs?
Look, I'm flailing here and just hoping for the best.
-
It's about time I'm doing an #introduction . I'm a software developer, previously in video games for 20 years (worked on Red Dead Redemption and Grand Theft Auto V), now at Google. I'm also a #filmmaker on the side every now and then.
Hobbies? #photography #scuba diving, obstacle races like #toughmudder and #spartanrace , #marathon #running , #android, #softwaredevelopment , #parenting.
Let's grow this place.
-
Me and two of my close friends planning to do work together as a #collective/#coop. I'm a software developer, one of us is skilled in graphic #design and #videoactivism, the other has skills in #textile design. Also our shared interest is #cycling :-)
We decided to do commercial work to finance our #political/#social projects in a sustainable way.
I saw a #cooperative with similar ideals: https://sassafras.coop/
Do you know any other? We try to learn from others' experience.
-
(I know this is getting ridiculous, but I moved yet again to update my username, so another intro :blobcat_mlem:)
I'm a trans girl trying to figure herself out and be more open. :ablobcatwave:
I'm also autistic (self-ID), possibly also ADHD/Kinetic.
I'm a GNOME developer at Purism, maintaining libadwaita. I will occasionally post updates about it.
I support 🇺🇦🇦🇲🇵🇸.
Otherwise I'm into video games. Currently mostly Touhou and osu!, previously Zelda, Metroid, Castlevania, Crypt of the NecroDancer/Cadence of Hyrule, etc.
I also listen to a lot of video game music and their covers, and should probably be posting more about it than I did previously.
I can also talk about languages, though I almost never post about them.
I try to CW almost everything I post by topic.
#introduction #introductions #GNOME #libadwaita #trans #ActuallyAutistic #neurodivergent #VideoGames #osuGame #touhou #touhou_project #TheLegendOfZelda #zelda #metroid #nintendo #CryptOfTheNecrodancer #CadenceOfHyrule #vgm #VideoGameMusic
-
New introduction since I've moved yet again:
I'm either a girl or enby and for now I go by they/them. We'll see where this goes. :queercat_trans:
I'm autistic (self-ID), possibly also ADHD/Kinetic.
I'm a GNOME developer at Purism. Currently mainly maintaining libadwaita.
I support 🇺🇦🇦🇲🇵🇸.
Otherwise I'm into video games. Currently stuck in osu! rabbit hole and meaning to get back to Touhou, previously Zelda, Metroid, Castlevania, Crypt of the NecroDancer/Cadence of Hyrule, etc.
I also listen to a lot of video game music and their covers, and should probably be posting more about it than I did previously.
I can also talk about languages, though I almost never post about them.
I try to CW almost everything I post by topic.
#introduction #introductions #GNOME #libadwaita #trans #ActuallyAutistic #neurodivergent #VideoGames #osuGame #touhou #touhou_project #TheLegendOfZelda #zelda #metroid #nintendo #CryptOfTheNecrodancer #CadenceOfHyrule #vgm #VideoGameMusic
-
Ok, so a new introduction since I've moved:
I'm a GNOME developer at Purism. Currently mainly maintaining libadwaita.
I'm autistic (self-ID), possibly also ADHD/Kinetic.
I'm probably not cis and while I'm figuring myself out I go by they/them online and he/him IRL.
I support 🇺🇦🇦🇲🇵🇸.
Otherwise I'm into video games. Currently playing through Touhou games and trying osu! even though I'm absolutely terrible at it, previously Zelda, Metroid, Castlevania, Crypt of the NecroDancer/Cadence of Hyrule, etc. I usually CW game-related posts with the name of the series.
I also listen to a lot of video game music and their covers, and should probably be posting more about it than I did previously.
I can also talk about languages, though I almost never post about them.
#introduction #introductions #GNOME #ActuallyAutistic #neurodivergent #VideoGames #touhou #TheLegendOfZelda #zelda #metroid #nintendo #CryptOfTheNecrodancer #CadenceOfHyrule #vgm #VideoGameMusic