Threads for MNZT

  1. 3

    I once came accross the company https://wefarm.org/ which uses a peer-to-peer SMS network between farmers in Africa. It may point you down a route of some kind.

    1. 1

      Wow this is another really cool project. Will email them and ask about how they’re accomplishing it. Thanks!

      1. 2
        1. 2

          This looks really promising. I just had a quick chat with a rep at Arica Talks about the USSD codes they sell access to, right now it’s only 4 countries but trying to find out if I can buy sims in one of those countries and use the USSD codes while roaming in other countries!

          Thank you this is an awesome find!

    1. 4

      Here’s the kicker around the Gopher, from the brand book:

      The gopher is not a logo. However, when appropriate, it can and should be used on communications that are Go branded, but should not be used in place of our logo, nor should it be placed too closely around the logo, so as to infer it’s an alternate logo.

      1. 16

        I’m curious why the LE certs are only set to renew within 3 hours of them expiring?

        Edit: more specifically, is it a deliberate choice (and if so, please explain why?) or is it the ‘default’ for some esoteric ACME certificate renewal client that nobody else has ever used in production (and thus this weird choice)?

        1. 12

          Looked into this. LE was not, in fact, set to renew from any cron job or other means. @alynpost did it manually in January and the expiration happened to fall during the outage. I’ve added it to the open LE issue.

          1. 2

            I see.. Presumably not installed via a package (e.g. deb, rpm, etc) then?

            1. 3

              It was installed by the package in Ubuntu 16.04 LTS, but by hand rather than by ansible.

              1. 5

                That’s quite weird that it didn’t install a cron/systemd timer then…

                Oh. Ubuntu strikes again. There isn’t a cron/timer file in the package because it’s just v0.4 in Xenial.

          2. 1

            It sounds to me, that certbot was trying to renew during the network outage, and upon failing the ACME challenge got into a stuck state/gave up renewing - that being until NGINX was kicked and a new cert was manually issued.

            1. 4

              By default certbot will try to renew certificates that expire < 30 days from “now”.

              But the other reply solves the mystery (sort of): it was never called to renew.

          1. 2

            I find CockroachDB very interesting, but haven’t used it yet. Any good/bad/meh experiences here? Does it really distribute as nicely as they claim?

            1. 5

              I’ve only tested it experimentally but with some load. The database behaves very nicely once you distribute it over some nodes. The only downside is that it has some minimum latency (around 100 to 200ms but that was a long while ago) so it won’t match postgresql on that (but it can do some good throughput instead).

              1. 3

                was the minimum latency observed in the case of writes? I’d be very curious to the nature of the experimental setup, if you still happen to have the notes from it.

                1. 2

                  I’m unsure on that but due to the design the latency of reads shouldn’t be as bad as writes (though IIRC from some benchmark numbers, it’s still not low latency). I don’t have the notes anymore, sorry, only tidbits I recall.

              2. 2

                Here at LUSH on the Digital team, we are undergoing a global migration to Cockroach, so we can move towards our services being globally available. From what we’re seen, it does distribute rather nicely - but of course has it’s caveats.

                Bit of a plug, but at some point in the future we’ll likely release some posts on our findings with a mass migration in CRDB. \o/

              1. 13

                Hi Lobsters! This blog post is about Project Sistine, a hack that I worked on with @antimatter15, Guillermo Webster, and @loganengstrom. We turned a MacBook into a touchscreen using only $1 of hardware (a small mirror, some pieces of a rigid paper plate, and a door hinge).

                We built this prototype some time ago, but we never wrote up the details of how we did it, and so we thought we should share. We’re happy to answer any questions you might have about the project!

                1. 3

                  Great work. I love the idea. Does it work on the whole screen? Looking at the pictures in the article, it seems that the areas near the left and right edges are uncovered.

                  1. 3

                    Thanks, glad you liked our hack :)

                    Yeah, the current prototype doesn’t capture the whole screen (it probably captures ~1/2 to 1/3 of the screen area), due to the positioning of our flat mirror. We tried moving it farther away so it would capture more screen area, but with the low quality webcam we were using (480p), the resolution wasn’t good enough. A higher resolution webcam might be enough to solve this problem. Another solution might be using a curved mirror.

                    1. 2

                      Did you try with a convex mirror to capture a wider view? Will probably drive the dollar cost up - but would be interesting to see if you could find success with it.

                      Great work, by the way!

                      1. 4

                        Thanks, glad you liked our work!

                        Nope, we haven’t tried a convex mirror yet. I think convex mirror + 720p camera (standard on today’s MBPs) could make this system work a lot better. It would probably complicate the math a little bit, but it should be reasonably straightforward to handle as long as the optics of the mirror aren’t too weird.

                1. 6

                  Back to a hobby project I started long ago and restarted again recently: a time series datastore in Go using gRPC.

                  So far have it up and running with a library I wrote previously for a fast ordered datatype. Watched a presentation about best practices for gRPC since the docs and examples seemed so thin and wound up finding out that yes, I was indeed doing it wrong. Rewrote my .proto and simplified my error handling late last week and switched over to the delightful logrus for logging.

                  This week, when time allows, I will actually port over the TSDB in-memory format from Gorilla and add more structured input and aggregation queries for output. Next milestone after that is adding continuous queries & downsampling. I hope to have all that done this month if the weather stays crappy.

                  1. 2

                    Ah Logrus! Slightly OT, but why did you opt for logrus over zap?

                    1. 2

                      Logrus (sorry for the bad link in my post btw) is older and popular, so it’s a great starting point for most projects that need leveled logging. It is pluggable as well, so it’s easy for me to add a configuration item later that will change the log output for my app to logstash, fluentd, JSON, etc without any extra work for me. It also defaults to a nice format when a TTY is detected, so debugging with colored levels and pretty offset times is another win for me.

                      Zap is great; it’s very fast and I would consider it for any application that wants to output structured data quickly (not just logs!). As always, though, there’s a tradeoff in flexibility for that speed. From the docs:

                      The zap package itself is a relatively thin wrapper around the interfaces in go.uber.org/zap/zapcore. Extending zap to support a new encoding (e.g., BSON), a new log sink (e.g., Kafka), or something more exotic (perhaps an exception aggregation service, like Sentry or Rollbar) typically requires implementing the zapcore.Encoder, zapcore.WriteSyncer, or zapcore.Core interfaces.

                      That tipped the balance for me; I wanted to support a few common format options and Logrus makes that super simple. My app doesn’t write structured data often enough to warrant that ease-of-use tradeoff.

                      1. 3

                        Cheers for your insights, nice to see why you opted for Logrus.

                        I mainly asked as I’ve been burnt by logrus before and managed to subsequently piss off half the Go community whilst doing so. Thanks!

                        EDIT: However it was not Logrus’ fault - but mostly Go’s lack of successful package management.

                        1. 2

                          I’ve been on the pissing off whole communities side before – hey at least it helps instill changes sometimes.

                  1. 4

                    This week I’m tying up all lose ends ready to start my new role next week!

                    Although this organisation is a shambles, I want to make sure no future developer is left handicapped due to my lack of diligence.

                    1. 3

                      As a developer who’s worked with this company - I can really appreciate their process and how they operate.

                      1. 1

                        Did we work together?

                        1. 1

                          Indirectly, probably - worked with the Sportsbook at an older company.

                      1. 1

                        Mapping out our current 6 year old architecture, identifying business goals, any existing issues and pain points, planning out something new.

                        Trying to implement some practices and ways of working around software development (presenting scrum to the team), also designing a new deployment workflow.

                        All whilst potentially interviewing at other companies.

                        1. 2

                          This seems like a neat concept, but decays pretty rapidly if too many people try to see it. The link I get expires before I get there. Then again. Then close tab.

                          1. 2

                            This is the point of the project.

                            As quoted by the author: “This is an experiment in introducing artificial scarcity into digital work.”

                            (Source: https://twitter.com/donald_hans0n/status/949490885586075651)

                            1. 1

                              To be fair, the further out it gets, the less often anybody actually views the art and moves it further out. But yes, you either have to be lucky (arrive early), cheat, or burn a lot of energy.

                              1. 1

                                After days of trying not to cheat, I gave up and went for the screenshot posted on Twitter.

                                To be fair, the further out it gets, the less often anybody actually views the art and moves it further out.

                                That doesn’t seem to be how it’s going. Not any time soon. If it doesn’t distinguish bots from browsers, quite possibly never. If it does, then maybe in a month or several, or maybe years.

                                1. 1

                                  Excluding bots/scripts written specifically for this site, what kind of bot is going to follow a single thread of links thousands of jumps deep?

                                  I think that sometime very soon, if not already, the depth will stop increasing and it won’t increase again unless somebody cheats again.

                                  1. 1

                                    A month later and it has not slowed down at all. (To put that in perspective, your “if not already” prediction came just a week after it was put online.)

                            1. 1

                              OAuth is always nice to find, and use, in the sites and services we love. However I feel this thread needs a little clarification, as ‘Implement OAuth 2.0 in Lobste.rs’ is a bit vague.

                              1. Lobste.rs as an OAuth Provider - This means that other websites or apps can use your lobste.rs account to verify your identity within their app. I don’t believe this is what this thread is trying to suggest.

                              2. SSO (Sign Sign-on) - Use other OAuth providers such as GitHub, Twitter, Google, etc. to validate & authenticate someones identity on the authentication layer to lobste.rs. I see this being able to slot into the LoginController quite easily. There are a bunch of example apps out there which allow username/password authentication in line with SSO.

                              I personally feel like this is a good idea, which with lots of user input on the authentication flow could work nicely.

                              1. 13

                                Neither 1 or 2 if I read the OP correctly.

                                OAuth is for authorization, not authentication. If you want authentication you’d use something like OpenID Connect (based on OAuth 2.0). The OP suggests implementing an API on lobste.rs protected by Bearer tokens instead of cookies.

                              1. 7

                                I’ve seen quotes from Alan Kay where he says that his approach to objects (not classes) was like this. Each object is something you send messages to. Erlang processes are similar.

                                This post has the right idea, though. It makes sense to adopt microservices only if you need the specific features you get from sticking network boundaries between things.

                                1. 3

                                  You can try his kind of OOP if you want since it’s still maintained and extended.

                                  http://squeak.org

                                  Edit: Also supposedly easy to learn due to minimalist language and designed for kids.

                                  1. 3

                                    I think the problem with objects in most languages is with having shared mutable state when you pass around references to them. Erlang avoids this problem entirely.

                                    1. 3

                                      I’ve come to believe that state is just as problematic for services as it is for objects, and that, as with data in Clojure, immutability should be the default. The “black box” terminology around both classes and microservices tends to imply that state is an implementation detail and the consumer shouldn’t know or care. I don’t think that’s viable. Stateful services need to be called out as their own category of thing, or the state needs to be moved out of the services altogether.

                                      1. 3

                                        Clojure addresses this in a really nice way of ‘Identity’ and ‘state’, you can read about it here .

                                        https://clojure.org/about/state#_object_oriented_programming_oo

                                        1. 2

                                          Yup, very happy with the way this works in Clojure. I find that immutability as the default naturally leads to low coupling. I tend to treat each namespace as a small library that does a specific transformation of the data.

                                    1. 1

                                      Oh neat. Usually I use the test runner in Goland whilst developing; only retesting the code I’m working on.

                                      This’ll be a neat addition for pre-commit testing hooks.