This is the weekly thread to discuss what you have done recently and are working on this week.
Please be descriptive and don’t hesitate to champion your accomplishments or ask for help, advice or other guidance.
It has been a busy time, but so incredibly fun and rewarding.
All of the projects that I discuss below (and many more that I still am working on locally) (but obviously not client work) are welcome for contributors and help. I’m willing to mentor people new to Rust who’d like to help out with these.
I’ve been doing some iOS performance analysis work for a client. But not much to say about that.
I’ve also been doing a bit of Rust work on contract for someone. That’s been a lot of fun. (And I’d be happy to talk about doing other Rust work on contract…)
In April or so of 2015, someone at Microsoft submitted some C wrappers around the LLDB C++ API to make it easier to do some language bindings. They never went anywhere unfortunately, but I dug them back out and started rehabilitating them, resulting in lldb-sys.rs and now I’m working on safe, more Rust-like bindings in lldb.rs.
I did a couple of minor improvements on my ICU-like message-format.rs. This still needs a bit of love to finish up parsing plural and select formats. Help here would be welcome. (I would also like to see this library grow support for Mozilla’s L20n format.)
I’ve done a bunch of work iterating on fixing some issues in rust-metrics and have more that I plan to do there.
This week, I need to make headway on my markup library. I don’t care at all about the surface syntax, but what I need is the document AST so that I can construct it in code and render it to a variety of text formats like plain text, HTML, native controls, etc.
I’ve also been reading a lot about how computer algebra systems are implemented and have been trying to find a representation that I like and that I feel fits in well with a Rust implementation.
It is also my daughter’s last week in school for this term and her summer break starts at the end of this week. I need to head to Indonesia in the later part of early July, so we’ll start to book that soon and take a week or two in (probably) Jakarta and Bali.
Hope y'all have a great week!
It’s my 21st this week so I’ll be polishing a winforms printer driver project at work and then I’m off to spend the weekend in LA county to ride my bike around with friends.
Happy early birthday!
I’ve been learning Prolog (doing a little bit each evening) and reading a little fantasy. I’m going to be visiting Lichtenstein and Tegernsee (a lake near Munich) at the weekend, which should be awesome!
Giving a (yet-to-be-announced) talk next month at the Houston Ruby Brigade, about a presenter library that I’ve extracted from a project at work. The draper gem rubs me the wrong way for a few technical reasons, but also calls presenters “decorators”, which is just weird.
Repo for my library is here, but I need to sleep before I can get around to writing a solid README. Sorry if that makes it underwhelming to look at. At least the tests are where I want them to be!
I’m test-driving the library this week at work (in gem form rather its internal, pre-extracted form). Once I’m satisfied that it works just as well I’ll tag it as 1.0 and work on the talk. In order for the talk to make sense I think I’ll have to explain my broader opinion on maintaining sanity in the view/presentation layer of a Rails project (i.e. use distinct view objects, form objects, presenters).
Starting my new job on tuesday! The main stack is php so I’m going to have to get back into the language.
And though I had secretly hoped never to have to write php again it might be interesting trying to tangle with both old spaguetti code and a modern laravel app.
I’m also starting a new contract writting a small website for a hair salon. I’ve been trying to get a decent hakyll build on gitlab-ci. I can get it to build, but it takes so long I need to find a way to cache stuff.
This the worker co-op?
I’ve used Hakyll with Circle CI and the caching helped a lot…
Yes exactly! I decided to give it a try, worst case scenario I still have a few contracts to sustain me. Though one of those contracts is fixing a horrible mess of a wordpress website, the main page makes my cpu work 50 times more (from 2% to 99%)
Without caching the gitlab ci takes about 30 minutes to do a build, I’m trying to bring it down to 5.
That’s neat. My workplace (http://positiondev.com) is becoming a worker co-op, so I’m very curious about other tech co-ops.
The main concern I have about coops (at least the way mine is implemented) is that there is no distinction between employees, the senior dev is payed the same as the junior, the only variation being the number of shares and the number of hours. I feel like it discourages long term commitment to the company.
Everything is going well on my end. I am working on a simple reimplementation of a web server for fun written in C to keep pointers / network programming fresh. Also working on keeping up to date for frontend web technologies at my job. Overall things are going well.
Work: trying to make heads/tails of my direction on this next paper. It is a continuation of the topic of an accepted paper, but I feel like I’m in a bit over my head. I’ve been asked by my advisor to try to parallelize our greedy approximation algorithm, which would be relatively straightforward giving recent literature except for a catch: in the interesting case our greedy function is not submodular. Submodularity (aka adding elements to the solution suffers diminishing returns) is key to most general works on greedy approximations. We worked around this in previous work by proving bounds in a submodular special case and then showing that in practice the supermodular case had similar results. However, I want to omit the (uninteresting) submodular case from further work, so we’d lose that comparison. Besides, proving bounds for the supermodular case would be valuable.
Unfortunately, doing so means we’d be unable to directly re-use work on stochastic optimization and the parallelization linked above (along with every other greedy parallelization I’ve seen). I may be able to re-phrase the objective as submodular, but the result will not be as obviously correct as the supermodular function.
Personal: I fought a bunch with gram/guile over the past week trying to implement (jump-to-workspace) in terms of dmenu selecting a workspace by name from a list. Guile has a really nice IO-port system that opaquely manages subprocesses, but unfortunately lacks the ability to close the input and output separately, so I worked around it with some /tmp/file shenanigans. The result was inexplicably causing Gram to hang when called by a keybinding, but not when used at the REPL. I figured out the reason this morning: calling waitpid (indirectly, which is why it took so long to figure out) on the render thread (aka by keybinding) prevents dmenu from ever being rendered, and therefore from exiting, and thereby prevents waitpid from returning. Oops. Temporary workaround is to count on Guile to automatically reap the process when the handle for it goes out of scope, but I’m planning to move hooks into their own threads so that in general a runaway hook won’t cause the WM to hang.
Last week I quit my job. It was sad to say goodbye to coworkers, and a scramble to get everything done, but I’m excited to relax and do some reading and some fun side projects.
I am not sure what’s going to be next, professionally, but I put up a “hire me”/consulting page: https://kev.inburke.com/consulting.
Last week I started benchmarking my friend’s Go logging library, and found a bunch of performance improvements.
The bottleneck eventually was Go’s underlying JSON library. I started benchmarking that over the weekend, and found a 10-18% perf improvement in that.
Anticipating a few possible job offers this week, hoping to accept one by Friday. Building an Instant Answer for DuckDuckGo.com to make simple conversions of hourly rates to salary. Hacking away at a Rails 5 project that’s been on the back burner. Writing material for my Americana album.
Thanks to help from Slack, figured out a trick for getting some ruby'ish code to work in Haskell sans dot.
Reading Calendrical Calculations.
Writing a library to support draft-js in Haskell.
Editing the book.
Putting finishing touches on my parser presentation for a local user group.
Working on a library for parsing with Earley + Intersection Grammars in C. This approach gives all the possible parses for text with multiple derivations (sharing structure to avoid a combinatorial explosion), and also gives info about what partial parses got stuck at. The latter can be also used as a sort of autocomplete, but I haven’t figured out how to incorporate it into the library API.
I’m hoping to get back to theft soon. I got a bit too ambitious for the next version; I’ve put several months of weekends into it without a new release, and needed a break. I added a supervisor/worker process model, so it can detect and replay crashes or timeouts (with shrinking), and also use multiple cores for running tests. It needs a bit more work, particularly the new documentation.
I’m building an Atreus keyboard kit. I’m excited about the wood staining, and customizing the keyboard firmware. It looks like a great travel keyboard.
Work: I’m working on a cellular uplink for one part of our embedded platform, and current consumption monitoring for another.
Finally back to working on https://neuralobjects.com stuff again. The last couple of weeks have been fairly unproductive for various reasons, but I’m hoping to get a lot done this week. Right now I’m reworking the build process a little, and about to deploy a new build to test out some changes in the way we package and build the system. Basically, we use ServiceMix as a container for, well, services. Before I was just dropping our bundle in the deploy directory with a bunch of our jars, but I finally go around to setting up the pom to build a kar (Karaf Archive) feature file.
Functionality wise, I’m still working on having the provisioning process update an object in the database as it works, so we can show the user a progress indicator as it works. Once that’s working, I plan to add a feature to alert the user (via email, xmpp, etc.) when an environment provisioning job is done and an environment is up and ready for use.
Once that is done, I need to do a little more work on the billing stuff (a portion of the monthly charges will be variable depending on resources used) and more work on the API for interacting with the environment (that is, the API for uploading data, defining models, trigger training jobs, making predictions with a model, etc.).
And then I think we’ll be ready for an alpha / soft launch. Piece of cake, right? :-)
Work: Finding patterns for better user conversion (using R)
Side Projects: Trying to build data science libraries in golang from scratch (mostly for self-learning purpose). Would make them open-source once I finish off with the first segment, which is basic stats and error functions.
Work: Fixing firebase permissions and trying to solve the issues it started having since their 3.0 release, mockups for a new section in webservice then prototyping it & writing frontend and backend code for it.
Side projects: Helping DuckDuckGo with their new stuff, learning more Go language.
Trying to drive into town from the burbs as a means to make a case to let me wfh to my bosses when i buy a house in the burbs. Aside from that, general awesomeness, bodyweight exercises, getting in touch with recent frontend tech even though I’m more comfortable in the backend world.
Back from much needed holidays, so this weeks means catch up and planning, which feels like work but we all know it’s not “real” work…
Finally done testing and benchmarking differents emulation framework. Happy with the results, some of those frameworks' maintainers seems to be looking to improve their performance. Now I can start another project to help reverse engineering known functions.
I plan to use emulation to run arbitrary functions and test different input and look at side-effects and return result to be able to identify it if it match known behavior. For example, if I have a function unk_fn and the following assertion are all true: unk_fn("test", "test") == 0, unk_fn("test", "xyz") < 0, unk_fn("test", "abc") > 0, then it is likely that unk_fn is strcmp. This concept could then be extended to identify common STL API and OpenSSL which used to be time consuming when reversing stripped binaries.
unk_fn("test", "test") == 0
unk_fn("test", "xyz") < 0
unk_fn("test", "abc") > 0
Even though Miasm emulator look really fast, the lack and documentation make me apprehensive to use it versus Unicorn, which is well documented and the author really active. I feel like Unicorn’s hooking API is also quite powerfull, making it easier to trace function’s side-effect. Only big downside is that Unicorn is really only an emulator API and leave all the ELF/PE parsing, dynamic loading and syscall implementation to me.
Beating my head against redshift; while it’s pretty good at what we use it for, I am beginning to wonder if it would make more sense to just ship them a box of tapes because loading, even from S3, is Not Particularly Fast.
Work: API’s for a new client
Home: Learning more Go, woodoworking
Other than my regular work, this week I plan to test and play around a bit with the new beta version of django and try to proceed on learning rust.
For my “old job” I’m doing medical insurance claims ETL. To get ready for my new job, I’m learning about streaming epilepsy detection for EEG data following the results here: http://ieeexplore.ieee.org/xpl/login.jsp?reload=true&tp=&arnumber=1020545&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D1020545
It’ll probably just be a toy (or maybe just a proof of concept) at first since I don’t know much about EEGs (yet!)