Shared posts

24 Apr 03:05

Andreas Zeller Summarizes ICSE 2022

Prof. Andreas Zeller has posted a short overview of current topics in software engineering research based on submissions to ICSE'22. From his thread and based on this data and this data:

  • Machine learning is clearly a hot topic with 74 accepted papers, versus 47 for software testing (the scond most popular topic) 35 for program analysis, and 31 for evolution and maintenance.
  • Only two papers each were accepted on ethics in software engineering, software architecture, green and sustainable technologies, and agile methods—which is still better than one each on model-driven engineering and software visualization.
  • The majority of authors come from China (37.2%) and the United States (30.5%); Australia, canada, and the UK together account for as many papers as all of Europe, which is perhaps unsurprising for an anglophone conference.

Later: Prof. Ian Sommerville (author of a widely-used software engineering textbook) wrote a short article on the underwhelming impact of software engineering research that's worth a read.

Zeller pie chart

Another Zeller pie chart

24 Apr 03:04

Company Contributions to Open Source

Somewhere in my basement I still have a copy of a memo I wrote in 1989 explaining to my boss why we could safely ignore all this "free software" nonsense that people were talking about on Usenet. Sure, a few zealots might make contributions, but programmers need to eat: they weren't just going to give their code away.

I've rarely been so glad to be wrong, but I wasn't completely wrong. As the authors of Butler2019 point out, many contributions to major open source projects are made on behalf of companies, who employ core developers, make direct financial donations, and "donate" staff time to steering committees to make sure their corporate interests are represented. These actions aren't nefarious (though as many people have pointed out, companies like Amazon, Google, and whatever Facebook is calling itself these days get hundreds or thousands of times more value out of open source than they put in).

Through interviews with contributors to projects ranging from Apache CloudStack to Papyrus and examination of their governance documentation, the authors build a picture of how paid developers contribute, how their contributions differ from those made by volunteers, and how they prioritize their work. The short answer to all these questions is, "It's complicated," primarily because projects vary so much from each other. However, the authors note that:

A major influence on the type and level of engagement with an OSS project is the way in which the business deploys the software created by the project. In some deployment contexts the software requires little or no modification to create revenue for the company; the revenue comes from selling the expertise required to deploy the software. At the other end of the spectrum the software is deployed in a context where ongoing development of features is required to support the generation of revenue. In such usage contexts the software may be deployed to provide services to customers who have evolving requirements, or it may be that the software is in a rapidly evolving domain.

I don't expect most volunteer contributors will get a lot out of this paper, but it will give projects leads (and those who want to become leads) a sense of how many different collaboration models there are and what drives them. As such, this paper is a useful extension to Fogel's definitive Producing Open Source Software.

Butler2019 Simon Butler, Jonas Gamalielsson, Bjorn Lundell, Christoffer Brax, Johan Sjoberg, Anders Mattsson, Tomas Gustavsson, Jonas Feist, and Erik Lonroth. On company contributions to community open source software projects. IEEE Trans. Software Engineering, 2019, doi:10.1109/tse.2019.2919305.

The majority of contributions to community open source software (OSS) projects are made by practitioners acting on behalf of companies and other organisations. Previous research has addressed the motivations of both individuals and companies to engage with OSS projects. However, limited research has been undertaken that examines and explains the practical mechanisms or work practices used by companies and their developers to pursue their commercial and technical objectives when engaging with OSS projects. This research investigates the variety of work practices used in public communication channels by company contributors to engage with and contribute to eight community OSS projects. Through interviews with contributors to the eight projects we draw on their experiences and insights to explore the motivations to use particular methods of contribution. We find that companies utilise work practices for contributing to community projects which are congruent with the circumstances and their capabilities that support their short- and long-term needs. We also find that companies contribute to community OSS projects in ways that may not always be apparent from public sources, such as employing core project developers, making donations, and joining project steering committees in order to advance strategic interests. The factors influencing contributor work practices can be complex and are often dynamic arising from considerations such as company and project structure, as well as technical concerns and commercial strategies. The business context in which software created by the OSS project is deployed is also found to influence contributor work practices.

24 Apr 03:02

Science fiction author Pierce Brown cancels NFT project after negative fan response

A sillhouette of a human figure on a red-brown background. The figure has an afro and what appears to be a steam valve on their neck, and is smoking a cigar.

"Don't make your dystopian books our reality, Pierce," a fan replied to sci-fi author Pierce Brown's announcement of an NFT project. Brown, the author of the bestselling Red Rising series of novels, announced an NFT project called "Solar Society" based around his work. Fan response was overwhelmingly negative, with some expressing concerns over environmental impact, and others dismayed at the negative effect they feel NFTs have had on creative communities.

The day after the announcement, Brown released a statement saying that he had been drawn in by the hope that NFTs would allow him to avoid "big companies whose sole focus is strong-arming away the rights to projects they've never been a part of to turn a big profit." He wrote, "I felt that if I didn't jump on it myself, someone else would, without the love, care, and artistry we believe in". He concluded that, given the response from his fans, he would not be continuing the NFT project. Some encouraged him to use the artwork that had already been created for merchandise or other non-NFT art sales.

24 Apr 03:02

Back to the Future of Twitter

by Ben Thompson

Twitter should go private and return to its pre-2012 approach of being a centralized service with third-party clients.


Elon Musk wrote in a letter to Twitter’s board:

I invested in Twitter as I believe in its potential to be the platform for free speech around the globe, and I believe free speech is a societal imperative for a functioning democracy.

However, since making my investment I now realize the company will neither thrive nor serve this societal imperative in its current form. Twitter needs to be transformed as a private company.

As a result, I am offering to buy 100% of Twitter for $54.20 per share in cash, a 54% premium over the day before I began investing in Twitter and a 38% premium over the day before my investment was publicly announced. My offer is my best and final offer and if it is not accepted, I would need to reconsider my position as a shareholder.

Twitter has extraordinary potential. I will unlock it.

The vast majority of commentary about the Musk-Twitter saga has focused on the first three paragraphs: what does Musk mean by making Twitter more free speech oriented? Why doesn’t Musk believe he can work with the current board and management? Does Musk have the cash available to buy Twitter, and would the Twitter board accept his offer (no on the latter, but more on this below)?

The most interesting question of all, though, is the last paragraph: what potential does Musk see, and could he unlock it? For my part, not only do I agree the potential is vast, but I do think Musk could unlock it — and that itself has implications for the preceding paragraphs.

What is Twitter?

It’s popular on Twitter to point to a funny tweet or exchange and marvel that “This website is free“, or alternatively, “This app is free“. That raises the question, though, what is Twitter: is it a website or an app, or something different?

The answer, of course, is “All of the above”, but it’s worth being clear about the different pieces that make up Twitter; “Jin” made this illustration on Medium:

Twitter's architecture

Twitter is actually a host of microservices, including a user service (for listing a user’s timeline), a graph service (for tracking your network), a posting service (for posting new tweets), a profile service (for user profiles), a timeline service (for presenting your timeline), etc.; the architecture to tie all of these together and operate at scale all around the world is suitably complex.

The key thing to note, though, is that only the green boxes in the diagram above are actually user-facing; a dramatically simplified version of Twitter, that condenses all of those internal services to a big blue “Twitter” box and focuses on the green interfaces might look something like this:

