1.  

    “You don’t need a blockchain” is the new “You need a block chain” article.

    1.  

      I’ve lost track of the number of organizations and people I’ve talked out of a blockchain solution in the last ~6 years that I’ve seen Bitcoin as more than just a cryptocurrency.

      My entry-level question when someone tells me that they want to start their own cryptocurrency:

      Are you OK with people buying drugs with it?

      If the answer is No, then a cryptocurrency is not their solution. Not because people will buy drugs with it, but because if the creators can control who buys what with their currency, then it’s not a cryptocurrency.

    1. 4

      I guess there are another few things to add to your threat modeling, if you haven’t considered it already: malicious or incompetent domain registrars and when-I-wake-up TLD administrators.

      1. 7

        In preparation for tax season, I’m tweaking my plaintext accounting setup. I recorded all of 2017: every transaction that touched my bank or credit cards is queryable. I’m switching processors for 2018 to a setup that’s already saved me about two hours per month. I’d love to get to a point where I can do make irs1040 and it spits out the content of all of the boxes that my transaction data can reflect.

        I’ve already got make networth and make cashflow working, complete with nice graphs in the terminal courtesy of iTerm2’s imgcat.

        I’m hoping to generalize my setup so that I can release it eventually. I’ve found very few examples of workflows so I want to contribute mine to the world so that the plaintext accounting ecosystem is more approachable.

        1. 2

          Some friends and me collected quite a few interesting ledger-cli graphs (using GNUplot and a pie-charting tool of mine) on Github: https://github.com/cbdevnet/ledger-reports

          Though some of them break when using them with multiple commodities… Might have to get around fixing that some time after my exams :)

          1. 2

            This looks really awesome! Any chance you could throw up some example images?

            1. 1

              Good suggestion, thanks! I’ve just opened an issue for that. As I’m not quite comfortable with using my own data for presentation purposes, this will include generating a somewhat-random example ledger file and generating the demo statistics from that :)

          2. 1

            I’d be very interested in seeing your setup when you’re done. The notion of using a CLI program for doing this sort of accounting intrigues me a bit.

            1. 3

              A good start is to watch a recording of one of my talks and those of some others who have produced some content about it: https://www.youtube.com/results?search_query=plaintext+accounting&page=&utm_source=opensearch

              I’m probably still a few months away from having my stuff sufficiently abstracted.

              1. 1

                “The notion of using a CLI program for doing this sort of accounting intrigues me a bit.”

                It was the default on most cash registers of big chains for a long time. The ones in my area I shop at just now all got the graphical apps. It was mainframe, terminal-style stuff on backend for some. So, CLI on each side. Here is one for UNIX I found when I looked up that stuff.

                1. 3

                  There’s a difference between CLI and TUI. Most cash registers I’ve seen were TUI, IIRC.

                  Still, there’s a certain Spartan flavor to TUIs, such that they can be quite efficient for their tasks.

                  1. 1

                    Ok, yeah, TUI was more what I was thinking of. The ones I dealt with were usually more efficient than their GUI replacements. Way more reliable, too.

            1. 2

              Off-topic but relevant to the link: WAPO’s new method of nudging folks with ad-blockers is pretty anti-user. It appears to push the root of the site onto the history, so a reload of the page loads the front page instead of the story. The way to stop it? Stop page loading as soon as the body text loads: the gatekeeper is JavaScript and among the last things to load.

              1. 4

                I’m using uBlock Origin and uMatrix and I don’t see anything.

                1. 1

                  Pihole, here.

                  1. 2

                    I’ve always found the granularity of running my adblock/noscript in-browser to far exceed any convenience advantage enjoyed by a pihole. IP bans just aren’t enough, especially vs “modern” sites with tons of JS.

              1. 3

                I think MUTE was inspired by ant colonies, too.

                1. 3

                  How many of you track your technical debt explicitly?

                  That is, with an issue label or somesuch marker indicating “a decision that might bite us was made and this is proof of that hesitation”.

                  I’ve been doing this now for about 2 years on my projects and it’s helped a few times when regret has come in the form of unhappy management.

                  1. 2

                    I do not do it that explicit in code. But projects I’ve been TL on I do make very explicit decisions about which part of the codebase is allowed to go into debt and which parts need to be high quality from day one. It doesn’t always work out like that but making the decision and communicating helps a lot.

                  1. 2

                    Seems like a new p2p messaging app pops up every year. I wish you luck but I can’t see it even passing tox which is fairly unusable.

                    1. 25

                      Agreed, but it’s fun to work on.

                      1. 23

                        THIS is the mentality I admire. Every time I come up with a new project and want to show it off, I’m inundated with “yeah, but X already exists! Why would you make another one?” Because it’s fun! Because I want my own! Because I want to write code!

                        Keep it up, it’s a cool project.

                        1. 12

                          Thank you! Having my own project like this to refactor and perfect allows me to stay sane in the business-focused “it ain’t broke” environment of the real world.

                        2. 8

                          I love this mentality and that’s why I wrote my own p2p chat app too.

                          The most fun part was learning how to punch through firewalls, building messaging on top of UDP, and encryption.

                          Learning is best done through doing.

                          Question , what encryption does your chat app use?

                          1. 3

                            None whatsoever 🙊. All messages are transmitted in the clear right now, to obvious peril. Another goal I’d like to hit is implementing end-to-end encryption I’m interested in using libsignal, but don’t know enough about it to know if it’s applicable in a p2p protocol like this.

                            1. 2

                              I’d like to see yours too if you want to share.

                              1. 1

                                I haven’t worked on it in like a year, though recently started doing some C++17 revamp. It’s called Fire★. It’s interesting that you chose GTK, any reason to pick that over something like Qt?

                                1. 1

                                  None other than that the Rust bindings looked mature and are easy enough to work with. I actually started by wrapping it with Swift and making an iOS app. I made some progress but it was pretty hard to maintain the Swift wrapper, wrapping a C interface, wrapping the actual library.

                                  Fire(star) looks pretty cool. Next time I have some free time with my laptop I want to play around with it.

                                  1. 2

                                    Interesting, hopefully the Rust people will get decent Qt bindings. Qt is pretty damn great. If you ever do play with Firestr, PM me your ID and I’ll send you mine.

                          2. 3

                            what’s wrong with tox?

                            1. 3

                              Nothing that I know of.

                              1. 2

                                Last I saw which was a little while ago, It didn’t work well at all on mobile because you need a constant connection to the network which drains your battery and data real fast. Matrix looks a lot more promising for real use.

                                1. 1

                                  does matrix have video chat?

                                  1. 1

                                    It does. It has almost all the features of things like discord and slack but they need to be polished more and sped up.

                                2. 1

                                  Doesn’t Tox have occasional developer drama every so often?

                                3. 1

                                  Can you clarify what Tox is and, more importantly, why you think it wouldn’t pass?

                                  I think you mean “be better than Tox [another messaging system], which has its own usability problems”.

                                  1. 2

                                    Tox is another P2P messaging system. The Qt client is a little wonky, and I remember having issues when trying to do group chat. Beyond that, it was really nice to use, and the voice chat functionality was surprisingly great. The last time I used Tox was maybe 2014 so maybe it’s changed since then. I think the main thing Tox has going for it ahead of other P2P systems is that it’s relatively popular and well-known.

                                1. 6

                                  It may be the late hour, but I’m having trouble synthesizing the information presented here. It seems that Giacomo contributed some code to Harvey, a Plan9 fork, but then forked Harvey at some point to create Jehanne. He stopped paying attention to Harvey at some point after focusing efforts on Jehanne. A friend pointed out that Harvey’s attributions no longer included his name. He verified this and then posted an issue about it. The Harvey folks said something along the lines of “no big deal” and after some discussion, the Harvey folks decided that it would be better to remove all of his contributions than to attribute them to him. He pointed out that their rework didn’t really remove his contributions but rather reimplemented them minorly. Then he posted a blog post about it.

                                  Does the Harvey team still have work to do if they want to actually mitigate a need to attribute to Giacomo?

                                  1. 12

                                    He laid it out cleanly in the end. Instead of respecting him and his contributions, they bitterly removed them. He feels the Free Software people respect contributors, while big corporate open source folks dont. I agree with his conclusion. It’s a cautionary tale.

                                    1. 8

                                      It’s a cautionary tale.

                                      Exactly. But note that it’s not just a matter of Free Software’s ethics.

                                      As I tried to explain them, if you use somebody else code without proper copyright statements, you pose a threat to their own right to use their code elsewhere.

                                      1. 1

                                        It sucks a lot but I think it’s something that we as contributors have to accept. Code changes. When our contributions are no longer present, there’s no longer a need to actively recognize those contributions. At least, that seems to be the terms of the license.

                                        1. 10

                                          except thats not what seems to have happened. They actively removed and reimplemented so the name isnt on the project. Thats some nasty stuff.

                                          1. 4

                                            They actively removed and reimplemented so the name isnt on the project. Thats some nasty stuff

                                            Umm, no, that’s not nasty. It happens, sometimes for good reasons: https://marc.info/?l=openbsd-cvs&m=99118918928072&w=2

                                            1. 3

                                              The point @stsp is not that they reimplemented my stuff. Surely they can!
                                              But their new implementation can be obtained by trivial, non recursive, modifications of my patches (that is: you can do that with notepad, you don’t even need for a regular expression).
                                              And, accidentally, their reimplementation work went mixed in few huge commits that were a squash of several commits from several authors.

                                              Now, I wont bore them anymore. But I really learned a lesson there.

                                              1. 1

                                                And if the parts of your patches they kept could be obtained by trivial, non recursive, modifications of their original code, what then?

                                                Your statement shows that you are applying the derivative work concept, but only where it favours your own cause.

                                                1. 4

                                                  And if the parts of your patches they kept could be obtained by trivial, non recursive, modifications of their original code, what then?

                                                  If you think that my patches can be obtained by trivial, non recursive, modifications of their original code, you didn’t look at the code at all…

                                                  1. 1

                                                    This is about parts of patches, not the patches as a whole.

                                          2. 3

                                            I cannot agree @colindean: I didn’t complain for the code they removed or replaced.
                                            For example I ported zlib to Harvey and wrote a console filesystem in user space, and they properly removed them together with the copyright statements, here and here.
                                            I’m fine with this: it’s their project, they are many different people, they can always choose better approaches.

                                            What I cannot accept, is people using my code and patches (that I’m using elsewhere) without any attribution.
                                            SCO teaches that things can get hairy in the long term.
                                            And they are backed by Software Freedom Conservancy.

                                      1. 5

                                        Coming from the DM, I had a hard time finding the gofundme link. Just in case others are as dense as I am, here it is: https://www.gofundme.com/lobsters-emoji-adoption

                                        1. 2

                                          It took me a moment to realize the link is the story link for this story. I’m just not used to seeing the announce tag on a link!

                                          1. 2

                                            Or on a primarily text post!

                                        1. 18

                                          Correctness is not why I prefer static types; I find code with static types much easier to read.

                                          1. 11

                                            I’m going through an episode of this right now. I’ve been hacking on a popular package manager written in Ruby. I love the app, its ecosystem, and its governance and consider it to be one of the most successful software projects written in Ruby and one of the most successful open source projects for its target platform. You’ve probably guessed what it is by now.

                                            Ruby wasn’t my first language (PHP) or my second (Java) or my third (Smalltalk). However, Ruby was what I used outside of work for everything for about five years between when I stopped doing PHP for work and started doing… XSL, HTML, and JavaScript. While I don’t know Rails very well because my tasks with it were rarely web-oriented, I do know Ruby pretty well.

                                            Or at least did.

                                            You see, I got into Scala at the end of 2013 when I transferred departments temporarily and then eventually permanently. To my Ruby mind, Scala was the marriage of Java and Ruby with all of that Scheme goodness I’d enjoyed in college after learning Smalltalk.

                                            So, for the last 4+ years, my brain has been Scala. Sure, I’ve used Ruby here and there, but the tracing skills atrophied as my needs for debugging Ruby dried up. I’ve gotten really used to debugging with IntelliJ, using code completions, not needing to keep a documentation browser tab open all of the time, etc.

                                            These days, just tracing down what’s coming from where in Ruby is… a slog.

                                            I feel like a lot of the Ruby code I encounter works on assumptions and not assurances. It makes me uncomfortable now. These days, I’m doing Scala and Rust at work. To encode those assurances I fear would tremendously slow down the execution of the interpreted Ruby code and greatly reduce the simplicity therein by introducing far more repeated incantation, the kind of complexity handled at compile time in compiled languages.

                                            1. 7

                                              So weird that you’re saying this, because in another post ( http://www.drmaciver.com/2016/07/it-might-be-worth-learning-an-ml-family-language/ ), MacIver says:

                                              I’ve been noticing something recently when teaching Python programmers to use Hypothesis that has made me reconsider somewhat.

                                              That skill is this: Keeping track of what the type of the value in a variable is.

                                              In particular this seems to come up when the types are related but distinct.

                                              … this is by far the second most common basic usage error people make with it….

                                              … it’s definitely a common pattern. It also appears to be almost entirely absent from people who have used Haskell (and presumably other ML-family languages – any statically typed language with type-inference and a bias towards functional programming really)

                                              … in an ML family language, where the types are static but inferred, you are constantly playing a learning game with the compiler as your teacher (literally a typing tutor): Whenever you get this wrong, the compiler tells you immediately that you’ve done so and localises it to the place where you’ve made the mistake.

                                              This is probably a game worth playing.

                                              1. 3

                                                To me, this is the game played when not using an IDE with completions! To each their own – some folks prefer to memorize methods or keep documentation open – but completions allow me to work faster and not have to keep as much in my head from session to session.

                                            2. 9

                                              Yes, types actually communicate a great deal about the intentions and expected inputs and outputs of functions. If a function returns a Weight, that is a lot different than something returning a Velocity and might cause you to question the name of the function “GetVelocity”.

                                              1. 7

                                                Which is also an important part of correctness in the maintenance phase: the most expensive phase for both defects and changes.

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

                                                  I just hired two more people to my team today, now at full planned strength. While I’ve been doing recruiting and interviews for a long time, these past few months were my first involved in the whole process as a hiring manager, from initial contact through orientation. It’s been a difficult˚ but rewarding process full of plot twists and learning a lot about people. I’m pretty excited to see what my team is going to produce!

                                                  ˚ difficult because hiring is hard, not because of company or other standard things that inhibit what feels like it should be an effortless process

                                                  1. 1

                                                    Congratulations on getting through the first challenge if your career pivot. There’s been lots of info on hiring that’s often a bit contradictory. Were there any articles or other resources you found helpful for how you did it?

                                                    1. 3

                                                      Unfortunately, I didn’t save much of what I read. I can say that a lot of my process I came up with myself, borrowing ideas I’ve heard here and there throughout the last few years. It started with a few tenets, which may get long as I think about it:

                                                      • Know what you want but reevaluate after each hire when hiring a team.
                                                        • My latest hires became viable when I realized that my initial pass at job descriptions for their positions didn’t reflect the skills of the team hired in the meantime. With the help of my team, we revisited the job descriptions and changed expectations. Not lowered, not heighthened. Changed, because the team had changed.
                                                      • Job description skill lists should be short and should convey an expectation that engineers at all experience levels are expected to learn and teach others.
                                                        • Establish one or two tech skillsets that are desired for the position, that are non-negotiable. Those are things that someone ideal for the position must know day one.
                                                        • Establish a group of skillsets or technologies that are nice-to-haves. That is, if you know one or two of these things, I want to talk to you!
                                                        • Establish a group of interesting technologies. That is, if you know some of these words, let’s talk about them on a screening call in addition to some of the other more pertinent things.
                                                      • When marketing positions, personal outreach is incredibly important.
                                                        • Ask friends who might not be interested and ask if they know anyone who might be. All of my hires came from this or similar referrals.
                                                        • Angelist was not a useful resource for me. I received probably triple-digits’ worth of interest notifications and I think i contacted maybe 3 people. So many clearly hadn’t even read the posting.
                                                      • Represent yourself well and consistently.
                                                        • I had the privilege of working with an extremely professional and competent internal recruiter. I learned a lot from her. We helped each other remain consistent.
                                                        • Be quirky but not self-important, pretentious, or self-deprecating. Do not compromise your authority or authenticity.
                                                        • Build on your networks constantly. I’ve been networking for years. That network is what helped me execute this, hiring for skills that are hard to find in my area.
                                                      • Design interview processes such that if a candidate progresses to an in-person interview, you know they can code.
                                                        • Don’t waste precious face-to-face time assessing a candidate’s ability to write code. Whiteboarding is out entirely.
                                                        • Front-load a tech assessment as a short project if you cannot find evidence of their competency through social coding profiles, recorded presentations, internships, etc.
                                                          • When I say short, I mean 30-60 minutes for a new programmer to complete and something that veterans could bang out in an email response. I’d rather have the latter than a zip file containing a documented project complete with 100% unit test coverage, although such would be pretty impressive in its own right.
                                                          • I hear of tech tests that are weekend projects. That’s unreasonable and does not select for the kind of employee I think I want.
                                                      • Make it clear that intent is what matters, not syntax or compilation. I’ll take a solution for the tech test or the in-person exercise that doesn’t compile if it shows me enough of what a candidate is thinking to assess that what they’re thinking is correct or at least on the right track.
                                                      • Expect the best, prepare for the worst: I would rather inadvertently hire someone who falsely misrepresented themselves and have to fire them than bog down myself and my team and my candidates with litmus tests.
                                                      • Assess two things in an in-person interview:
                                                        1. Can this person explain themselves?
                                                        • My interviews are designed to encourage a candidate to geek out about themselves and their passions.
                                                        • My interviews get technical but it’s not a quiz. I like people who “talk shop” well and who can tell a story. Great communicators are often great engineers.
                                                        1. Can I work with this person long-term?
                                                        • If I’m stuck in a room with this person for a 2 week sprint, will be both emerge at the end and still like each other?

                                                      I do intend to write a blog post after another hiring manager within my company tries this strategy and succeeds. I’m working on formalizing these ideas internally as policy first.

                                                      1. 2

                                                        Great write-up. Appreciate it. Among other things, I like how you do the coding tests in a way that doesn’t waste too much of the candidate’s time. I also thought the “Be quirky” line was interesting: people rarely talk about that stuff in tech hiring write-ups. What was the reasoning behind those do’s and don’ts?

                                                        1. 2

                                                          Quirkiness is showing a weird side, showing a touch of class and uniqueness that the potential applicant likely hasn’t encountered in another job posting. For me, I was able to summarize our very complex mission statement and then summarize the summary into a single sentence and be really upfront with eyecatching buzzwords but explain what we’re doing with those buzzwords later.

                                                          A contrived example of a mission statement shortening:

                                                          Highfalutin mission statement: Colincom is enabling life-changing insight into customers’ desires for self-improving their culinary skills to make an impact in non-alcoholic social gathering situations.

                                                          Distilled: Colincom helps customers make better non-alcoholic drinks.

                                                          A self-important job description overemphasizes the novelty or impact of the company, its product, or its team(s), or a combination thereof. Avoid words like “life-changing” and “visionary”, and anything else that would be used to introduce a speaker at a Nobel prize dinner or TED talk. That highfalutin vision statement could be in the JD but really should be summarized to show that the company actually can do an elevator pitch.

                                                          A pretentious job description overemphasizes perks that don’t really matter, such as a particular location “a newly-outfitted office in $hipster_district” or things available only to employees that aren’t considered benefits, such as free booze or work trips. Benefits like free lunch or mass transit passes belong in a bullet list, not in the second paragraph of the description of the job.

                                                          A self-deprecating job description is pretty hard to write, but would say things like “we are moving to a better location soon” or “we will soon have an HR department”. That self-deprecation line is more a verbal thing once you’ve established contact with a candidate: every company has problems, but how a candidate perceives those problems as they encounter them sets a tone for their time with the company. Never shittalk another team: “they didn’t do this right” is bad, “there was a miscommunication about how to proceed” is better. It’s spin, honestly. Things can be on fire and you can point out the fire, but exude the confidence that it’s under control even if it isn’t. If it’s not, and it affects candidates, why the hell are you interviewing candidates until that fire is put out?

                                                          Avoiding a compromise of authenticity is largely keeping messaging consistent. Update JDs across postings, ensure that external recruiters are using your messaging and not diluting it, use some templates across all JDs so there is consistency company-wide.

                                                          Avoiding a compromise of authority is a more confident way of conveying that telling a candidate you don’t know something is OK, but you must take it upon yourself to find out and tell the candidate an answer, even if that means putting them on the phone with someone who has the authority to answer questions. I’m a good example of this: I do not talk about health benefits to candidates. I say we offer them and if they have questions, I’ll get them on a call with our HR team even if that call is five minutes.

                                                          1. 1

                                                            Appreciate the detailed reply! That all makes a lot of sense. :)

                                                  1. 10

                                                    So one day a couple of years ago, I came up with this idea I thought was crazy. Google Tone had just been released and I thought it was neat. I could be in a room of people giving a presentation, and they could follow along in their own web browsers just by me playing back a tone on each slide requiring a transition.

                                                    Tone had some limitations.

                                                    1. Folks had to be using Chrome. This was 2015, so more than 40% of worldwide traffic was Chrome and I’d bet it was probably above 70% in my circles. While not everyone was using Chrome, they were probably sitting next to someone who was. NBD.
                                                    2. People had to have Tone actually enabled. A message of “please enable Tone if you want to follow along” would probably suffice but those who didn’t have Chrome or were wary of Tone and didn’t want it installed would be party to Tone’s tones with no value to them.
                                                    3. The audio had to be loud. It wasn’t very resilient. You might have to broadcast it a few times in order to get everyone’s devices to follow along. Ears? Well, you knew what you were signed up for the moment a presenter said, “please enable Tone if you want to follow along.”
                                                    4. Tone was reliant on Google. Inaccessibility of Google was generally not a thing but in some venues, 30 laptops hitting one URL ~simultaneously could set off IDS systems, or so I was told. Tone tones didn’t carry the whole URL. Rather, they were basically a shortcode that had to be looked up. This was generally fast but it couldn’t really keep up with presenter speech when this lookup plus the time necessary to prompt the user if they actually wanted to act on the received tone, plus the time to load the URL contained with the Tone.

                                                    All of this made Tone a bad user experience, really. Tone was a parlor trick, a neat thing in concept and implementation, but its problems made it all but useless.

                                                    So, I came up with something else. I called it an “audio QR code.”

                                                    It would be a standard and not reliant on any one browser. Its sound would contain the whole message, not a reference to a controlled look-up service. The sound could be super- or subsonic, thereby avoiding the whole ear pain problem. Dogs might not like it, though. Sorry, Fido. Lastly, enabling it wasn’t going away because no system should react without double opt-in user consent.

                                                    I worked out how to encode data in an audio signal. I’m not a hardware engineer. It was a pretty handwavy.

                                                    I did some more research to see if anyone else had come up with this idea.

                                                    I’d basically rediscovered QAM over a weekend.

                                                    I’m still waiting for someone to stick that into a browser.

                                                    1. 3

                                                      Ugh. ActivityPub makes me sad – we have so many good, deployed solutions to 80%+ of the social networking stuff, and ActivityPub just ignores all prior art (including prior art by its creators) and does everything from scratch.

                                                      1. 3

                                                        Why in your opinion did ActivityPub “make it” while others have failed?

                                                        Disclosure: I contributed to Rstat.us for a while.

                                                        1. 2

                                                          How do you mean “make it”? You mean mastodon? Because mastodon got popular before it had implemented any ActivityPub, so that’s unrelated :)

                                                          OStatus and IndieWeb tech are still the most widely-deployed non-mastodon (and are partially supported by mastodon as well)

                                                          1. 1

                                                            Bah, I apologize for not being clear. By “make it”, I mean, why has ActivityPub been promoted as a standard instead of OStatus or IndieWeb or another attempt at a protocol for the same space?

                                                            1. 3

                                                              OStatus mostly described a best practice for using other standards in a way that created a decentralized social network – so it never really needed standardization on its own. That + that the people behind it moved towards a next generation standards instead, eg. identi.ca moving to pump.io

                                                              IndieWeb though is getting standardized by the very same group as has published this recommendation and eg. WebMention and Micropub has been recommendations longer than this one even.

                                                              1. 3

                                                                Atom, PubSuHubBub (now WebSub), and Webmention are all standards with various bodies

                                                                1. 1

                                                                  PubSuHubBub

                                                                  Seeing some silly things they did with regard to best practices I can’t really say I feel bad about this. Things like using GETs instead of POSTs (if memory serves correctly) because of legacy stupid decisions.

                                                                  1. 1

                                                                    Yeah, Webmention was a W3C Recommendation for quite a while now even. I still don’t like how W3C standardized two ways of doing roughly the same thing…

                                                            2. 2

                                                              I think AP is an okay standard (although it, again, underspecifies a lot), but it doesn’t make anything possible that wasn’t already possible with OStatus, or some very simple extensions to it.

                                                              1. 1

                                                                In what way did you think that ActivityPub did not learn from OStatus?

                                                                1. 1

                                                                  so many good, deployed solutions to 80%+ of the social networking stuff

                                                                  For example?

                                                                  1. 3

                                                                    friendica, hubzilla, gnu social, pleroma

                                                                    1. 4

                                                                      pleroma

                                                                      Pleroma either currently supports or is very close to fully supporting AP, and was a pretty important goal from the outset.

                                                                      1. 4

                                                                        I know, I wrote it :)

                                                                        1. 2

                                                                          I think I follow you then :) Thanks for writing Pleroma <3

                                                                1. 4

                                                                  marc.info is getting hugged hard right now, so here’s some google cache links from a google cache link of the submitted URL:

                                                                  1. 4

                                                                    Aren’t build systems supposed to be pure functions? Given a set of inputs, do a thing that provides outputs. I want to explicitly define the inputs. I want to explicitly define the outputs. The build system should hold me to that. Let me Define the concept of a filename. Let me Define the programs that need to be used within it. Let me script the goram thing when I basically just want a step that is shell script!

                                                                    I spent much of the last four years in Gradle and Maven. I spent much of the last year in make and SBT. I recently discovered tput and I’m trying to clean up a nasty makefile enough that I could move over to it.

                                                                    Unfortunately, I just keep on going back to make. It’s everywhere. It has reliable and readable syntax, for the most part. The differences between GNU make and BSD make are subtle and rarely encountered, at least for my not-actually-compiling-c uses. I just can’t quit you, baby.

                                                                    1. 2

                                                                      “Unfortunately, I just keep on going back to make.”

                                                                      One could always create a language that is functional like you describe but compiles to make. Likewise, make itself could be redone in a better language where the implementation API is close to make language, does lots of checks, runs in its native form for testing/debugging, and can similarly extract make when done. One person even did a make in Prolog.

                                                                      1. 2

                                                                        Interestingly enough, I’ve been planning out a tool for my specific purpose that builds a Makefile based on some inputs in a YAML or JSON file. Kinda like a ./configure script that only has to be run when new major components are added.

                                                                        I want to do this to clean up financial reports stored in ledger format that I generate using make and pandoc.

                                                                        The config would be something like this:

                                                                        ledger:
                                                                          prices: prices.db
                                                                          reporting_dir: reports
                                                                          transactions: transactions.ledger
                                                                        reports:
                                                                          - id: net_worth
                                                                            query: balance Assets Liabilities --market
                                                                            header: Net Worth
                                                                            desc: "This shows net worth"
                                                                          - id: cashflow
                                                                            query: balance Income Expenses --period ${YEAR} --invert
                                                                            header: Cashflow
                                                                            desc: "This shows total cashflow. A positive amount indicates a surplus."
                                                                        

                                                                        and it would produce a Makefile that looks something like this:

                                                                        REPORTING_DIR = reports
                                                                        TRANS_FILE = $(shell yaml_lookup -f config.cfg ledger.transactions)
                                                                        LEDGER = ledger
                                                                        LEDGER_WITH_FILE = ledger -f $(TRANS_FILE)
                                                                        
                                                                        all: $(REPORTING_DIR)/statement.html
                                                                        
                                                                        $(REPORTING_DIR)/statement.html: $(REPORTING_DIR)/net_worth.md $(REPORTING_DIR)/cashflow.md
                                                                            cat $< | pandoc -t html > $@
                                                                        
                                                                        $(REPORTING_DIR)/net_worth.md:
                                                                            echo -n "# " > $@
                                                                            yaml_lookup -f config.cfg reports[id = 'net_worth'].header > $@
                                                                            echo > $@
                                                                            yaml_lookup -f config.cfg reports[id = 'net_worth'].desc > $@
                                                                            echo -e "\n\`\`\`" > $@
                                                                            $(LEDGER_WITH_FILE) $(shell yaml_lookup -f config.cfg reports[id = 'net_worth'].query) > $@
                                                                            echo -e "\n\`\`\`" > $@
                                                                        
                                                                        $(REPORTING_DIR)/cashflow.md:
                                                                            echo -n "# " > $@
                                                                            yaml_lookup -f config.cfg reports[id = 'cashflow'].header > $@
                                                                            echo > $@
                                                                            yaml_lookup -f config.cfg reports[id = 'cashflow'].desc > $@
                                                                            echo -e "\n\`\`\`" > $@
                                                                            $(LEDGER_WITH_FILE) $(shell yaml_lookup -f config.cfg reports[id = 'cashflow'].query) > $@
                                                                            echo -e "\n\`\`\`" > $@
                                                                        

                                                                        Hell, could even do the yaml lookups in the Makefile build step.

                                                                        1. 1

                                                                          The first one looks so much clearer than the latter. That’s what benefit Im talking about. Same thing we do with SQL-to-internal-format and compiling high-level languages to C.

                                                                      1. 7

                                                                        This made me full of blood rage when I happened upon it a few months ago. I just want to have some well-named markdown files be automatically converted to HTML and also concatenated, converted to HTML, and that HTML converted to PDF. All with good-looking file names with spaces in them. Like how normal people named files.

                                                                      1. 16

                                                                        I thought safari was the new IE.

                                                                        1. 10

                                                                          Safari is probably the best browser out there IMO. I wish Windows 10 had it so I could run it.

                                                                          1. 17

                                                                            What makes you say that Safari is the best browser?

                                                                            1. 4

                                                                              It’s fast, light on battery, and has a native UI that respects platform conventions.

                                                                              1. 1

                                                                                Sounds like Firefox? <3

                                                                                1. 1

                                                                                  Firefox is faster than it used to be, not sure about battery, but it’s not very native. Safari is the gold standard in not having its own conventions and completely submitting to the platform HIG.

                                                                            2. 11

                                                                              I appreciate many things about Safari as a user; it basically doesn’t touch the battery, for one thing.

                                                                              As a web dev, it unfortunately punches well above its weight in terms of WTFs-per-minute. Specifically, it implements quite a few things incorrectly (such that a careless ‘feature present’ test returns true but the feature doesn’t work).

                                                                              For example, localStorage/sessionStorage are present in private tabs, but raise an exception if used (other browsers downgrade localStorage to sessionStorage and clear sessionStorage when you close the tab).

                                                                              For another, flexbox was broken until 10.1, putting the wrong number of items on a line, calculating heights incorrectly… just a total mess.

                                                                              1. 1

                                                                                other browsers downgrade localStorage to sessionStorage and clear sessionStorage when you close the tab

                                                                                Doesn’t that seem like more of a wtf? Transparently turning “long term storage” into “this will be gone in a moment” with zero notice.

                                                                                1. 3

                                                                                  The defining feature of a private tab is that it acts like a regular tab, then deletes everything afterwards.

                                                                                  Lots of websites try to put stuff into localstorage (‘works in every browser’) and don’t bother with error handling. Where is the user going to place blame when a private tab is the only place it fails?

                                                                              2. 2

                                                                                I’d disagree here. Mostly because of Security (see other reply), but also because of slower web platform feature support.

                                                                                1. 1

                                                                                  Your other reply isn’t exactly a cornucopia of information about why you think it’s poor on security.

                                                                                  1. 1

                                                                                    Exploiting WebKit is apparently easy enough, that every game platform jailbreak (from early PSP to recent Nintendo Switch) finds one. Also: no sandbox

                                                                                    1. 1

                                                                                      Ok so firstly - game devices are only going to ship with a single web renderer. If they ship webkit thats where attackers will focus - if they shipped blink, it would attract attacks the same, and given the following, it would hardly be surprising if they found vulnerabilities in any rendering engine when the device maker ships an unpatched version of the software:

                                                                                      https://arstechnica.com/gaming/2017/03/nintendo-switch-ships-with-unpatched-6-month-old-webkit-vulnerabilities/

                                                                                      Why do you think safari has no sandbox? Sandboxing was a feature of v5.1 in 2011.

                                                                                      1. 1

                                                                                        Re, the Sandbox: oops :) i must have been wrong

                                                                              3. 7

                                                                                That’s security-wise ;)

                                                                                Chrome is the IE in terms of abused market dominance.

                                                                              1. 2

                                                                                Follow-up question:

                                                                                Who were your favorite conference speakers that you saw for the first time in 2017?

                                                                                Who would you like to see again? Who would you like to see at a smaller event that you’d like to see at a big one?

                                                                                1. 2

                                                                                  Aside from being written Go instead of ye olde C, what are the advantages of kurly over curl?

                                                                                  1. 3

                                                                                    Sounds like they missed a chance to go with gurl instead.

                                                                                    1. 3

                                                                                      Hah - that was indeed considered for a femtosecond or two. ;-)

                                                                                    2. 2

                                                                                      Pasting from my answer to a similar question over on reddit, so I apologize for the slight redundancy, but…

                                                                                      :-)

                                                                                      Very good question; thank you for asking.

                                                                                      A primary benefit is one of hindsight. kurly has the luxury of being a couple of decades newer than curl and as such has taken advantage of two core things.

                                                                                      1. It’s written in a modern safer language, so hopefully won’t exhibit myriad memory safety security issues that curl is plagued with. 2) Doesn’t need to support as many legacy features such as FTP, Gopher, etc, that no one uses anymore. This reduces code complexity and of course less complexity is implicitly good.

                                                                                      As stated on the README, this is an alternative to, not a replacement for, curl. :-)