Threads for mikeg

  1. 1

    This project looks exciting. QEMU is a great emulator, that has always seemed to be the perfect platform for binary instrumentation. Except that it lacked an API for binary instrumentation (meaning if you had to hack the source to get anything done).

    1. 6

      Whats with all the Go articles on lobster? It been like 15-20% of all articles the last week.

      1. 4

        I think in general there’s been a lot of interesting public activity in Go.

        1. 4

          I submitted most of them. After the HN surge on here, I kind of backed off because it was all ruby and javascript, and I don’t care about either. So, I submitted articles about something I do care about, figuring the crowd would choose whether they were interesting or not.

          All of my non-work programming lately has been in Go, and there are a number of people who write Go code here.

          1. 2

            Yeah, and the Ruby and JS surge is mostly me. :) I work in and enjoy both, so I tossed up the better stuff I saw for a couple days. Thanks for sharing these Go links, nice to peek over the fence.

            1. 2

              I’m glad to see these Go stories being posted, and have to admit that’s probably the main reason why I was attracted to the site. Definitely keep them coming :)

              1. 1

                It was a couple of the early Go articles here that got me started in the language, actually…

            2. 2

              Smaller sites are easier to impact. If you want to reduce that amount, submit a bunch more non-Go stuff. ;)

              1. 1

                It was a genuine question given that it’s not as popular on other sites (and I do submit articles :P).

                I’m curious about what type of developers are drawn to Go. The C++/Java crowd?

                1. 4

                  According to Rob Pike, one of the primary designers of Go, they expected C++ developers to flock to Go, but instead the language attracted Python and Ruby devs.[0]

                  [0] http://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html

                  1. 2

                    Although Pike dismisses it, I think a lot of people are excited about C++11. It’s got more features, but importantly, features people want. C99 has taken a long time to gain traction because nobody really cares. C++11 is something they care about. Five years ago would have been a better time to attract C++ devs.

                    I think they are attracting some c++ devs though. The ones who are starting a new project, think maybe python or ruby would be a good enough match, but feel more at home using Go.

                  2. 2

                    If you’re participating in this site it’s a good sign that you’re an early adopter. And if you’re interested in Go it’s a good sign you’re an early adopter. Perhaps lobste.rs and Go attract the same type of crowd (right now).

                2. 2

                  There does seem to be a heavy dose of Go related stuff on lobsters. There are no tags for many other languages, even though they have been requested several times. For example, there’s no scala tag if one wanted to post something about the Play! framework that Revel is modeled after.

                1. 2

                  It seems like people who get a lot of experience in scaling one day think, “It shouldn’t really be this hard, people shouldn’t have to make this many mistakes, people should be able to learn from my mistakes.” This seems reasonable, except that your blog is generally not a good place to put this information. I wonder if there is a better delivery system for something like this, maybe a wiki of best practices for scaling large systems, that delineates the different schools of thought, and what the existing tools and frameworks are for doing this kind of thing. As an example of a good starting resource is this link, posted on lobsters earlier, although it is not easily searchable, despite being organized by topic.

                  Any other thoughts on a good way to organize all of this shared knowledge? I hate to say “crowdsourcing” because I associate crowdsourcing with non-expert knowledge, and this is definitely expert knowledge, but this is crowdsourced in the same way that wikipedia is crowdsourced.

                  1. 1

                    I think the right form of communication about this is a text book. But before we get there we also need to systemize our knowledge into a unified theory, “architecture patterns,” etc. While I think crowd sourcing is good for enumerating knowledge, I think we need a centralized effort to systemize it (see for example how IEEE S&P’s is soliciting “Systematization of Knowledge” papers for computer security).

                    The problem as I see it is that it usually Academia who develops such systematizations, but scalability tends to be a mostly industrial problem that academics are uninterested in (the only exception I can think of is “big data”).

                  1. 1

                    Apparently this is not quite ready for prime-time, but encouraging nonetheless.

                    I’m curious: how many people are ding Web development with Go, and what might the advantages be over using JavaScript, Python, Ruby or Java (for example)?

                    1. 2

                      Here’s a list of organizations using go. http://go-lang.cat-v.org/organizations-using-go

                      Advantages over JS, Python, and Ruby: type safety and performance Advantage over Java: syntactic niceties make programming nicer

                      Also, Go has built in go-routines which are kind of like threads kind of like co-routines. Last time I checked the implementation hasn’t yet delivered an all the promised upsides, but once the go-routine implementation is improved it’s the perfect abstraction for concurrent web programming. Think of it like a thread but without the performance overhead.

                      And Go has many features that help with scalability. For example, message passing using typed channels helps you write concurrent code without shared memory (which is easier to parallelize).

                      I’ve recently become addicted to functional-style programming in Scala, but I think go lacks a comparable functional library. Which is too bad because Scala’s type system and compiler quirks keeps getting in my way…

                    1. 2

                      I think I spoke too soon. After thinking about it some more I think there’s more meta discussion and less non-meta discussion simply because people tend to be interested in only a subset of topics (which is why I’ve only posted a few comments), yet most people are interested in the meta aspects (we’re all early adopters).

                      But still, what can we do to increase news discussions?

                      1. 1

                        Isn’t this pretty much just Erlang but with a clusterfuck of languages?

                        1. 1

                          The author says “Message based systems have been around forever. The way I’m applying the concept is what’s new and interesting (at least to me).” But I’m also lost on exactly what the new ideas are.

                          It sounds like the author is wishing for a “Staged Event Driven Architecture” http://www.eecs.harvard.edu/~mdw/proj/seda/ — which was a really cool project. I think the SEDA idea has a lot of potential, but unfortunately the developer Matt Welsh, as an academic, was not incentivized to continue development. Matt discuss this problem, in general, here http://matt-welsh.blogspot.com/2012/06/startup-university.html

                          I’ll also point out that “If a worker fails, is restarted or killed the messge will be requeued and not lost.” sounds like a bad idea to me. This idea would only make sense if worker failures were unrelated to the message the worker is processing. In all likelihood though, workers fail when they can’t handle the input. In the case of a high-density DoS attack, this will just spread the attack amplifying the damage.

                          1. 1

                            The way JBoss handles this is to send the failed messages to a failed queue where you can do whatever you want with them. You could easily requeue with an incremented fail_count number and just log and drop the message after it fails X amount of times.

                        1. 4

                          Full paper here: https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final218.pdf

                          I really like this research. It reminds me of a 1999 study from Cigital, where they were able to uncover their opponents' poker hands on PlanetPoker. How did they do it? PlanetPoker re-initialized their PRNG before every hand using the the system clock time. After playing a couple hands of poker, and guessing approximately what time it is on their server, you could backtrack the possible poker hands to determine the exact time on their server —– syncing up your clocks. Then, whenever you were dealt a new hand you could very quickly reverse it to see what PRNG seed was used to generate that hand. From there you could shuffle the deck yourself and then see your opponents cards.

                          http://www.cigital.com/papers/download/developer_gambling.php http://bluffnakedpoker.com/PDF/developer_gambling.pdf

                          1. 2

                            This article is neat because I think that it explains the difference between NJ style and MIT style on a personal level, rather than on a project-wide level, looking into the root causes of the MIT style. Although Ritchie could just dig in and make what people wanted, the lispers got stuck doing the right thing. CL was something of a concession, with loops, etc, but not “hack”-ish enough to cut it.

                            My favorite part of this is definitely the Into the Woods quote though.

                            1. 3

                              My favorite anecdote about MIT vs. NJ style comes from Richard Feynman in “Surely You’re Joking” (pg 62). Feyman graduated from MIT undergrad and entered a PhD program at Princeton, because all the best results from experimental physics were coming out of their cyclotron. When Feynman showed up he realized why. Everything at Princeton was a hack job — wires strewn everywhere, a real mess. But they were agile, hacked things fast and got the best results the fastest. But all that chaos eventually caused a fire that destroyed the cyclotron.

                              http://books.google.com/books?id=7papZR4oVssC&pg=PA62&lpg=PA62&dq=%22incidentally+they+had+a+fire+in+that+room%22+feynman&source=bl&ots=esR-ggmPZ0&sig=E3O347XzCtTKYP8G0CvplUV7UMs&hl=en#v=onepage&q&f=false

                              Startups hack because that’s how you make big wins. But once you’re established the risk of fires outweighs the potential gains, so you slow down and do things MIT style.

                              1. 1

                                My favorite part of this is definitely the Into the Woods quote though.

                                <3 Sondheim

                              1. 3

                                Makes me jealous. I would love to build tooling like this, never worked for an employer that valued these things enough to let me do it.

                                1. 2

                                  If it’s worth it, find the time. You may just inspire the ones making the decisions of what is ‘value’.

                                  1. 1

                                    There is always a balance to made between investing in infrastructure and banging out the minimal set of things to take you where you need to be next. It’s also very difficult to know what is the best move to make at any given time. In my experience some organizations more heavily favor infrastructure investment (e.g. github) while others do not. If you’re in an organization that is biased against infra development then you’re going to need to work hard to sell your ideas…

                                    1. 1

                                      Infrastructure at my company isn’t the highest on the list of things to do. It’s sad to say we’ve had to almost fight to get time to maintain infrastructure. Maybe it’s because I’m young and dumb but I’m working on tooling exactly like this post funnily enough. It needs to be done but it’s not exactly “my task for the week”. If anything I’ll write it off as a cost of making my future tasks easier to solve.

                                      I’m not exactly “selling” the idea, it seems I’m doing it for free.

                                1. 1

                                  I’m very tempted to buy 20 and setup a cluster…

                                  1. 1

                                    Or could I get 20 cores for less money in another form factor?

                                  1. 1

                                    Next time the google car approaches my neighborhood I’m redoing all the street signage. SEO for Web 3.0.

                                    1. 1

                                      I am super excited about this book. I believe formally verified software via proof assistants such as Coq represents the technology that will transition computer programming from an art to a true engineering discipline. Coq has been used for such things as producing a formally verified C compiler http://compcert.inria.fr/ . My favorite work in this area is Ur/Web http://www.impredicative.com/ur/ , a new web programming language that guarantees that web apps are invulnerable to many common web attacks.