1. 13


    It has been a while since I posted in one of these threads.

    Probably the biggest thing is that I’ve decided to take on helping to maintain the petgraph Rust crate. It hasn’t seen much maintenance in over a year, so I decided to step in and step up.

    I’ve also been working on improving the Z3 bindings that I maintain. This has resulted in me submitting a number of improvements upstream to the docs. It also resulted in a bug fix being done to Z3 to fix something that has been broken since the 4.7 releases. I want to get a new release of this out since a lot has changed since the last release.

    I started doing an update of the Rust harfbuzz bindings to the recent 2.6 release of Harfbuzz, but ran into a couple of things that I’ll need to sort out … and I hope to do that this week.

    I also hope to continue working on updating my LLDB bindings to incorporate the new functionality introduced in the last 2 releases.

    Outside of software, I’ll be ordering a 3D printer later this week probably and once that arrives, I’ll start building a syringe pump and other things to build an electrospinner.

    1. 4

      I’m in Bali … Nice change of pace.

      1. 8

        Morning all!

        I’m keeping busy, it seems.

        I’ve got more changes in progress for the Z3 theorem prover to clean up some more platform support issues. I’m also working on expanding my Rust bindings as well.

        In Zircon / Fuchsia land, I got a lot of my backlog of changes cleared out and then went and submitted a bunch of new changes. One day, Zircon will be the OS kernel with the best spelling.

        My client work is progressing. The devil is in the details and I’m trying to get everything nailed down in the next day or two.

        I’m still reading up and learning about things going on in the materials world with cellulose and lignin. This led me to the interesting world of using chitin from shrimp and crab shells, producing chitosan, and then using that to make biodegradable plastics. So fascinating! A lot of this seems like it needs further work to bring it into affordable production processes though. I’m trying to find some local chemical or materials engineers to meet up with and learn more about this.

        I’m also reading about some ideas from the 1990s on what might be better than a REPL. Also pretty fascinating.

        And this coming weekend, we undergo 30 or so hours of door to door travel to head to the US for a couple of weeks.

        1. 2

          I’m also reading about some ideas from the 1990s on what might be better than a REPL. Also pretty fascinating.

          Sounds very interesting, can you share some links and/or thoughts?

          1. 3

            Right now, I’m looking at the thesis of Wolfgang Weck: ftp://ftp.inf.ethz.ch/pub/publications/dissertations/th11817.abstract

            This is rooted in the Oberon world. This was also similar to how MPW worked way-back-when.

            @nickpsecurity also posted a link to a paper from the Oberon world on ActiveText recently. That’s related to this as well.

            1. 1

              Thanks for credit. That’s this paper for folks wondering. Honestly, I haven’t read it yet due to lack of time/energy: it just looked really good as I skimmed it seeing ideas I’ve seen in other good work. I guess I should bump it up on my backlog since you’re recommending it. Might do Weck’s at same time since you say they’re related.

              Note: Weck’s stuff is paywalled but I found a page with links to dissertations that was broken. I’ll email admin in case any of those links were free PDF’s and they fix it.

              1. 2

                I’ve had the Active Text paper around for a while myself … but you re-brought it to the front of my mind as I was looking into similar things again. :)

                As for Weck’s thesis: ftp://ftp.inf.ethz.ch/pub/publications/dissertations/th11817.ps.gz

          2. 1

            I’m also reading about some ideas from the 1990s on what might be better than a REPL. Also pretty fascinating.

            I love this stuff! It’s really interesting to see the things that were tried, and that…well, not that failed, but that didn’t become popular. I think by the 1990s we were pretty doubled-down on the edit-compile-debug cycle, and sufficiently burned by CASE tools to be sceptical of anything more complex than a text editor with a “build” button.

            Some stuff never left academia, some didn’t get traction, and some was genuinely not a good idea :). Trying to work out which is which is fascinating.

          1. 1

            Rust’s linter, clippy, is now available on stable Rust. You can install it via rustup component add clippy and run it with cargo clippy.

            Does this mean we can install clippy using cargo install too? That’d be great.

            1. 1

              I used to do that … but the compiler APIs would change here and there, so I ended up switching to the rustup managed component once that was available as a preview. It has been great.

              Why would you want to keep using cargo install?

              1. 2

                I use a tier 3 platform, so there is no rustup.

            1. 3
              • Working on some stuff for a client to try to wrap things up before I leave for a 3 week winter holiday.
              • My wife and I are taking daughter to a birthday party, but it is very hot here (35C today).
              • Reading up on some alternative ideas to what a browser is (like Project Atlantis from Mickens while at MSR).
              • Doing an experiment with epoxy resin and fiber optics to conduct light into a thin film of resin to see if I can get the result that I want.
              • Having guests over on Sunday to make some home made Christmas cards with my wife and daughter.
              • Submitting more of my backlog of changes to the Zircon kernel from Fuchsia. This is mostly typo corrections, but also working on some changes to what permissions are checked at what times.
              • Working on more Z3 changes to upstream to clean some stuff up in terms of platform support.
              • Extending my Rust Z3 bindings.
              • Reading some fiction.

              And probably some other things here and there …

              1. 4

                Hello and hope you all had a great week.

                I’m still working on improving my Z3 bindings (https://github.com/prove-rs/z3.rs), but I’ve found a bunch of things that needed to be improved upstream in the main Z3 repository (https://github.com/Z3Prover/z3). I’ve got a long list of things now that should be improved in the Z3 implementation.

                If anyone knows of an organization that is using Z3 and would like to sponsor some upstream maintenance, I’d love to talk. I’ve been doing this in my spare time, but there’s a ton of things that need to be done and Z3 is so foundational to so much of what’s going on in some fields these days.

                I also updated the Rust bindings for Harfbuzz to the most recent release of Harfbuzz.

                I’m also continuing to get some things upstreamed into Zircon, the microkernel powering Fuchsia.

                Apart from all of that … I’ve been learning about making translucent wood, translucent concrete, and research into various wood-based materials that are pretty interesting. I’m also reading up on techniques involving the impregnation of wood with sodium silicate.

                Oh, and I’m doing a lot of client work, but nothing much there to speak publicly about.

                1. 4


                  Christmas holidays are approaching, and with that, a 3 week trip back to the US. So it is a great time to be working on wrapping up a lot of things for the year.

                  For work, I’m getting my client updated to a new version of emscripten, switching to WebAssembly, simplifying their build process, and working on things to reduce the size of the generated code. A lot of good fun that spans C++, JS, cmake, WebAssembly, and more.

                  Outside of that, I’ve been working again on my Z3 bindings for Rust: https://github.com/prove-rs/z3.rs

                  As part of that, I’ve also been submitting a number of improvements upstream and into the main Z3 repository. A big focus of that has been improving the documentation, both for the C API and for the Rust bindings. I’ve also been continuing a process that I started a while ago of having Z3 switch away from a custom Z3_bool type over to bool from stdbool.h … the actual change had already happened, but Z3_bool and Z3_TRUE / Z3_FALSE were still around. They’re almost entirely gone now though!

                  I’ve been continuing to submit some improvements upstream to Zircon and am slowly working on my Vega-Lite Rust bindings.

                  1. 11

                    I want to use Vega-Lite from Rust, so I took the JSON schema and used QuickType to generate some Rust code. It ends up that this has a lot of issues, but it is a good start, so I’m now working on cleaning this up some. I also have generated code for Vega in a sibling repository. Any help on my vega-lite.rs repo or the vega.rs would be greatly appreciated.

                    I’ve been playing with Zircon, the microkernel at the heart of Fuchsia some. I’ve been submitting a lot of typo fixes for comments and documentation as I browse through things. I’m thinking about picking up a Khadas VIM2 board to run it on actual hardware … perhaps after Christmas. (And by then, perhaps a Khadas Edge will be viable?)

                    My daughter spent some time this last weekend with some Japanese families to play, and while I talked with some of the mothers, the idea of laser cut nori came up. This too will probably become a project for after Christmas though.

                    1. 1

                      I’d love to hear more about your adventures in Fuchsia! It’s something that fascinates me but I have zero confidence in my ability to make it build and run from git.

                      1. 2

                        A few things then:

                        • I mainly build and run Zircon rather than full Fuchsia. I’m more interested in what can be built on a lightweight kernel at the moment.
                        • I have looked at the Garnet layer some which adds more stuff but isn’t yet full Fuchsia.
                        • Fuchsia requires Vulkan to do graphics, so that currently means no graphics under things like qemu and the like.
                        • I’d have to buy a board like the Khadas VIM2 to get supported graphics hardware to play with that part of Fuchsia, which I haven’t done yet.

                        But let it be said that Zircon (and previously Fuchsia when I built it) are the easiest OSes that I’ve run into to build from scratch on macOS. SeL4 is a pain (and has no real path towards hardware graphics support).

                        I’m excited to keep playing … and figure that it’ll be something that I do over the next year.

                    1. 6

                      I’ve been staying busy in Rust land.

                      I recently took over maintenance of the z3-sys and z3 crates from Graydon and have been working on them. I’ve published a new version of z3-sysand I’m working on updating the z3 crate. (Repo.)

                      I’ve published a long overdue update to my lldb-sys crate that brings is close to being up to date, and this week, I’ll update the lldb crate for the newly bound features. (Repos: lldb, lldb-sys.)

                      I’m slowly working on some RDF-related stuff as well as Linked Data, but not sure what I’ll get done this week on that yet.

                      The final thing for this week is that I’m writing something to use some code borrowed from serde-json to provide serialization / deserialization between Rust and JavaScriptCore. I maintain bindings for javascriptcore-sys and javascriptcore and would find it useful to use serde to translate values back and forth.

                      1. 1

                        I was hoping that meant the Z3 solver. Is it currently getting use for anything? And, if on program verification, have you or anyone else thought of a Why3/WhyML port instead to leverage multiple solvers plus any work done directly in Why3? It’s got a nice, little ecosystem going. Frama-C and SPARK Ada use it.

                        1. 2

                          They are bindings for the Z3 solver. I’ve used Z3 for stuff in the past and wanted to have good bindings for it in Rust. I don’t use it for program verification though myself!

                      1. 6

                        The W3C has never been in a position to block DRM.

                        DRM could be blocked by convincing media companies that they don’t need it, by convincing browser vendors to reject it, or by convincing consumers to boycott it. The W3C’s blessing (or lack thereof) is completely irrelevant to all of these parties.

                        1. 14

                          W3C has been irrelevant since they abdicated progressing web standards. in useful directions.

                          DRM was the absolute last thing we as devs and users needed.

                          Vast javascript libraries is NOT what we needed.

                          Personally, viewing the web landscape today… I think EFF did the right thing.

                          Ignore W3C and find an organization that actually wants to make the web a better place.

                          1. 6


                            1. 2

                              One issue that complicates this is the W3C’s copyright policy for their specifications: https://www.w3.org/Consortium/Legal/2015/doc-license

                          2. 6

                            TBH the whole W3C debate and protest over DRM was a boondoggle.

                            The three largest browser makers are all pro-DRM, and Mozilla is mostly funded by pro-DRM companies. W3C approval or not, web DRM was going to be implemented and rolled out. The only question was whether it would be standardized or if each browser would implement their own.

                            Like it or not, the internet is just a revenue source these days.

                            1. 10

                              If each browser required its own DRM implementation, using DRM would become more expensive and challenging, which is the goal.

                              Why are people trying to save the DRM companies money? Standardization isn’t a goal in and of itself. You wouldn’t want to standardize malware APIs (although arguably that’s what W3C is doing) or JS APIs designed to help pop-up ads.

                              1. 3

                                If each browser required its own DRM implementation, using DRM would become more expensive and challenging, which is the goal.

                                You fundamentally misunderstand the role of standards bodies.

                                If the W3C had rejected EME…all of the browsers would have gone ahead and continued to use the EME standard they’d all already agreed upon and implemented. All that would be happening would be that the W3C had stuck its head in the sand and chosen to pretend a standard that existed in practice did not exist, because they didn’t like it.

                                Standards bodies exist to help facilitate coordination between the browser vendors. Standards bodies are only useful insofar as they facilitate that coordination. Standards bodies have zero power to force browser vendors to do, or not do, anything. If standards bodies cease to be useful for coordination purposes, they will be ignored and replaced by a new body that the vendors can actually cooperate through.

                                There was no universe in which the W3C could force browser vendors to not implement EME, or all do their own thing. The only choice was “acknowledge the existence of EME” or “stick head in sand and become irrelevant”.

                                1. 2

                                  The browsers didn’t require W3C to approve EME to implement it. They implemented it long before it was approved. A ‘no’ vote would not have made anything more expensive or challenging.

                                  1. 1

                                    If each browser required its own DRM implementation, using DRM would become more expensive and challenging, which is the goal.

                                    That’s not the goal, and that premise doesn’t hold anyway.

                                    The expenses around this are pocket change for Microsoft, Google, and Apple, and not having a standard means they SAVE money because they can use their existing DRM. They’d cross license each other’s DRM, and they’d all be compatible.

                                    The people hurt by not having a standard would be people developing new browsers. They’d have to implement multiple DRM technologies, instead of just one.

                                    I don’t like DRM, but it’s not going away, so it might as well be dealt with in a sane way.

                                  2. 3

                                    I totally agree. To me, this seems like throwing the baby out with the bathwater. So, the EFF has abdicated its right to advocate for digital privacy rights as part of the W3C?

                                    I realize that sometimes groups like the EFF need to make a stand, I’m just not sure this is the best way to achieve what they’re looking for, or whether this is the right hill to die on, so to speak.

                                    1. 2

                                      I don’t think it’s just a revenue source, because non profits use it well. It is built for companies and organizations, because it is a client-server model and running servers takes money, initiative, and persistence.

                                      What I am always a bit confused about is: if the internet isn’t good enough, you are necessarily missing (small $) money, initiative, or persistence, but then why is your goal worth anything? Those are all reasonable signals for social usefulness.

                                      Thus, distributed/“libre” networks inherently have little value. You’ll know you’re doing something useful when a few other people are willing to help foot the aws bill.

                                      1. 11

                                        You’ll know you’re doing something useful when a few other people are willing to help foot the aws bill.

                                        I respectfully disagree.

                                        When I was younger, I enjoyed learning about things on all manner of odd private websites. To this day, when I’m feeling down, reading webcomics (many of which lack advertising!) cheers me up. Flipping through archives of essays and memos hosted by people gratis has taught me much.

                                        If I can help give back in that same way by hosting content myself (even silly things like my own blog), then I believe that I have done something useful–quite without consideration for profitability.

                                    2. 5

                                      There’s a difference between blocking DRM and refusing to support DRM.

                                      It’s not a pointless moral play. Refusing to standardize malware APIs makes it more expensive and inconvenient to write malware, even if it’s probably going to happen anyway.

                                    1. 1

                                      It would be interesting to see how this compares with glm in terms of generated code and breadth of API.

                                      1. 6


                                        I’m working on my LLDB bindings for Rust more. I’ve been extending them with more coverage of SBType, SBValue and related APIs.

                                        I also added experimental GraphQL support so that I can query debugger state with a GraphQL query. I’m not entirely happy with this for a variety of reasons, mainly related to how I hope to use such a capability in the future, so I’m thinking about what to do. I’m considering that perhaps something like the Gremlin API from Tinkerpop might be interesting as that would let me support GraphQL and SPARQL and so on from a common architecture. I don’t know!

                                        I’ve been digging into WebRender some more. As of today, I have the ability to (poorly) render text. Positioning and layout aren’t right as that’s something that I must bring to the table, but I’ve done that in the past on other projects and there’s plenty of code out there to help with that.

                                        I’d love to talk with people interested in UI stuff in Rust. I’ve got an early design and a small group of people that I’m discussing it with … and have been starting to build out pieces over the last couple of weeks.

                                        1. 4

                                          Hello everyone!

                                          I’ve been learning about WebRender and started to make some pull requests. I’ve done a couple of documentation improvements and got a minor API change accepted that makes an important part of the API easier to understand.

                                          Learning WebRender has been a good bit of fun and it seems pretty promising. (I’m not interested in using it as part of Servo…)

                                          I’m still working on my JavaScriptCore and LLDB bindings for Rust, as well as the digitization of the 1939 book on butterflies in British India.

                                          My daughter (6yo) has a 2.5 week break between terms at school, so the next couple of weeks will be interesting.

                                          Have a good week!

                                          1. 5

                                            Hello again!

                                            Hope that you’ve all had a good week since last week.

                                            I’m working on a couple of different things in typical programming land …

                                            As some of you know, I have an interest in photographing insects, lizards and other creatures, which I post a lot on Instagram. This weekend, I got a great capture of a jewel bug and had a small photo shoot with it. Also got a praying mantis last week that was wearing a hat made of sticky seeds. I also observed and photographed a wild bee nest and learned about blue-banded bees (which perform buzz pollination).

                                            Well, along that line of thought, I’ve taken an OCR of a book from 1939 about lepidoptera (butterflies, moths) that is in the public domain and am cleaning up the output and converting it into ReStructuredText (for now). I’m hoping to make a lot of progress on that this week. This will probably lead to a blog post or two about some interesting issues that arise in digitizing this sort of material and presenting it to readers.

                                            Have a great week!

                                            1. 6

                                              It has been a long while since I’ve posted here … or much of anywhere.

                                              Just got back from spending a 4 day weekend living in a cabin at a zoo with an educational group here in Thailand. I love getting to hear the sounds of gibbons. I also got to see my first water dragon in the wild, which was really cool.

                                              I just published a pair of crates for Rust bindings for WebKit’s JavaScriptCore. There’s a bunch to do yet, including getting it going on platforms other than macOS. (Hopefully someone that I know will work on the Linux support soon.) There’s also work to be done to let someone expose their Rust code to the JavaScript environment.

                                              Along that note, I wonder what JavaScriptCore will do when it supports WebAssembly on iOS! Will it be able to interpret it or will there be some support for native compilation somehow (via separate processes or whatever)?

                                              I’ve also been posting a lot on Instagram and welcome new followers there, especially those who are interested in seeing insects and other creatures from Thailand and other places that I happen to be.

                                              As for this week … I am hoping that an oleander hawk moth that I raised from a caterpillar will finally emerge from its pupa form this week. I’ve been raising some caterpillars in a large container on my desk in my home office. It is fascinating to watch them progress and then release them.

                                              1. 1

                                                I’m really happy to see that this is using vega-lite!

                                                1. 19

                                                  I use Rust as a daily driver for my hobby work. I also use TypeScript. This work is stuff that I hope to turn into some products in the future or use for building some products and it gets a lot more time from me than the label “hobby” would indicate.

                                                  I like the type system. I definitely use the safety features. I like being able to make sure that I’m not doing useless copies of data as I parse it or otherwise work with it.

                                                  Why am I not using something other than Rust? Well, I’m using Rust in the core of the libraries because I want:

                                                  • Native, yet safe.
                                                  • A C callable API so that it can be used from other languages.
                                                  • Can be embedded into other software within the same process without pain, including on iOS and Android. (So JVM stuff is more difficult.)
                                                  • Can be compiled to asm.js / webassembly so that I can also use these components in projects that must run within JS.
                                                  • A better type system than C / C++.
                                                  • Cargo and rustup.
                                                  • Broad platform support.

                                                  I’m also happy about the lack of libraries for some things. This means that there’s a chance to try to do a better job than some other ecosystems from the start. (For one thing that i’m working on there are several widely used and slightly different APIs in the Java world and an Apache Commons wrapper to try to unify them.)

                                                  1. 5

                                                    Error 403 on trying to view it.

                                                    1. 1

                                                      I can’t edit the orig link? should be http://i.imgur.com/GDP88Eq.png

                                                    1. 3

                                                      This is a positive direction in front end frameworks. I can see why it’s leveraging the popular “reactive” label, but it’s different enough to warrant a different name. It’s more of s simple dataflow-constraint variable nature, along the lines of ConstraintJS, Amulet, and Garnet. (All three from CMU.)

                                                      Much more capable than the current ReactJS line of development. First glance looks like a lot of code… not sure why, maybe to fit in with all that JS, DOM, etc. A good step in the right direction though. Hopefully it will attract some attention.

                                                      1. 2

                                                        Speaking of Amulet …

                                                        I’ve been crazy enough to get Amulet compiling and somewhat running again:


                                                        I don’t know how much I plan to work on it … as doing this much was somewhat random and unplanned, but it has been fun.

                                                        I started out doing it because while I’ve known about Amulet and Garnet for over 20 years at this point, I’ve not run them in about that long and thought that I would benefit from digging deeper.

                                                        Contributions are welcome. There’s plenty to do as not everything works, etc.

                                                      1. 7

                                                        Morning all!

                                                        I’m having a slower week due to travel again. This time, we are just driving around a bit in Thailand. This turned a bit problematic when our first car had a problem on the first day. We resolved this by getting our other car from home and resuming the trip. We’ll pick up the first car from a repair shop on the way home.

                                                        We did get to see a fairly large Asian Water Monitor next to our room on Sunday morning.

                                                        Apart from that, I’m still working on my initial implementation of some RDF stuff in Rust and am writing up a lot of documents about what I’m working on in the bigger picture … I’m looking forward to talking about that more publicly in the coming weeks.

                                                        I’ve had someone working for me for the last week and that’s going well. I’m working on bringing on 2 others in the coming days.

                                                        Enjoy your week!

                                                        1. 7

                                                          I’m basically convinced you actually post from Jurassic Park.