Threads for seppo0010

  1. 6

    Today I’m starting a new job at a startup (this would be my third one overall). This is the first time it is (exclusively) for an argentinian audience (where I live).

    The product itself is fintech, and unfortunately I cannot go into details. Every person I talked (even non-tech people like members of my family) is quiet excited about what we are building, and that really gets me excited as well.

    We are currently mostly working on planning, specification, user flows, business model, meetings with partners/providers, etc.

    I’ve started learning golang as that’s the language we decided to use for our backend for its good safety/performance/easy-to-use/maintainability/hiring balance. If anybody is familiar with golang, I’d appreciate some feedback. (I know I’m lacking a readme and documentation, I am sorry): https://github.com/seppo0010/wikipedia-go https://github.com/seppo0010/wikipedia-graphql-go

    1. 2

      I’ve been playing with rust+emscript to create web front end stuff. I was able to do some basic stuff like event callbacks and ajax requests. I’m trying to create something like a high level API, so I’m trying wild ideas at this point. For example: https://github.com/seppo0010/test-webplatform/blob/master/src/main.rs#L62

      1. 2

        Finally back home in Buenos Aires! Luckily my family took care of me having a decent place to live when I arrived, so I don’t have to do much (buy a table, a couch, maybe a TV).

        I have ~15 interviews lined up for this week. I’ll go to all of them and then decide which place I like the most, maybe I’ll start during next week. Deciding work affects your bank account and health coverage in this country, so being if I was going to be unemployed for a month I might need to get those myself and then change, which is kind of messy. Also it’s Monday 9am and I’m already bored of being home, I feel like I want to do something, not burned out. I enjoy routine.

        The only problem about my relocation was that my cats were not able to flight because of some airline fuck up, so they’ve stayed in San Francisco with a friend and I have to figure out how to transport them. In the meanwhile, I’m missing them, which is quite sad.

        1. 1

          Wow, 15 interviews?!?! I usually feel lucky if I can get one in a month. Is the market there desperate for people with your skill set?

          1. 5

            Apparently… With the currency exchange rate, many companies outsource to Buenos Aires and pay very little for them, which translate into a lot here.

            Most people do not get this many, but I’m coming back from working three years in the San Francisco Bay Area, and some of that time was for Twitter Inc, which was good experience and good for my résumé.

            I’m taking a huge pay cut in absolute terms (I’d be really lucky if I earn half of what I was making) but it’d be more than enough to live comfortably.

        1. 8

          I’ve quit my job and I’m leaving the United States in 10 days. I’m working on dealing with the anxiety of traveling internationally with my two cats.

          I’m scheduling interviews for the week after my arrival to Buenos Aires.

          I have not decided whether I want to take a time off or start immediately. On one hand, I think I may need a break, on the other hand, I get bored when I have nothing to do.

          1. 3

            Sounds interesting!

            I’m guessing you speak Spanish, and you’ve probably already been in Buenos Aires. On the off chance that you haven’t, I’d wait with the interviews for a while and enjoy life and explore your new surroundings. Actually, even if you’ve been there before I’d still recommend that. Being a tourist is quite different from being a permanent resident.

            If you do get bored while taking some time off, consider learning something new. Learn some Argentinian recipes, learn a new programming language (Clojure or Erlang (or LFE, Lisp-Flavoured Erlang) are highly recommended), or anything else.

            I’m in the lucky situation that my boss allowed for 100% remote work for half a year, so I’m currently in Cartagena, Colombia on the 5th of 6 months travel around Colombia and Costa Rica with my wife and two kids. I have a work week of 32 hours, and split that over all the days of the week. I work an hour in the morning while the youngest naps, spend the day playing tourist and then work again in the evening when both kids are asleep. It’s a wonderful experience!

            1. 2

              I forgot to mention I am from Buenos Aires and I’m going back home :)

              I guess if I had people to share time I would not be so anxious about starting a new job, but it’s not my current state.

            2. 2

              I’m having trouble with the statements “moving countries” and “having nothing to do outside work” being made in the same context. I moved across the country (which is just under 4 hours by train, here in the UK) last year and although I enjoy my job the three months I took off immediately after the move was not nearly enough.

              1. 1

                Depends on the person, but when I moved countries (US → DK), I liked that I started work fairly soon. Being new to a country was intimidating, since I didn’t know anyone or how things worked. The daily routine of going into an office, having lunch with colleagues, etc. helped ease into it, plus gave me an easy place to ask people boring questions about how everything works (bank accounts, the metro system, shopping, insurance, etc.). Once I’d lived in Copenhagen for a year or so and had my bearings, then it became more fun to go out and do non-work things.

                1. 2

                  You’re right. I suppose the crucial bit was moving countries, or at least somewhere substantially different? I stayed in the same country so didn’t need new bank accounts or anything. (I even stayed with the same electricity provider!) I also had company: my wife and 3-year-old son. In the past, before my son was born, I moved to Hong Kong and that situation was much more like you describe.

              2. 2

                Your cats will be quite anxious too. When I brought mine to Canada, the poor thing had no access to a litter box for nearly 12 hours and peed herself. It took her about a week of hiding in the new location before she readjusted.

                1. 2

                  My two cats already traveled from Buenos Aires to San Francisco, with a ridiculous 17 hours layover in Mexico City. Of course they peed themselves (actually, it was during the layover, so they peed on my coat).

                  On the positive side, they were just fine after arriving, and this time we do not have such a long layover this time and they are more experienced :).

                  I’m still nervous, one thing going wrong is one too many.

                2. 2

                  Take at least a couple of weeks off to get settled, and maybe more if you’ve got burnout/stress left over from your previous gig.

                  My experience is that it’s best to rest until you can’t stand resting anymore–it always takes longer then you think, but it’s time your body and mind usually need.

                  1. 1

                    IMO Always settle your employment situation and then simply schedule your start date out by a week or so.

                    That way you can TRULY relax and know that you’ll have a roof over your head and food in your belly beyond however long your piggy bank lasts :)

                    1. 4

                      Outside work, I’m working in a project called Pelikan (@pelikan_cache) that will soon (no idea when) be open sourced. The project is a cache server in C.

                      I’m adding unit tests, and in the process finding inconsistencies, duplicated code, bugs, and room for small improvements, and rising those to the authors or fixing them myself.

                      1. 3

                        What’s the rating range? I guess 1-4 if SQLite is a 4.

                        How do I sign up? The login page says it can create new accounts, but I submitted the form twice and I don’t see to be logged in.

                        1. 1

                          You should be able to create any account that’s alphanumeric and has a password longer than one. (otherwise it will somewhat unhelpfully dump you back.)

                          1. 2

                            I believe the account must be alphabetical and not alphanumeric. “seppo” was accepted, but “seppo0010” was not, using the same password.

                            1. 1

                              ahhh! a bug! one star.

                          2. 1

                            I never know what to do with numerical scores, shouldnt a simple recommended/ok/avoid system be better?

                            Never mind, just saw the description of each point.

                          1. 3

                            Kind of weird to get flagged as wrong when you guess on the order of 1e6, the exact answer is 1.1e7, and 1e8 would be accepted.

                            1. 3

                              Maybe the options would be more clear if they were 1-99, 10-999, etc.

                              1. 7

                                Oh, it’s not that it’s unclear, it’s just that intuitively I think of 1 million as a better answer than 100 million when the actual number is 11 million.

                            1. 5

                              Work

                              Third week in Twitter. Still trying to get used to the flows, trying to get productive.

                              Personal

                              Last week I was adding tests to rlite, trying to handle failures more gracefully, particularly out of memory. I fixed a bunch, but it seems to be extremely laborious and draining. I would appreciate if anyone has good advice on how to do that for a C project.

                              1. 2

                                Reminded me of this talk I watched recently https://www.youtube.com/watch?v=ZGIAypUUwoQ because fixing the “worse-case scenario” (remote workers) can lead to improved behavior in typical and best-case scenarios (in-office workers).

                                1. 0

                                  Why does OAuth suck? Because it’s proprietary. It’s not a standard

                                  https://en.wikipedia.org/wiki/OAuth

                                  OAuth is an open standard for authorization.

                                  uh?

                                  1. 5

                                    Obviously OAuth is a standard, but since it allows so many vastly different behaviors, most implementations are not reusable and that makes it de-facto proprietary.

                                    Please just read the article.

                                    1. 2

                                      Actually OAuth 2.0 is a “framework”, or at least that is what the title of the RFC says. Furthermore, see the section on interop in the specification: http://tools.ietf.org/html/rfc6749#section-1.8. The whole complaint is mentioned in the RFC :-)

                                    2. 4

                                      The link to pipe spec is great.

                                      All pipe is to be made of a long hole, surrounded by metal centered around the hole. Outer-diameter of all pipes must exceed the inner-diameter. Otherwise, the hole will be on the outside of the pipe. ll pipe over six inches in diameter is to have the words “Large Pipe” painted on it, so that the fitter will not use it for small pipe.

                                      Whenever I read something like the oauth spec, I feel like I’m reading the above. Mountains of words which describe something so obvious it should not need speccing combined with impenetrable descriptions of basic concepts.

                                    1. 1

                                      void MyFunction(const int myData[MYDATALEN]);

                                      Sure, that will be turned into a pointer at compile time, but surely it is useful for self documenting what should be passed in? The compiler can even type check it so you can’t pass a shorter or longer array. Ideally it would be wrapped in a struct/class and you would pass a const MyData&, but hey, we can’t always dictate how data is used or how our function is called.
                                      And yes, I know I used C++ specific keywords, I’m sure you can work it out.

                                      1. 35

                                        When the documentation makes it look like something it’s not, it’s not useful. It’s the opposite.

                                        I was burned by exactly this bug before. And for exactly the same reason. Refactored some code using an array into a new function, but left the sizeof() as before. And it looked right, because the letters on the screen were telling me it was an array, not a pointer.

                                        Never. Again.

                                        1. 14

                                          If you want to document the length of the array, just document the length of the array. Don’t write code that barely compiles because “it’s self documenting.”

                                          1. 6

                                            It really is very misleading, even if it can look “prettier”, and some people will argue that it’s “documentation” about how the pointer is a particular size. But it’s neither. It’s basically just lying about what is going on, and the only thing it documents is “I don’t know how to C”. Misleading documentation isn’t documentation, it’s a mistake.

                                            1. 2

                                              The compiler can even type check it so you can’t pass a shorter or longer array.

                                              I don’t think the compiler can meaningfully do this as, except for sizeof and &, an array decays to a point on any operation. This makes it pretty usefull to type check unless your usage of the array is always 1 function call deep.

                                              1. 1

                                                I don’t think the compiler can actually use it to type check, though, because the size of the array isn’t part of the type. As far as the compiler is concerned it’s just a pointer argument with different syntax.

                                                Here’s a small test case, and neither gcc or clang give a warning or error. Clang gives a warning about the sizeof() in my_function returning the sizeof(int*), though.

                                                1. 1

                                                  I should have said “The compiler could even type check it”.
                                                  I meant it could enforce this behaviour:
                                                  int* myIntPointer = GetSomething();
                                                  MyFunction(myIntPointer); // Error, passed a pointer to unknown quantity of int
                                                  int myArray[MYDATALEN];
                                                  MyFunction(myArray); // Yay, length known at compile time, go ahead buddy!

                                                  1. 3

                                                    And if you want to call the function on a pointer returned from GetSomething? This seems error prone and you’ll be fighting the compilers efforts to create pointers at every turn.

                                                    If you want to do this, no half measures.

                                                    struct etheraddr {
                                                        Unsigned char bytes[6];
                                                    };
                                                    

                                                    Pass around pointers to that and sizeof will always behave predictably, it’s type safe, even better self documenting.

                                                1. 5

                                                  I had to read the article three times to understand that the “registration cookie” is not actually an HTTP cookie but a token.

                                                  1. 6

                                                    That’s not what is usually called Underflow. https://en.wikipedia.org/wiki/Arithmetic_underflow

                                                    1. 3

                                                      Assert that buffers are entirely zeroed before freeing

                                                      Is this really what should be done? calling memset before free? I guess it is being defensive, but it seems to be an expensive operation.

                                                      1. 1

                                                        I read this in the sense of ASSERT(), not ensure.

                                                      1. 10

                                                        I’m not a big fan of these “fire people” type of articles. I suppose this might be a bit tongue-in-cheek but it still implies employees are disposable and that there aren’t other solutions to problem members of staff like retraining or changing company policy.

                                                        Also not a big fan of DHH’s contrarian, all-or-nothing bloviating that seems to pass as “thought leadership”.

                                                        1. 4

                                                          The title was a reaction to Jason Calacanus' statement: “Fire people who are not workaholics”.

                                                          1. 4

                                                            I read “fire” as “don’t hire.”

                                                            1. 4

                                                              Alternative title: “Workaholics considered harmful”.

                                                            1. 3

                                                              It’s great to see Matz has contributed to the project funding https://salt.bountysource.com/teams/crystal-lang/supporters

                                                              1. 2

                                                                The quick start instructions doesn’t seem really quick, in my system (ubuntu 12.04) it fails with the following:

                                                                ~/Eve ~/Eve
                                                                run.sh: line 11: npm: command not found
                                                                run.sh: line 12: tsc: command not found
                                                                ~/Eve
                                                                ~/Eve ~/Eve
                                                                run.sh: line 28: multirust: command not found
                                                                run.sh: line 32: cargo: command not found
                                                                ~/Eve
                                                                

                                                                Too many deps, I may try it on a weekend when a have a couple of free hours.

                                                                1. 4

                                                                  Eve relies on TypeScript, Rust Nightly, and multirust.

                                                                  1. 3

                                                                    This has been fixed on master, it will properly error out. You still need to install tsc through npm and have multirust installed, but you at least get a nice message.

                                                                    1. 1

                                                                      I’ve taken a couple of hours from sleep and created a vagrant recipe:

                                                                      git clone --depth=1  https://github.com/chilicuil/eve-vagrant && cd eve-vagrant
                                                                      vagrant up #this may take a while
                                                                      xdg-open http://localhost:8080/editor
                                                                      

                                                                      The above uses a plain precise 32 box and install eve and its dependencies in the provisioning phase, I’ve also created a modified box (583MB) with eve dependencies hard-coded, which could serve better those who don’t have precise32.box anyway.

                                                                      git clone --depth=1  https://github.com/chilicuil/eve-vagrant && cd eve-vagrant/partial
                                                                      vagrant up #this may take a while but not as much as the above
                                                                      xdg-open http://localhost:8080/editor
                                                                      
                                                                    1. 3

                                                                      I’m still working on rsedis, a Redis re-implementation in Rust. Last week I was able to run some of Redis’s tests, and I’m gradually enabling them, which is helping me find bugs in my implementation, corner cases that were not handled, and more importantly discovering undocumented features in Redis, and hence contributing back to redis-doc.

                                                                      1. 9

                                                                        Three Rust-y things. The last one is the one I’ll prioritize the most, because it is the only one with a deadline.

                                                                        • rsedis: Redis re-implemented in Rust https://github.com/seppo0010/rsedis/

                                                                          Trying to add harder and less appealing features. During the weekend I did “active rehashing” (main hash tables may shrink to fit in steps without a long blocking rehashing process) and I’m considering starting to work on rdb (or maybe aof) persistence, or redis’s intset (rust’s VecMap).

                                                                        • Sending a path to Rust core stdlib

                                                                          Implementing a feature I run into a lacking API in the stdlib. I asked in #rust-internals and I was told that the problem was mentioned several times and nobody was working on it. The next steps would be to try to implement an API (for all Map and Set) and submit a PR to get feedback.

                                                                        • A Rust talk about my experience building rsedis (see first point)

                                                                          I sent a proposal to RustCamp and to a local meet-up group. Neither of those are accepted, but I want to get ready because I don’t have much experience as a public speaker (nor with Rust).