What projects are you working on for work or pleasure? Computer-related or not.
I’ve started cleaning up LLDB after it has started a transition from being a heavy user of clang to letting that be pluggable to improve other languages. What happened here is that previously, LLDB used the AST and other structures from clang for a lot of things, especially type information. That’s now been replaced with a CompilerType, but a lot of things still refer to clang, or include the clang-specific headers rather than the new abstract base classes, or just have variables named clang_type rather than compiler_type. I’ve been fixing that up, along with some other minor things, especially build system improvements.
In Dylan land, I’ve been improving our test framework. I’ve added expected-failure? support to flag tests that we expect to fail. I also added some new test assertions that provide more specific error messages, assert-instance? and assert-not-instance?. I’ve gone and retrofitted these into some existing tests for the core Dylan language as well. (There’s always more to do though…)
I also started writing tests for the Dylan compiler for how we look up binding names in environments / scopes. I’m doing this in advance of making some additions to what the compiler can do in that area, like supporting searching for similar identifiers to improve error messages.
I also took care of some TODO comments in the compiler from the 1990s, when it was previously under active commercial development. Most of these sorts of things are pretty minor, but just require validation to make sure that everything is still fine afterwards.
I’ve no idea what I’ll do this week yet, as I usually decide to do things that interest me on any given day. We’ll see. Likely candidates are working on further fixes for our GTK+3 bindings and our GUI system back-end that uses them, or perhaps further steps towards using the memory pool system with our LLVM back-end. I’ve no idea!
I’ve also started using LittleLogs to post notes about what I’m doing. I’ve found this useful for myself in getting a good view on what I’m doing, but without spamming people on Twitter or elsewhere multiple times/day.
I’ve been messing with making a 3D game engine for the last couple of months. Most recently, I got Binary Triangle Tree generation working, and tried to implement multithreaded draw call buffering like Doom 3. Turns out I greatly underestimated how much actually needs to be done - everything OpenGL needs to be called from the main thread and my code makes buffers all over the place. Oh well.
Note that, if memory serves, you can do some texture work (and maybe even buffer filling?) on shared contexts/other threads. I forget the specifics of it, but that might be worth looking into.
I’ve pretty much finished the Java IPFS api. Also just got right-click to share working in Peergos. Peergos is getting close to us starting to roll out the private alpha, a few more UI improvements mainly and possibly switching in IPFS for the DHT.
That’s pretty wicked. The stuff people are coming up with around IPFS is really interesting. So the goal is to have file sharing and a social network (and email) while being completely server-less?
Yes, eventually we want to be totally decentralised. There are some things, however, that are extremely hard to decentralise, for example the mapping between username and public key (whilst ensuring username uniqueness). The hope is you’ll be able to run you’re own Peergos node, store all your files, and access it from any Peergos node you trust to serve up the website. Whilst also being able to share stuff with others. The sharing structure is based on cryptree which Wuala used. It’s a really elegant data structure for cryptographic control over file system access.
Also, email fundamentally leaks metadata so our “key-mail” uses our file sharing api (which doesn’t expose your friendship graph to passive attackers) to send asynchronous messages. Right now we store some encrypted file metadata centrally, but hope to move that to IPNS when it is more mature.
There are some things, however, that are extremely hard to decentralise, for example the mapping between username and public key (whilst ensuring username uniqueness).
It seems like you could use an existing or new authority for this, from DNS to something like keybase.io, and possibly even a choice between providers (“ianopolous.com” or “firstname.lastname@example.org” or “ianopolous@peergos”). Or, given IPFS' immutability, there ought to be a way to do an append-only, first come first served key-value store. None of the approaches are as trivial as they sounds, but it seems like there are a number of ways forward, each with its own sacrifices (namespacing by provider, not truly/completely decentralized, etc)
DNS records or keybase could be removed/shutdown by a third party comparatively easily. A blockchain based approach is another possibility, but would be a lot more work. You’re right, there are options, but none are a clear win or easy and it’s only worth doing once the rest of it is fully decentralised.
Hey! Totally unrelated, but you’re a JPC guy, right? Is that project still being developed? Does it have any chance of running a recent OS (current *BSD or Linux)?
I am indeed the JPC guy. :-) JPC is on the backburner for now because of Peergos (which is also not my day job), but I do want to get back to it. It won’t boot anything modern at the moment I’m afraid (post Windows 98). I’m part way through a port of Bochs to Java, which would be able to run anything. I love emulators.
That’s good to hear. I worked with the JVM quite a bit during my student days, and loved JPC. I even started working on a SB16 module for it (I saw that it now has audio!)
I was hoping to use it to run some small Unix tools from my non-rooted Android (and BlackBerry) devices. I tried OpenBSD but it gets stuck booting the installer disc. I look forward to your bochs port! Keep up all the good work!
Thanks, mate! I love getting feedback like this. :-) I had a lot of fun in the last JPC rewrite (which made it 10X faster) in the disassembler and interpreter generator. A dream is to use an emulator in conjunction with Peergos to have a “secure vm in the cloud” which you can start from anywhere, run locally, snapshot to the network and move machines etc.
I’m learning how to build a Debian package so I can make installation of my open source church software easier for the non-nerdy. So far I’ve been pleasantly surprised – the process isn’t too bad actually. I’m hoping this will make it easier for people to install and keep upgraded without having to git pull and bundle install and rake db:migrate and all that. Wish me luck!
Are you trying to get it accepted into Debian? Making a Debian package isn’t so hard, but making one that passes Debian policy is a lot harder.
No I figured I’d host my own apt repo. Good to know!
Yeah, Debian is really anal about what it accepts as a package. Every file has to be in the right location, there must be documentation, license must be clearly stated, permissions must be right, install and uninstall scripts must work harmoniously with every other package in Debian…
It puts a lot of burden on the maintainers, but as an end user, I usually love the final packaged product. I would recommend trying to make it pass Lintian, or at least do run Lintian to see what it complains about and see if you don’t mind living with its complaints.
Thanks for the tips!
Learning how (ultra)metric spaces work so I can read some papers on realizability. Lately my research project has meant that I’m studying a lot of really cool math so I’m quite happy. I’m also writing a bit on the distinction between formal and computational type theories.
Outside of CS and math, I’ve been cooking a lot and now have to eat my way through the ungodly amount of bread I baked this weekend.
Hm, what interesting ultrametrics are there besides the p-adic? I don’t really know of any applications to logic/computery stuff.
It really is curious how CS people seem to learn a completely different kind of maths than maths students learn.
One interesting one is Term x N U infinity, the idea is that we pair a term with how many steps it needs to compute and then say that the distance corresponds to how many steps the two computations are indistinguishable for. This is handwavy but see “A Metric Model of PCF” for a more precise treatment.
Term x N U infinity
Also yeah, my understanding of more advanced math is essentially what’s required for logic/programming languages so it’s a very synthetic/constructive approach to algebra/category theory. I think it’s nice though :)
Oh god, too much logic and set theory, I’m running away back to the safe confines of zeta functions and integral transforms. I might try again to read this later. I didn’t even know what “PCF” meant.
You have a funny definition of “safe” from my perspective :) I suppose we’re starting a type theory reading list so if you wanted to know what pcf is…
Finishing up preparations for my talk this week at Rocky Mountain Ruby, titled “Simplify Challenging Software Problems with Rocket Science.”
This week I’ve ~complete a JVM implementation of the IPFS client API. Although written in Scala, there are working examples in the repo for using the API from a Java project and it can be included with one jar in the Java classpath.
Great to see someone working on improving gtk+ (on Windows or anywhere else)!
For work, Stuff. Mostly with making sixpack work more smoothly in production. (https://code.facebook.com/posts/717010588413497/introducing-6-pack-the-first-open-hardware-modular-switch/)
I’ve been messing with writing a thread library for my pet language, Myrddin. It turns out that futexes are pretty nice to use, and if you don’t try to support every feature under the sun from pthreads, you can do a pretty good job of writing terse, easy(ish) to understand locking primitives. For example, a mutex looks like:
On to OSX support. And then thinking about higher level primitives. Anyone have any thoughts on what that should look like for a C or C++ like language? Good comparisons of thread APIs?
I’ve also been hacking on getting a parser generator kind of like yacc into good, production ready state. Since it’s a result of yacc shaving, I’ve decided I’ll be calling it ‘hairless’. Planned features:
But right now, it’s hovering around feature parity with combined lex and yacc. The input files look something like this:
Still trying to get Linux booting on a MMIO-enabled version of Rocket Chip. Made some progress though, at least I know what the bug is.
The problem is pretty subtle. Essentially, in our RISC-V chips, we boot Linux using a first-stage bootloader called BBL, which runs in physical addressing mode. The kernel occasionally traps into the bootloader to handle certain IO tasks. The issue is that the branch predictor has been trained to expect a jump back into the kernel. The instruction cache then issues a speculative load of the kernel instruction address. But this address was loaded into the BTB when virtual memory was turned on. With virtual memory disabled, the TLB simply identity maps the PC to a physical address in high memory. An address which, of course, does not correspond to any valid region of physical memory. So the correct solution is to modify the TLB so that this results in a page fault.
You cannot imagine how difficult it was to track down this bug.
I have two things I’d like to focus on:
After a long hiatus, I’ve returned to work on my simple Clojure interpreter in Swift. Right now user-defined functions are directly interpreted, with each expression evaluated verbatim. I want to provide an alternate, more performant mechanism for executing such functions, and the first step is probably to define a less cumbersome AST representation for the expressions within the body, which can then be optimized and transformed into some sort of bytecode. (I’ve wanted to do this for a while but wasn’t sure where to start.)
I want to revisit the wonderful world of FPGAs. I pulled out a old Digilent Nexys board and installed Xilinx’s ISE software; got a very simple “hello world” program (that just turns on or off some of the board LEDs) loaded successfully. I think I want to try building an ALU, but first I’m going to work through some of the examples in this book to practice.
Let’s merge this with the other thread!
Woah, is this a new feature?
Saying no to almost everything (mostly quadrant 3).
I’m sorting out a re-factoring of a dopewars clone I’m making. The old code is on github, will be posting the new stuff by Thursday methinks.
I’m in the Mountain View office this week, which means a lot of talking to coworkers and design work. Also trying to figure out a decent way to keep multiple Caffe models resident on a constrained memory device. And possibly some Django stuff; although I’ve been trying to avoid web programming like the plague, I am a responsible coworker and thus will help out wherever possible. But … urgh.
Other than my day job, I’m working on getting over this bad head cold. Bah, and also: humbug.
I’m trying real hard to get my open source glucometer to version 0.1 -> Gluco. I’m in Finland for the Biohacker Summit this week and I’d like to have something to show the attendees.
I’m also working on exploring Helsinki :) If anyone happens to see this and has recommendations for awesome things to do or see, please send them my way!
I’m exploring using a graph db (neo4j) to map out what my friends and what they’re sharing online. At the moment, I’m pulling in my friends' github activity. It’s a silly use-case, but it does kind of bother me that all this interesting and relevant data is out there and all GitHub does is show me a few recent actions friends have taken.
Last week I set up a foundation for multiple instances of my app to connect and share graph data by querying friends' or friends of friends' graphs, with a few reduction methods and some privacy controls. I’d like to figure out a way for a user to maintain an accurate graph of people, things, and activity between those people and those things, but only for about one degree of separation (what we have access to via APIs). Then, to get a broader picture, query n degrees out. e.g. What repos have people in my extended network recently starred/watched, or depended upon within their projects? What places near me have people in my extended network reviewed on fourswarm, yelp, etc.?
This week I am wrapping up my work at my current employer as I am moving to a different job after almost 8 years. I am also moving from Chicago to Seattle.
Any good meetups to join in Seattle for a poor programmer like me?
Just saw this: https://twitter.com/czaplic/status/646380083742019584
Elm is really cool if you’re into frontend dev and functional reactive programming.
I’m continuing my literature review/search for a paper I’m working on (tl;dr summary: unlinkability on twitter). It feels kind of like I picked the intersection of two (relatively) little-studied areas (unlinkability, online social networks (especially twitter-likes)). That’s nice because it means there is a clear novelty to what I’m doing, but also not nice because it makes searching for supporting work a pain sometimes.
Just finished a massive project using Python with Apache Spark 1.4.1 (via pyspark), running on a massive YARN cluster on Amazon EMR. A few hundred terabytes of data transformation later, and the feature was shipped. Now I’m spending this week refactoring the results and sharing what I learned with my team.
Work: Visiting Edinburgh for our semi-annual internal hackdays! Aiming to build a new internal service to replace a google document using Lotus which should be quite interesting.
Outside of work I’ve been playing with celluloid with the aim of writing a stats collection script to shove stats into influxdb for graphs on various things at home. Also thinking I should spend some time teasing private config out of my puppet modules for the home server & start publishing the modules.
Broke a spoke on the rear wheel of my bike for the second time late last week, which is just a bit irritating. At £16 for a replacement spoke & true at the local bike shop, I’m half minded to buy a decent pack of spokes & a truing jig and just rebuild the wheel myself with stronger spokes. It is a cheap stock Mavic wheel after all, they’re not rated as super strong out the box. Hub & Rim are strong enough, just needs some better quality spokes on it.
I’ve found Etherpad (and Etherpad Lite) to be able to take on almost all of the tasks that leveraged Google Docs.
I completed the jmxexporter performance improvements. Still have to get started on improving the clientpython for Prometheus, and I’ve also got to rework my entire build system due to changes in how Prometheus builds.
On the plus side I finally got my post out on audio alerts.
I took the week off and am going to work on some content for my blog/youtube/a new book. It’s going to be PostCSS/css-modules/babel/react/redux/webpack-type topics.
I pitched at the TC Hackathon yesterday and might continue some work on that project (“Automated Docker Releases from git tag”).
Mostly vacationing though.
outside of work i’ve been playing around in yesod and finally got a pretty good understanding of how websockets work there, and TChans, to deal with messages coming in from the sockets and internally around the application itself. i also figured out how to get forms working the way i wanted. the website pi-base has been a huge inspiration.