1. 3

    From the title, I first thought this might be an article from a long, long, time ago. Nah, some vulnerabilities just persist. I left Windows long time ago. Have there been any improvements on preventing or detecting these risks?

    1. 1

      Granted I’m a bit biased, but what’s the risk? I’m missing it.

      1. 3

        In principle, malware could hide in it - and probably does, but I don’t think many people are under the illusion that they can detect malware without specialized tools anyway. The most “practical” use I can think of for it is data exfiltration. I think most of the risks are around bugs rather than malicious use; it’s a somewhat bizarre feature, and not well-known, and as such it should be regarded as technical debt.

        1. 4

          I see. I’m sure it’s used by Windows though.

          It’s a pretty common feature across many filesystems: https://en.wikipedia.org/wiki/Extended_file_attributes#Implementations

          1. 3

            Yes, you’re certainly correct that it’s not that rare a thing. As the original article notes, NTFS added it for parity with Apple’s HFS+. That doesn’t really change that it’s obscure and fragile, but certainly Windows shouldn’t bear the blame alone.

          2. 2

            You nailed it! Hiding malware and storage channel for exfiltration are main issues.

      1. 4

        It’s a bit more nuanced than that. Sean was referring to most of the UI: https://www.reddit.com/r/javascript/comments/8qpwi7/office_365_ms_teams_skype_code_and_the_edge_debug/e0llhzp/

        (I don’t work for any of the mentioned teams, but I do work at Microsoft).

        1. 1

          This should probably be the link instead…

        1. 1

          The Spanish in the screenshot reads quite mechanical…

          1. [Comment removed by author]

            1. 12

              The scale of the problem they solve is a lot larger than what most people will ever work on. The fan-out nature of the product is challenging enough, but there’s more.

              The 140 chars thing is inconsequential. It would be the easiest thing to change.

              1. 0

                The 140 chars thing is inconsequential. It would be the easiest thing to change.

                Agree with everything until this part. I think it’s very likely that there is some critical RDBMS with a varchar(140) column that’ll make “easy” an actual nightmare with people waking up in cold sweats.

                1. 6

                  140 characters are counted as 140 Unicode grapheme clusters, so the byte size is already potentially a lot larger and variable.

                  1. 1

                    True. In MySQL you’d likely set the collation to utf-8 or whatever. That doesn’t make doubling, or eliminating the character limit all together any less difficult though?

                    1. 3

                      In MySQL you’d likely set the collation to utf-8 or whatever.

                      Fun fact: you’d want the “whatever” https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434

                      But here’s the rub: MySQL’s “utf8” isn’t UTF-8.

                      The “utf8” encoding only supports three bytes per character. The real UTF-8 encoding — which everybody uses, including you — needs up to four bytes per character.

                      MySQL developers never fixed this bug. They released a workaround in 2010: a new character set called “utf8mb4”.

                      1. 2

                        It’s things like this that inspire me to hold PostgreSQL tighter to my bosom.

                  2. 2

                    A few years ago they had a bug for a day or so which allowed much longer tweets, so I doubt they have this hard limit anywhere except for the validation code.

                2. 4

                  Twitter is all about pushing ads and trying to find ways to monetize their users. They have over 3k employees, and I have no idea WTF they’re doing to be honest. The site has terrible performance, and it’s buggy as hell. If you look at the source for the page, it’s downright nightmarish. They keep adding shit like moments that nobody wants or ever asked for, while ignoring actual user requests like the ability to edit tweets.

                  I started using Mastodon recently, and it’s just a better experience all around. The core functionality of Twitter is not that hard to implement,. If you’re not trying to monetize, then you can provide a much better experience for the users.

                  Personally, I’d really like to see the internet go back to being a distributed system where anybody can run a server and interact with people, as opposed to current centralized model where a few sites dominate all the social media.

                  Running your own servers is cheaper and easier than ever. You can get a Digital Ocean droplet for 5 bucks a months nowadays, and the prices are only going down.

                  Meanwhile, setting up and managing apps like Mastodon has become much easier as well thanks to Docker. Run the container that the maintainer packages, and you can get it up and running in minutes.

                  I think Mastodon is a great example that this model absolutely does work today. I also think that it’s more robust than the startup model.

                  Mastodon is open source, and it will be around as long as people want to use it. The features get added based on user demand, as opposed to demand of investors. Anybody can run their own node, and set it up any way they like. No central entity decides how Mastodon is used, or what it’s used for.

                  This is what internet was meant to be. We took a terrible detour with walled gardens like Facebook and Twitter, but it doesn’t have to be that way.

                  1. 1

                    If you’re not trying to monetize, then you can provide a much better experience for the users.

                    There are tons of shitty FOSS projects out there. I am an open source enthusiast, my job title is literally “Open Source Software Engineer.” I love FOSS software. But the idea that it’s better because you’re not trying to make money is just not one I’d come close to making. I love using Linux on the desktop but it’s way worse for most users than Windows or MacOS. Open source is great because it’s about Freedom, not because it provides a superior user experience. Sometimes it does, sometimes it doesn’t. It really depends on the product and what you’re using it for.

                    1. 2

                      This. Often proprietary is better quality because more man hours are spent on it. However, despite this I will use Free Software over proprietary any day because it gives me something proprietary can never give me, Free Software gives me freedom.

                      1. 1

                        Of course, open source is not a guarantee that you’ll end up with a great piece of software. However, I’m talking about the specific difference in motivation for Twitter and Mastodon developers. Personally, I find Linux far preferable to Windows as a desktop as well, but MacOS is definitely a lot more polished than Linux.

                    2. 3

                      they make a considerable amount of money. is it net profit? no. mostly because they have an insane head count.

                    1. 3

                      Re: “the medium matters”

                      I’ve always wondered how the existence of IDEs with their helpful features affected the evolution of Java’s syntax and standard library.

                      1. 1

                        I know that C#’s LINQ syntax put “from ” first because it made intellisense easier in Visual Studio, related?

                      1. 4

                        The two main reasons I can’t use nvi are lack of ‘expandtab’ (which in languages where the convention is to indent with a certain number of spaces is very annoying), and the lack of a way to set options based on filetype. All I really need is some command that matches on pathnames like:

                        setfor *.rb et ts=2 sw=2
                        

                        Maybe I could achieve something similar with a wrapper script, I’m not sure. But even then, the lack of ‘expandtab’ is a deal breaker for me.

                        1. 2

                          In acme, I use hard tabs for everything and git filters to convert to spaces.

                          It’s not free of quirks. Works well most of the time.

                        1. 24

                          Bring back IRC I say

                          No need to bring it back, it’s always been there. The problem is convincing everyone else to use it.

                          1. 33

                            IRC has a fair share of problems which are often circumvented by layering additional services like bouncers on top of it. I like it for its ubiquity, but let’s not pretend it doesn’t show age everywhere.

                            1. 19

                              I think matrix could very well be the successor to IRC. Open, federated, secure, multi-device sync and good support for bridges to other protocols.

                              1. 13

                                I can’t bring myself to like a communications protocol that’s based on HTTP+JSON, with the reference client written as an Electron app. It just all feels so… inefficient :(

                                1. 4

                                  The very core of matrix is just the graph behind it all. JSON is just one representation of the information and HTTP is just one transport. Those are the only reference implementations right now, but others are possible, if I’ve understood correctly. But someone more knowledgeable should probably weigh in.

                                  1. 2

                                    Those are the only reference implementations right now

                                    The problem with reference implementations is that, by inertia, they end up being the only implementation.

                                    1. 1

                                      Would you rather there wasn’t an implementation? But, in this case, there are several other implementations. There’s the next generation reference home server dendrite (in golang instead of python like synapse) and ruma (in rust). And there are lots of clients. I think only riot supports e2e crypto, but I hope others will start supporting it as it stabilises.

                                  2. 4

                                    To be fair, Riot can run perfectly happy standalone. In fact, I have it running right now on my OpenBSD box. Also, there are many other clients!

                                    1. 5

                                      HTTP+JSON isn’t all that inefficient, just a bit of extra headers, whatever.

                                      Matrix is actually fundamentally inefficient in a different way — it’s not ephemeral message passing like IRC or XMPP, it’s a replicated database — and it’s worth it.

                                    2. 6

                                      I stopped using IRC and my bouncer 2 weeks ago for Matrix/Riot on my own server with my own IRC bridges and couldn’t be more pleased. Works incredibly well.

                                      edit: was an irssi+irssi-proxy user for over 15 years. Tried every other bouncer. Hated them all. Had a perl script to send my phone a pushover notification for mentions. It worked, but it sucked trying to open up IRC app and find the conversation with no scrollback and respond.

                                      Now I have: consistent chat client on every device, always have scrollback, all my logs are stored in Postgres, logs are searchable in every client and the search is handled server-side, and I can do E2E encryption with my friends on Matrix. I will never experience Slack bloat because the federation means I only need one server connection and account.

                                      1. 4

                                        The Riot web app can also serve as a nice IRC client (+bouncer, email notification, etc) if you only need the networks they bridge to.

                                        1. 3

                                          I haven’t been impressed with the quality of tooling or clients yet. Their Debian package documentation is incorrect and commands tell you to… run the same command you just ran. I haven’t seen a client I’ve been terribly impressed by either; Riot is your typical Electron fare.

                                          1. 3

                                            Riot is your typical Electron fare

                                            The electron wrapper is completely optional, why do so many people say such things, that’s unfair :( I just use it as a pinned tab in Firefox.

                                            1. 3

                                              Even without the performance concerns of Electron or running in the browser, there’s still the fact these overgrown web apps feel alien in UX on every platform.

                                              1. 2

                                                I’ve found it to be very unperformant and laggy.

                                            2. 1

                                              Didn’t know about this. Thanks for the tip.

                                            3. 10

                                              The IRCv3 working group is attempting to standardise a lot of interesting extensions to the old IRC protocol in a backwards-compatible manner. Amongst other things, they seem to be working on history, standardised registration/authentication, and metadata such as user avatars.

                                              1. [Comment removed by author]

                                                1. 1

                                                  It’s really too bad IRC v3 is moving along slowly

                                                  It is, isn’t it? I am watching their repo on GitHub and get excited every time I get a notification, hoping that it’s about something major like a good history extension. If I had more time I would love to contribute. Wish they had a Patreon account, or something similar.

                                                2. 2

                                                  One aspect of Slack I’d be interested to hear any progress on is the fact that it combines chat and fileshare for groups.

                                                3. 1

                                                  Is Twitch still running this way?

                                                4. 5

                                                  Maybe if it was written in JavaScript, used a million npm packages, invented some new Json/Jose derived protocol,.. then you might have a hope.

                                                  In all seriousness, I ask myself that question all along. At work we use lync and skype for business and those still feel like a step backwards compared to old Skype, man, icq, and irc. In fact we had logging turned on for a while but the fat xml logs are up our entire email box so it was turned off company wide.

                                                  1. 5

                                                    Additionally, Slack supports IRC. I just use tmux + issi to connect to Slack and other IRC networks.

                                                    1. 6

                                                      Slack’s gateway is highly lossy though.

                                                      1. 2

                                                        What do you mean? I haven’t had a single issue.

                                                        1. 12

                                                          You lose formatting, inline replies (so you will see out of context messages), that kind of thing.

                                                          1. 1

                                                            Ah, gotcha. Thanks for the clarification.

                                                    2. [Comment removed by author]

                                                      1. 14

                                                        IRCcloud comes pretty close to that.

                                                        1. 3

                                                          IRCcloud has a couple of interesting issues when using it in a business setup. For example, for simplicities sake, they load twitters, facebooks and stripes JS libraries into their webapp, giving third parties access to that data. We talked to them about this and they said they were looking into it, but never ended up doing something.

                                                          It’s nice otherwise, but I prefer to only use it as a bouncer. Finally, it costs ~5$, so it’s not a feasible chat for many people outside of companies.

                                                        2. 6

                                                          It’s been done (minus the open source). Used to be called Convore, then changed names to Grove: https://grove.io/

                                                          In fact, they conceded defeat to Slack: https://grove.io/blog/closing-shop

                                                          1. [Comment removed by author]

                                                            1. 5

                                                              Those are really hard to iterate on without a lot of people. You’d have a hard time keeping up with Slack’s fire and motion around you.

                                                              Possible though. Particularly if you used their IRC gateway to counter their network effect advantage (until they close it).

                                                              1. 2

                                                                You just want a native slack client?

                                                            2. 6

                                                              I think Jabber would make more sense as a modern communication platform than IRC. There’s not much that IRC provides that Jabber conference rooms don’t, but Jabber provides a lot more extensibility than IRC (especially without add-on services like Chanserv, Nickserv, etc.). In which case there are already commercial packages like Cisco Jabber and Openfire that are quite popular.

                                                              1. 1

                                                                I liked PSYC back when I was comparing them directly since Jabber seemed too complicated:

                                                                http://about.psyc.eu/Jabber

                                                                http://about.psyc.eu/PSYC

                                                                Whatever we use needs to be really simple and efficient at the core. Then, layers or plug-ins for more complex stuff from there. Preferably, super-easy for library users to add or remove. What’s closest any of you know to that which has a decent chance of being converted into a Slack competitor? Other than IRC.

                                                                1. 2

                                                                  There aren’t many that are federated like IRC. I can only think of Jabber/XMPP and Matrix. But if you look at slack, which doesn’t seem to be federated, you have lots of options, like mattermost, rocketchat, hipchat, …

                                                              2. 5

                                                                You can’t offer Slack’s UI on top of the standard IRC protocol (it lacks links, images, replies, authentication, history…). Proposals to extend the IRC protocol have not been welcomed by the IRC userbase or by established networks. You could tunnel a custom protocol over IRC with magic strings etc. but this would be inherently clunky and the user experience from any other client would be very similar to using Slack’s IRC gateway. You could publish your custom protocol but what would you gain from that? What’s the value proposition where this idea improves over what Slack offers?

                                                                1. [Comment removed by author]

                                                                  1. 3

                                                                    Why would this “eat Slack’s lunch”? Theoretically an open protocol would make it easier for others to integrate with you, but Slack attracted plenty of integrations (which now act as a competitive advantage precisely because their protocol isn’t open). Other than that, what’s the advantage of making the protocol public?

                                                                    1. [Comment removed by author]

                                                                      1. 1

                                                                        Well I explained that that particular issue doesn’t seem to have been a disadvantage for slack, quite the opposite.

                                                                        Building a protocol as an extension of IRC is inherently going to be more expensive than building it without regard to compatibility with IRC, not cheaper.

                                                                        1. [Comment removed by author]

                                                                          1. 1

                                                                            Slack extensions are not interoperable. IRC bots have been written for decades.

                                                                            All true. And yet for so many services one might use when developing (e.g. CI), it’s so much easier to find a good Slack integration than a good IRC integration.

                                                                  2. 2

                                                                    Proposals to extend the IRC protocol have not been welcomed by the IRC userbase or by established networks

                                                                    Not sure whether you’re talking about some specific extensions, but from what I can see there are multiple IRCv3 extensions that are implemented by common servers.

                                                              1. 9

                                                                But could even a 1980s cell phone have been made in 1946? That’s decades before ICs. A year before the transistor even. Maybe the trunk sized device they’re talking about? Not sure if that qualifies as what most people consider “cellphone” or if it would have been so widely accessible to say “we” could have one.

                                                                1. 2

                                                                  They may have started out even more primitively than they did in the 80’s but they would have evolved fast. It’s barely been 40 years since they hit the market and they’ve evolved into completely different beasts already so I’d expect that by the 80’s they’d have done so too.

                                                                  1. 2

                                                                    I think at best we could have progressed into decent phones 5 or 10 years earlier (So late 80s maybe instead of 1995?), I doubt it would have been a constant progression though, I don’t think we would be using an equivalent of 2022-2027 phones right now.

                                                                    1. 6

                                                                      Though we seemed to get good phones and then just shoot straight past them.

                                                                      Was nice having a battery life measured in days if not weeks rather than hours.

                                                                      1. 2

                                                                        I wonder how well this comment will age, re:2027 phones ?

                                                                        1. 1

                                                                          “My holographic VR phone’s battery lasts just 20 minutes when I’m away from microwave power!” :(

                                                                  1. 3

                                                                    There’s a shell injection attack in there, isn’t it?

                                                                    https://github.com/tjgillies/unix-web/blob/master/src/server.cr#L7-L10

                                                                    1. 6

                                                                      Technology management seems to be a bargain bin for management ideas (and managers) that failed elsewhere. Just as doctors are highly intelligent but the favorite targets of financial scammers (rich, overconfident, financially clueless due to lifetime residence in educational/hospital meritocracies) the technology industry seems to be a preferred destination for those peddling bad management ideas. Everywhere else, Jack Welch style rank-and-yank has been agreed to be counterproductive. Not in tech. In software, it lives on.

                                                                      Scrum is Taylor’s so-called “scientific management”, which worked poorly in factories and is a disaster in software.

                                                                      I saw a company kill itself with Scrum. Scrum set off a talent bleed in software that couldn’t be stopped. Core business functions suffered because of the software attrition. It was bought for less than 10% of its previous valuation. Stories like this are common.

                                                                      1. 2

                                                                        Everywhere else, Jack Welch style rank-and-yank has been agreed to be counterproductive.

                                                                        Scrum is Taylor’s so-called “scientific management”, which worked poorly in factors and is a disaster in software.

                                                                        What are your favorite texts on those two points? I’m interested.

                                                                        1. 2

                                                                          I saw a company kill itself with Scrum. Scrum set off a talent bleed in software that couldn’t be stopped. Core business functions suffered because of the software attrition. It was bought for less than 10% of its previous valuation. Stories like this are common.

                                                                          On the other hand, every badly implemented management switch can kill companies quickly and lead to bleed. What in this case was scrum-specific?

                                                                          I’ve seen companies break on scrum and some thrive on it. (the latter ones always being ones that were un-dogmatic and seriously weighting time/gain)

                                                                        1. 2

                                                                          Actually, let’s just stop making estimates.

                                                                          There are counterexamples to what I’m saying. If you’re launching something into space and it’s going to cost millions of dollars to bump that launch from May 19 to May 20, then you need adult project management and you need to be 3-10x over capacity. Only government-funded research can afford this, but it’s what you need when you have deadlines with severe consequences if they’re missed. I don’t mean “An executive is mildly embarrassed in a way that no one will remember next week”, but “Millions of dollars are lost or people die”. Then, you need adult project management– not this Agile shit.

                                                                          In the corporate world, estimates are purely about manipulation. It’s to create internal competition. The people who underbid in estimation get their first pick of projects. Engineers suffer, and executives gain, due to the winner’s curse. It’s a way for management to push people to work unreasonable hours without explicitly asking them. Then they can say, “No one is making you work weekends, but you committed.” It’s a trap.

                                                                          1. 5

                                                                            If someone asks you for an estimate which they’ll in turn use to try and plan other dependent work, they should be open to (even welcome!) being told as soon as possible if the estimate is going to change in either direction.

                                                                            When used that way, as a communication mechanism, they’re useful. But it requires a company wide belief that their purpose is estimation.

                                                                            Keep people in the loop at every turn. The next time you’re told you committed, you remind them that you estimated.

                                                                            Don’t get trapped :)

                                                                          1. 7

                                                                            Github now has a “squash and merge” option on pull requests, so you can have it both ways: a clean master branch history and a messy PR commit history. Only problem is that your PR branch commits no longer cleanly map back onto master so git branch -d always complains, etc.

                                                                            1. 7

                                                                              I’ve never understood when I would want to use squash and merge because it completely botches the commit message by just stitching all of the commit messages from the PR into one. That’s typically not what I want, especially if the PR commits are messily organized. It then becomes the responsibility of the person merging to write the commit message, which may not be the same person that submitted the PR. And you have to write the commit message in the Github web UI.

                                                                              I do use the “rebase and merge” functionality though.

                                                                              1. 3

                                                                                It then becomes the responsibility of the person merging to write the commit message, which may not be the same person that submitted the PR.

                                                                                Yeah, I think this is only a good idea for teams where the author of the PR is also the one merging it, and they just use the PR for review and comments.

                                                                              2. 3

                                                                                I’ve been very happy since this feature came out: I used to waste time crafting a commit timeline that communicated intent… now I just commit as I go, make sure no PR is too big, and then squash and merge (finally crafting a decent commit message at the end).

                                                                                1. 8

                                                                                  I have real trouble with syntax highlighting. It makes everything unreadable to me. I can’t read most websites that display code because of the highlighting. Of course, acme, my text editor, lacks any syntax highlighting.

                                                                                  It’s interesting that I didn’t start like this. Before I discovered Plan 9, I used highlighting (usually) just like everyone else. I didn’t turn it on, but it was usually on by default in the vim configuration shipped by Linux and off by default in BSD’s nvi (or simply lacking the original vi shipped in Solaris). But if it wasn’t on already, I didn’t bother turning it on.

                                                                                  Now after I stopped using syntax highlighting for many years (close to a decade now), I simply can’t read code with highlighting on. If some colleague wants some help with some code, my first request is to turn nightclub mode off.

                                                                                  Oh yeah, I program using a proportional font too (Lucida Grande, 14 point): http://i.imgur.com/XovEU4g.jpg

                                                                                  1. 3

                                                                                    Project Fortress (a programming language research project) proposed mathematical syntax for programming:

                                                                                    Mathematical syntax The idea of “typesetting” the code using LaTeX has received mixed reviews, and many potential users find the issue of keyboarding the extended Unicode character set daunting. Nevertheless, even in its more verbose ASCII form, the syntax of Fortress, especially the notion of treating juxtaposition as a user-definable operation, has proved to be very convenient.

                                                                                    I have used unicode greek characters in my code, which I find very helpful, especially when doing scientific programming. My colleagues didn’t like that however and the toolchain was complaining too.

                                                                                    1. 3

                                                                                      I think that this might be unpopular and it’s certainly a bit bold, but I often thing that becoming a programmer rather than a mathematician has a lot to do with mathematical notation.

                                                                                      Also I want to point out that there is APL and that despite of my previous statement I’ve seen impressive things done with it.

                                                                                      1. 5

                                                                                        Ken Perlin wrote a small post arguing that one approach is more procedural, while another is declarative (setting up a state of the world and shifting the world while preserving correctness).

                                                                                        As for APL, I wrote k professionally for about a year, and am happy to talk about that experience.

                                                                                        1. 2

                                                                                          I’d be interested in hearing about professional k usage!

                                                                                          1. 2

                                                                                            Me too!

                                                                                            1. 5

                                                                                              It’s been a while, but here are a few observations about k:

                                                                                              • While initially it looks like gibberish, your mind starts picking apart common patterns as “words” and will eventually parse things at a higher level.
                                                                                              • The claims of “flawless code” with respect to the interpreter is basically true. It’s very tightly written, fast, and exact. It doesn’t use a lot of “tricks” like JIT compilation, it’s just solid hand-written code. The only trick that comes to mind is it tracks whether an array is sorted or not, so accidentally doing two sorts doesn’t hurt you.
                                                                                              • Much like lisp forces you to think in recursion, k forces you to think in terms of matrix operations. Instead of doing a depth-first search, you might generate a cartesian product of all possibilities and filter out the wrong answers. Inefficient from a Big O perspective, but the filter loop doesn’t have a lot of pipeline hazards so the result can often be faster. This is probably the biggest key to k’s speed, although I’ve seen claims that the interpreter can fit inside a typical L1 instruction cache which would help as well.
                                                                                              • k programmers really hate loops.
                                                                                              • APL (and by extension k) has the best array index and traversal primitives of any programming language, period. You can slice up and down columns, rows, and (from what I recall) any dimension from a multidimensional array. You can also construct new arrays from an array of indices, much like [x[i] for i in indices] would do in python. The only language I’ve seen that comes close to this power is MATLAB. LINQ might be able to do this as well, but almost certainly in a heavier manner.
                                                                                              • The k sort operation doesn’t actually sort lists. Instead, it gives you the indices of the list in sorted order. You can immediately use the array indexing to give you the sorted list, or you can use the indices for other operations. This is useful to sort a list by a ‘key’ instead of the raw data, or to sort a list and keep other lists in sync with it.
                                                                                              • k programmers are obsessed with code golf. This isn’t as pointless as it seems. As someone pointed out to me, most of the operators in k are roughly in the same order of magnitude with respect to execution time. Since k operators are usually one or two characters, a shorter program usually is faster!
                                                                                              • k is great when you stay inside the ecosystem. Where you have trouble is getting in and out of the ecosystem. At the time when I was working with k it had a terrible command-line UI, hard-to-debug foreign function interface, and you had to work a lot to have fault-tolerant data processing. There also wasn’t a robust OSS library community, so you basically had to do everything from scratch. This may have improved in the past few years!
                                                                                              • A great example of “great when you stay inside the ecosystem, terrible crossing that boundary” is k’s date format. Timestamps in k are stored as seconds since an epoch. Great! Except Arthur Whitney wanted to maximize the amount of useful time expressed by the datatype, so the epoch is January 1st, 2035. This means time is currently negative, and you have to do all kinds of annoying translation to compare to unix time. Looks like kdb+/q uses 2001-01-01 instead, likely to make mental math a bit easier.
                                                                                    2. 1

                                                                                      That was really insightful. Thank you!

                                                                                      I am not an acme user, but I considered trying it. What I always wondered about with those self-made commands. Are there like collections of them? I know they aren’t hard to make, but I think a collection could give you ideas, starting points, etc., kind of like a vim plugin or config. Even if I don’t go with huge packages usually (be it vim or zsh), I kind of like ideas that you find while looking at existing stuff.

                                                                                      Or is that generally discouraged for some reason and never fell important?

                                                                                      1. 6

                                                                                        Acme users (all 10 of us) write their own commands when they need them. I don’t know of any collection of commands, sorry, what would be the point? Every environment is different. The philosophy behind acme (plus plumber) is that it’s an integrating environment of arbitrary Unix software (I’m counting Plan 9 as a Unix here), not an integrated environment. It makes it really easy to integrate any reasonably written Unix tool into your workflow, but it doesn’t really provide any such built-in integration by default.

                                                                                        You don’t need any collection of commands to use start using acme though. Usually on every new project I start with a blank environment. I add stuff to it only as needs become apparent.

                                                                                        1. 1

                                                                                          Okay, this is what I expected. I just wondered whether my assumption was correct that people do it that way. Also wondered if there are some scripts, not so much for reuse, but as example, so “smart tricks” on how to do something in a simple way, because I like to read code. :)

                                                                                          Thank you!

                                                                                        2. 1

                                                                                          It’s pretty common to have a+ and a- for increasing/decreasing indentation, and c+ and c- for commenting/uncommenting. Beyond that I’m not aware of any conventions.

                                                                                          1. 1

                                                                                            I have obtained some of mine from other people. Someone on a different lobste.rs thread shared Clear with me (to wipe a terminal).

                                                                                            1. 1

                                                                                              Edit ,d will clear a window (including a terminal).

                                                                                              1. 1

                                                                                                That’s what I used to do, but Clear is easier to middle click, and it keeps my prompt.

                                                                                          2. 1

                                                                                            Holy tag batman! ;)

                                                                                          1. 1

                                                                                            The first book of the silo series, Wool: https://www.amazon.com/dp/B0071XO8RA/

                                                                                            1. 8

                                                                                              At work I mostly write in Ruby, sometimes in Java. I do most of my work in acme (and have for a while), at first on OS X, and for the past month I’ve been experimenting with Windows.

                                                                                              Odd things about my setup (all acme induced): I use real tabs in all programming languages, and I convert them to soft-tabs using git’s filter system and a custom, round-trip safe version of (un)expand I call detab and retab. I also have a preference for command line applications that print line at a time as opposed to using the entire terminal as a framebuffer of sorts. Finally, I’ve learned to like working without syntax highlighting and fixed width fonts.

                                                                                              I have a tendency to foolishly seek novelty in my tools (see Windows, heh), so I’m as surprised as anyone that I’ve stuck with acme for this long.

                                                                                              Disclaimer: I work for Microsoft. They let me use whatever computer or software I want, and they don’t know about this post.

                                                                                              1. 3

                                                                                                acme

                                                                                                Hi fellow tool wanderlust sufferer. I’ve used acme on and off for a while and really appreciate the constraints (syntax highlighting is a blight, and fixed width fonts too) but never manage to stick with it for all that long.

                                                                                                Any tips? Do you use plumber much, what other external programs are in your acme toolbox, etc.

                                                                                                1. 2

                                                                                                  The constraints are key. Yes, you can minimize and even hide open files in acme, but you have to do it on purpose, it’s not like that by default. Having a very obvious visual indication that I’ve scatterbrained allows me to regain focus.

                                                                                                  That’s probably the best feature for me. If I ever switch, my next editor will need this.

                                                                                                  I love how after pushing through for two months on the no-syntax highlighting thing, I know never skim code anymore.

                                                                                                  Tips, yes:

                                                                                                  • Three button mouse is a must. I got this one, but I wish it were wireless. I think I might Frankenstein a cheap wireless mouse into it one of these days, once the cable is done fraying.
                                                                                                  • I don’t add much to the plumber rules. At first I thought about a million rules to add, but I end up forgetting they exist. Now I just add one for git sha’s and another for JIRA tickets. Between those and the filename:linenumber I’m set.

                                                                                                  As far as external programs, I have:

                                                                                                  1. a+ and a- for indentation.
                                                                                                  2. nbsptab converts tabs to non-breaking spaces, which lets me post code in places that strip indentation.
                                                                                                  3. rem (adds or removes comments from selected lines, language aware).
                                                                                                  4. gg (which is just git grep).
                                                                                                  5. GB is git blame of the currently open file.
                                                                                                  6. SuPut which lets me save files I don’t have permission to save.

                                                                                                  Other than that I end up using sort, fmt, sed (still don’t grok the sam syntax :/), etc.

                                                                                                  1. 2

                                                                                                    This is all gold for working with acme. I have that same mouse, it’s great. Gitfiles is a utility like Netfiles (which is currently broken because of sftp…) that does magic with git repos, you may or may not find it useful.

                                                                                                2. 2

                                                                                                  Acme is pretty great.

                                                                                                  I found some tools to make writing Go nicer (auto format on Put and some nice wrappers around guru and friends) and wrote a few scripts to clean up win panes and such. I ended up writing a jira browser so that I could leave it less. It’s probably one of the easiest interactive editors to extend.

                                                                                                  1. 2

                                                                                                    Can you share your win cleanup tools? I still do Edit ,d

                                                                                                    1. 3
                                                                                                      #!/home/hank/plan9/bin/9 rc
                                                                                                      echo 'Edit ,x v/^% /d' | 9p write acme/$winid/body
                                                                                                      echo -n '/Edit ,x v\/\^% \/d/' | 9p write acme/$winid/addr
                                                                                                      echo -n 'dot=addr' | 9p write acme/$winid/ctl
                                                                                                      9p read acme/$winid/addr | awk '{printf("MX%s %s\n", $1, $2)}' | 9p write acme/$winid/event
                                                                                                      

                                                                                                      This is probably maximally ineffecient, but gets the job done. It writes out an edit line, then button 2’s it.

                                                                                                      1. 2

                                                                                                        Thanks for this! Software needs to be as polished as it needs to be :)

                                                                                                1. 2

                                                                                                  I’ll be there!

                                                                                                  1. 3

                                                                                                    Almost all the benefit with a tenth of the complexity: https://en.m.wikipedia.org/wiki/Rendezvous_hashing

                                                                                                    1. 1

                                                                                                      hg scatter

                                                                                                      1. 2

                                                                                                        I’ve given this a lot of thought recently. It may come across as cynical, but I’ve come to the believe that the reason our industry seems to progress so slowly is that it’s not our industry, so it doesn’t go in the direction we want it to go.

                                                                                                        When it comes to persuading a large group of people to write software for you, the money you pay them is but one of the tools at your disposal. Another really powerful one is the ability to give said group of people the autonomy to entertain themselves, solving puzzles of their own, learning (the hard way) all the lessons of the past.

                                                                                                        I think that’s a big part of why younger workers are preferred as well: the software comes out cheaper not so much due to lower salaries (though it certainly helps), but because less experienced developers care more about their own amusement than about the thoroughness of their artifacts, so they consider far less and move on to the next problem as fast as they can.

                                                                                                        One could counter-argue that true professionals would make cost/benefit analyses instead of treating every project as NASA-level software, but even then they would always show bias towards their profession and longer term. I think the incentives of younger engineers who are very much worried about their own short term far better align with the incentives of most people who pay for software as a means to an end.