A dramatic over-simplification of Twitter's architecture

Again, this is a dramatic oversimplification, but the important takeaway is that the user-facing parts of Twitter are distinct from — and, frankly, not very pertinent to — the core Twitter service.

Twitter’s API Drama

The general idea behind a services architecture is that various functionalities are exposed via application programming interfaces, more commonly known as APIs; a “client” will leverage these APIs to build an end user experience. There is no requirement that these clients be owned or managed by the centralized service, and for the first several years of Twitter’s existence, that is exactly how the service operated: Twitter the company ran the service and the Twitter.com website, while third-parties built clients that let you access Twitter first on the desktop and then on smartphones.

Mobile was an absolute boon for Twitter: the public messaging service, modeled on SMS, was a natural fit for a smartphone screen, and the immediacy of Twitter updates was perfectly suited to a device that was always connected to the Internet. The explosion in mobile usage, though, led to a situation where Twitter didn’t actually control the user experience for a huge portion of its users. This actually led to a ton of innovation: Twitterrific, for example, the earliest third party client, came up with the Twitter bird, the term “tweet” for a Twitter message, and early paradigms around replies and conversations. It also led to problems, the solutions to which fundamentally changed Twitter’s potential as a business.

The first problem that came from Twitter the service relying on third party clients is that the company, which descended into politics and backstabbing from the board level on down almost immediately, was drifting along without a business model; the obvious candidate was advertising, but the easiest way to implement advertising was to control the user interface (and thus insert ads — ads, including promoted tweets, are another distinct service from Twitter itself). Thus Twitter bought Tweetie, widely regarded as the best Twitter mobile client (I was a user), in April 2010, and rebranded and relaunched it as the official Twitter for iPhone app a month later.

The second problem is that starting in 2010, a Silicon Valley entrepreneur named Bill Gross (who invented search advertising) started trying to build his own Twitter monetization product called TweetUp; when Twitter acquired Tweetie and made clear they were going to monetize it via advertising, Gross started buying up multiple other third party Twitter clients with the idea of creating a competing network of clients that would monetize independently. Twitter responded in the short term by kicking several of Gross’s clients off of the platform for dubious terms-of-service violations, and in the long term by killing the 3rd party API for everyone. Clients could keep the users they had but could only add 100,000 more users — ever.

The net result of these two decisions was that Twitter, its architecture notwithstanding, would be a unified entity where Twitter the company controlled every aspect of the experience, and that that experience would be monetized via advertising.

Twitter’s Reality

Twitter has, over 19 different funding rounds (including pre-IPO, IPO, and post-IPO), raised $4.4 billion in funding; meanwhile the company has lost a cumulative $861 million in its lifetime as a public company (i.e. excluding pre-IPO losses). During that time the company has held 33 earnings calls; the company reported a profit in only 14 of them.

Given this financial performance it is kind of amazing that the company was valued at $30 billion the day before Musk’s investment was revealed; such is the value of Twitter’s social graph and its cultural impact: despite there being no evidence that Twitter can even be sustainably profitable, much less return billions of dollars to shareholders, hope springs eternal that the company is on the verge of unlocking its potential. At the same time, these three factors — Twitter’s financials, its social graph, and its cultural impact — get at why Musk’s offer to take Twitter private is so intriguing.

Start with the financials: Twitter’s business stinks. Yes, you can make an argument that this is due to mismanagement and poor execution — who enjoys seeing a stale promoted tweet about something that happened weeks ago?1 — but I have also made the argument that Twitter just isn’t well suited to direct response advertising in particular:

Think about the contrast between Twitter and Instagram; both are unique amongst social networks in that they follow a broadcast model: tweets on Twitter and photos on Instagram are public by default, and anyone can follow anyone. The default medium, though, is fundamentally different: Twitter has photos and videos, but the heart of the service is text (and links). Instagram, on the other hand, is nothing but photos and video (and link in bio).

The implications of this are vast. Sure, you may follow your friends on both, but on Twitter you will also follow news breakers, analysts, insightful anons, joke tellers, and shit posters. The goal is to mainline information, and Twitter’s speed and information density are unparalleled by anything in the world. On Instagram, though, you might follow brands and influencers, and your chief interaction with your friends is stories about their Turkey Day exploits. It’s about aspiration, not information, and the former makes a lot more sense for effective advertising.

It’s more than just the medium though; it’s about the user’s mental state as well. Instagram is leisurely and an escape, something you do when you’re procrastinating; Twitter is intense and combative, and far more likely to be tied to something happening in the physical world, whether that be watching sports or politics or doing work:

Instagram is a lean-back experience; on Twitter you lean forward

This matters for advertising, particularly advertising that depends on a direct response: when you are leaning back and relaxed why not click through to that Shopify site to buy that knick-knack you didn’t even know you needed, or try out that mobile game? When you are leaning forward, though, you don’t have either the time or the inclination.

That article made the argument for Twitter to move towards more of a subscription offering; that may be the wrong idea, but the bigger takeaway is that what Twitter has been trying to build for years just isn’t working, and the challenges aren’t just bad management. To put it another way, when it comes to Twitter’s business, there really isn’t much to lose, but Twitter could only risk losing what there is if it were a private company, free from the glare of public markets who, for very justifiable reasons, give Twitter’s management a very short leash.

What is valuable is that social graph: while Facebook understands who you know, Twitter, more than any other company, understands what its users are interested in. That is, in theory, much more valuable; said value is diminished by the fact that Twitter just doesn’t have that many users, relatively speaking; the users it has, though, are extremely influential, particularly given the important of Twitter in media, tech, and finance. For this group Twitter is completely irreplaceable: there is no other medium with a similar density of information or interest-driven network effects.

This, by extension, drives Twitter’s cultural impact: no, most people don’t get their news off of Twitter; the places they get their news, though, are driven by Twitter. Moreover, Twitter not only sets the agenda for media organizations, it also harmonizes coverage, thanks to a dynamic where writers, unmoored from geographic constraints or underlying business realities of their publications, end up writing for other writers on Twitter, oftentimes radicalizing each other in plain site of their readership. Twitter itself is part of this harmonization, going so far as to censor politically impactful stories in the weeks before an election; it’s no surprise that when Musk says he wants to impose a stronger free speech ethos that the reaction is fierce and littered with motte-and-baileys (“actually we just care about limiting abuse and spam!”).

Back to the Future

This is all build-up to my proposal for what Musk — or any other bidder for Twitter, for that matter — ought to do with a newly private Twitter.

  • First, Twitter’s current fully integrated model is a financial failure.
  • Second, Twitter’s social graph is extremely valuable.
  • Third, Twitter’s cultural impact is very large, and very controversial.

Given this, Musk (who I will use as a stand-in for any future CEO of Twitter) should start by splitting Twitter into two companies.

  • One company would be the core Twitter service, including the social graph.
  • The other company would be all of the Twitter apps and the advertising business.

TwitterAppCo would contract with TwitterServiceCo to continue to receive access to the Twitter service and social graph; currently Twitter earns around $13/user/year in advertising, so you could imagine a price of say $7.50/user/year, or perhaps $0.75/user/month. TwitterAppCo would be free to pursue the same business model and moderation policies that Twitter is pursuing today (I can imagine Musk sticking with TwitterServiceCo, and the employees upset about said control being a part of TwitterAppCo).

