1. 3

    How is this different than https://upspin.io/ and many similar things that have come before?

    1. 15

      “Please stop doing X” posts are a dime a dozen and rarely offer actionable advice more prescriptive than the simple “stop doing this thing.”

      Let’s get more posts that say, “Before doing creating something new, here’s how to evaluate what exists for your use case.”

      1. 2

        Agreed. There’s no concrete information in this post, and a lot of uncited or made up narrative. And it’s condescending. I expect more from posts on Lobsters.

        1. 2

          Please stop writing new serialization protocols

          also, why does the author feel the need to call people monkeys?

      1. 3

        I did a bit of work on the OStatus stack that Mastadon currently uses. There’s definitely room for improvement, but I think it’s better to get there through incremental changes to functionality and composing protocols. Having one all-encompassing spec locks you into a single set of use-cases, which hinders growth and adoption long-term.

        1. 3

          ActivityPub’s main design, as you know I think, was done by Evan Prodromou who did most of the design on OStatus. ActivityPub was written, with the initial design also by Evan, to try to overcome some of those limitations.

          Meanwhile Mastodon did try to incrementally improve OStatus by adding extensions, but that upset people as well because they were deemed as incompatible with the rest of the fediverse (privacy isn’t easy to add-on after the fact in OStatus for one). Now that ActivityPub is moving from OStatus to ActivityPub there’s complaints from much of that same group (not saying that encompasses you)… catch-22…

          BTW, heya Brett! Remember a very naive young programmer helping with a command line frontend in Python briefly to one of your projects at the Goog back in the day with bgoudie and friends for like… a month? That was me. :) I’ve meant to catch up with you for unrelated reasons, mainly because of some exploration of actor model stuff since then… watch the video on: https://www.gnu.org/software/8sync/

          1. 3

            Meanwhile Mastodon did try to incrementally improve OStatus by adding extensions, but that upset people as well because they were deemed as incompatible with the rest of the fediverse (privacy isn’t easy to add-on after the fact in OStatus for one). Now that ActivityPub is moving from OStatus to ActivityPub there’s complaints from much of that same group (not saying that encompasses you)… catch-22…

            This is not true. Privacy on the level of AP would have been very easy to add, by just using a different salmon endpoint for private messages. This was discussed at length back then, but Mastodon still chose to implement the leaky-by-default changes. The complaints about the move to AP is because Mastodon breaks old ostatus functionality while doing it, but that’s a whole different topic.

            1. 1

              Maybe this is true, though I never saw a concrete proposal of how to do it or implementation efforts to show how it could be done? So it still seems theoretical to me. Do you have a link to where the proposed approach was laid out / outlined?

            2. 3

              Oh additionally, if you want a more minimal system that isn’t as “all in one” as ActivityPub is, Linked Data Notifications uses the same inbox endpoint and basic delivery mechanism that ActivityPub does, with a lot less of the social networking structure.

              1. 2

                Hey good to hear from you! Do you have a link to the part about “upset people as well because they were deemed as incompatible with the rest of the fediverse”? I’ve been out of the loop for a while but I’d be curious to see that.

                1. 1

                  It’s kind of hard to find a good summary, but this blogpost talks about it. Basically since there was no nice way to add privacy features to the existing distribution mechanisms, Mastodon kind of tacked it on and would advise the next server as to its privacy level. This lead to complaints that Mastodon was implementing “advisory privacy” since you’d send what was theoretically a private post from a Mastodon server, but everyone on a GNU Social (that’s the new name for StatusNet) server would see it. It could be that there was a way to do it in OStatus, but it wasn’t really worked out.

                  One major thing that ActivityPub added is email-style addressing… every post is delivered to an individual’s inbox. Of course, like in email, you’re trusting the receiving server to actually do the right thing (and thus you could accuse this of being “advisory privacy” as well, but anything that isn’t end to end encryption can be accused of that), but I don’t get other peoples’ emails in my inbox because the addressing is baked in to the standard so it’s expected that all servers implement that.

              2. 0

                Yeah. OStatus is very well done, a nice unity of existing technologies that have been proven to actually work.

              1. 3

                Link to the actual product: http://origami.design/

                1. 1

                  I can suggest a new title, but I can’t suggest the better link, unfortunately. :/

                1. 2

                  Welcome to Lobsters, Alex!

                  1. 1

                    @haxor surely you can find a newer than 2012 MacBook that meets your requirements?

                    1. 1

                      Oh yeah! I will probably get a new computer at some point. It’s still working well and has all the security updates so I’m not in a rush. I figure I’ll wait until WWDC in June to see if they refresh the MacBooks then.

                      1. 3

                        You’re probably aware, but Macrumors has a buyer’s guide that’s always seemed pretty accurate to me. I used it when I purchased an iMac as our family computer (but otherwise, I don’t personally buy Macs).

                        1. 1

                          Did you check the 12" macbook? It is really good.

                        1. 2

                          Given that it’s an extension of asm.js and JavaScript, that seems like the right tag for now? Or maybe just the web tag?

                          1. 3

                            The part that struck me most about this post was how questionable it was of it to be written in the first place. The author publishes details of Parse that were seemingly never made public before, without explicit permission, in hopes to show how his company does it better, and doesn’t make the same mistakes.

                            1. 1

                              Yeah the information is dumped in a messy way onto us, then at the end the author’s care went into an ad for their own thing. This reads exactly like a list of “stuff they messed up but we do right”. Which I guess isn’t a bad thing in an objective sense. Still pissed me off that it’s an ad. But I commend the effort to get attention for your own business.

                              1. 1

                                Indeed. It makes me question the business model more than anything.

                              1. 1

                                My favorite version of this type of post is “Stop Writing Classes” from PyCon 2012.

                                1. 2

                                  This was first released in 2013

                                  1. 2

                                    Does anyone know if they tried PyPy? Is cache performance or total memory size their real constraint?

                                    1. 2

                                      PyPy needs to use the same memory structures as CPython. I would expect that to mean that it also needs to touch memory during collection, but I didn’t quite understand from the article why CPython did that. Because it added the objects to Python lists and had to increase their refcount? Sounds like something both Pythons should be able to avoid.

                                      1. 9

                                        CPython’s garbage-collector is reference-count based, which means that when you free a container (like a list), you then have to go through and decrement the reference count of everything that was contained (and if it hits zero, free it and decrement the reference counts of everything it held onto. This is particularly egregious in Python because the language is built on hashmaps - every object, every class, every module has (or sometimes is) a hashmap, so there’s a lot of ref-counting that needs to be done.

                                        This is also why CPython has a GIL: when any part of the program can reach into any other part at any time and increment or decrement its reference count, the either you need a lock around absolutely everything, or just say “to hell with it” and make one big lock for the whole thing.

                                        PyPy does not have a GIL, and it does not use reference-count-based garbage collection, so on the face of it, it seems like it would be a lot more CoW-friendly. The docs also say that PyPy does not do a gc.collect() at shutdown, which is another change mentioned in the article.

                                        1. 4

                                          PyPy does not have a GIL

                                          According to their FAQ, they still have a gil. They were looking into replacing the GIL with STM a while ago, but I don’t recall that ever landing.

                                          1. 1

                                            Ah, my mistake. I knew they did not use reference-count-based garbage collection, and I knew that was the big sticking point for the CPython GIL, so I leapt to a conclusion.

                                            1. 1

                                              The GIL is necessary for compatibility with CPython extensions. Other implementations have removed their GIL because they live in other contexts, but PyPy wants to retain that compatibility and be a CPython drop-in replacement.

                                              I’m surprised they were able to remove the reference-counting, but I don’t know enough about Python extensions to know why, maybe they indicate ownership of objecs in some other way? Or does PyPy not use refcounting itself, but supports it alongside gc, to support extensions? Or do some extensions just not work with PyPy even though most do?

                                    1. 1

                                      Why doesn’t he doesn’t mention Golang in comparison? He mentioned C# but stops there. Go is a similar vintage to Rust and has similar goals, but it takes a different approach to safety. Meanwhile, Graydon’s post (linked in another Lobster’s thread), acknowledges that there are parallel attempts to do this:

                                      A few valiant attempts at bringing GC into systems programming – Modula-3, Eiffel, Sather, D, Go – have typically cut themselves off from too many tasks due to tracing GC overhead and runtime-system incompatibility, and still failed to provide a safe concurrency model.

                                      I think you can read into this statement a lot, especially with all of the improvements to Go’s GC that are in version 1.8. It’s great to have two unique approaches to safe concurrency in systems languages (Rust and Go). It’s too early to tell which one will achieve their goals the best.

                                      1. 2

                                        To be clear, Rust claims to eliminate data races in safe code at compile time. Go does not. The specific guarantees provided by both memory safe languages differ when it comes to the standard implementations. You can read more details about Go specifically from rsc.

                                        With that said, in practice, Go provides some nice runtime protections against data races. Its race detector for example is awesome, and since Go 1.6, I believe data races on hash maps will always panic.

                                        1. 1

                                          Understood that there are different tradeoffs (zero overhead, etc). I’m talking about “what problems is this language good at solving”, and I think they’re very close given the goal of safety in concurrency.

                                      1. 11

                                        I committed myself to daily practice a couple years back. I decided to not break my github streak. Every day I do at least 20 minutes of katas, books, or building something outside my comfort zone. It’s been revolutionary. I’ve worked through SICP, Programming Languages, Let Over Lambda, Land of Lisp, Algorithm Design Manual, Clojure Programming, a good chunk of Data Scientist’s Toolbox, Learn You A Haskell, F# 3.0, Real World Haskell, most of @haskellbook, and I’m currently working through Software Foundations in Coq. I built, deployed, and support a school attendence suite in Clojure. I’ve done countless katas, TDD practice sessions, and little helper programs.

                                        All in all, deciding to put in 20 minutes a day and tracking it on GH has completely and drastically changed my skill in just four years. I believe if you set yourself the goal of writing something, anything for 20 minutes a day, you will find plenty to keep you busy and interested. You will see your skill rapidly improve. You will get bored of things in your current comfort zone, and so you’ll have to learn new things to stay focused. I can’t recommend it enough. I just crossed 1355 days of streak, and I intend to do it as long as I write software for money.

                                        1. 6

                                          I agree with the “20” minutes. But I disagree with covering such broad subject matter, and so shallowly (perhaps he meant something different).

                                          I think you’ll learn a lot more by doing things end to end, and start to finish. Figure out a small idea for a program you want to create. It should be highly relevant to you or someone you care about. Build the whole thing, including the UI, the backend, the database, tests, deployment, monitoring, etc etc. Use it. Polish it and make it robust. Don’t stop putting time into it until it’s actually done.

                                          I think perseverance is what makes expert programmers so unique. They can hit problems they’ve never seen and push through without getting discouraged. The only way to learn that is by finishing whole projects, not starting new ones.

                                          1. 5

                                            I’d say we are in agreement then! I finished almost every book and course, and the attendance site I built from scratch they are using it to this day. However, I disagree that fully completing SICP and Let over Lambda as shallowly covering Lisp and FP. Completing all 350+ exercises in SICP was one of the hardest things I’ve done and stretched my skill immensely.

                                            I’m actually curious completely because I want inspiration, if what I do is a shallow study, what does your personal study of it look like? I left out a lot of the books I’ve read that don’t have homework (so I don’t count in my 20 minutes a day) like Domain Driven Design, Clean Code, Code Complete, Pragmatic Programmer, Working Effectively with Legacy Code, Growing Object-Oriented Software Guided by Tests, Death March, Art of Agile Development, Planning Extreme Programming, Extreme Programming Explained, Design Patterns, Implementing Domain Driven Design, Patterns of Enterprise Architecture, Refactoring, Peopleware, Managing Humans, and Becoming A Technical Leader. Those are all fine, but can’t really be practiced so I often don’t recommend them unless the person has mastered more tactical skills.

                                            I do agree that perseverance is the biggest thing. When stuck and hopeless, I am at my worst when I give up, and at my best when I take a deep breath and look for alternate solutions.

                                            1. 2

                                              I want inspiration, if what I do is a shallow study, what does your personal study of it look like?

                                              What I would suggest is trying to find people who share your passion but have non overlapping skills to review your code; and do the same for them. You want to try to constantly refine and improve the code so it is better than what any of you could do alone.

                                          2. 3

                                            How do you balance reading a chunk of e.g. SICP and then coding, presumably something relevant, in 20 minutes? How much would you typically read? Does this only work because you do it every day? Or is it because the texts come with relevant exercises, so you don’t have to come up with your own projects?

                                            1. 4

                                              Those books all have exercises along with the text. I usually will read for a few minutes, then write some samples to see what’s up with what I just read, then start on the exercises. If the exercise is hard, I’ll have a few sessions of writing some unit test cases, playing with the api, and then finishing the exercise. At first each time I sat down I’d spend 10 minutes just remembering where I was, but after a year or so I got pretty good at just “jumping in” and can sit down and be typing/reading in under 30 seconds.

                                            2. 2

                                              What did you think of Data Scientist’s Toolbox? I’m curious how resources there feel. Did you have an applied math background going in?

                                              1. 2

                                                I had effectively zero math going in, but a lot of various programming languages. It was fine, I enjoyed it. I think I’d want to do it a second time without the deadlines, those really bum me out and demotivate me.

                                              2. 2

                                                The book Software Foundations came up when people were talking about learning to do stuff like seL4. I noticed it’s Coq where seL4 and many good projects are Isabelle/HOL. Curious if you or anyone else can tell me if Software Foundations' material also covers most of knowledge or skill needed for HOL, too. It plus a HOL-specific tutorial or articles. Or is it and Coq’s approach different enough to need a whole different book?

                                              1. 4

                                                I’m looking forward to CES this year (just a few days away!) for the first time since I can remember. Buying an Apple laptop has been the default for me for over a decade, but not anymore.

                                                1. 2

                                                  Brilliant! I’ll package this for Gentoo as soon as he renames it.

                                                  Now we shall see if Python3 can compete with a Python2 that’s no longer sabotaged by the core devs.

                                                  1. 5

                                                    Could you explain what you mean when you say that Python 2 has been sabotaged by the core developers?

                                                  1. 5

                                                    It’s an interesting idea. It could even help with porting to 3. But I think doing this in the CPython codebase is probably a dead end. PyPy has a good chance of becoming the preferred runtime once their Python 3 and C API compatibility projects are finished. Its speed increases are enormous. It’s reminiscent of V8’s release and its impact on JavaScript. The features in this fork may be valuable to Python 2 users, but it’ll be hard to accept an 80% reduction in performance.

                                                    1. 1

                                                      actually the impact of jit in python is less important than in javascript as in javascript there is zero C runtime.

                                                      1. 2

                                                        zero C runtime

                                                        Then what is your web browser written in?

                                                        1. 2

                                                          the web browser has no runtime which allow general purpose programming which is the main purpose of useful javascript programming. It has specialized runtime for html/dom model display, but the hard part of is to fight against html/dom model. At the opposite, cpython has a lot of C runtime, such has scipy.

                                                          For python having heavy C runtime is a bless and a curse, a bless because what exist work blasting fast and a curse because pretty much the only way to do something low level is to use a really old language.

                                                          1. 2

                                                            Fair point, but I’m really not enamored with the “Python is fast because SciPy is fast” argument. Yes, your Python can be fast if you spend most of your time running not-Python code, but that only works so far as your code happens to be representable as a bunch of matrix transforms. By that metric, any language with an FFI is “fast”.

                                                    1. 1

                                                      The partial and read-only types are especially interesting!

                                                      1. 12

                                                        It’s a shame he doesn’t mention glossy screens under the criteria; that’s an immediate disqualifier for many hackers. Whether something is an i5 or an i7 is a piddling concern to me compared to whether I can swap the battery out on long trips; I feel like the specs (other than DPI and brightness) are nearly irrelevant these days compared to the more practical features.

                                                        1. 4

                                                          Author here. I totally agree and loathe the glossiness of my current Thunderbolt display. I couldn’t get the data for every option (from specs, reviews) so I left it out of my consideration.

                                                          1. 2

                                                            I have no experience with this myself, but have you looked at putting anti-glare film on a glossy screen to make it more matte? Maybe this has become a non-issue if you’re willing to spend 10 minutes and $40.

                                                            1. 1

                                                              Whenever I’ve seen this done, it always leaves bubbles under the film and makes everything look a bit smudgy, but maybe I’ve just seen people using crappy film?

                                                              1. 3

                                                                I have a filter on my chrome book and it’s a massive improvement. There’s one fleck of dust, resulting in a bubble, which is annoying if I look at it, but then I remind myself not to care and it’s ok. It’s a matter of some luck getting the screen on, so maybe you buy 4 and make a couple goes at it? This is the only time I’ve tried a 13" protector and the first time went well.

                                                            2. 1

                                                              I’m surprised he didn’t mention the t460s w/HiDPI screen, and the USB-C ports missing being a disqualifier for the x1.

                                                              1. 1

                                                                You can get the same screen on the X1 Carbon, so they’re roughly equivalent in my mind? The X1 is smaller.

                                                                1. 1

                                                                  RJ45! Full HDMI! Matte Screen! 20 Gig’s of ram! Ok, so obviously I like the t460s options better, but you’re right they are close. I just think the t460s is better for just about anyone that would call themselves a programmer.

                                                            1. -6

                                                              Consumer product reporting ewwww.

                                                              1. 3

                                                                I felt similarly gross writing the post, if it makes you feel any better. I hate stupid product reviews but I was compelled this time because I’m so disappointed.

                                                                1. 1

                                                                  It helps, thanks for the effort at least. I just dislike seeing product reviews and summaries here.

                                                                  1. 1

                                                                    Agreed that’s why I didn’t submit it here myself :)