It’s Monday Tuesday and no one posted this Monday, which means it’s time for our weekly “What are you working on” thread! Please share links and tell us about your current project. Do you need feedback, proofreading, collaborators?
This week I’m still slowly moving forward on my timing attack resistant type systems project. I’ve been working on a proof-of-concept implementation of the Montgomery ladder, but it’s tricky figuring out what “counts” as an operation that will take time without full-on writing an x86 CPU in idris, which I want to avoid. I think for now I’m just going to assume that anything in the x86 instruction set counts as one action, but I’m not sure that’s the right decision. If anyone good at crypto or idris who also knows their low-level stuff better than I do has some advice, I’d love to hear it.
Applying to college is still in the planbook as well, and I’ll be finishing phase two of my Minerva application today and tomorrow, after which I’m beginning to really work on my common app. I’m still looking for colleges as well, so if any of you happen to go to or know of a school with a CS program you really love, I would love to know about it.
Aside from that, I’ve been helping to organize a STEM-y merit badge day for local boy scouts with the local chapter of the Order of the Arrow, the hackerspace in town, and our local university’s security club, and that’s been coming along nicely, so it’s cool to see all of that shape up. I finally got all my location stuff worked out, and now I’m just praying no more people who signed up to help out cancel and trying to find replacements for those who did.
good luck with the college apps!
Do you have a write up of your timing-restance idea? I’ve seen some stuff with computational types but you seem to have a different approach here.
(side note: You should apply to CMU! We have smart people who like types here :)
I wrote up the start of what I was doing for my blog. This is actually fairly useless, as in real life equality is evaluated by a single x86 instruction, but I did it more to teach myself how to reason about this kind of thing than anything else. Once I finish the ladder, I’ll probably post that here too, but that’s still very much a WIP. At the moment I’m waiting for idris-dev to accept the pull request I made that adds the function I need to the Prelude, but I should have that done pretty soon. And I am definitely applying to CMU! Whether I get in or not is yet to be seen, but definitely applying.
We have math/type nerds galore at UChicago.
UChicago is definitely on my list of places to apply! I’m actually fairly geographically close, and I love the ethos of the school in general
It’s a unique place, most people either love or hate it (I was in the former camp) feel free to email me if you have questions :)
I’ve spent a lot of time in the last week on client work related to emscripten and my memory / heap profiling / tracing tools.
In Dylan land, I haven’t done a whole lot. I did talk someone into starting to write a SAT solver though which could be exciting down the road.
I also wrote a blog post that was on here for a while about Rich Command Shells. As a result of that post, the iTerm2 author is considering adding Sixel graphics support. I’m writing a follow up post where I discuss some of the issues in doing output-device-type-dependent output. This is a pretty interesting subject to me and hopefully I can communicate some of that to the reader.
The reason that I’m writing about rich command shells isn’t really (only) Dylan related, but I’m hoping to get a new project off the ground in the next couple of weeks. That’s why I’ve been working with Polymer, Atom Shell and other things.
I’m going to be skipping a(nother) beach trip this weekend with my family, I think, so that I can get more stuff done.
Last week, I made progress on implementing exception handling in Hython:
With that, the basics of exception handling are done. I’ll need to do a bit more to implement the blank raise statement (which I call reraise), and the raise from syntax is not yet supported. Looking forward to wrapping up this feature.
Nice, any links to what the language looks like?
Edited in a URL.
Ah, Haskell! I should get back into it. I use still use darcs for all my projects.
I’m continuing my explorations of underscore-transducer. It started as an exercise in comprehension, but I’m having a lot of fun with it and like how things are coming together. This week, I plan on documenting and adding support for examples for transducing over streams. I also need to investigate the alternatives (transducers.js and transducers-js) and see if it makes sense to integrate with, or add dependency on one or the other.
This weekend I was in Munich for the OpenRISC conference. I presented the lowRISC project, in particular our plans for tagged memory and ‘Minion’ cores for I/O. My slides are available here. I’ve completed the tagged memory part of our whitepaper, we just need to work in some more detail on the Minion cores and that should hopefully be ready for internal review in the next week or so, then put out soon after.
I hope to find some time to pick back up work on Pyland this week.
Sweet! lowRISC sounds pretty awesome. It would be amazing to eventually be able to run my software on completely open hardware. Can’t wait to see a Rasberry Pi type computer using this thing!
I know you worked on the Pi, would such a computer use the Pi name? I know they are separate projects, but I think it would be in the spirit of the Rasberry Pi.
Our plan is to release a low-cost development board which would be used much in the way many hobbyists currently use the Pi. We remain separate projects with no plan for a Raspberry Pi with a lowRISC inside badge. The first revision is not going to have a GPU which is important for many current educational uses of the Pi. That said, we hope another spin or two down the line it would be a compelling choice for projects like Raspberry Pi.
My non-work learning is an exploration of web-based graphical stuff in clojurescript that quickly turned into a rabbit hole centered on Conway’s Life. I foolishly thought that canvas would be the bottleneck for generating even small generations and have been focusing on interesting ways to speed it up without depending on mutability. It’s been a pretty mind-twisting experiment that might end in an implementation of Gosper’s approach.
That said, so far om + clojurescript + figwheel have been super fun to work with.
This week I’m working on a toy POSIX-compliant shell. I would like to become more familiar with the complete POSIX shell standard and how basic shells work. pdksh, dash, and rc are my main inspirations.
At work I’m working on migrating thousands of servers and several hundred Puppet modules to Puppet 3.
MongoDB 2.8 is going to ship with a storage engine API. So while TokuMX isn’t going anywhere for a while, we’re also working on a separate storage engine implementation. It won’t have all of TokuMX’s fanciness like Ark, fast updates, partitioned collections, or clustering indexes, but it will have better compatibility with things like text search and it’ll support mixed replica sets.
Hoping to have some good news on that front soon.
Last week I wrote a DSL for creating messages with automatic type safe serialization functions in C++ for Fire★. You can see an example of what it looks like here. The actual serialization code here and the message DSL here. It is modeled after boost Serialization library, but a tad bit more specific. I could have created a boost Serialization archive specific to my encoding, but I thought it might be more fun to write my own DSL.
My goal is to have App logic run separate from the GUI thread. And I decided to use messages instead queue of callbacks. This would require many different message types and that is why I created a DSL to simplify creating messages.
This week I am working on putting App logic in it’s own thread with it’s own event queue. This would make the GUI more responsive and bad Apps won’t lock up the application.
I am going to do it in such a way to make it easy for me to swap out the GUI from QWidgets to QtQuick so that I can eventually port to phones. I installed sailfish on my nexus 5 and am thinking that could be a fun target.
Oh, and last night I updated the website to Fire★. Tell me what you think! Any comments about the layout or wording/message would be appreciated.
I’m trying to get effort put into the second edition on the
book for rump kernels.
Quite a lot of functionality has been added since the first
edition 2-3 years ago. While augmenting the technical descriptions is
easy enough, the hard part is rewriting the introduction to reflect the
new motivations for the project.
I’m also looking at print-on-demand shops to offer a physical option.
That way the answer to people who ask where they can buy a physical copy
can be something nicer than “lpr”.
This week I’m working on learning Haskell via implementing a web application in it. I will be creating a Twitter clone using the Scotty framework. I’ve figured out DB inserts, but now I am stuck on DB selects. I did some Stack Overflowing and it appears that I need to do some monad magic.
As far as work is concerned I’ll be switching to the API team for a bit because they’re moving quite slow, which is frankly annoying because I strongly dislike java :(
Finding a job
This week I am working on Hornet’s fast interpreter. Hornet is a OpenJDK-based JVM implementation that focuses on predictable execution for applications with low-latency requirements. It runs on both Linux and OS X.
I have about half of the JVM opcodes covered now. Hopefully I will be able to reuse much of the code for Dynasm and LLVM backends in the future. I managed to integrate MPS to the VM core few weeks ago but there’s no JVM stack walking yet so it’s not fully functional.
Questions, comments, testing, and pull requests are welcome!
Decided to give up on the idea of attaching USB devices to my home server (I have a raspberry pi that I can use for that instead) and run with SmartOS on it. Quite liking SmartOS so far, managed to get the immediate tasks for the server setup in native zones. Couple of mirrored pairs making up the zfs pool, media being served to the network, internet facing SSH locked down, crashplan server receiving laptops backups on the LAN.
This weekend I started writing a basic implementation of the Kademlia DHT. It’s nothing novel, but it’s a good way for me to learn more about asynchronous networking in C++. This week I hope to finish the business logic of k-bucket management so I can start setting up the networking layer next week.
Hey, haven’t posted here in a while, but I think it’s about time I broke the silence. I’m working on two different class projects.
The first is a syntactic layer on top of Chisel to allow expression of hardware as actors. These actors have input and output queues, as well as internal state. The actions they can take are expressed as guarded atomic transactions, which are scheduled by a dedicated hardware scheduler.
The second is a hardware-accelerated key-value store written in Chisel and integrating with a RISC-V processor. This one might change a bit because it’s apparently been done before.
Fixed five bugs that I introduced two weeks ago! This reads like a metaphor for my entire adjectival career.
Working on the Haskell book still. Up to 44 pages of rough content hammered out.
Met with a buddy to hammer out reshaping my guide for learning Haskell into something appropriate for Haskell.org
Dist-sys meetup tomorrow. Local Haskell class Friday. Work on my monad transformers talk (going to be ripping off Tony Morris' talk on transformers aggressively here).
Just submitted a “game” for iOS to AppStore. I’m currently working on a series of apps for children :P
For $FUN, I’m deploying! Should have a fun prototype to show off of a news-aggregator shortly, but deploying Datomic is really, really hard. I went through the steps to get a transactor/storage running on ec2/ddb respectively, but getting access to the peer library when deploying my app is tying me up right now. If anyone has any tips, they’d be welcome. :-)