However, that relationship would not be exclusive: TwitterServiceCo would open up its API to any other company that might be interested in building their own client experience; each company would:

  • Pay for the right to get access to the Twitter service and social graph.
  • Monetize in whatever way they see fit (i.e. they could pursue a subscription model).
  • Implement their own moderation policy.

This last point would cut a whole host of Gordian Knots:

  • Market competition would settle the question about whether or not stringent moderation is an important factor in success; some client experiences would be heavily moderated, and some wouldn’t be moderated at all.
  • The fact that everyone gets access to the same Twitter service and social graph solves the cold start problem for alternative networks; the reason why Twitter alternatives always fail is because Twitter’s network effect is so important.
  • TwitterServiceCo could wash its hands of difficult moderation decisions or tricky cultural issues; the U.S. might have a whole host of Twitter client options, while Europe might be more stringent, and India more stringent still. Heck, this model could even accommodate a highly-censored China client (although this is highly unlikely).

I strongly suspect that a dramatic increase in competition amongst Twitter client services would benefit TwitterServiceCo, growing its market in a way that hasn’t happened in years. What is most exciting, though, is the potential development of new kinds of services that don’t look like Twitter at all.

Step back a moment and think about the fundamental infrastructure of the Internet: we have a media protocol in HTTP/web, and a communications protocol in SMTP/email; what is missing is a notifications protocol. And yet, at the same time, if there is one lesson from mobile it is just how important notifications are; a secondary consideration is how important identity is. If you can know how to reach someone, and have the means to do so, you are set, whether you be a critical service, an advertiser, or anything in-between. Twitter has the potential to fill that role: the ability to route short messages to a knowable endpoint accessible via a centralized directory has far more utility than political signaling and infighting. And yet, thanks to Twitter’s early decisions and lack of leadership, the latter is all the service is good for; no wonder user growth and financial results have stagnated!

A truly open TwitterServiceCo has the potential to be a new protocol for the Internet — the notifications and identity protocol; unlike every other protocol, though, this one would be owned by a private company. That would be insanely valuable, but it is a value that will never be realized as long as Twitter is a public company led by a weak CEO and ineffective board driving an integrated business predicated on a business model that doesn’t work.

Twitter’s Reluctance

The surest evidence of the Twitter board’s lack of imagination and ineffectiveness is that their response to Musk’s proposal is to further dilute existing shareholders as a means of denying Musk control. This is, in my estimation, clearly against the interest of Twitter shareholders (which, for what it’s worth, don’t in any meaningful way include Twitter’s board members); given Twitter’s performance over the last decade, though, this isn’t really a surprise.

Indeed, when you consider the fact that Twitter’s board members not only don’t own much of Twitter, but famously, barely use Twitter at all, it is easy to wonder if the actual goal is not financial results but rather harnessing that immense cultural impact. This suspicion only intensifies when you consider that the bidder in this case is one of the most successful entrepreneurs of all time: if there was one person in the world who could realize Twitter’s latent value, wouldn’t Musk be at the top of the list? And yet he is anathema, not for his business acumen, but despite it.

This, more than anything, makes me even more sure that my proposal for competition amongst Twitter client companies is essential: not only do I think that more competition would lead to dramatically more innovation, but it would also solve the problem of who decides what we see by undoing the centralization of that power and subjecting decisions to market forces. That this is unacceptable to some says more about their ultimate motivations than anything else.


  1. A friend sent me this promoted tweet on April 15, almost a full month since Kentucky had been eliminated from March Madness, and well over a week after the entire tournament had ended 


Subscription Information

Member: Roland Tanglao
Email: rolandt@gmail.com

Manage your account

24 Apr 02:55

$650,000 phishing attack against MetaMask user reveals that credentials are automatically backed up to iCloud

An ape with fur resembling magma and volcanic rock, with a green muzzle, with leeches coming out of its nose and mouth

Some MetaMask users using iOS were shocked to discover that their MetaMask credentials were automatically being stored to iCloud today, after MetaMask acknowledged this was the case in the wake of a costly phishing attack. Domenic Iacovone lost cryptocurrency and several pricey NFTs after a successful social engineering attack by scammers pretending to be Apple support earned them access to his iCloud account. From there, they were able to access his iCloud data, and use the stored MetaMask credentials to drain his wallet. The trader lost $650,000 worth of cryptocurrency and NFTs, including Mutant Apes and Gutter Cats, to the attack.

It's not yet clear if others have been affected by the same type of attack, but MetaMask tweeted instructions for iCloud users on how to turn off the automatic backups. Most people seemed to have previously been unaware that this data was being backed up in iCloud. MetaMask turned off replies on their tweet announcement, apparently anticipating the outrage from their users. Iacovone was among the outraged, writing, "Keep exposing MetaMask until they do what is right and take care of this issue and the people affected by it".

24 Apr 02:55

Bill Browder’s New Book

by bob
“Freezing Order: A True Story of Money Laundering, Murder, and Surviving Vladimir Putin’s Wrath”: https://amzn.to/37qxft7 How can I get you to read this book? I was hanging with a 17 year old yesterday. He spends two hours a day on TikTok, an hour on Snapchat, and almost never watches streaming television. There are so many […]
24 Apr 02:45

Logitech Lift :: Vertical Mouse für Links- und Rechtshänder

by Volker Weber

Logitech bringt heute eine neue ergonomische Maus. Die soll Schmerzen in Hand, Ellenbogen und Schultern vorbeugen. Die tennisarmgeplagte Scheffin sagt, das funktioniert!

Logitech Lift ist kleiner als Logitech MX Vertical und wird für die linke und die rechte Hand angeboten. Der Listenpreis sinkt von 120 auf 80 Euro. Der Marktpreis muss sich erst noch etablieren. Ich habe für Heise einen längeren Bericht geschrieben.

Logitech MX Vertical passt nur in große Hände, Logitech Lift (rechts) taugt auch für mittlere und kleine Hände.
24 Apr 02:44

Stadtfahrzeug der Zukunft

by Volker Weber
618.500 Elektroautos vs 8.500.000 Elektrofahrräder
Audi Urbansphere Concept: 5,15 Meter lang für bequemes Stehen im Stau
Riese & Müller UBN Five: Nur 18 kg schwer, Akku in der Wohnung zu laden, Platz für zwei Satteltaschen
24 Apr 02:44

Netlify Edge Functions: A new serverless runtime powered by Deno

Netlify Edge Functions: A new serverless runtime powered by Deno

You can now run Deno scripts directly in Netlify's edge CDN - bundled as part of their default pricing plan. Interesting that they decided to host it on Deno's Deno Deploy infrastructure. The hello world example is pleasingly succinct:

export default () => new Response("Hello world")

24 Apr 02:44

Glue code to quickly copy data from one Postgres table to another

Glue code to quickly copy data from one Postgres table to another

The Python script that Retool used to migrate 4TB of data between two PostgreSQL databases. I find the structure of this script really interesting - it uses Python to spin up a queue full of ID ranges to be transferred and then starts some threads, but then each thread shells out to a command that runs "psql COPY (SELECT ...) TO STDOUT" and pipes the result to "psql COPY xxx FROM STDIN". Clearly this works really well ("saturate the database's hardware capacity" according to a comment on HN), and neatly sidesteps any issues with Python's GIL.

