1. 27

It’s Monday, which means it’s time for our (semi-) weekly “What are you working on” thread! Please share links and tell us about your current project. Do you need feedback, proofreading, collaborators?


  2. 17

    This week, I’ve been trying to get back on the horse. I didn’t post an update last week, not because I didn’t do anything, but because I just didn’t feel like talking.

    This has been an interesting week though and I’m finally ready to start talking about my new project.

    I haven’t done much with Open Dylan as I’ve been busy with some other stuff. I did, however, start the creation of a Homebrew tap for Dylan that will work once the 2014.1 release is out. I also added some very basic bash completion for the Dylan compiler. And, speaking of the 2014.1 release, I’ve decided to do the release around the start of December, on whatever platforms work at the time. Anyone interested in non-OS X platforms should get in touch to do builds, testing and fixes.

    For my work, I’m moving to a new project for the client this week. I’ll be working, in part, to track down some performance issues in their code base. This is all emscripten related, and some of the issues may require me to use IRHydra2 to track some issues under V8. This should be pretty interesting and a good challenge. I look forward to learning a lot.

    My new project is something that I’ve only talked about in a relatively private setting so far in any detail. I call it Debug Workbench and it is a programmable, extensible visual debugger. I’ll start talking about real details fairly soon, but if you’re interested, follow along on Twitter at @DebugWorkbench.

    Debug Workbench is being built using Atom Shell to provide the user interface and currently with LLDB as the debugger backend (but this is going to be pluggable). The current target is to deal with native debugging (since I’m using LLDB), but I may expand in the future.

    One of the things that makes this different from existing debuggers is that it uses plug-ins to extend the system. Once you have the ability to set breakpoints that can execute scripts, a lot of magic things can happen.

    One example of this could be a performance advisor plug-in that watches for common API mis-usage, like calling regcomp with the same regular expression many times, or calling write with small buffers frequently.

    Another, much more involved use case would be an extension that watches for calls to accept, bind, connect and reads data from the debugee process and emits events to indicate (to other plug-ins) what is happening in terms of network activity. From there, another plug-in could start a packet capture and monitor the actual network traffic generated by the program being debugged. This is why I wrote about packet capture and dissection from within JavaScript recently.

    By using Atom Shell, I have full access to a huge ecosystem of useful code and capabilities. Want to use D3 to graph some data from your program? Want to use WebAudio to play back an audio buffer or look at a spectrum analysis of the audio buffer?

    The goal here is to open up a whole new world of debugging tools and ways to interact with your running program and this is something that I’m pretty excited about. This has been taking almost every spare minute of my time for the last few weeks and the pieces are starting to come together.

    I’m not entirely sure of the funding model for this yet. I want to keep as much open source as I can, but I recognize that this will need full-time efforts from some people to make it come true. To that end, I’m looking at doing a crowd-funding or looking for corporate sponsors.

    I don’t want to talk about this on other websites yet though as I want to have a better working prototype and some screenshots first.

    Until next week!

    1. 4

      What are your thoughts on Trace-based debugging? ARM’s CoreSight seems popular in industry circles but has relatively little support in open-source tools.

      1. 5

        My overall feeling is that there are a lot of interesting debugging tools, techniques and research projects that don’t get enough attention.

        CoreInsight does look interesting. I’ve talked with some people about the state of debugging in the embedded space, especially some using the MSP430 and things look pretty dire / terrible.

        Another interesting area of research is that of replay / reversible debugging.

        But for now, I want to get the basics working, build a solid platform and keep growing from there.

        I have a lot more to say and a lot more to write … but right now, I want to focus on getting my prototypes of various things into a single coherent codebase.

      2. 3

        Debug Workbench sounds very interesting to me! I would happily support via crowd funding or possibly contribute work as well.

        1. 3

          Great to see you’re working on something like Debug Workbench, Bruce. Creating an environment for constructing operable, visible software is an interest of mine but I haven’t gotten all that far - it’s hard! It’s nice to have something (just about) out there for inspiration!

        2. 7

          Also, I just want to say that I love these threads. This recurring thread is the thing I most enjoy about Lobsters, even though I usually don’t have much of anything interesting to report. Other people usually seem to have impressive projects while I’m usually fixing platform-specific issues in an old version of a UI toolkit that nobody else uses anymore. But I still really love to see what people have to say, and just the generally positive feeling from each thread. That positivity is something that seems kind of uncommon in developer communities, and I really appreciate it here.

          Stay awesome, lobsters!

          1. 6

            Last week, I’ve been working on my desktop setup, I have redone it from the grown up, I used to use ArchLinux but this time, switched to NixOs, which is a linux distro that enables you to configure nearly every part of your system declaratively! That means that you “script” your linux distro, want a new wm, just add:

            services.xserver.windowManager.herbstluftwm.enable = true;

            to your configuration.nix and then run ~# nixos-rebuild switch Here you are with a shiny herbstluftwm, but that’s just a wm, it’s easy one might say… No problem, you’ve just set up a super encrypted hardrive partition using LVM? No need to mess up with initramfs, grub, efi,… just type:

            boot.initrd.luks.devices = [{name = “root”; device = “/dev/sda2”; preLVM = true;}];

            boot.initrd.kernelModules = [“fbcon”];

            Use the gummiboot efi boot loader.

            boot.loader.gummiboot.enable = true ;

            boot.loader.efi.canTouchEfiVariables = true ;

            There are automatic “backups” of your configs, Oooh! You don’t boot anymore? The thing you just seted up does not work? Just select the precedent entry in your boot manager !

            Yes, it also works during the installation process, just write 10 to 30 lines and poof your setup is done, configure that and you are in ! That’s it, and all the configuration is like that, it obviously has some drawbacks, believe it or not but configuring your systrem declaratively requires an entire mind shift, for example NixOs stores packages in /nix/store, which is read only, the /etc/ part of your system is not meant to be edited by the user, instead you should use the /etc/configuration.nix (one of the rare file you will use in /etc). So, that means you can’t use the archwiki’s nice docs to configure a “system wide” program, (use local confs ~/.*) you have to use the NixOs’s user manual, which is really well done when you wrap your mind around it. It’s kind of hard at first, but luckily the iRC channel on freenode is called #nixos and is super helpful. The nix package manager follows the same declarative concept, and is used by nixos.

            A new NixOs user might be totally derouted with so much purity: “What !? my packages don’t put their sh** in /usr and /bin ? How am i going to manually compile with the gcc ?!!!!” The answer is just to write a package using the nix lang, which is a nice high level scripting language, than you can setup packages/build for the nixos, when you are finished. Go read about it ! https://www.nixos.org

            All in all even if it’s new, is lacking some packages, and has at first a feeling of inflexibility NixOs has huge advantages, (that i have mearly stated , go read the link and explore the wiki to find out more :) It’s a super cool distro, and you should try it…

            And after that i configured everything, (through ~/.config and ~/.whateverrc) and yes that took me a week, i like to rice my environnement, here is a screenshot: *Was actually meant to be posted on /r/unixporn but you got it first! don’t mind the cocky-reddit-karma-whoring title http://imgur.com/a/FNBgE


            1. 5

              Did something different last week!

              Worked on small Mac app to play with Swift. I wrote all the code, did the tray icons, and now need to create app icons. Luckily, since we’re firmly in the middle of flat design, making assets is simple! Will do that this week, and submit it to the App Store. With the rest of the time, I’m sure I’ll be doing some more Hython stuff.

              1. 5

                I hope to spend some time adding features to my microKanren step-by-step evaluator. I might also start working on features for the 0.7 release of PureScript, the most interesting of which will be the new approach to rewrite rules in the optimizer.

                1. 4

                  I’ve been continuing my minisat based sat solver, at the moment unit propagation is working, hopefully this week I’ll have the time to implement conflict driven clause learning.

                  Meanwhile also started making some exercises from the easier chapters of Software Foundations, as promised last week, for now I’m enjoying it…

                  1. 4

                    I’m going to San Francisco to give a series of talks, if you’re in SF or the bay area, come say hi! I’ll be around through Sunday if anyone wants to grab a beer, find me on twitter or something.

                    1. 4

                      Last week, I got really intriqued by joy, so this week I’m trying to find the time to implement something like it. Not sure how far I’ll get, but it’s a pretty simple language in all honesty, so if I have time, I think I’ll have something usable.

                      1. 4
                        • Revisiting my minimum look-target size game for the Oculus Rift. This is a good project for people looking to learn more about 3D games, about research, about VR, or all of the above. Ping me if you are interested.

                          (I’m also having difficulty drawing text to the screen, and I don’t know enough about what I don’t know to fix it. If you know anything about Unity, please ping me - kevin@twentymilliseconds.com)

                        • I’m curious about how ticket prices change in the run-up to a game, so I’m writing a Stubhub API client to measure the number of tickets available and the price low. Maybe will produce some pretty graphs in a blog post.

                        • Job interviews

                        1. 4

                          Still working on the hardware accelerator for memcached. Over the weekend I pushed the accelerator unit through the VLSI toolchain and made sure it was meeting timing after logic synthesis. I started a place-and-route run on Saturday and it’s still running today, so no idea how much longer that is going to take.

                          I’m also working on making a NuSMV backend for Chisel. This will allow us to check CTL formulas against Chisel circuits.

                          1. 4

                            I’ve been working on improving MonoDevelop and gtk+ on Yosemite. Fonts were broken and Pango was unable to match the difference between ‘bold’ and ‘condensed bold’. Other issues so far were in the theme engines.

                            So far I’m keeping it pretty simple and just trying to get it to look decent, use the right fonts and colors. But I also started investigating how to add support for vibrancy and I hope to find time to work on that soon.

                            1. 1

                              What process do you use for building gtk+ and such on OS X, and are you working on 2.x or 3.x?

                              We tried doing Dylan bindings for gtk+ and getting our cross-platform UI toolkit to talk to gtk+ … but ran into a huge number of problems, from getting a solid build of gtk+, to figuring out what was a bug at what level, and simply not knowing enough about gtk+ sometimes.

                              1. 1

                                We still use 2.x for MonoDevelop and Xamarin Studio right now (and don’t currently have any plans to change to 3.x). It’s very painful to build and develop on Windows, but on OS X it’s not nearly as bad. Check out mono/bockbuild on github (the monodevelop-mac-dev profile). This builds a lot more than you need, it builds Mono and llvm and everything.. but you could strip it down and make a profile with just the dependencies you need for Dylan.

                                You can use jhbuild if you want to use gtk 3.x instead. I haven’t done this in a long time though.

                                We have a lot of patches in our OSX build. It would be really nice to get some of this stuff ported up to 3.x (especially support for native overlay scrollbars), but it would probably be a lot of work. And I’m not really sure that we get much out of 3.x that we need, which is why we’re staying on 2.x right now.

                            2. 4

                              I am editing my article for howistart.org and it is being reviewed by colleagues. I plan to return to working on the book this week.

                              My dog has seen one dog trainer and I don’t think I liked the trainer a ton (ineffective, coercive technique), so I will contact a diff dog trainer and see if they are better at it.

                              The Validation data type is now part of the either package: https://hackage.haskell.org/package/either - mostly not my work, Tony Morris wrote the original. I made some tweaks, eliminated the need for lens in the dependency graph, exported the constructors and conversion function to Either. I had been kicking this one around for over a month.

                              Bloodhound is headed for a new release soon. I refactored and exposed the functions that convert the BulkOperation datatype into a payload that can be POST’d to an Elasticsearch server. I also changed it from [] to Vector, mostly for memory use and traversal performance. Given the new features like aggregations, I’d like to get released soon. I had some people tell me they would take on some features but none have really gotten back to me.

                              I filed an issue with Elasticsearch to fix their documentation and lack of spec for an API. Bloodhound doubles as a spec for Elasticsearch’s API, even for people that don’t know Haskell. I’m hoping they recognize the utility and importance of having a spec.

                              I’m working on transit support for datomic data in Clojure and Python.

                              My presentation and slides for learning Monad Transformers are live: https://www.youtube.com/watch?v=Go-RR_2I9CU the video production will be better next time.

                              Teaching one of my coworkers intermediate Haskell stuff is going well. They’re flipping out about how awesome Traversable and Foldable are. Incidentally, Foldable comes up in my article for howistart.org

                              I discovered Masters of Reality.

                              I’m still waiting for Nix to fix their broken GHC build so I can return to testing it on my Mac.

                              I’m thinking about playing with some Haskell game dev stuff.

                              1. 3

                                I created a demo of underarm, my asynchronous transducers library based on transduce-async and underscore-transducer. Right now it’s a very minimal extension of underscore-transducer, but I plan to fill it out a bit more.

                                Along the way, I also created any-promise and modified fs-promise, transduce-then and transduce-async to support any ES6 Promise library. Finally I created iterdone to create ES6 iterables/iterators inspired by Python itertools (more to come).

                                This week, I’d like to look at functions to combine multiple transducers similar to existing Rx* libraries, and add more support for other functions in the old release of underarm. And continue down the path of learning more Haskell. I’m a few chapters into “Learn You..” book and “Real World” is on the way.

                                1. 3

                                  This week, I finally got the bifunctor library I’ve been spending time on to a point that I’m relatively happy with. Of course, my wish list for it is still longer than I will ever have time for, but I have the important bits, finally including some formally verified things. However, as far as I know, I am the only person that’s looked at it to see if anything will break, so if anyone wants to take a look at that, I’d appreciate it.

                                  I also just got approved to take an independent study at my university next semester on what’s probably going to be mostly lens-type-things (in computer science, not physics, that is), so I’ve been looking at some papers related to those (this one is great for covering the basics) and starting to look at Edward Kmett’s excellent library’s source a bit more in-depth.

                                  Other than that, this week I’m trying to finish up a couple college application essays (University of Chicago, I love you, but you’re really weird), and read more paper books, as I realized I haven’t done half as much of that as I should this year.

                                  1. 2

                                    It is amazing how fast time flies when you are having fun. Well, at least I consider programming fun…

                                  2. 3

                                    This week I installed NixOS on my Acer C720 chromebook and X60s, and need to grab a second hard drive for the x230 to put it on that too.

                                    I recently picked up sailing, so I spent my weekend not computering; it was refreshing.

                                    At work, I’ve been focusing more on the ops side of getting some internal services deployed using Salt.

                                    1. 2

                                      Last Week

                                      I published a Mac build for Firestr but it crashed and had various bugs. I could not stand that so I fixed them and made another release. I also got a lot of help from many people to test it and I am grateful for that.

                                      One user complaint is that Apps could not be “closed”. So i added an ability to collapse apps in a conversation.

                                      This Week

                                      I will be away at the Amazon re:invent conference. If anyone is going and want to meet, send me a message and we can maybe do food or something.

                                      1. 2

                                        After a year of running without supervision, Lector finally broke down and asked for maintenance. Since I’ll have to code anyway, I decided to revive the project. I have been using a lot of Graphite at work and liking it a lot, so I’ll also use the opportunity to make it work on Lector as well. Let’s sharpen my sysadmin skills!

                                        1. 2

                                          gut: a scaffolding tool for Erlang, like rails generate or yeoman: https://github.com/unbalancedparentheses/gut/. I am really interested in your comments. I want to release the first version on friday.

                                          1. 2

                                            This week is all about midterms and presentations. I have my Formal Languages and Automata midterm (covering regular and context-free languages) on Wednesday, and my Understanding Capitalism midterm on Thursday.

                                            Also on Thursday I’ll be giving a 20 minute presentation about Rust to my Senior Seminar Comp Sci class. I’m planning to highlight Rust’s best features, like borrow checking, pattern matching, lifetimes, and the trait system.

                                            Finally, I’m leading a two hour workshop about Haskell on Friday. I’ll be introducing people to the language, and guiding them through making their first real Haskell program.

                                            1. 1

                                              Having been getting back into games recently, and coming across a good book on developing games with ruby I started playing around with Gosu and getting some game development written. (I did attempt to rewrite a game from my childhood a couple of years ago for iOS, perhaps ruby will be easier this time round… then port!?)