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.
I’m improving my Prolog knowledge by working through some books and exercises. I decided to double down on Prolog as a means to better understand logic programming in Shen and Oz. I was pleasantly surprised to find that Prolog implementations are quite capable development systems in their own right for the types of things that I do.
What types of things are those?
Some things I’ve used it for include:
Can I ask what books and resources you’ve used?
Prolog Programming in Depth is available in PDF form and was a good start for me. Clause and Effect by William Clocksin is a useful workbook. Art of Prolog and The Craft of Prolog once I had a better grip of the language. SWI Prolog is the implementation I’m using and it has good documentation, including writing web applications. SWISH is an online IDE for using SWI prolog for trying things out without installing.
For learning about constraint logic programming in prolog I used Logic Programming and Prolog supplement and Constraint Logic Programming over Finite Domains.
Concepts, Techniques, and Models of Computer Programming was useful for mapping to/from Oz.
Cheers; I’ll take a look at some of those :) I’ve worked through Programming in Prolog so I think I’m ready for something a little more advanced.
Polishing up my little project of an app. GTK is depressing.
If you don’t mind writing a little about it, what are your biggest gripes with gtk?
Well, a lot of it is the tooling. I’m using GTK#, and it doesn’t help that’s been a bit neglected, and the visual designer is… flaky at best. I’ve had it puke on generics and not generate code. Apparently I should migrate to GtkBuilder to create the UIs instead?
I’m also not a fan of some other aspects; the MVC tree view is nice, but a bit painful if you have your own Model/Controller behind the scenes, as you now need to sync them. Drag and drop is a bit awkward to deal with; still need to handle that. The built in controls are a bit rigid and hard to override their functionality. (I’m doing some stuff with ColorButton and would like to override some behaviours as I want to keep most due to them having some hard to implement functionality built in, but again, pretty rigid.)
I’m not sure how much of this is my fault for inexperience and picking the perfect storm of bad tooling, or how much of it is actual GTK suck.
tl;dr: You’ll never take my thin wrapper around Win32 of a GUI toolkit away from me!
A few years ago, sick of trying to interpret structured data with regexes, or beating my head against lex/yacc, or trying to express declarative pattern-matching with objects and method calls, I came across a parser definition language called OMeta that was concise and straight-forward while still being extensible. I fell in love and decided I needed to make it more widely known, so I sat down and wrote a Python implementation of those ideas. And not just an implementation—I decided I was going to have the best documentation.
Anyway, I got to the point where my parser was self-hosting (it actually compiles the input grammar into Python bytecode, via Python’s ast standard library module), and I released it, and while (I think) it was a good first step it wasn’t very practical, and nobody paid much interest. I got a new job about then, and didn’t have as much free time, and shelved it for a while.
But recently I’ve been playing with the code again, figuring out ways to generate nicer syntax-error messages and some of the less-fundamental conveniences from OMeta, and generally polishing it up. I am definitely reminded how much of a force-multiplier a good parser-generator can be, though: every change I make happens once in Python in the bootstrap parser, then again in my parser language for the “real” parser, and it’s amazing how much easier it is in a DSL designed for the tasks.
I was given an offer from Google today, so (as was planned in this eventuality) I dropped out of university and began preparations for starting (working out what I’ll take to Munich, shopping etc).
I also started a notebook this week that I’ve been writing, well, notes in while I read blog posts. The aim is to increase retention, jot down (instead of forgetting) any ideas that I have, and to enable me to reference it when I can’t quite remember where I read something a few weeks ago. So far, it’s been great.
$work: upgrading an old ubuntu database server from 12:10 to a current supported release
! $work: playing with vmm on OpenBSD
This week is mostly about social engineering—in a nice way. Most of my company work remotely, but this week we’re all together at the head office in Munich, Germany.
Have fun! ;)
Finishing unfinished projects, jumping around randomly and trying to make progress. Got a prototype of an X11 activity tracker working, managed to rewrite it in Vala (that was a pain), and now I should be working on storing the data in SQLite and adding a GTK+ GUI to display some stats, which is the sole reason why I bother with Vala in the first place.
Keep us posted on the activity tracker!
I shipped 1.0 of watchexec, my Rust-based file watcher, last week.
This week, I’d like to publicize it better, but I don’t really know how. I’ve always been pretty lazy about this stuff, but the whole reason I wrote it is because I could never find a simple file watcher that did exactly what I wanted.
This week’s side effort is to learn Go (the language) and publish something on GitHub in the end so that somebody else might find it useful.
I’m digging deeper into the amateur radio world and interviewing with a tech company.
I took the one-day General license class at Pacificon on Friday and passed my General license exam in amateur radio! But then I failed the Technician license exam and had to take the one-day Technician license class on Saturday. Fortunately, I was able to pass the Technician license exam after the Saturday class, and my General license will be sent from the FCC shortly.
My first task in the amateur radio world is to learn Morse code, even though it’s no longer a requirement to pass the license exams. I want to work with the CW/SSB bands before moving onto more sophisticated digital stuff.
So, having said that, I am learning how to write Morse code with a keyer that I purchased at the Pacificon swap meet on Saturday. Here’s a picture of the keyer.
How big is amateur radio these days? Has the community dwindled? Grown? Remained stable?
First full week since I moved from Development to Operations at work, continuing to not break all the things >:-)
Figured out why my iOS app was crashing on boot, Healthkit requires an undocumented key adding to the Info.plist! Once that was done, got the point I can list & inspect workouts stored in the health store. Next up, exporting a workout as TCX file. (End goal is being able to record workouts on my watch/phone, and export them into Strava as that’s my central point for tracking exercise.)
For monies, I’m gonna be working on a lambda architecture (yay very much).
For homestuffs, I’m still taking the data science class, starting module 3 of 5, kinda halfway there. It’s been super interesting so far, lots of cool case studies that I haven’t had the time to touch yet, because most of the material throws tons of stuff I’m not familiar with to my face at every turn. Especially the math. Learning a ton, which is cool, but also learning about the existence of new things I didn’t know about and pretty much need to know. So, new learning paths unlocked. FUN! Gonna dump tons of skill points in there.
It’s also the first time in over a year that I see, maybe, a path for career growth within the company where I work. I intend to push hard ‘til I get there.
Are you doing an online course or something at the local universities?
Oh, you left Mtl, didn’t you?
Not yet, I’m only getting the house in May. Well, I’m gonna own it starting December, but yeah. May.
For the course, I’m getting the Data to Insights course from MIT Professional Education program. I eventually wanna get myself a master’s degree, if I can get someplace to accept me on a professional basis (ie. I don’t have a bachelor’s degree), and with my current situation it’s not something I can consider yet. I still want the knowledge, and I figure that this course is a good starting point.
I failed last week to do much outside of work. This week, I’ll hopefully surf 3 times, work on my little toy language jubil, and do a lot of reading.
This week is all about finishing and polishing my talk for Rust Belt Rust (it’s next week! I’m so excited!). This will be my first time speaking at a professional conference, and while I am generally a comfortable public speaker I’ll definitely need to practice a lot beforehand.
I’ve suddenly found myself with more free time on my hands, so I’m going to be doing a few things with Myrddin:
If I have time, I also intend to try making the thread library more robust, and actually putting it to use in some real code that I use on a daily basis. Unfortunately, I don’t have a mac any more, so I can’t really test too much with the kernel primitives OSX provides, and those seem to be some of the more painful ones to use well. So, OSX keeps spin locks for a little while longer.
My boss gave me an out-of-warranty 1U blade server (HP Proliant) and I’m trying to mod the fans to be quiet enough to run in my office.
Every vendor has their own proprietary fan pinout, but it may be possible to spoof this one into thinking the fans are connected even when they are not. Then I can attach my own fans.
If spoofing fans doesn’t work, I will add a resistor to the red wire in order to drop the voltage down from 12V to something like 7V. That will at least cap the fans' maximum speed.
Deconstructing the static site generator I built to enable it to run on multiple “backends” and arbitrary “frontends”. This will mean it is no longer tied to React/Relay and can use anything to render routes (pug, Preact, PureScript, etc). Step 1 is pulling out a package that turns a directory of files into a GraphQL API/Schema.
At work, attacking a few legacy database architecture problems, this time less with aesthetics and more with insanity. I don’t judge, because I’ve left my share of legacy landmines behind for those less fortunate to follow, but at times the urge to burn it all down and start over from first principles is strong enough to make me put the keyboard down and go for a walk around the block.
Otherwise, I’m toying around with overengineering my blog, which is updated so infrequently as to really be dead; I had been using Jekyll, but I don’t like having to maintain a Ruby ecosystem on my machines if I can avoid it, so I’m looking at other solutions. I know I’ll end up rolling my own static generator, but …. ugh.
I also need to lose a bunch of weight; my back and knees are telling me this, and it’s getting to the time of year that, if I’m not in the habit of exercising, I’ll just end up never leaving the house. Overcoming inertia is my problem here, but I think I can find something fun to do.
Getting unit testing into my ‘lizard brain’. I still often find myself only thinking of it late stage, after having made design decisions that make testing harder than it should be.
Last week, I contacted a few groups about interning, since I generally do not meet the educational or experience requirements for pretty much all programming jobs around here.
My Osprey Atmos 50 arrived today, so I’ll be wearing that around stuffed with some weight for practice. We’re thinking about places to backpack over Thanksgiving break. I’m also giving some consideration to a local community college - I’m getting anxious over my work situation, and I’m thinking that maybe it’s time I go back to school (might help with getting responses about interning).
I’m also continuing with the OCaml MOOC and studying up on Clojure. I’ve been thinking about functional programming and immutable data structures a lot, so I decided to start rewriting my simple data structures library in more “functional c”. Avoiding mutation, writing functions with fewer or no side effects (not changing state?), and so on. It’s a fun distraction.
I’ve been in that same place and it’s really frustrating how this industry lacks organization to get people that have the drive to teach themselves things at home “in” to the industry, because every job I’ve gotten up to this point has always been from networking, friends that are already “in”.
building a visual query-builder to get at the timeseries data collected the load testing application i’m making. it’s a really simple s-expr syntax tree but translating that to a visually intuitive thing is challenging. almost there though.
and on call for work ._.
This week I want to package Fire★ in either Appimage, snaps, or flatpak for better support across linux distros. I am leaning towards AppImage…
Anyone here have experience in any of these? I would love some feedback on which to focus on first. For some background my app is native C++ using Qt5.
Trying to write up a way for chez scheme to build a single all-inclusive binary. It’s not going well.
Tried out on chicken, but chicken-install largely couldn’t handle a local chicken directory? And then guile can’t return a port for stderr when you run a process.
I think I know why everyone writes their own scheme now.
When not at work: Filter and find some issues on open-source projects that I can help with (related with the hacktoberfest) and prepare some idea for the weekend since I will participate in this year’s Ruby Rampage.
Note: Cool ideas are welcome
Finally, finally ring-fencing time for the Stanford/Andrew Ng Machine Learning course on Coursera. I wonder how far I’ll get before reality gets in my way…