Via How Retool upgraded our 4 TB main application PostgreSQL database

24 Apr 02:17

HOT DOG Linux

by Rui Carmo

Following up on my theming shenanigans, this Slackware-based Linux distribution has a bunch of retro-looking graphical themes that are certain to deliver a warm, fuzzy feeling of nostalgia (or shock, depending on how many of the original systems you used).


24 Apr 02:17

Developers drain over $1.1 million from $CHEDDA

An illustration of a mouse eating a wedge of cheese on an orange background

The price of the $CHEDDA token suddenly plummeted 50% when a developer removed $1.17 million from the project. The withdrawal was accomplished with a function only available to privileged wallets—that is, those belonging to the project team or its developers.

Members of the Chedda team claimed on Discord that they were not behind it, and that it had been done by an outsourced development team who was working on the projects farming and staking. "They technically should've been within contract, but they robbed us," wrote Discord moderator Ali Michelle (referring to legal contracts rather than smart contracts). "They were in contract so it would be illegal and full on theft, i believe". Despite the devastating loss, Michelle urged remaining members of the community to "hodl and help us bring this back to life!"

The project had been audited by CertiK, who were quick to note that the contract containing the function used to drain funds was "not in CertiK’s audit scope".

24 Apr 02:17

Assessing Exception Handling Testing Practices in Open-Source Libraries

Eight years ago, Yuan2014 found that many of the failures in data-intensive systems were a result of people not testing the error handling, i.e., they didn't check that the alarms actually worked as designed. Subsequent research in several different contexts has confirmed this: programmers are less likely to test the "unhappy path" through their code, not least because of the difficulty of simulating things like timeouts, dropped network connections, and permission errors.

Lima2021 is therefore welcome news. They examined the test suites of 27 well-known open-source Java libraries, and while they did find that instructions and branches in catch blocks and throw instructions aren't covered as well as "main" code, most of the libraries' test suites could detect more than 70% of artificially-injected faults. That's a much higher percentage than I would have predicted; I'd be curious to see a companion study looking at whether books like Aniche's Effective Software Testing devote more to this topic than their predecessors did twenty years ago, and if so, whether that coverage preceded or followed improvements in practice.

Lima2021 Luan P. Lima, Lincoln S. Rocha, Carla I. M. Bezerra, and Matheus Paixao. Assessing exception handling testing practices in open-source libraries. Empirical Software Engineering, 6, 2021, doi:10.1007/s10664-021-09983-3.

