1. 14

This is the weekly thread to discuss what you have done recently and are working on this week.

Be descriptive, and don’t hesitate to ask for help!

  1. 8

    I’ve pretty much finished my GoCon Canada talk slides, working on my notes for what I’m gonna say next. Sneak Preview

    This weekend I was kind of active on Twitter. I posted a visualization of how I synesthetically experience language.

    I also wrote out a dream that really stuck with me.

    I’m working more on the theory for control streams/descriptors in Olin as well as starting on a code generator for the syscall stubs. I hope to make an olin OS patch to Zig.

    1. 4

      I just wanted to say: you are interesting.

      1. 1

        Thanks. My life is an experience. It’s great.

      2. 2

        Wow, I had no idea we had a go conference in Toronto. I’ll see you there :)

        edit: Noooo, tickers are sold out :(

        1. 2

          That dream is a good story!

        2. 6

          To enhance Monocypher, I’m working on adding authenticated key exchange. (The current NaCl libraries, including NaCl, TweetNaCl, Libsodium, and Monocypher, only provide rudimentary key exchange with no forward secrecy. This makes them unsuitable for “just setting up a secure channel”.)

          Right now, I’m implementing a poll(2) based working example, to make sure the API doesn’t suck. It looks like it works fine for synchronous settings, but I want to make sure asynchronous I/O based code isn’t too horrible. (A contributor already tried libuv and kqueue, so we should be good, but this is my first time writing network code…)

          The next few days, I’ll prepare slides to present Monocypher at my company. I’m not sure yet how I want to spin it.

          1. 2

            Heads up: You linked to repo Monocyphe-Handshake. Note the missing r.

            1. 2

              Crap, you’re right, thanks. Can’t edit any more, though, so here it is again.

          2. 6

            I’m going to spend the rest of the week touring with my musician friends in a few cities across Romania! 🤘

            1. 2

              Nice! Which cities? I have a coworkers there. Maybe I can promote for you. ;)

              1. 1

                Hah! :) We’re going to Brașov, Bucharest, Cluj, and Timișoara, venues here.

            2. 5

              I do love these threads, but unfortunately I don’t have much to contribute.

              At $DAYJOB client I’m preparing some training on a license compliance tool. And I’ll be giving a talk to my colleagues in the head office to explain FOSS licensing.

              I’ve had some luck spending time on personal projects in the past few weeks, but I’m still not really feeling excited by most computer-related things.

              I am going to spend some time trying to find some paying side-project work this week. Hopefully I can find something engaging (or at least in a stack I enjoy working with: Rails or iOS) so that I can exercise that part of my brain while making financial headway.

              1. 5

                I’m reading through UNIVAC I manuals and getting a sense for programming in the 50s. The manuals are maddeningly inconsistent and in some cases contain totally unexplained code. I’m trying to figure out an interesting blog post for them.

                I’m also reading David Graeber’s “Debt” (great book and I’m choosing to read it slowly).

                1. 3

                  Short week this one.

                  I’m visiting our satellite office in Cluj, Romania and working on building plugins into my message parser, so I can make a better distinction between the public and private parts of the messages.

                  1. 3

                    Trying to juggle multiple projects while squeezing out a minimum viable Mitogen release supporting Ansible 2.8. Azure Pipelines is being an asshole, so I’ve downed tools for the evening

                    1. 2

                      Thanks for your work on Mitogen! I’ve started using Ansible at work this month and it’s been a real joy to use partly thanks to Mitogen.

                      1. 1

                        What is Mitogen? I tried looking through their website but couldn’t really grok it.

                        It seems like either an extension to ansible or an alternative runtime?

                      2. 3

                        I’m writing my blog with create-react-app. So far I’m having a lot of fun working out the subtleties of the design and what I want my blog to be like. Also brainstormed a bunch of ideas for blog posts.

                        I’m also working on putting out a stable release of https://nhooyr.io/websocket

                        And some other top secret stuff :)

                        1. 3

                          I looked through the readme of the project and I just wanted to say I really appreciate that you had an entire section dedicated to justifying why the library is being written and a comparison to existing libraries.

                        2. 3

                          I’m free for two weeks before starting a new job. I was planning to read and write a lot, but I barely get anything done. So just doing some stuff in the house, groceries, cooking for me and my GF, and training (sprinting). I have a competition next thursday. Last competition I ran 100m in about 13 seconds which is quite terrible, but I do it mostly for fun (but I’m still hoping to improve myself).

                          I still have this idea to make a simple specification for instruction set architectures, to automatically generate assembler and disassembler from it. That, and more blogposts and some shaders are stuff I still want to work on. Good job, everyone who is getting a lot of stuff done!

                          1. 2

                            I’m free for two weeks before starting a new job. I was planning to read and write a lot, but I barely get anything done.

                            This is fine. That kind of a break doesn’t need productivity. If you’re going to read, read for the joy of it!

                          2. 3

                            Killing React Native.

                            We’re thinking of doing a kickstarter. I’m a bit skeptical, but my cofounder feels it’s worth a shot. I’ve attached the rough draft if anyone’s curious.

                            Other than that, we’ve also started building our first apps in SweetieKit. I made Emoji Magic, which lets you place emojis in the real world.

                            Here’s augmented reality Nic Cage:


                            Here’s a gallery of pics and vids:



                            Once Emoji Magic ships to the app store, it will officially be the first app in the world running NodeJS on your iPhone. The performance is incredible – it’s like react native with none of the tradeoffs. The app is currently ~400 lines of JS in a single file. Here’s the source code: https://gist.github.com/shawwn/20d722750844850aa1a8f8dfe459e95a

                            Notice it’s using ThreeJS to place objects in the real world. You can use whatever libraries you want: axios, express, etc.

                            What is SweetiKit?

                            A way to run real NodeJS on any iOS device, and to build and ship apps written in pure JavaScript, using anything that the Node and iOS ecosystems have to offer.

                            An important part of SweetieKit is its JavaScript library, which is quite different from other frameworks like ReactNative. We don’t impose any limitations on the way you choose to build your apps— all iOS frameworks from UIKit to ARKit to CoreML are available as regular node modules. That’s in addition to all of the core Node libraries (like path and fs), and of course, anything that you can install with npm (sending requests with axios and using three.js to manipulate CoreGraphics matrices are a couple of our personal favorites so far).

                            SweetieKit achieves the same level of performance you’d expect from apps written in Objective-C or Swift. And you can use React— if you want to.

                            Why are we creating it?

                            We’re passionate about development, and are builders at heart. We also think there’s too much red tape when it comes to some of the most important, user-accessible, and interesting software being built right now— mobile apps!

                            As experienced devs, we still wanted a better way to build awesome things that people love. We also wanted to use tech that encourages community collaboration, that makes it easy to iterate, and that removes many of the things we find severely limiting about existing methods of iOS development.

                            Despite being heavily involved with projects and communities surrounding Node, mobile, and devtooling, and after months of research and exploration as our interest in this project grew, we realized that even the tools we loved most came with giant caveats. There had to be a better way to jump in and start making things; one that would help more people get involved with mobile software.

                            In short, we’re building this because we want to use it, and share it with the world.

                            Would non-devs benefit by getting involved?

                            Before Apple had a catalog of many thousands of amazing apps available for download, they needed to make a platform that developers wanted to devote months, years, and whole careers to. The harder it is to get people involved, the lower the bar stays, and fewer great ideas ever see the light of day. What’s more— and perhaps the biggest factor at play— is that the sheer amount of time and resources currently required to ship high-quality mobile apps is astronomical. The result? Only a teeny, tiny sliver of great ideas ever have the opportunity to make it into our magical pocket computers.

                            NodeJS has earned a reputation for being a robust host for many types of client-server applications, as well as for being simpler to learn and less costly to maintain than others. It’s been adopted by companies like Netflix, PayPal, and Uber, and the community has grown such that more dev resources are now available for Node than for any other platform in the world, even though until now, it’s use has been mostly limited to web and server applications.

                            Imagine if we brought that to the world of mobile? Many have tried, but SweetieKit is the first to do this successfully. This is a great project to get involved with if you’d like to help push progress forward, and/or if you think cooler, better apps sounds pretty good.

                            How far along is the project?


                            What’s the plan? How will being funded help?


                            What are the sweet rewards?

                            todo (note for lobsters: any ideas for reward tiers would be much appreciated.)

                            1. 2

                              I think you might be on to something! I’m working on a project that I want to develop using javasscript. So at some point I’d like to integrate it with Andorid systems. Thing is I want to stick to one language whenever possible.

                              Saves me so much time if I only have one codebase to maintain. This point is huge I believe. Think how many apps that in fact are webpages in thin wrappers. A large fraction of them in turn communicate with servers running javascript.

                              At least me while coding m in PHP and javascript does a lot of misstakes while switching. If II’m in language it gets more automatic. Also less code to work because you only have one technique for every issue/

                              You also make a really good point about getting access to more developers. In my case I want the barrier for people to start poking around in my code as small as possible.

                              All in all with an homogegnous system as far as language is concerned and a larger pool of talent to draw upon creating solutions that are smartphone / web / server based would be way more smooth.

                              I’d love to help out in some aspect! Don’t’ hesitate to reach out via PM.

                              P.S. how is laarc.io doing // previously enow if you remember, new project name http://tbf-rnd.life/ but still at it (lost my computer and logins and blablablah … long story) D.S.

                            2. 2

                              Trying to wrap up this article I threatened to write a few weeks ago. I’m worried that it’s not interesting enough, my conclusions are basically that each of the cliches/stereotypes about each language were encountered in writing these programs.

                              1. 2

                                I’d still read it ;)

                                Python is a language I never worked with professionally, but understand to some extent. I started learning Rust and Go at some point. I have working compilers on my system, I’ve written some code, but then I focussed on something else, and at this point I don’t even know how to write “hello world” in them.

                              2. 2
                                • No doubt some as-yet unknown client work

                                • Fixing more cross-platform bugs in KSSL, and hopefully getting some platform native packages building for it too.

                                1. 2

                                  For fun:

                                  • I added source code formatting and a repl to my http://ucg.marzhillstudios.com/ project.
                                  • I’m tinkering with some ideas I’ve for a while to make coordinating work across multiple repositories easier.

                                  For work:

                                  I’m more of a manager these days so my work has been tending toward

                                  • Helping the company refine and rework it’s performance management for engineering.
                                  • Advising our recruiters on how best to build out an engineering pipeline.
                                  • Giving technical guidance where I can.
                                  1. 2

                                    Trying to convince management they are making a mistake. I manage a group of 5 developers for a college. The university IT department wants to take one of our applications as it has become an “enterprise” application and needs to be managed centrally. Fine. Except they also want to take me and one of the developers. They want me to develop on it (I’m now a manager). And the department has 40 other applications supporting various departments that will all flounder and fail without me there to oversee the department. There’s more to it than this; politics and nuance, but that’s the gist. Ugh.

                                    1. 1

                                      Good luck! I know these kind of things can cost a lot of energy.

                                    2. 2

                                      At work I’m adding code to embed some extra meta-data in the portable globe files we “cut” from Google Earth. Currently when our Android plugin imports a portable file it has to scan all of the imagery and terrain data packets looking for some metadata like boundaries, min/max zoom levels, and a few other bits of information. Needless to say, “walking” the whole file structure is a performance problem with larger files, so our solution is to pre-compute the metadata we need and embed that in the file at creation time. It’s been nice to actually write code after weeks of manual testing and bug fixing, and I’m learning a lot about the portable cut file format and the process for creating them, which is a lot of fun.

                                      It’s a day off today, though, so I’m going for a longer bike ride, and then incorporating some recent upstream changes to Blend2D into my Common Lisp binding. Right now I can’t read or write files, so it’s critical to get the new APIs included. The downside to writing a binding to a pre-release library is that I seem to spend more time tracking changes and tweaking/fixing the binding than I do using it, but the recent changes are an improvement, and I’m learning the API as it evolves, so it’s really not too bad.

                                      For the rest of the week, I’d like to get back to the animations I was creating with the Blend2D bindings. And I have some bike maintenance to do once some parts arrive.

                                      I’ve also started going for daily walks with a new neighbor friend of mine. One downside of working from home is that it’s easy to stay in, and it’s nice to have the external motivation to go out and talk to somebody face to face.

                                      1. 1

                                        I’m trying to pick up common lisp during free time. I’ve realized that working on bindings is something I may have to do often if I try making a more practical application.

                                        Are your bindings available online? If so, I’d love to learn from them

                                        1. 1

                                          You may be surprised - after about 5 years of CL I’ve only had to create my own bindings a couple of times. The cl-autowrap and CFFI packages make it relatively simple to write C bindings. C++ is a different story, and I’m not sure there’s a great way to create those, especially for template heavy libraries.

                                          These Blend2D bindings are using cl-autowrap, which uses c2ffi and clang to generate bindings from a header file. The downside of cl-autowrap is that it creates (and exports) bindings to every function and type found while parsing a header file, including system functions and types.

                                          I didn’t want to export all of those from the blend2d package, so I created a nested package named blend2d.ll which uses cl-autowrap and exports everything, and then another package, blend2d, which selectively exports functions from blend2d.ll. There may be a better way to do it, but this is working okay for now.

                                          An alternative to cl-autowrap is to use CFFI directly. It’s easier to use for small libraries, or situations where you only need a handful of foreign functions. I used this technique a while back to write an incomplete binding to ZBar, a barcode scanning library.

                                      2. 2

                                        I’m building a chat app using as little JavaScript as possible, using long polling to a golang server, think “talking to volunteer therapists” without being in the therapy space or actually about therapists.

                                        Then I’m going to try and build a migration mechanism from one version of an expensive PLM software tool to the next version, and hopefully versions after that. Included in migration, I hope to have functionality tests automatically run before the migration actually begins. We will see.

                                        Oh, and all that (consulting) while I look for a job most of the hours of the day. I have several resumes out there, and hopefully one will stick.

                                        1. 2

                                          Recently I have been automating away some small annoyances with my computer experience.

                                          Yesterday I wrote a browser user script in Violentmonkey to solve a small problem that I had wanted to solve for years. It turned out to be easier to write than it would have been when I first thought of it, thanks to the introduction of the URL API for manipulating the search parameters in URLs. It was also quicker to create a new script in Violentmonkey than it had been in older versions of Greasemonkey, back when scripts were saved as local .js files.

                                          The problem my script solves is that on various phpBB forums, when I search across threads for something and then click on one of the result threads, the resulting page visually highlights every use of the search term I typed. This phpBB feature is worse than useless. Usually my search term is the title of a work, and the title gets repeated throughout the thread, so the highlighting is distracting rather than helpful. I had figured out that manually deleting the &hilit=search+term search parameter from the URL would delete, but it was a pain to do this manually for every search result thread I opened.

                                          The script, which I have only enabled on viewtopic.php pages in phpBB forums I visit, removes the hilit parameter if it’s present (and also the useless sid parameter, making the URL easier to read). This is all the code I ended up needing, apart from the user script metadata comment block:

                                          const currentLocation = window.location;
                                          const url = new URL(currentLocation.href);
                                          const originalSearch = url.search;
                                          url.searchParams.delete('hilit'); // remove distracting in-page highlighting
                                          url.searchParams.delete('sid'); // simplify URL by removing useless “session ID”
                                          const simplifiedSearch = url.search;
                                          if (simplifiedSearch !== originalSearch) {
                                            // in this case, the `delete` calls on `url` have mutated it, so its `href` is different
                                            window.location = url.href;

                                          Apart from writing a user script, I also found some existing Firefox add-ons to solve problems with web pages:

                                          And I wrote some Keyboard Maestro macros for problems outside of the browser:

                                          • Quickly toggle the MacBook Pro’s Touch Bar between showing App Controls and the Expanded Control Strip, by automatically opening System Preferences to the correct pane and clicking on the appropriate menu. I still need to click the desired menu option myself, but I automated the quitting of System Preferences after this.
                                          • In the online multiplayer game Rocket League, type a shortcut such as ⌘R and then a letter such as S to quickly send a preset message over team chat such as “I have Spikes”. This makes it practical to communicate during a match even without voice communication.
                                          • In the iTunes media player, clear the Up Next queue of tracks with a keyboard shortcut. I improved my previous solution by making the macro visually inspect the screen to make sure iTunes is in the correct state before trying to send keystrokes to it. That means I can safely trigger the macro even if I’m not sure that the Up Next queue has any tracks in it.

                                          Of course, it took more time to write these automations than I will save by using them. But these solutions aren’t about saving time in an absolute sense, they are about preserving flow. I spent some free time to save me a bit of time in situations when I know I will be in a hurry. Time is more precious in such situations.

                                          1. 2

                                            I had the idea to combine two hobbies this week…

                                            3D printing and analog photography

                                            So I’m working on a rig to help me digitise my negatives :)

                                            1. 2

                                              I’ve just finished writing feedback emails for every 44CON submission this year, so I’m having a quieter day today.

                                              This week I’m working on getting ready for our training next week, which is in the same week as BSides London. It’s going to be a hectic week. We’re also preparing speaker announcements for next week at BSides London.

                                              Finally, I’m spending a few hours getting to grips with Pagestream on the Amiga. I’ve been batting the idea of some sort of an annual 44CON zine for a while but I’m unsure of the format yet. If I can do something reasonable on an Amiga and fill it with things from the period as well as research, then I might give it a go.

                                              1. 2

                                                I left SUSE and joined OONI.