1. 2

    I think I’ll recognise SICP code forever.

    1. 10

      This just makes me think of when Facebook bought Oculus and everyone was like, “Well fuck, I really wanted on, but I guess not now.”

      It’s interesting even how, a decade past the days of Bill Gates as a Borg, even as our community has matured and we don’t had on MS anywhere near as much as we use to, we still see this as not something we really want.

      I agree, Microsoft is really not the company to be running Github. I wonder if it will still stay strong or end up going the way of Source Forge.

      1. 32

        Well, for me, it’s not the ancient past so much as present. They patent troll the crap out of companies. That’s anti-innovation that will control an innovation hotbed. The Windows 8 UI debacle and them putting ads on paid services like Live makes me weary of UI-facing changes they might do. Then, they put surveillance into their products mostly for advertisers but maybe governments, too. They do this is in paid products which arent those you expect to sell your info.

        So, the company’s current actions show they suck in a lot of ways which include screwing over their customers and suing innovators. Bad fit for Github.

        1. 33

          Not even the ancient past:

          • Spying on your activities through telemetry
          • Not providing full opt-outs in compliance with GDPR
          • Installing stuff onto your computer without your consent like Candy Crush
          • Forced updates, sometimes regardless of whether you’re doing something uninterruptable at the time

          That’s just off the top of my head for Windows 10 as of now.

          1. 10

            Spying on your activities through telemetry

            Telemetry seems to be getting built into everything now as well, Visual Studio and Code, SQL Server, the OS (backported into Win 7 and 8 too), not sure about Office (offline) but it can’t be far behind if not already in there.

            1. 1

              It’s in .NET IIRC.

            2. 3

              Installing stuff onto your computer without your consent like Candy Crush

              Is the crapware issue really on Microsoft, or OEMs like Dell and HP?

              1. 1

                Its my understanding its on the home/free versions. The LTSB version is the cleanest.

                  1. 1

                    Damn. Windows got even shittier. I honestly didn’t think it possible.

            3. 6

              It doesn’t matter to me if it’s Microsoft or not. If Microsoft hadn’t acquired Github, then some other megacorporation probably would have. It just so happens that Microsoft is trying to mind its manners after getting pimp-slapped by Google, Apple, and Facebook, but I’m not going to trust them just because they’re currently the underdog.

              The problem isn’t Microsoft. The problem is the way we allow corporations to operate in the US. Every time one corporation acquires another, the acquiring corporation becomes bigger and more powerful.

              This might seem quaint, but I don’t think that corporations as large as Microsoft, Facebook, Apple, AT&T, Alphabet, Comcast, Samsung, Disney, etc. should be permitted to exist. I think they’re inherently inimical to free markets and to democracy. I think that when a corporation’s market capitalization exceeds a certain threshold, it should either be regulated as a public utility, broken up, or dissolved.

              1. 16

                If you try to build it yourself, their build script also appears to download and inject additional code into the built artifact from marketplace.visualstudio.com during the build. I opened one two three issues.

                1. 11

                  My guess is that these practices that disrespect or completely ignore users privacy, like requiring an internet connection (whether to build or just to use a piece of software - even the OS itself) are so deeply baked into Microsoft’s mental culture now there’s no going back. It’s just a given now that they assume they are entitled to grab and record whatever information they want from your machine just in order to use their software.

                  It’s not just Microsoft, many companies seem to be jumping on the same or similar bandwagon.

                  1. 6

                    The same thing happens when you try compiling coreclr (called from here), there’s no way to properly bootstrap it. (And of course, there’s some “telemetry” in there as well, enabled by default during the build, before you have a chance to turn it off.)

                    1. 7

                      The same thing happens when you try compiling coreclr

                      Wow, now I wonder whether this pattern happens in other Microsoft “open source” projects.

                      And you gotta love this comment:

                      # curl has HTTPS CA trust-issues less often than wget, so lets try that first.

                  1. 6

                    Amazing. Well written, well researched and concise. Parsing is such an interesting problem - it arises naturally almost anywhere you find text.
                    I’ve read the phrase “parsing is a solved problem” so often in discussions about it but this article puts that in its place. Thoroughly.

                    1. 5

                      Parsing is a solved problem in the sense that if you spend enough time working on a grammar it is often possible to produce something that Bison can handle. I once spent several months trying to get the grammar from the 1991(?) SQL standard into a form that Bison could handle without too many complaints.

                      Bison’s GLR option helps a lot, but at the cost of sometimes getting runtime ambiguity errors, something that non-GLR guarantees will not happen.

                      So the ‘newer’ parsing techniques don’t require so much manual intervention to get them into a form that the algorithm can handle.

                      1. 3

                        I think that usually means for most languages and problems people are applying it to. If so, then it probably is a solved problem given we have parsers for all of them plus generators for quite a lot of those kinds of parsers. Just look at what Semantic Designs does with GLR. There’s FOSS tools that try to similarly be thorough on parsing, term-rewriting, metaprogramming, etc. At some point, it seemed like we should be done with parsing algorithm research for most scenarios to instead polish and optimize implementations of stuff like that. Or put time into stuff that’s not parsing at all much of which is nowhere near as solved.

                        I still say it’s a solved problem for most practical uses if it’s something machine-readable like a data format or programming language.

                        Note: It is as awesome an article as you all say, though. I loved it.

                        1. 5

                          A solved problem, but for a subset of constrained grammars and languages. Still people say it without any qualification as if there’s nothing more to be said or understood.

                          I take your points though and there are definitely other areas that need work.

                          I think my point is just that I’m glad people are still putting effort and research into solved problems like this. No telling where breakthroughs in one area can lead and we’re still restricted constructing and representing language grammar.

                          1. 3

                            A solved problem, but for a subset of constrained grammars and languages. Still people say it without any qualification as if there’s nothing more to be said or understood.

                            Yeah, they should definitely be clear on what’s solved and isn’t. It’s inaccurate if they don’t.

                      1. 3

                        I don’t think I’ve ever seen a talk by Guy Steele that wasn’t compelling and this is a true classic. He’s a great thinker and a really talented presenter to boot.

                        1. 4

                          *sigh* continuations are one of those things I have trouble with.

                          The conceptual idea is easy enough to grasp, but I have trouble reasoning about them in code - especially about when they would be a useful choice.

                          If anyone has links to some good material about continuations with real world practical use cases - not just the simple arithmetic expressions, I’d really appreciate them.

                          1. 7

                            I think that they are useful as language building tool, but not a sensible choice for your everyday programming. You (or preferably the base library authors) should hide them in more opinionated abstractions. Much like we hide goto with various flow control mechanisms.

                            It’s simple to implement cooperative threading with proper IO scheduler using continuations, you can also implement generators or exception handling system.

                            1. 3

                              I had trouble with them as well and ended up building them into my statement-oriented language to understand them better. Perhaps that works better for you, like it did for me?

                            1. 1

                              Giving a jupyter notebook access to bash on your server seems a tad dangerous.

                              1. 1

                                I agree, but that’s the way to get the job done at the moment. I’m not sure as to what security measures they have in store…

                                Additionally, a lot of tutorials I found access Jupyter Notebooks via an HTTP connection, so I’m thinking of writing a blog post about securely accessing Jupyter Notebooks…

                                1. 2

                                  Indeed. (-:

                                1. 10

                                  Deliberate Git by Stephen Ball, recorded at Steel City Ruby 2013. To this day, I have my team sit down together and rewatch it every time we onboard someone new. It’s a fantastic level-set of commit message etiquette and purpose plus an overview of history tools.

                                  1. 3

                                    I got more from Steve Smith’s talk - Knowledge is Power: Getting out of trouble by understanding Git than any other git video I’ve ever seen,

                                  1. 1

                                    Admirable effort, but punts badly on collision detection (in part 2 if one follows the link). One really needs at least some basic physics engine in even the simplest platformer. Hopefully that’ll be in a future post (box2d?).

                                    1. 9

                                      Author of the article here. The future post won’t use a physics engine. Physics engines are bad for 2d platformers which aren’t necessarily physics based. I mean if the goal is to make a physics based game (think Angry Birds) then sure, but if the goal is snappy controls like Super Mario, then you’ll fight the engine more than it helps imho. Sliding platforms, elevators and similar things are quite the pain for 2d physics engines. Can’t speak for 3d though.

                                      The next post will be using box colliders with raycasts. Once you have a 2d raycast (might even be enough to just have horizontal/vertical raycasts) you can do even stuff like slopes fairly easily, but the 3rd part most likely won’t get into that. I’ll probably cut it off when gravity/jumping works with static platforms.

                                      Any tips are welcome though.

                                      edit: Just to react to the comment :P

                                      but punts badly on collision detection (in part 2 if one follows the link)

                                      You’re right, I’m not really that happy with the state where its at. Initially I thought I’d make it a one big article, but keeping all the code in sync ended up being a nightmare, which is why I decided to split it up, cut it off at a point where something works, and do the next part in a more conscise manner.

                                      1. 4

                                        Regarding keeping the code organised, for a multi-part article, why not create a git or mercurial repository - on github, bitbucket or gitlab for example. The code for each article can be in a separate branch which you can link to directly. You’d still need to manage changes made to an earlier stage but that’s pretty straightforward.

                                        1. 2

                                          That’s not a bad idea, I thought about having a Gist of the finished code in each article. But the issue I was hinting at is with code snippets within a single article, not spanning multiple ones.

                                          My approach to these articles is to have incremental samples with JSFiddle along the way, but all of those are separate snippets, and if I decide to change one thing I have to re-write a lot of the article. I mean the solution to this is easy, not to have 10 copies of the code in each post, but I feel like that’s just making it more difficult to follow along. I guess I should probably figure out the whole code first before I start writing to minimize the changes.

                                        2. 1

                                          The next post will be using box colliders with raycasts. Once you have a 2d raycast (might even be enough to just have horizontal/vertical raycasts) you can do even stuff like slopes fairly easily, but the 3rd part most likely won’t get into that. I’ll probably cut it off when gravity/jumping works with static platforms.

                                          This sounds great, I’d love to read that. It would be valuable addition to material already out there.

                                      1. 4

                                        I think the method is describing what’s now called deliberate practice.

                                        The better books will have relevant exercises - different from the material in the book - that test your understanding of the material and stretch it a little (otherwise known as deliberate practice.) Focussed exercises that stretch your ability somewhat beyond your current ability.

                                        I mean people should really do that for themselves, but often you need some domain expertise and guidance to steer you in the right direction. The best teachers I’ve known do this, sometimes naturally, sometimes through experiences and sometimes through deliberate practice.

                                        1. 5

                                          The Benjamin Franklin method is a subset of deliberate practice. K. Anders Ericcson, the author mentioned in the post, is actually the father of deliberate practice.

                                          One of the components of training is rapid feedback. The Benjamin Franklin method specifically solves the problem of how to get feedback in the absence of a teacher.

                                          1. 2

                                            Thanks. I wasn’t aware of K. Anders Ericcson. I learned about the ideas and techniques from Daniel Coyle’s books - The Talent Code and The Little Book of Talent, The wonders of Myelin!

                                            Interesting point about rapid feedback - it’s often said that unit tests should run fast so that you can try changes quickly, but I think there’s a large psychological component to that.

                                        1. 12

                                          William Byrd’s The Most Beautiful Program Ever Written

                                          It starts off slow, but engaging, and when it pays off it pays off hard.

                                          1. 3

                                            Thanks for posting this talk.

                                            I’ve noticed lots of extremely smart programming language researchers get excited about Kanren or mini-Kanren and I’m not really smart enough to see why. It’s always been presented somewhat opaquely. This talk has blown my mind. One of those rare, true satori moments. Gonna spend some serious time re-reading The Reasoned Schemer to kick off 2018.

                                            1. 1

                                              Aye. miniKanren didn’t click with me until I saw this talk, and this is some amazing stuff.

                                              I was particularly excited about the Barliman demo and the possibility of future optimizations.

                                          1. 5

                                            I actually used infinite lists in my Python solutions this year. I can’t remember which one, but it was essentially “find the smallest number with some property”, which you can do like

                                            next(i for i in itertools.count(1) if has_property(i))

                                            I once gave a whole talk that was (in essence) about using Haskell-style infinite lists in Python:


                                            Not to be all self-promoting, but it’s a fun talk.

                                            Anyway, good on you for doing it all in Haskell, I always aspire to try that, and then I always end up just doing it in Python.

                                            1. 2

                                              I think the trick is do it with something you know well to get a feel for solving the problem, then try it in X.

                                              Generators are great though - I used Racket’s generator support to implement the infinite spiral of day 3. I should look into doing it using the lazy language to just use regular list operations but lazily. I tried using streams but the performance was much worse - the garbage collector got overwhelmed which probably means I’m not using them correctly.

                                            1. 6

                                              I suggested a leaderboard and it looks as if there’s some interest.

                                              I have a leaderboard with the code 37542-10cbb3de. Feel free to join. And good luck whether you choose to or not!

                                              Edit thanks @kghose for reminding me to post some instructions….

                                              1. login or create an account at http://adventofcode.com/ (note, you can be anonymous on the site!)
                                              2. you can join a private leaderboard if you go via the “leaderboard” link.
                                              1. 6

                                                For noobs like me, you need to go to: http://adventofcode.com/2017/leaderboard/private probably after logging in and use this code there.

                                                1. 2

                                                  Thanks - I’ve joined. I don’t think I’ve ever got in the top 100 for any of the challenges so a private leaderboard feels much more relaxed. I’m really not good at speed coding which isn’t a good combination with being hyper competitive :(

                                                  1. 2


                                                    There’s an ongoing meta-discussion about the leaderboard, coupled with the release time of midnight EST. As the creator has mentioned, the envisioned scale was in the order of hundreds of competitors, now it’s up to 100K! The downsides of success.

                                                    In the end, I find it more enjoyable competing against yourself. There will always be someone more dedicated and faster, so the idea is to make the best solution you can make. My overarching goal is to solve every problem myself without resorting to hints from other users.

                                                    1. 2

                                                      I guess it has to be midnight somewhere on the globe when the next puzzle is released.

                                                1. 8

                                                  I started using StackOverflow in the beta days and have a hojillion points now. I’m still passively getting points from things I posted at the start.

                                                  However, points aren’t meant to say “you’re a good developer.” They’re meant to say “you contribute the kind of content that StackOverflow users want and therefore we trust you to keep doing so.” Editing privileges, etc, flow from that understanding.

                                                  It’s probably impossible for someone starting today to ever catch up to my score. But I’d argue it doesn’t matter, if they can get enough points to get privileges and keep curating the site. (If not, the site will suffer.)

                                                  I’ve seen complaints about “rules lawyering” and such for years, and yes, it does happen. But personally I’m still able to get good answers quickly. Eg, I posted https://stackoverflow.com/questions/47016737/xpath-for-text-matches-one-of-the-following-strings a month ago and nearly immediately got great help.

                                                  I’m not sure if my success there is due more to the fact that I know how to ask questions on StackOverflow or to the fact of my high score. But for me at least, the demise of StackOverflow is greatly exaggerated, and has been for years.

                                                  1. 9

                                                    I’m not sure if my success there is due more to the fact that I know how to ask questions on StackOverflow or to the fact of my high score.

                                                    That’s a pretty simple experiment. Make a new account and ask some questions and see how they are treated. I suspect you’ll have so much less success that it’ll surprise you.

                                                  1. 2

                                                    The feeling you get when fixing a single issue has an unexpected global benefit is incredible. Performance tuning in general is a mysterious art of balancing concerns, but database tuning in particular seems one of the blackest and so often overlooked.

                                                    1. 31

                                                      The “identify language by location” issue is worse than anything account related honestly - I don’t use a google account, but if someone links me to a gdoc or google groups or something - I get Thai “in-page chrome” - all buttons, navigation etc is in a language I can’t read and barely speak.

                                                      Why? Because google has apparently decided that the Accept-Language header is a filthy communist plot and can’t be trusted.

                                                      This is more of an issue than the one described in the article because there is no obvious way on any google pages to change language. The author does understand the language shown to them it’s just not the one they wanted.

                                                      1. 10

                                                        Why? Because google has apparently decided that the Accept-Language header is a filthy communist plot and can’t be trusted.

                                                        you really couldn’t in the mid-90ies when the internet started taking off (it was normally set to the language spoken by the people who made the browser).

                                                        Unlike other things from the 90ies (like websafe colors), this one seems to stick around, possibly because only relatively few people are affected by it and because it doesn’t impact how the site looks on the CEOs machine (unlike websafe colors).

                                                        By now Accept-Language is very reliable and should be treated as a strong signal. Much stronger than geolocation or other pieces of magic (which also regularly fail spectacularly in multi-lingual countries. Damn French Youtube ads here in Switzerland)

                                                        1. 3

                                                          I mean - ok but that’s 25 years ago. You couldn’t stream video in the mid 90s, you couldn’t browse on a mobile device, shit you couldn’t do most of what people do now on the web in the 90s.

                                                          Even then it sounds like a bad idea - false positives where the users language isn’t that of accept-language means that they’re already managing to use a browser in a language other than their own.

                                                          Ultimately there are numerous better options that allow for potential mismatch of the browser language - but google uses none of them. They just base it on IP country code and fuck anyone who’s disadvantaged by it.

                                                          1. 0

                                                            You could definitely stream video for most of the 90s… I certainly did.

                                                          2. 2

                                                            Funny that you should mention French ads on YouTube in Switzerland, no later than yesterday I was complaining on IRC that I only get Swiss German ads on YouTube and Spotify although I’ve been living in the French speaking part of Switzerland forever. It’s even more surprising because I don’t speak German or Swiss German and Google absolutely certainly knows this about me, the locale sent by my browser is fr-CH, etc.

                                                          3. 10

                                                            And what a brain-dead decision not to make switching language the easiest possible UI interaction. At least some sites make it easy e.g. by listing the desired language in that language because guess what - I don’t know what the word English is in Arabic.

                                                            Not to mention the fact that there are MULTIPLE valid languages for many locations.
                                                            Worse still that so many other sites have blindly copied the idea. God help you if you travel or spend significant time where you don’t understand the local language and don’t want to be forced to log in (or even have an account).

                                                            I wrote a greasemonkey script to add a hl=en slug across all google locations and I dread the day they decide not to respect that.

                                                          1. 8

                                                            After finishing SICP I enjoyed Programming Languages which was about building interpreters in Racket. You’ll want to follow along with the book and the course assignments, for some reason they keep them separate. http://cs.brown.edu/~sk/Publications/Books/ProgLangs http://cs.brown.edu/courses/cs173/2016/assignments.html

                                                            I really enjoyed Haskell Programming From First Principles, which is about learning Haskell. Since we’re programmers, we can learn to wield both sides of the Force, Lisp AND Haskell. http://haskellbook.com

                                                            Likewise, Let Over Lambda is excellent and I’d argue even more mind bending than SICP and is about DSLs in CL macros, with a final project of making the language Forth a valid DSL in CL: https://letoverlambda.com/index.cl/toc

                                                            I’m only part way through, but I really like Software Foundations. It’s about dependently typed proofs in Coq. Really good stuff. Suddenly you realize there’s not just two sides to the Force. https://softwarefoundations.cis.upenn.edu/current/index.html

                                                            All of these were very similar to SICP in difficulty, exercise length, and value to my ability to write and comprehend software. I can’t recommend them enough.

                                                            1. 3

                                                              Brown further developed the course - CSCI 1730 based on a revised version of PLAI (and an early version of typed racket) with video lectures and assignments.

                                                              PLAI’s spiritual successor Programming and Programming Languages is also available based on a new language called Pyret.

                                                              1. 2

                                                                Oh cool! I was taking the course when they switched mid-semester to typed racket (which was a big improvement), its nice to see they’ve continued revising further.

                                                            1. 15

                                                              This is one of my pet peeves, and as an end user I feel web apps are one of the worst things to happen to computer software in a long time.

                                                              One place the difference is really noticeable is comparing Google Docs to the standalone Microsoft Office applications. Google Docs is missing 90% of the features and the interface is terrible. Whenever I need to create a document I jump to my Macbook and use Pages (which isn’t great either, but beats Google by a mile).

                                                              Another place where the difference is really noticeable is comparing Outlook in Office 365 to standalone Outlook. The features are very limited, there’s no ability to customize it, features that existed for 15 years in Outlook aren’t there any more, etc. It’s a mess.

                                                              Even the promise of cross-platform compatibility doesn’t work out in practice, because the larger web apps inevitably end up only working on specific browsers.

                                                              1. 17

                                                                The most striking thing in my eyes is the fact that millions of dollars by multiple vendors have been poured into making the web a viable app platform and yet it hasn’t produced much in the way of complex apps that support professional workflows. Some may regard this as a feature (think 37 Signals aka Basecamp), but the fact that it Gmail and Gmaps remain the most technically sophisticated webapps out there is damning.

                                                                It just goes to show you that no amount of money and wishful thinking can paper over a conceptual impedance mismatch.

                                                                1. 5

                                                                  one counterexample: Salesforce.com

                                                                  Sure, it’s a CRM. But it’s also an extremely pluggable environment. Third parties work to offer pluggable functionality, there’s “remote debugging” if your client has issues. There’s entire VMs working on huge sets of data.

                                                                  It’s very close to being a Smalltalk-style image per user. The web-y-ness allows working with various data sources in interesting ways, allowing third parties to set up stuff within your own environment. It’s an extremely connected environment, and essentially impossible without the web.

                                                                  1. 4

                                                                    I don’t imagine that it’s impossible for there to be a web application that is strictly better than a desktop one, for some given set of tasks, but by the time the platform mutates into one that enables said application, the platform will not look anything like the pig’s breakfast we see today. It won’t be within a million billion miles of elegant, but somehow more layers of abstraction will be piled on and we’ll muddle through, because Google’s gotta keep those ad dollars flowing.

                                                                    I hate it. I hate it all so, so, so much.

                                                                    1. 2

                                                                      For all the advances, the web has become an execrable platform commandeered by ad agencies and data brokers. I keep javascript locked down pretty tightly using NoScript whitelisting sites I visit often, mainly to avoid a lot of the egregiously bad ideas. Some pet peeves - scroll jacking, unreadable, ultra low-contrast designs, having to load multiple javascripts frameworks just to read some fucking text with a few pictures.

                                                                    2. 2

                                                                      …it hasn’t produced much in the way of complex apps that support professional workflows

                                                                      I’m not sure this is true, unless we have very different definitions of complexity and professional workflows. In the past decade some of the web apps I’ve worked on were:

                                                                      • A self-service telephony configuration app with features like group rign, follow-me, etc.
                                                                      • An ERP system for the flooring industry, including shipping, receiving, accounts payable/recievable, etc.
                                                                      • An app for designing & formatting physical books for print-on-demand self publishing

                                                                      Currently I’m working on a web-based contact center and communications platform that supports routing of calls/chats/tweets/email/voicemails to agents, review and quality analysis of agent interactions, real-time stats in the browser for contact-center management, workforce planning, agent script editing and display, telephony administration, company directory, chat & telephony for non-contact-center users, and probably a bunch of other stuff I’m forgetting. It’s nothing if not complex and professional.

                                                                      Like most projects, all of these applications had their fair share of issues, but the problems were not specific to the web, and would likely have been issues in any desktop application built by the same companies. Mismanagement of projects, insufficient time to deal with technical debt, poor business decisions, legacy tech that must be accomodated - those problems are not specific to any platform.

                                                                      I’m speaking mostly from personal experience, but it may be possible that apparent lack of “complex webapps supporting professional workflows” is primarily due to those apps existing in niche markets that don’t get publicity in the same way social media platforms and end-user tools like email/office software do.

                                                                      1. 1

                                                                        Gmail and Gmaps remain the most technically sophisticated webapps out there is damning.

                                                                        In the consumer space, sure. But there are some reasonably complex enterprise-y web apps. MS Office (and even the Mac productivity suite) historically weren’t “free” applications, so it’s not entirely fair to compare them against “free” web apps.

                                                                        That being said, web apps are mostly crap and I use them because of factors other than quality (convenience largely).