Modern programming languages (e.g., Java and C#) provide features to separate error-handling code from regular code, seeking to enhance software comprehensibility and maintainability. Nevertheless, the way exception handling (EH) code is structured in such languages may lead to multiple, different, and complex control flows, which may affect the software testability. Previous studies have reported that EH code is typically neglected, not well tested, and its misuse can lead to reliability degradation and catastrophic failures. However, little is known about the relationship between testing practices and EH testing effectiveness. In this exploratory study, we (i) measured the adequacy degree of EH testing concerning code coverage (instruction, branch, and method) criteria; and (ii) evaluated the effectiveness of the EH testing by measuring its capability to detect artificially injected faults (i.e., mutants) using 7 EH mutation operators. Our study was performed using test suites of 27 long-lived Java libraries from open-source ecosystems. Our results show that instructions and branches within catch blocks and throw instructions are less covered, with statistical significance, than the overall instructions and branches. Nevertheless, most of the studied libraries presented test suites capable of detecting more than 70% of the injected faults. From a total of 12, 331 mutants created in this study, the test suites were able to detect 68% of them.

24 Apr 02:07

The internet is modular

Gordon Brander, Subconscious, Apr 18, 2022
Icon

This article makes two major points. The first is, as suggested by the title, that "one of the key architectural principles of the internet is modularity," that is, "system architects decompose the system in a way that minimizes dependencies among components." So you can update incrementally, replacing individual components with improved components that do the same job. The second point, though, is that "the modular boundaries of the web were drawn for networked documents, with content split into 'pages', and browser engines designed to lay out and scroll text." And these modular boundaries are just the wrong sort of boundaries for apps. Enter Mighty, a browser streamed entirely from the web (not everyone is a fan). This could be the ultimate in the black box internet, or it could be a new paradigm. Either way, when the beta becomes available, I'll be on it.

Web: [Direct Link] [This Post]
24 Apr 02:07

The Dunning-Kruger Effect is Autocorrelation

Blair Fix, Economics from the Top Down, Apr 18, 2022
Icon

As John Cleese puts it: "If you're very very stupid, how can you possibly realize that you're very very stupid?" That's the Dunning-Kruger effect - the idea that unskilled people tend to overestimate their own skills. But what if it's not real? That's what Blair Fix argues, convincingly. Take two random values, x and y. Plot them against each other and you get a random graph. But define a new variable, say, z=x-y and then plot x and z, and you get a correlation. Why? Because you're essentially comparing x and x, and that's what you're doing when you plot an actual test result and the difference between a predicted and actual test result, which is what Dunning and Kruger did. Why is this relevant? We ran a test last year to evaluate data literacy in a population. We found people's predictions were reliable indicators of their test scores. We were looking for similarity, not difference. Autocorrelation? Via Metafilter.

Web: [Direct Link] [This Post]
24 Apr 02:07

The fall of the Tower of Babel

Joanne Jacobs, Linking and Thinking on Education, Apr 18, 2022
Icon

"The Tower of Babel has fallen, writes social psychologist Jonathan Haidt in The Atlantic. We Americans no longer speak the same language or recognize the same truth." I think this is an interesting observation, not so much because nobody has noticed this before (it's not hard to see if you look) but because of the implications. Now Joanne Jacobs is inclined gto blame this on social media or overbearing parents or generational change. But I personally just think it's a think that happens once things get to a certain point. As Haidt writes, "Babel is not a story about tribalism; it's a story about the fragmentation of everything. It's about the shattering of all that had seemed solid, the scattering of people who had been a community." This just happens. The question is, what do you do about it? Me, I embrace diversity as a virtue, and to preserve the peace, I embrace equity and inclusion. Jacobs? "E pluribus was supposed to lead to unum — not Babel," she says, opting, I think, for conflict instead.

Web: [Direct Link] [This Post]
24 Apr 02:06

I’m Dumping Alexa, but I’m Letting Her Stay as a Roommate

John Hendrickson, ReviewGeek, Apr 18, 2022
Icon

It was four or five years ago that smart speakers seemed poised to take over homes everywhere. I can see the attraction: simply speak instead of typing. The reality hasn't been as smooth. My car frequently interprets talk radio as a command. And we had a lot of fun at my parent's house trying to get Alexa to respond to... anything! This article is a bit of a reflection on the current state of smart speakers. They're not going away, but the parameters are getting clearer. We want them to respond intelligently to the voices around them, to listen but not to spy on us, and (unlike Alexa) to refrain from advertising something every chance it gets. I don't have a smart speaker at home - but this article did make me think maybe voice controlled window blinds might be a good idea.

Web: [Direct Link] [This Post]
24 Apr 02:06

Making and programming

Terry Freedman, ICT & Computing in Education, Apr 19, 2022
Icon

I found this article a bit one sides, which is perhaps not surprising given the experiences described in this article. But Terry Freedman raises some important questions: does 'making', properly so-called, actually yield any learning outcomes? And how do you prevent young students from using bits of electronics as catapult projectiles? "There seems to be no academic research which reports that as a result of 'making', pupils have learnt to code," he reports. Freedman also notes that "what the research does say is that the kind of step-by-step instructional activity that seems to accompany making in classrooms is really not what the maker movement is all about." Rather than plodding step-by-step instructions, making seems more to be about open-ended creativity and bricolage. And maybe 'making' isn't really about computer programming at all. Perhaps there are wider benefits? Marina Umaschi Bers, for example, "argues that schools can teach computer coding in ways that develop character as well as technical skills," according to this report.

Web: [Direct Link] [This Post]
24 Apr 02:06

The Case Against Homework

Alfie Kohn, Apr 19, 2022
Icon

When I was in school I delivered newspapers after school every day (this was before the era of morning papers). If I was assigned homework, either I wouldn't do it, or I would finish it quickly the morning before it was due. So unsurprisingly here, I am supportive of Alfie Kohn's stand. "There are virtually no pros to balance the cons. Even if you regard grades or test scores as good measures of learning, which I do not, doing homework has no statistical relationship to achievement in elementary school. In high school, some studies do find a correlation between homework and test scores, but it's usually fairly small."

Web: [Direct Link] [This Post]
24 Apr 02:05

Day 1 notes from picking up a modern VR headset

I’ve tried VR a few times over the past few years - enough to know that it’s amazing - but never spent real time with it. So I picked up an Meta Quest 2 which is a standalone headset with two handheld controllers.

These is my day 1 response. Every time I pick the thing up my views evolve, and I wanted to capture my earliest impressions.


(Side note #1: the Meta Quest used to be known as the Oculus Quest. Meta is the new name for Facebook, and it’s named for the “metaverse”, which is the imagined future immersive VR world that we all inhabit. My view? A lo-fi metaverse is possible.)

(Side note #2: The ecosystem is pretty confusing as a newb. It seems like other headsets are basically output devices for other things, like having a fancy head-mounted monitor for your Playstation or Windows PC? I wanted to experience VR as something self-contained, like a phone or a desktop, so I went for the Quest 2… but it turns out that it’s not entirely standalone. You need a powerful Windows box to pair it with if you want to try certain games or apps.)


Keep in mind that I’m not a gamer. I play video games from time to time, and love a few, but I don’t have a gaming PC and it’s not something that really holds my attention.

Could VR one day displace my laptop or even my phone?

Apps not games: that’s what I’m into understanding. How far off is that? What are the design challenges?

Spoiler: No conclusions yet. After one day I’m still informing my intuitions.


The operating system “frame” to all the apps is waiting for its Macintosh moment.

A big job of the OS, from a user’s perspective, is to help you find apps, launch apps, and give you a consistent experience. That helps app developers (discoverability!) and also users (familiarity!).

That’s what the “grammar” of the original Macintosh did so well: windows, menus, icons, cross-app copy and paste, drag and drop, and so on. If you learnt how to use one application, you could use them all.

Apple’s Human Interface Guidelines were revolutionary: a philosophy and a spec all at once. You can read them online, as a PDF hosted by Andy Matuschak: Human Interface Guidelines: the Apple Desktop Interface (1987).

The iPhone performed the same trick, only it updated the metaphor to make it more immediate: instead of clicking a mouse with your finger which caused a cursor to click an icon, you literally tap an icon with your finger. There is no gap between the embodied action and the metaphorical action.

With Quest 2, there are floating on-screen “buttons” that you “tap” by directing a pointer with your hand controller and pulling a trigger.

I understand that this is a really minor thing for me to focus on. I’m not saying: here is an example of poor design. No. Instead, this is a sign that we’re all still figuring out what this medium is for and what the natural interactions should be.

Likewise, when there are more apps, the OS-makers will be able to see what the common interface patterns are. Like, do they all organise in a faux 3D environment that the user moves around? Or on the inside of a sphere? Etc. At which point the OS will be able to provide standard tools for apps to draw these UIs.

It takes time and it takes work.

Case in point: this morning I learnt about Quest 2 hand tracking (find out how to activate it here). There’s a whole different way to tap buttons (now: pinch) and interact with interfaces, without using controllers at all.

In the meantime there’s no consistent grammar to the apps. I’d like to see more wild experimentation tbh.


There is problematic asymmetry in physical social space.

The Quest 2 doesn’t come with headphones. It plays sound out of the sides. No headphones is good because it means I have some awareness of what’s around me… but not great for anyone else nearby. It’s noisy! I can’t see who I’m interrupting. There’s just the sound of someone closing a door on me.

I was fully expecting VR to be antisocial, that’s completely fine. (Actually it’s kinda funny when I’m playing mini-golf in the front room while my wife is watching TV. She gets to laugh at me and we’re still together.)

It’s the asymmetry in physical social space that surprised me.

So you have asymmetry with sound (you can interrupt people, but can’t tell that you’re interrupting them). You also have it with vision.

There’s a feature of the Quest 2 called passthrough. Here are some GIFs on their developer blog. The idea is that, in certain situations, you can see the room around you in fuzzy black and white. (The Quest 2 has external-facing cameras, and it can play the feed on the internal display.)

Passthrough is magical! (It’s used in some clever ways that I’ll mention below.)

But passthrough is weird because sometimes I can sometimes see people outside the headset and sometimes not. But they can’t tell.

The thing about gaze is that it’s reciprocal. If I’m looking at you, you can tell (and vice versa). Until now. Using passthrough to see my wife feels a bit like spying? Like, she has an expectation that I’m immersed, but secretly I’m peeping.

I feel like the headset should have cartoon eyes that appear on the outside when passthrough is engaged.


I find it physically demanding with stinging eyes and motion sickness.

My eyes sting. I’m not blinking enough I think? I’ll get used to it.

The headband positioning and weight feels kinda… off. If I don’t get the headset in precisely the right place (which is not it’s natural resting point), I get blurred vision. Industrial design tweaks will fix this.

My lower arms get fatigued quickly when using hand tracking (though, weirdly, not with the handheld controllers). Iterating the interaction design will stop this happening.

Motion sickness. Oh my god.

Years ago I tried an Oculus Rift with a low poly game and it was beautiful. I stood on an island beach at sunset and looking from the pink blocky trees out to the horizon. Looking up, rain was falling, and as it stops and the clouds parted, stars sparkled. It moved me to tears.

A week later I tried the same game again - it was in the process of being ported to VR - and the debug code had been left in. The extra code dinged the latency and the apparently view lagged a few milliseconds behind my head moving. It was enough to put me flat on my back in cold sweats for 20 minutes.

VR sickness is wild. I’m still prone to it.

I toured Anne Frank’s house using the Quest 2, and my goodness what an incredible experience. Well put together (I explored the space thoroughly) and a story clearly told. I had a lot to think about at the end.

Then I went straight onto a dinosaur themed rollercoaster. I shouldn’t have chained those two apps. As if the emotional whiplash wasn’t enough, I was on my knees during the rollercoaster, took the headset off halfway through, and was queasy for the rest of the night.

I think it was something to do with the motion on the coaster? The third and fourth differentials of motion weren’t eased; you could sense the snap.

Any VR operating system needs to bake “correct motion” into the SDK provided to app and game developers. They should have to fight the code to make people feel sick.


Here are four magical moments.

I’m such a Debbie Downer. Virtual reality is amazing. My observations sound like criticisms but they’re not. I’m just trying to get a sense of the state of advancement of the tech. But let’s balance that with some great moments.

I’ve used VR before. I have an Oculus Rift, original Kickstarter edition, in a box upstairs. I tried VR back in the Virtuality days of the mid 90s, the last VR boom. Then periodically over the last few years.

Given all that, here’s what made me gasp on day 1 and what I’m still thinking about.

  1. Peeping through passthrough. The way it works is that you “draw” (in VR) a box on the floor. Within that box, you are immersed in 3D virtual reality. Near the edge, you see the box around you outlined as a grid. As you touch the edge, a hole appears… you can poke your head through, and you see the real world beyond, in black and white fuzzy passthrough. I found myself leaning out to have a chat or to grab a drink. Delightful.
  2. A Godzilla’s eye’s view. Playing mini golf, I found a button that let me zoom out. Suddenly I was standing in the middle of this golf course arranged on a mountain, the mountain halfway up my chest. Walking just a foot or two, and bending down, and leaning close, I could examine bridges and trees and caves and courses. An incredible, examinable overview, in a way that would take multiple steps on any other device.
  3. Height, space, and scale. In the first room of Anne Frank’s house, there’s a steep staircase leading down, but it’s inaccessible from the tour. However I was able to kneel down, put my head through the bannisters, and peer over the edge, down the stairwell, and into the next room. I know this is what VR is all about, but the sense of being located continues to astound. What do we do now the gamut of interaction can include vertigo and awe? It’s like suddenly being given an extra colour.
  4. Objects that cross the threshold. When I pick up the real-life controls, they appear in VR space. Headset on, everything black and gone – except the controls in my hands are still there. And now they have extra green lights and details on them! Janus objects that face both ways into physical and fictive reality. The controls are real… but realer in VR. So many opportunities for play.

I can’t help but wonder about the non-game applications.

FOR EXAMPLE:

The Godzilla’s eye view of the golf course was 100% a better experience for getting an overview and examining detail than anything on a phone or a desktop. Imagine seeing a spreadsheet or a PowerPoint deck all at once, with all the interconnections overlaid in glowing arcs, and simply leaning closer to read the words or pick up a sheet to edit. It’s so much more immediate than working via windows and scrolling in a viewport. VR and mixed reality are tangibly better ways of dealing with large amounts of data, at macro and micro scales, and relating to it at your own pace.

That’s what I’m thinking about with these magical interaction moments: what if they were as fundamental to the future VR user interface as menus on a desktop, or scrolling a list on a phone?


As I said I’m training my intuitions so no conclusions yet. Mainstream VR (for apps, not just games) feels super close with the tech and with a ton of work to do regarding interaction design. The space is wide open. Exciting.

24 Apr 02:05

My Apple Watchface

by Volker Weber
24 Apr 02:04

Firmware Update for Jabra Elite 7 Pro

by Volker Weber

Updated: Active Noise Cancellation performance*
Updated: microphone performance
Updated: earbud connectivity performance
Updated: charging case firmware
Performance and stability improvements

*After updating to version 2.2.0 it is recommended to personalize the Active Noise Cancellation again under the under Personalize Your Headset menu.

Release Notes for 2.2.0
24 Apr 02:04

The Future of Social Media Depends on You

by Yavnika Khanna

What if social media platforms like Twitter did not force-feed a perpetual stream of manipulated content specifically targeting you? What if they did not track you at all? Or sell to you or monetize your data? As the conversation intensifies over the ownership of Twitter and its future, we really have to think about whether […]

The post The Future of Social Media Depends on You appeared first on Purism.

24 Apr 02:03

Software Design by Example

I have moved my book-in-progress on software design from https://stjs.tech/ to a new home on this site at https://third-bit.com/sdxjs/: the old site’s name no longer matched the book’s title (which has changed from Software Tools in JavaScript to Software Design by Example), and I am trying to cut back on the number of small domains I manage. The source remains available at https://github.com/software-tools-books/stjs/; if all goes to plan, Taylor & Francis will publish it by the end of this year.

24 Apr 02:02

A Cautionary Tale from the Decline of SourceForge

There are thousands of books in print today about starting a business, but only a handful about ending one and moving on. Tamburri2020 is a deep dive into one particular (and not yet complete) ending: the decline of SourceForge, which was the first (and for many years the largest) open source software forge. Over the course of 22 pages, the authors look at how organizational siloing, the lone wolf effect, and other factors within projects interacted with things like its ill-conceived DevShare program, frequent changes of ownership, and the steady accumulation of technical debt in the site itself. While the story doesn't have a happy ending, it should be required reading by anyone managing an open source project.

Tamburri2020 Damian Andrew Tamburri, Kelly Blincoe, Fabio Palomba, and Rick Kazman. "The canary in the coal mine…" a cautionary tale from the decline of SourceForge. Software: Practice and Experience, 2020, doi:10.1002/spe.2874.

Forges are online collaborative platforms to support the development of distributed open source software. While once mighty keepers of open source vitality, software forges are rapidly becoming less and less relevant. For example, of the top 10 forges in 2011, only one survives today—SourceForge—the biggest of them all, but its numbers are dropping and its community is tenuous at best. Through mixed-methods research, this article chronicles and analyze the software practice and experiences of the project's history—in particular its architectural and community/organizational decisions. We discovered a number of suboptimal social and architectural decisions and circumstances that, may have led to SourceForge's demise. In addition, we found evidence suggesting that the impact of such decisions could have been monitored, reduced, and possibly avoided altogether. The use of sociotechnical insights needs to become a basic set of design and software/organization monitoring principles that tell a cautionary tale on what to measure and what not to do in the context of large-scale software forge and community design and management.

24 Apr 02:02

My Weekly Engineering Report

Providing visibility into your work is one of the most underrated developer soft skills. Coworkers are often too busy to keep track of what’s going on with engineering work, even if it’s their job to know what’s going on with engineering work. It’s generally not out of malice or lack of interest, but a lack of time and energy to chase down every issue or conversation thread. And to be fair, engineering is an opaque process where we trick the rocks inside a computer to act like a business.

Standups are a great tool for sharing visibility. Unfortunately, not everyone loves standups. I’ve personally experienced some extremely toxic scrum master situations. Impersonal bots can have the same effect. A daily status report can feel like micromangement leading to a loss of autonomy. Also, that visibility into your work evaporates after attendees leave the call.

For the past four or five years, I’ve been practicing an alternative to daily standups. Rather than waiting for people to confront you, I find it better to proactively share your progress in a brief bulleted list1 in a public channel (of appropriate level). That’s the secret: share without being asked. The template has evolved a bit over the years, but here’s what it looks like now:

💪 **Progress**
- Fixed something project#123
- Added something project#234
- Documented something

😖 **Regressions**
- Found bug on something project#345

🧪 **Prototypes**
- Experimented with new feature codepen.io/123

💬 **To Discuss**
- Blocked on something project#456
 
📆 **This Week**
- Work on new feature project#567
- Out of office on Friday

That’s a … uh … standup?

Yeah. It’s basically a standup in newsletter form. It could be the years working in a Japanese office talking, but I don’t hate standups. They are great for mind-melding. But, as I’ve experienced, not everyone thrives in standups. But the sharing part is valuable, I try to keep doing the sharing part.

I’ve done this in solo contexts, team contexts, and external client-facing contexts and no one hates it. No one says, “God, Dave, I wish you’d quit summarizing what’s going on.” No one asks for it, I just post it. People —especially those that pay you— enjoy seeing progress made and you (or your team) can avoid a lot of workplace mistrust issues by broadcasting a short progress report.

Consistency helps. Any weekday works but I’ve found posting on Monday mornings provides a nice recap of last week’s progress and sets a baseline for expectations in the upcoming week. It’s also a good opportunity to publicly celebrate specific people or any team wins as well.

Thus sums up my entire software development philosophy: Proactively communicate as succinctly as possible what you’re working on, what problems you ran into, and what you’re working on next.

  1. The bulleted list part is maybe the most important part.

24 Apr 01:49

Netflix

by bob
Netflix isn’t in trouble, Wall Street is. Now let me get this straight, you’ve got “professional” investors and analysts, focusing on money, not art, not the service Netflix provides, who consistently get it wrong in their own field telling us what is going to happen in another field? Hogwash. They’re barely worth listening to. They […]
23 Apr 19:55

The Debt

by stephen@downes.ca

One of the incessant ‘Trudeau must go’ posts includes this feature chart. It pegs Canada’s total debt as $1,163 billion, and each individual debt as $31K. These numbers are supposed to frighten us. But what struck me is how low they are. Compare this, say, with total Canadian consumer debt of $2,200 billion. Average consumer debt is $20K excluding mortgages.

So let’s look at Canada’s federal debt. If I pay $4 tax per day, that stops the growth of the debt in its tracks. If I add, say, a car payment, we could eliminate the debt in four or five years. Redirecting this money would also slow inflation. So why don’t the Conservatives support this?

It’s because they know this level of debt is very manageable. And they know these payments would be even lower if we include things like corporate taxes. That’s the fallacy of “your share of the debt is $x.” It assumes corporations owe nothing, and that billionaires owe (and benefit) the same amount as you. The Conservatives are trying to scare you with a threat that is not real.

The fact is, Conservatives don’t actually want to eliminate the debt. They want to reduce spending on social services and give tax breaks and free money to the rich. But you can’t pay down the debt simply by reducing spending. You have actually pay down the debt. But that’s the part conservative governments never actually get around to.

Here’s another thing: who do we all owe this debt to? Roughly 40% of the total debt, and almost all of the recent debt, is held by the Bank of Canada. About half the remainder is held by Canadians and Canadian institutions. So we owe the majority of our debt to ourselves. It’s not like owning money to the finance company or to a bank, where we never see any value in debt repayment.

As Yannick Beaudoin and Mark Anielski write, “Canada’s debt is not like household debt. The persistent use of the household debt analogy by politicians and media is not only grossly inappropriate; it also harms Canadians’ ability to make informed decisions around ensuring the government spends appropriately, wisely and with accountability.”

23 Apr 19:55

Automating Podcast Sessions in Audio Hijack 4 with Shortcuts and Timery

by Federico Viticci
Audio Hijack 4 and Timery.

Audio Hijack 4 and Timery.

For the past week, I’ve been rethinking my approach to time tracking with the Timery app with a focus on simplicity and automation. I appreciate the insights into my habits and patterns afforded by time tracking and Timery’s excellent Reports view, but lately I’ve felt like my setup with projects, tags, and sub-tasks was too convoluted since it was based on a structure I designed years ago.

My daily routine is different now – and it’ll continue to change in 2022 – and I wanted to get rid of the overhead caused by a time tracking system that was too granular. For time tracking to be effective, you need to remember to start a timer whenever you’re working on something; too much friction in the process – such as having to carefully pick from a list of similar projects – defeats the whole purpose of it. There’s also the opposite problem – forgetting to stop a long-running timer – which John explained and fixed in a separate story for Automation April.

So I went back to the drawing board of my Timery projects and reorganized everything with simplicity and ease of activation in mind. I cleaned up my saved timers and shortcut that activates those timers, which I can now trigger system-wide via Raycast on the Mac and the Shortcuts widgets on iPad. I split my work projects into three main areas – MacStories, Club, and podcasts – removed redundant sub-tasks, and grouped related activities under the same tags for more reliable filtering.

How I access my saved timers from the Home Screen.

How I access my saved timers from the Home Screen.

The approach worked well for MacStories and the Club, but podcast timers turned out to be a different beast. You see, when I sit down to record a show like Connected or AppStories, I need to take care of key tasks such as making sure my audio inputs are correct, checking out notes for the show’s outline and intro, and keeping an eye on the Connected audience in Relay’s Discord server. These tasks distract me from time tracking and, as a result, I often forget to start a timer for when I begin recording and, conversely, stop the timer when I’m done. I could automatically start a timer when a calendar event for a show is due in my calendar, but that also doesn’t work for me since it doesn’t account for the time before we actually record the show when I may be chatting privately with Myke and Stephen. Wouldn’t it be great if there was One True Way to automatically start tracking my real recording time when I start talking into the microphone for a show?

As it turns out, thanks to the latest update to Audio Hijack – the new version 4.0 that recently launched on macOS – there is. So for this week’s Automation April story, I’m sharing the custom system I created to trigger a single shortcut that starts time tracking in Timery based on the show I’m recording in that specific moment. Let’s take a look.

Supported By

Kolide

Kolide: Endpoint Security Powered by People; Try for Free!

Audio Hijack Automation

The latest version of the amazing Audio Hijack by Rogue Amoeba (which I’ve used for years to record my microphone’s input as well as a backup recording of Skype/Zoom/Discord calls) comes with a new Scripting section that you can access from the right sidebar of a recording session. Here’s what it looks like:

The new Scripting tab in Audio Hijack 4.

The new Scripting tab in Audio Hijack 4.

The Scripting tab allows Audio Hijack to automatically execute specific actions based on session events. There are built-in steps (which you can see above) that let the app perform things I’ve always done manually when a recording stops, such as trashing audio files shorter than five seconds (for all those times when you need to test your inputs quickly and end up creating dozens of useless files) or opening the folder of your recorded files in Finder. These automations can be easily created by picking the ‘Recording Stop’ event in Audio Hijack and selecting one of the built-in actions provided by Rogue Amoeba.

Built-in scripts in Audio Hijack 4.

Built-in scripts in Audio Hijack 4.

In addition to offering built-in actions, Audio Hijack 4 comes with a JavaScript automation engine (documented here) to run custom scripts when specific events occur in the app. When I started looking into this (inspired by the work Jason Snell has done with this kind of automation), I quickly realized two things: I can run a script when a session starts, not just when a recording stops; and I can create my own script that runs a shortcut in the Shortcuts app with support for passing input text to the shortcut. Specifically, the latter is made possible by the app.runShortcut() method that lets you invoke a shortcut by name, in the background, with the ability to send text to it.

The Script Library in Audio Hijack 4.

The Script Library in Audio Hijack 4.

That got me thinking: when I start recording a show, I could run a script that fires off a shortcut that contains a Timery action to start time tracking. I don’t want to manually tell Shortcuts which podcast I’m recording, but Audio Hijack can help here as well: the app can pass the name of the session that just started to Shortcuts. If I named my Audio Hijack sessions with the same name I use for each podcast project in Timery, does that mean I could invoke one shortcut that knew exactly what podcast I started recording?

My podcast projects in Timery have the same names of the podcast sessions in Audio Hijack.

My podcast projects in Timery have the same names of the podcast sessions in Audio Hijack.

The answer is yes, and the solution was quite simple to implement. In Audio Hijack, I created the following script:

// open the Session's window and bring Audio Hijack to the front
// #needsSession

if (event.session == null)
    return;

var dict = '\{"' + event.session.name + '\" : \"recording\"}'

app.runShortcut('Podcast Timers', dict)

To create a custom script in Audio Hijack, you have to open the Script Library window (⌘L) and click ‘New Script’ in the bottom left corner. As you can probably tell from the code above, the script sends the name of the current session (when it starts) to a shortcut called Podcast Timers. The shortcut receives input text from Audio Hijack in the form of a dictionary that contains the name of the session and a ‘recording’ value. The input text looks like this:

{"Connected" : "recording"}

The shortcut itself is pretty straightforward: when it runs, it checks whether there’s some input text or not. If there isn’t, it means the shortcut was started manually from the Shortcuts app or widget, so I’m prompted to pick a show. In this case, I have to select one of my shows and tell Shortcuts if I’m recording or working on show notes. The ‘recording’ and ‘show notes’ value will be used as a tag by Timery to categorize my work between recording time and research.

If I run the shortcut manually, I have to pick the podcast I'm recording.

If I run the shortcut manually, I have to pick the podcast I’m recording.

If the input text has any value, it means it was activated by something else externally; specifically, it assumes Audio Hijack passed a Dictionary to it. In this case, a conditional block at the beginning of the shortcut parses the dictionary and saves the key (the session name) as a Project variable and the value (the ‘recording’ bit) as a Tag variable. I talked about conditional blocks and explicitly setting named variables in the second Automation April workshop for Club Discord members, so go listen to the episode if you missed the live recording.

If the shortcut has input, the text sent by Audio Hijack is parsed as a dictionary.

If the shortcut has input, the text sent by Audio Hijack is parsed as a dictionary.

At this point, regardless of whether Podcast Timers was run manually or triggered by Audio Hijack, the shortcut has everything it needs to start tracking my time. A single ‘Start Time Entry’ action uses the Project and Tag variables to assemble the template for a new timer, which Timery starts right away. At the end, I get a notification showing me that a timer was successfully started.

Even with two potential scenarios, the shortcut uses one Timery action to start tracking my time.

Even with two potential scenarios, the shortcut uses one Timery action to start tracking my time.

This setup is beautiful and everything I’ve always wanted from Audio Hijack. Now whenever I click ‘Run’ to start a recording session, the shortcut executes in the background and, a second later, I get a notification telling me that the correct timer was started by Timery. I don’t need to think about tracking my time anymore since the one action I have to perform anyway – recording myself – is now tied to time tracking. I can’t forget because the computer remembers to do it for me, which is the whole point of user automation.

The only downside of this approach: because Audio Hijack scripts block the main thread of the app, I see a beachball for a second in Audio Hijack, which automatically disappears as soon as the shortcut has finished running. This is a compromise I can live with for now, but I wonder if Rogue Amoeba could figure out a way to run scripts asynchronously without blocking the app’s main thread, causing this brief interruption in user interactions. It’s not a big deal, but keep it in mind if you’re planning on triggering shortcuts that take a while to run.

The final step of this process was creating another automation in Audio Hijack that stops time tracking in Timery when I’m done recording a show. For this, I created another custom script, which is easier than the first one since it only triggers a shortcut by name, without passing any input text to it:

// open the Session's window and bring Audio Hijack to the front
// #needsSession

if (event.session == null)
    return;

app.runShortcut('Stop Time Tracking')

The shortcut itself is a very simple one: it’s a one-action Timery shortcut that is configured with ‘Show When Run’. This way, when a timer stops, I get a visual confirmation in the middle of the screen that shows the timer’s elapsed time too.

A simple shortcut to stop time tracking.

A simple shortcut to stop time tracking.

This is what I see when I stop a recording.

This is what I see when I stop a recording.


I’m incredibly happy with this new, more reliable automation I set up for tracking how much time I spend recording podcasts each week. The folks at Rogue Amoeba have done a remarkable job exposing data from Audio Hijack sessions via JavaScript, and although I wish Audio Hijack offered visual Shortcuts actions to retrieve data for active sessions, I can live with this JavaScript-only solution for now. The ‘Scripting’ tab is, at least for me, the most important addition to Audio Hijack 4: it compensates for the lack of automations and third-party app triggers in Shortcuts for Mac (I really hope to see third-party triggers in iOS 16 too), and it has allowed me to configure the automated time tracking system I’ve always wanted for my podcasts.

You can download the two shortcuts I covered in this story below or in the MacStories Shortcuts Archive; obviously, unless you’re John, Myke, Stephen, or Shahid, you’ll have to modify the first one with the names of the podcasts you host.

Podcast Timers

Start a podcast timer in Timery by picking from a list of shows. The shortcut supports manual execution as well as input text passed by Audio Hijack.

Get the shortcut here.

Stop Time Tracking

Stop the current timer in the Timery app and show elapsed time.

Get the shortcut here.


You can also follow MacStories’ Automation April coverage through our dedicated hub, or subscribe to its RSS feed.


Support MacStories and Unlock Extras

Founded in 2015, Club MacStories has delivered exclusive content every week for over six years.

In that time, members have enjoyed nearly 400 weekly and monthly newsletters packed with more of your favorite MacStories writing as well as Club-only podcasts, eBooks, discounts on apps, icons, and services. Join today, and you’ll get everything new that we publish every week, plus access to our entire archive of back issues and downloadable perks.

The Club expanded in 2021 with Club MacStories+ and Club Premier. Club MacStories+ members enjoy even more exclusive stories, a vibrant Discord community, a rotating roster of app discounts, and more. And, with Club Premier, you get everything we offer at every Club level plus an extended, ad-free version of our podcast AppStories that is delivered early each week in high-bitrate audio.

Join Now
23 Apr 15:36

This Tiny Lantern Always Brightens My Day. And Dark, Creepy Corners of My House

by Elissa Sanci
A lit Black Diamond Moji Lantern hanging in a tree, surrounded by a green border and frame.

The Black Diamond Moji Lantern is so small that I was initially skeptical of its abilities. I held it — the size of a clementine — up to my partner before slotting in the batteries and said dismissively, “What am I supposed to do with this?”

But I ate my words the moment I turned it on and found myself blinking away from the bright, cool-white glow of this tiny lantern.

Dismiss