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. [Comment from banned user removed]

                                                    1. 9

                                                      but was more than happy to block a door when people were fleeing in droves from a “women in tech” talk at a Europython conference (fortunately, there was another door available)

                                                      uhhhhhh… what? cough

                                                      Seriously?

                                                      1. 4

                                                        Seriously?

                                                        Do you mean: This doesn’t count as discourse on Lobsters? That’s how I’m reading your reply.

                                                        1. 7

                                                          I think he means it more as “That sounds ridiculous, can you provide a link or explain better?”

                                                          1. 3

                                                            oh no, sorry, that’s the incorrect read; I was expressing surprise because that sounds… well, bad. I would call out anything I felt doesn’t count as discourse on Lobsters, but this isn’t it. I was just honestly surprised at what stefantalpalaru had mentioned wrt the door blocking, that’s all.

                                                          2. 1

                                                            Yeah, seriously. If I remember correctly, it was before this talk, on July 4th 2012: https://www.youtube.com/watch?v=l2PnVKQJg0I

                                                            Main conference room, right-hand side door when facing the stage. There was no need for physical violence. He just crossed arms, stood in front of the door in his silly “Python is for girls” T-shirt and stared at people (who, of course, smiled and turned towards the other door).

                                                            It seems he went further at PyCon 2014 when he decided to only take questions from women. Sexism will continue until the morale improves ;-)

                                                            1. 11

                                                              Your way to think about lack of women in tech problems is close to totally ridiculous

                                                              How you can imagine that blocking a door could be anything more than symbolic when there is two doors ?

                                                              The morale will never improve without conscious effort to improve it and being satisfied with status quo will not change anything.

                                                              As much as I understand women in tech feel all but welcome and it’s hard to understand that letting live an hostile climate which de facto exclude half of the human pool will not lower the global success of the community for example by doing better technical results.

                                                              1. [Comment from banned user removed]

                                                                1. 4

                                                                  you must confuse between having an hostile climate towards men and not allowing men harass women as they usually do in everyday life. Are you really unable to understand that expressing sexuality (by a man toward a woman) in very crude terms (orgasm) are harassment toward woman and all but normal way to behave.

                                                                  good point for my grammar being bad. As French, I understand it is not perfect, but can you (or someone else) point me what was incorrect and propose ?

                                                          3. 10

                                                            the core developers defer to a moron who’s unable to grasp some basic concepts from functional programming, but was more than happy to block a door when people were fleeing in droves from a “women in tech” talk at a Europython conference (fortunately, there was another door available)

                                                            I want to reiterate that this point is disrespectful and poorly reasoned. This is not how I expect my fellow Lobsters to behave. If you want to act this way, please go somewhere else.

                                                            The rest of your points are valid criticism, though I prefer precise arguments instead of rants.

                                                            1. 6

                                                              … the backwards incompatibility failures of … Ruby 1.9

                                                              I acknowledge that this feels like a beside-the-point nit-pick, but:
                                                              Python 3.0 was released before Ruby 1.9.1, the actual “stable” release of Ruby 1.9 (although that versioning choice was definitely a questionable one). Also, I recall being surprised how quick the adoption for Ruby 1.9.1 came amongst users, so much so I would consider it an example of a successful embrace of a new, incompatible version by its community.

                                                              That’s not to say it didn’t feel like an eternity when a gem you used was still 1.8 only, or something new was released and your 1.8 project couldn’t use it, but I remember reflecting some time in 2012-ish that Python 3’s woes made the 2009-to-2011 stretch that was Ruby 1.9’s adoption feel like nothing by comparison.

                                                        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”.

                                                            2. [Comment from banned user removed]

                                                              1. 11

                                                                PyPy was thrown together by a bunch of hacks that thought it would be cool to invent a new Python-like language to write that huge code base in

                                                                I’d appreciate it if you didn’t use ad hominem attacks on this site.

                                                                1. [Comment from banned user removed]

                                                                  1. [Comment removed by author]

                                                                2. [Comment removed by author]

                                                                  1. 0

                                                                    PyPy

                                                              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 :)

                                                                        1. 1

                                                                          Why is 13" inch a must have? I’d consider 14 if it meets a reasonable weight requirement.

                                                                          1. 4

                                                                            15" is too big. If it’s a bezel-less 14" then that could work. But the point is that I want something that’s small, easy to carry, can fit in any bag.

                                                                            1. 1

                                                                              Fair enough I guess. If it fits in my backpack reasonably, I don’t really care about how big it is as long as it doesn’t weigh too much. I also don’t really care how think it is as long as it’s thinner than say an average paperback. I’m willing to accept people care about size as more than a proxy for weight. For sure it can get too big to comfortably use on a plane.

                                                                            2. 1

                                                                              For work, I have an Lenovo X1, which has a 14" screen. I don’t think it offers much advantage over the 13" screen I have for my personal use. That being said, if the bezel goes away completely, which is a new trend (after how many years???), I’d gladly give up the bezel for an extra inch of screen. Any serious day to day use is likely going to have it plugged into a monitor, though.

                                                                              1. 2

                                                                                Funny enough, the bezels on laptops used to be smaller. The TiBook had incredibly small bezels, and ThinkPads in the early 2000s had them shrunk massively before they grew again. Blame cameras and WiFi aerials.