1. 17

This is the weekly thread to discuss what you have done recently and are working on this week.

Be descriptive, and don’t hesitate to ask for help!


  2. 13

    I’m working on internet access projects in Athens, Greece, half focussed on supporting refugee housing projects, half focussed on building community wifi for residents. Athens is a really exciting place to do this because the city is basically bowl shaped, very uniform rooftop height and surrounded by mountains; it’s a great environment for installing wifi antennas.

    Have a lot of sub projects going including looking at mesh, installing a rooftop WAN with PTP links, figuring out VPNs for external access to internal services and to transparently mask outbound traffic. This week getting a bit more organised, installing some local services, drafting community wifi toolkit, and maybe getting a few more locations hooked in to the network.

    1. 1

      Sounds like great fun! Have you looked into potentially using cjdns in the mesh network?

      1. 1

        Nope. Should I? I have a strange memory of seeing someone from the cjdns project talk at a Bitcoin conference in London and for some reason he got laughed off the stage. Is it now a solid project? It’s unrelated to DNS, right?

        1. 1

          I’m not sure why they would talk at a bitcoin conference as it isn’t related to bitcoin at all. It does indeed seem pretty solid now. It’s an encrypted IPv6 network and routing overlay, so yes, independent of DNS.

          1. 1

            Yeah, i wasn’t imagining it: https://bitcoinmagazine.com/articles/annual-bitcoin-conference-takes-place-in-london-1348247615/ ;-)

            I’ll take another look, thanks for heads up, this is useful as I’m getting stuck in learning about mesh protocols. batman and bmx mostly what I’ve been reading about so far

      2. 1

        Is this as part of AWMN 1 or is this a different project/effort altogether?

        1. 1

          AWMN is dead, Jim. Unfortunately it’s a mostly failed project due to massive internal conflict. We do attempt to interface with what is left of the AWMN infrastructure, but this is a separate project.

          1. 1

            It used to be huge

            1. 1

              yeah, it’s very sad really, it was really an amazing thing. They still report 1000’s of nodes although it’s not clear how many are actually still active and/or taking part in AWMN.

              The poster-children of community wifi these days are Guifi and Freifunk

      3. 4

        I’ve just started a side project with lots of ideas to leverage it. Right now, just focused on writing content but plenty of different directions it can take in the future, as an authority site, with services or products. Still in the “in love with the idea” phase, counting the days until I start to see the pitfalls, as usual!

        I’m working on my “miracle morning”, that is: getting up at 6AM every day, and write a blog post by 8AM, then walk the dog and prepare for the “day job”. I used to get up at 8AM in the last 10 years, and waking up earlier is a nice productivity feeling. It’s still morning and I feel I did a lot already, which helps mitigate the always present feeling of not being productive enough.

        Spring is here, so nice walks with the dog and vegetables in the garden are starting to raise, looking forward eating my self-grown food this summer, as usual.

        1. 2

          What time do you go to bed in order to get up at 6 already? I would really like to do something similar, but I just don’t have the energy to stand up once the alarm goes off and I remind myself that I could just as well sleep for another hour or two.

          What kind of vegetables do you grow? We just bought tomatoes, but mostly grow herbs, where the majority is basil.

          1. 5

            At 11PM. I try to keep a fixed schedule, 7 hours of sleep should be plenty. Key to me was moving the phone in a place I must walk to turn off. And do the bed as soon as I move away from it. And force me to stay up. I know that if I let me 1 day without this habit, I’ll use that as an excuse. I simply decided I have to. And working from home it’s easy to just sleep in. I just decide what I want to write about the day before, so I already know what I have to do and I don’t just stare at my coffee.

            In the garden this year I got tomatoes, potatoes, then zucchini, many types of salads, eggplant, strawberries, raspberries, cucumbers, pepperoni, chili pepper, pop-corn, peas, pumpkins and other small plants. It’s not a lot, just for personal use, but hopefully we’ll get a lot of tomatoes and zucchini this year I can give away to friends and family, as I planted a bit too many :) as last year a thunderstorm destroyed 50% of the ones I had.

            1. 2

              That sounds good enough, although it’s hard to pull through with the bed time on the weekends (for me at least). Also, I do sleep through my alarm clock, it actually works better having the phone in the bed with me as I go to sleep, since otherwise my alarm will wake up other people but not me. I guess it differs from person to person. Still an interesting approach!

              That’s quite a lot of vegetables, do they not take much care? I’m kind of jealous, I’d love to grow more but at the same time I do not want to invest much time into the topic since the gardening aspect isn’t all that interesting.

              Thanks for your reply ?

              1. 2

                Most of those plants need very little maintenance once they are planted, you just go and pick up the result. And I found there’s nothing better than listening to a couple podcasts while taking care of removing the weeds, so gardening is not really “losing” time and I get away from my computer for a while :)

        2. 4

          Mentionable within the last week:

          • a Cairo-based invoice typesetter prototype in C++17 that generates this. I’ve improved on it a bit and started using it instead of LibreOffice. C++17 is wonderful but good luck finding a working compiler and standard library in your repositories.
          • learned enough libdbus to add a suspend lock (insomnia mode) to my wmstatus. It doesn’t warrant the “If you use this low-level API directly, you’re signing up for some pain.” comment in the documentation at all. Now I don’t need to run systemd-inhibit in a terminal when I don’t want my closed laptop to suspend once the external screen turns off. Poor program is getting bloated. And since I can’t get gnome-settings-daemon to suspend my PC on inactivity, it is likely to get bigger soon (but not by much, I already know how to milk X for idle events and the DBus part for logind’s suspend command is already there now).
          • a plugin for my IRC client to work better with Slack’s IRC gateway as it was getting on my nerves
          • trying to finish my professional time tracker so that it can generate simple reports and invoices from the simple text file that I keep, and synchronize it with YouTrack. Go is rather nice for this. Some aspects are super annoying (such as maps and sorting) but the standard library is extensive and makes awesome use of reflection. I’ve also set up VIM to highlight the database.

          I think that’s enough fun for this month, as I haven’t even made enough money yet to cover my expenses. My scripting language interpreter needs to wait (as well as countless other things). I guess I should get Let’s Encrypt renewal working again though before my certificates expire.

          1. 1

            Can you show me something to get me excited about C++17? I’m really happy with D these days.

            1. 1

              It’s mainly about what it brings in relation to previous versions of the standard. I used to have a strong dislike for C++ and that’s slowly getting weaker. Lambdas, auto, destructuring, Go-style condition initializers, standardized unused arguments, <optional>, <variant>, <any>, …

              1. 1

                Hm, I didn’t see anything that immediately grabbed my attention over C++11. I guess finally getting static if is nice, albeit with a weird syntax.

          2. 4

            Support for unicode output in Self.

            1. 4

              We are working on a search engine (http://learn-anything.xyz) for user curated mind maps on the web. (https://github.com/nikitavoloboev/knowledge-map)

              It’s going pretty great so far. We just need to think, how can we lower the friction to add content to the mind maps to promote quality content. Think of it like an open index google-like search engine that is improved and edited by users and not algorithms.

              1. 4

                Migrating an app off Heroku to DigitalOcean for an old client. Only now can I see the immense value Heroku offers.

                1. 3

                  Finally picked up a motorised treadmill last night on fleabay, so this week will be attempting to build and use a treadmill desk. Compounded by the fact I don’t have room in the house, so it will be setup in the back yard. I do currently have an outside standing desk, so it shouldn’t be too hard to bodge. I suspect the main issue is going to be dodging the UK’s rainy weather to make use of it.

                  Also need to service my bikes, as the disk brakes on both of them are being noisy again. Great stopping power, but require just as much fiddling as cantilever brakes, and replacement pads & disks are way more expensive. Ach well.

                  1. 1

                    Arr! My tires are worn to bits, and my brakes need replacing. On top, got a flat this morning… and I’ve been limping along with a broken spoke for a few weeks now… Haha. I’m ridiculous. Time for a top-to-bottom tune-up for me. I’m told disc brakes don’t have as available servicing, but I doubt that’s really a problem. Still, I’ve stuck with traditional pad breaks. :}

                  2. 3

                    I’m working on a video course (for Pluralsight) about dealing with temporal data in PostgreSQL. It’s hard going but these things always are, and the topic is fascinating to me. There’s a lot of research and I’m learning interesting things about Postgres in the process.

                    1. 2

                      I made a Udemy video course a couple years ago, I think one of the hardest things I did, as organizing, scripting, filming all by myself was not an easy task, considering I never did a similar thing, but I read somewhere that the best way to teach something is just right after you learn it. And I found also a big boost to learn new things I would have never found out otherwise.

                      1. 2

                        I actually found that it’s easier to write a book. It may be longer in terms of word count (a typical course for me would be 30K-40K words which is roughly 120-150 book pages) but it’s just writing, whereas a course is writing + recording + editing, with the additional constraints of having to match the video to the narration.

                      2. 1

                        I absolutely love PostgeSQL’s Range datatype for timeseries stuff.

                        1. 1

                          Yes, range support is awesome but one drawback of using ranges for periods is that it’s not going to be forward compatible with SQL:2011 temporal features (if/when those get implemented), because the standard is based on a pair of columns denoting the start and end of a period.

                      3. 3

                        I’m working on a new release of theft, my property-based testing library for C. This release has been a long time coming – I’ve been experimenting with various implementation changes over the last two years, and have a lot more experience using it in production. I’m aiming to get it released out in the next week or two.

                        The biggest changes:

                        • Autoshrinking! There is now generic shrinking that automatically works with any user types. Writing manual shrinkers is still an option, but should be less necessary. (This is experimental, and its heuristics will get tuned more in future releases.)

                        • The progress callback has been significantly expanded – now you can use it to say e.g., “run the property with its minimal failing input again – I’ll increase log levels and have a debugger attached this time” or “halt shrinking after at most X minutes of wall clock time”.

                        • Test code can request only as many bits as it needs from the PRNG (which pools random bits), because the majority of runtime is spent in the PRNG.

                        • There will be built-in generators for many common types.

                        • Several API changes intended to make it easier to use.

                        (If you’ve used theft and have any usability feedback, please let me know.)

                        Also, I’m interviewing – I’m looking for new remote work, with a focus on embedded, Unix systems dev, and/or distributed systems.

                        1. 3

                          Strengthening some plot connections in Farisa’s Courage (which some people are suggesting I rename, but I can’t come up with anything better). Taking a break from the MS to think through plot and character. Unfortunately, the scenes I want to add will probably take me back up into 130-140k word territory.

                          No end in sight to the revision process. :) When I finished the rough draft, I figured I was about 30% done. Closer to 15%. Novels are hard, yo. (Actually, it’s deceptively easy to write one and not all that hard to get it published. To bring it to its full potential… takes work.) It’s a lot of fun, but it’s hard to do well.

                          Working through Deep Learning.

                          97+ percent chance that my transition to research (meaning that I get to leave corporate programming forever, so +1 to that) succeeds this summer.

                          1. 3

                            Been working on learning more of Golang after my refresher on C. Been working on a minimal iftop clone, and have also started preliminary work on implementing a ssh client. Planning to start porting my minimal C compiler clone to Go as welll after my ssh client is done. So much to do, so many rfc’s to read.

                            1. 2

                              I’ve been working on a streaming time series service. The client requests a time span, a list of channels, and some resampling parameters, and my service returns resampled waveform data for each channel sent as a stream over a websocket.

                              This week I’m incorporating neural spike events, and working to get streaming input working from a neurostimulation / sensor device.

                              For fun, this weekend I sat down with my daughter and made some silly pictures with the haskell Diagrams library, which I have to say, is the most elegant, well thought out API I’ve ever seen. We made a big smiley face.

                              1. 2


                                Started a business a month ago, today deploying a distributed system to crawl some stuff. Distributed crawling have been slightly more complicated than I though, especially since the tools (Scrapy and especially Frontera) appears to be less mature than expected. At least I’ve been able to do a few contribution in the process!

                                Not Work

                                Once I’m done deploying, I’m finishing up my workshop for Northsec this week. I feel like 3 hours will be quite a challenge to walk people through scripting exploitation without much background in exploitation. First time doing this, so hopefully will be able to learn a few thing myself and make the workshop better for potentially future conferences/training. After the conferences there’s a 48 hours on-site security CTF where we place first last year. Mix all this with speaker/conference/CTF parties on each evening, it’s going to be a long long week…

                                1. 2

                                  The only interesting thing I did at work this week was try to replace our boxfilter mipmap generation code with a higher quality mitchell filter. It was fun but also a huge waste of time. I can’t tell the difference unless I zoom in, and part of the point of mipmaps is that you don’t get to zoom in. It’s also tens of times slower than the box filter (I think I measured 30x slower), which in practice turns out to be roughly twice as slow because sRGB conversions are so expensive.

                                  At home, OpenGL shaders are kicking my ass. I only have like 10 and it’s already getting very annoying having to mirror uniforms between host and shader code, and I can imagine it becoming annoying having to mirror largely identical code between small variations on the same shader. (instancing………..)

                                  One small but not immediately obvious thing that has helped is putting my vertex and fragment shaders in the same file, so I can use the same struct defintion for vert outputs/frag inputs. So like:

                                  struct VSOut {
                                  	vec4 colour;
                                  	vec2 uv;
                                  #if VERTEX_SHADER
                                  out VSOut v2f;
                                  void main() { ... }
                                  in VSOut v2f;
                                  void main() { ... }

                                  The uniforms thing seems unsolvable (codegen build steps are not a solution, neither is trashing my shaders with huge macros so they also work as C headers), so the best I can do is make it as painless as possible. Roughly, my requirements are:

                                  • No runtime strings
                                  • Ability to reuse UBOs between shaders
                                  • Don’t kill any future DX/metal ports

                                  and ATM I have a hardcoded list of uniform names which I bind to hardcoded locations with glUniformBlockBinding in every shader, and then my rendering code looks like:

                                  renderer_ub_easy( ub_view, world_to_view, view_to_clip );
                                  RenderState render_state;
                                  render_state.shader = get_shader( SHADER_FLAT_VERTEX_COLOURS );
                                  render_state.ubs[ UB_VIEW ] = ub_view;
                                  renderer_draw_mesh( mesh, render_state );
                                  // can reuse ub_view in other shaders without having to rewrite/rebind it

                                  renderer_ub_easy fills a buffer with everything aligned correctly (once I fix it - that commit is broken!) (std140 alignment is stricter than C++ alignment) and uploads it to the GPU. It’s a nasty variadic template which makes me worry I’ve gone off the rails somewhere, but for the most part I think this is pretty good now.

                                  God damnit I just realised my hotloading will break when my shaders start using #include. Need to think about that one some more.

                                  1. 1

                                    Learning Angular for a job, and react for fun. First time actually getting into the meat and potatoes of Node as well.

                                    1. 1

                                      Probably nothing, because…


                                      This is going to be my first week of work at SmartThings, ending my 3 month sabbatical, so I’m expecting to be more tired in the evenings than usual.

                                      1. 1

                                        Trying to digest “Patterns in Network Architecture : A return to fundamentals” by John Day.

                                        It’s what I’d call “An Old Man’s Book”.

                                        It’s the sort of book written by someone who has been (too?) long in the business.

                                        Full of interesting, but sort of irrelevant details and asides.

                                        You know immediately you have one of these books in your hands if it mentions Wittgenstein.

                                        Still, I think there are some gems in there…. now just the long slog through it to extract them into my brain.

                                        1. 1

                                          I’ve been chipping away at the next version of pnut.io, that other other social network you haven’t heard about, and catching honey bee swarms. It’s that time of year!

                                          The current priority is a Files API and a way to pay for it.