Alcides Fonseca

40.197958, -8.408312

ATProto vs Mastodon

Conceptually, Mastodon is a bunch of copies of the same webapp emailing each other. There is no realtime global aggregation across the network so it can only offer a fragmented user experience. While some people might like it, it can’t directly compete with closed social products because it doesn’t have a full view of the network like they do.

The goal of atproto is enable real competition with closed social products for a broader set of products (e.g. Tangled is like GitHub on atproto, Leaflet is like Medium on atproto, and so on). Because it enables global aggregation, every atproto app has a consistent state of the world. There’s no notion of “being on a different instance” and only seeing half the replies, or half the like counts, or other fragmentation artifacts as you have in Mastodon.

I don’t think they’re really comparable in scope, ambition, or performance characteristics.

Dan Abramov, Hacker News comment discussing his Open Social article (via Simon Willison)

I did not know about this huge difference. The reason why federated social networks will never work is because it is done at the cost of usability. Discovery and recommendation is done better when everything is centralized. atproto gives everyone a global view, which has scalability issues (if you care about recommendations for instance). FAANGs have been tackling these scalability issues for the last couple of decades in the centralized (but physically distributed) environment. I doubt it can be done completely federated.

On the other hand, I believe we need more players in their fields (Netflix is one of the few that does not have a monopoly), but other major tech companies are in one or at least a duopoly. Federation is a good solution to breaking those monopolies.

But I do not see that happening, unfortunately. The customers in this day and age care about low friction more than privacy or price (especially if you can pay with time or attention).

Rodney Brooks of iRobot fame

Om Malik interviews iRobot founder Rodney Brooks:

At MIT, I taught big classes with lots of students, so maybe that helped. I came here in an Uber this morning and asked the guy what street we were on. He had no clue. He said, “I just follow it.” (‘It’ being the GPS—Ed.) And that’s the issue—there’s human intervention, but people can’t figure out how to help when things go wrong.

Taxi drivers used to have to know every single street in the city to get their license issued. TVDE don’t even need to know street names. If you ask for the directions to a Portuguese-named hotel in Lisbon, they ask you to type it in their phones. Navigation apps have done a disservice in now being designed to teach POIs and navigation to humans. Let’s hope you have a power bank near you when you get lost in your own city!

We’re trying to put technology in the manual warehouses, whether it’s DHL—our biggest customer—or Amazon. It’s about putting robots in places where there are no robots. And it’s not saying it’s a humanoid that’s going to do everything.
You’re right, it’s not sexy. And you know what that means for me? It’s hard to raise money. “Why aren’t you doing something sexy?” the VCs ask. But this is a $4 trillion market that will be there for decades.

Software Companies (Microsoft, Google, Facebook) have shifted the mind of VCs. Due to how fast it spreads, it was much easier to obtain monopolies (and make a lot ton of money) than with previous life-changing inventions (phones, computers, cars). Everyone is looking for the next unicorn like it’s the Gold Rush.

I always say about a physical robot, the physical appearance makes a promise about what it can do. The Roomba was this little disc on the floor. It didn’t promise much—you saw it and thought, that’s not going to clean the windows. But you can imagine it cleaning the floor. But the human form sort of promises it can do anything a human can. And that’s why it’s so attractive to people—it’s selling a promise that is amazing.

This is what you get when you study interaction design. Physical affordances and skeuomorphisms. If you were a 18 century time-traveler you would be more likely to be able to use an early iPhone than the current Liquid Design ones.

I think we need multiple education approaches and not put everything in the same bucket. I see this in Australia—”What’s your bachelor’s degree?” “I’m doing a bachelor’s degree in tourism management.” That’s not an intellectual pursuit, that’s job training, and we should make that distinction. The German system has had this for a long time—job training being a very big part of their education, but it’s not the same as their elite universities.

In Portugal, the technical schools and universities are now offering the same courses (given in the same style), including PhDs, with no distinction. Diversity is healthy and should address the dichotomy of learning to get a job, and learning to change the world. Both need distinct methods and depths.

As 3D printing becomes more general, in the same way information technology and payment systems got adopted in the third world more quickly than in the US, 3D printing will become the engine of manufacturing.
Right now, the supply chain is the reason China is so effective. Chinese manufacturing companies realized they had to diversify and started building supply chains in places like Malaysia, Vietnam. But if 3D printing really gets to be effective, the supply chain becomes all about raw materials that get poured into the front of those 3D printers. It’ll be about certain chemicals, about raw materials, because then every item would ultimately be 3D printed. That completely breaks the dynamic of what made Chinese manufacturing so strong—the supply chain of components.

Brooks is the first person to provide me with an optimistic viewpoint of manufacturing and China’s upcoming world dominance.

Well worth the read!

Portal das Autárquicas

..

As pessoas em Portugal votam como fãs de partidos como se de clubes de futebol se tratasse. Parabéns à equipa do Lisboa Para Pessoas pelo trabalho nesta plataforma que agrega os programas dos vários partidos para os 18 municípios da zona de Lisboa.

Um sampling nada aleatório:

Nova Direita para Lisboa: Implementar mecanismos de dissuasão da criação de bairros de hegemonia religiosa.

Espero que não se esqueçam da religião católica. Vou adorar o baralhar e dar de novo que vai acontecer com a habitação em Lisboa!

CDU para Lisboa: Defender junto do Governo e da AR que os municípios devem poder, perante o reconhecimento da declaração de situação de carência habitacional, proceder à posse administrativa de fogos com uso habitacional, devolutos ou sem utilização há mais de um ano, após a notificação.

Uma pessoa faz uma sabática e fica sem casa. Que giro!

“Moedas para Lisboa:” 100% da frota da Carris com zero emissões até 2030.

Alguém que me explique como é possível ter zero emissões num transporte público. A matemática não faz sentido.

Wargames (1983)

I’ve always wanted to recommend a few movies for my students to think about societal impact of their work. This semester I am finally doing it, and I’m starting with Wargames, from 1983.

A very young Matthew Broderick plays a young “hacker” that learns about how computers talk to each other, and his curious mind leads him to play a game against an 80s style AI. This AI is realistic in the sense that it learns from different executions (min-maxing strategies, pre-Reinforcement Learning) to estimate the best course of action.

Early in the movie you see him using early modems and connecting directly to any machine in the world via phone number. Later you see him trying some phreaking with a payphone. Too bad he didn’t have a Cap’n Crunch whistle with him.

It also features one of the first uses of hallucination in AI, predating the 1995 origin material. I might be stretching it a little, but it makes whole sense to me.

Finally, there is a message in the movie that critical systems should have a human in the loop as a safeguard. I wonder how many companies and individuals today have the same urge to replace humans with machines in super-critical scenarios. Oh, but machines act immediately, without a second thought.

Google Workspace and Email Authentication

My employer added a new spam filtering system (Anubis), which blocks my own personal email. Since I have an old free account in Google Workspaces, I had to figure out what was going on. Apparently, I was not signing the emails with SPF, DKIM and DMARC.

I followed this very simple and direct guide on how to setup it up. And I tested my new configurations using DMARCly.

Now the problem is that I have my Gmail (for Google Workspaces) set up to send emails via my employer’s SMTP account. Yes, I like to have all my email accounts merged in one inbox. I tried to split it last year, but failed miserably as I have plenty of work stuff in my personal email, and I like a single search box for all my emails.

I’ll update this post when I am successful at signing SMTP outgoing emails as well.

Universidades contornam limites de propinas com taxas e taxinhas

No Politécnico de Coimbra subiram a taxa de matrícula de 30 para 125 euros. Alunos de Mestrado e Doutoramento pagam até 500 euros de taxa de entrega de tese.

No caso das licenciaturas, estas taxas servem para as universidades públicas receberem mais dinheiro do que a propinas que está definida por lei. A nível de doutoramento, serve para manter o valor da propina naquele que a FCT suporta nas suas bolsas (2750 euros).

A verdade é que os alunos vêem um preço anunciado, e depois é-lhes impossível acabarem o curso pagando apenas esse valor. É literalmente publicidade enganosa.

Precisamos de duas mudanças: eliminação das taxas por parte das Universidades e Politécnicos, englobando esse custo na propina. Um aluno pagando a propina, deve conseguir ter acesso a assistir às aulas, ser avaliado e obter o diploma, sem qualquer taxa.

E o estado precisa de majorar o financiamento das universidades, que claramente têm de recorrer a estas acções eticamente discutíveis para manter a sustentabilidade económica que lhes é exigida pelo Tribunal de Contas.

Reddit will block the Internet Archive

Reddit says that it has caught AI companies scraping its data from the Internet Archive’s Wayback Machine, so it’s going to start blocking the Internet Archive from indexing the vast majority of Reddit. The Wayback Machine will no longer be able to crawl post detail pages, comments, or profiles; instead, it will only be able to index the Reddit.com homepage, which effectively means Internet Archive will only be able to archive insights into which news headlines and posts were most popular on a given day.

Jay Peters for The Verge (via Simon Willison)

Next it will be google. And most of the post-2025 forum knowledge in the web will be lost. Imagine a web browser that cannot access StackOverflow or Reddit. How useful it is? LLMs will need new data to continue being relevant, and a new data monetization strategy will change the internet forever.

Using AI to get an answer

AI is a Floor Raiser, not a Ceiling Raiser

Every day I am convinced that Software Engineering should be taught without AI. AI can give you answers to easy problems. But you won’t be able to create mental models of how things work, which will help you solve hard problems.

This next semester I am teaching a course on practices and tools in Software Engineering (my take will be inspired by MIT’s The Missing Semester). AI usage will be one of the topics, where we will explore MCP, IDE integrations and AI-assisted documentation.

But I have no idea how to write assignments for other topics. It is very likely that an AI will be able to complete the assignment without any human intervention. If students opt to do that (they will, that’s the faith I have in our grade-oriented system), they will not achieve the learning outcomes.

Students will question: if AI can do these tasks, why should we learn it? Well, math teachers in school still assigned me problems that machines could already solve by then. But creating mental models of how things work is essential in education.

Now the real question is about the incentives. We should assess whether students can use their mental models, and not whether they can solve the task. Especially with 100 students, where exams or take-home assignments are the norm.

Pypy and Flask

Very basic hello world app hosted under gunicorn (just returning the string “hello world”, so hopefully this is measuring the framework time). Siege set to do 10k requests, 25 concurrency, running that twice so that they each have a chance to “warm up”, the second round (warmed up) results give me:

  • pypy : 8127.44 trans/sec
  • cpython: 4512.64 trans/sec
    So it seems like there’s definitely things that pypy’s JIT can do to speed up the Flask underpinnings.

Twirrim on HN

I had no idea Pypy could improve webapps this much. I really ought to give it a try speeding GeneticEngine again. Guilherme suggested it originally, but there was some C-binding issues at the time. Will report back.

20 years of Django

Simon Willisson’s 10 years of Django presentation

I remember using Django back in 2010. There were a few problems with it:

  • Deployment: you could not just upload files like with PHP, you had to rely on some cgi-bin magic (fastcgi was introduced later, if I am not mistaken), making me buy my own VPS for the first time, which I still use to run this website, now deployed using Phusion Passenger.
  • Versioning: There was no stable version. Each project I started, I ended up following the official recommendation: use the trunk version! For the young developers out there, trunk is SVN’s main branch. So there was no stable version I could use, or keep all my websites on the same version and every 6-or-so months upgrade all of them.

And that’s it. Everything else was awesome: nice templating system, URL scheme, MVC (MTV in their style) pattern, image uploads, etc. The one thing missing for large-scale applications was migrations (the main thing Ruby on Rails had and Django didn’t). But that did not stop me. Migrations were done manually in the shell. For a one-man job, it worked perfectly.

Besides this website, I build a project management tool for jeKnowledge (a junior company I founded back in 2011), an App Store for a touch screen wall, a Python blog aggregator and a few other pet projects. Later, I would end working on a startup for tennis match-making as well as on a web application for automating genomics testing, all in Django.

Weavers against the Machine

IconFactory is a boutique design studio that focus on app icons. Their business is being replaced by AI.

This is the challenge of GenerativeAI: it replaces creative work (or automates it). Design work is one of those fields where the number of employed designers will decrease, and you will need to be either a very good, or a very productive one. If I were an undergrad in design, I would try to learn the difficult stuff, and now the run-of-the-mill stuff that will be easily automated.

Japan's IC Cards

Places like Hong Kong and Tokyo have a lot of commuters, leading to a lot of congestion around station gates. Sony realised this, and invested heavily into the performance of their technology – FeliCa cards boast an advertised communication speed of up to 424kbps, making a noticeable improvement in gate processing speeds compared to Western counterparts. Compare the speed of passing through a ticket gate on the Underground to a Tokyo ticket gate – you could practically sprint through. This is partly achieved by the fact that transactions only involve the card and the reader itself – the reader doesn’t talk to an external server to perform a transaction. This makes IC cards stored-value cards – as in, they store the value on themselves, rather than their value being stored on the backend where it’s controlled fully by the operator.

Japan’s IC cards are weird and wonderful by @aecsocket

I visited Japan in May and I was a bit confused by how IC cards (pre-paid NFC cards) interacted with my iPhone. It was really weird that I could have a digital version of the card or a physical card, not both. In practice, when I converted the physical card to Apple Pay, the physical copy would no longer work. After reading this awesome article about the technology, I now understand why: unlike western NFC cards, the money is stored as credits in the card itself. Therefore, you are limited to having only one of them as your money storage device. I wonder whether IC cards could be used for money laundering, given how multipurpose they are — you can pay your supermarket or mean with them!

Apple Pay is very convenient. Most of the days I don’t even carry a wallet. I pay everything with my card, and I even have my citizen ID and driver’s license on my government app. However, I do not carry a power bank or a lightning cable. That means that I’m usually screwed up if I ran out of battery. In Japan, that meant getting stuck in transit (especially when traveling from city to city). The fact that NFCs can work passively is a major advantage of the tech. Maybe we need phone NFCs to work even without battery. Or have some kind of chi-charging and a low-battery mode for phones to provide critical features outside of the main OS.

Trust in Scientific Code

In 2010 Carmen Reinhart and Kenneth Rogoff published Growth in a Time of Debt. It’s arguably one of the most influential economics papers of the decade, convincing the IMF to push austerity measures in the European debt crisis. It was a very, very big deal.
In 2013 they shared their code with another team, who quickly found a bug. Once corrected, the results disappeared.
Greece took on austerity because of a software bug. That’s pretty fucked up.

How do we trust our science code? by Hillel Wayne

As more and more scientific publications are dependent on code, trusting code is more and more needed. Hillel asks for solutions, I propose to tackle the problem in two fronts.

1 – More engineering resources

Writing production-level quality software requires larger resources (usually engineerings, but also some tooling). Most scientific software is written once and read never. Some PhD or MSc student writes a prototype, shows the plots to their advisors who write (some or most of) the paper. It’s rare for senior researchers to inspect other people’s code. In fact, I doubt any of them (except if they teach software engineering principles) has had any training in code inspection.

We need research labs to hire (and maintain) scientific software engineering teams. For that to happen, funding has to be more stable. We cannot rely on project funding that may or may not be awarded. We need stable funding for institutions so they can maintain this team and resources.

2 – More reproducibility

Artifact Evaluation Committees are a good addition to computer science conferences. Mostly comprised of students (who have the energy to debug!), they run the artifacts and verify whether the results of the run justify the results presented in the paper. Having done that myself in the past, it is very tricky to find bugs in that process. Mostly we verify whether it will run outside of your machine, but not whether it is rightly implemented.

What would help is to fund reproduction of science. Set 50% of the agency funding for reproducibility. Labs that get these projects should spend less than the original project to reproduce the results (and most of the challenging decisions are already made). In this approach, we will have less new research, but more robust one.

Given how most of the CS papers are garbage (including mine), I welcome this change. We need more in-depth strong papers that move the needle, and less bullshit papers that are just published for the brownie points.

Overall we need better scientific policies with the right incentives for trustworthy science. I wonder who will take this challenge on…

Hidden interface controls are affecting usability

It’s the year 2070. You are a 20 year recruit that is going to travel back in time 12-monkey style to try and save the world. You get to 2025, you find proof on a iPhone and you need to take a screenshot and send to a safe email address. Do you have a change at discovering how to take a screenshot?

The other day I was locked out of my car. I had my keys, but the key fob button wouldn’t work and neither would the little button on the door handle that normally unlocks the car. At this point, every action I had to take in order to get into the car required knowledge of a hidden control. Why didn’t I just use my key to get in? First, you need to know there is a hidden key inside the fob. Second, because there doesn’t appear to be a keyhole on the car door, you also have to know that you need to disassemble a portion of the car door handle to expose the keyhole.

Philip Kortum has a nice article on how this quest towards “clean” interfaces actually hurts usability.

How to select your side project

Recommended audience: CS students

Austin Henley shares some properties of a good side project. Personally, I think having a clear shippable objective is what most people lack, and prevents them from ever being complete.

I remember having side-projects suggestions during my courses. Maybe that’s something I have to incorporate in mine.

Most of what I’ve learned during my degree was doing side-projects. From competing in hackathons, creating a junior company, organizing conferences, doing a couple of research internships, and doing some freelancing work, these projects all taught me something that was not in the syllabus. That’s what separates you from the average student, and what will get you a good job in a world where unemployed software engineers are aplenty.

Joshua Barretto shares a really interesting list of possible side projects:

  • Regex engine (5 days)
  • x86 kernel (2 months)
  • Gameboy emulator (3 weeks)
  • Gameboy advance game (2 weeks)
  • Chess engine (5 days)
  • Physics engine (1 week)
  • Voxel engine (2 weeks)
  • GUI Toolkit (3 weeks)
  • Posix shell (5 days)
  • Dynamic interpreter (2 weeks)
  • Compiler (3 months)
  • Threaded Virtual machine (1 week)
  • Text editor (4 weeks)

The last four will give you an heads up in the programming language world. I might even have an internship for you.

Perhaps you’re a user of LLMs. But I might suggest resisting the temptation to use them for projects like this. Knowledge is not supposed to be fed to you on a plate. If you want that sort of learning, read a book – the joy in building toy projects like this comes from an exploration of the unknown, without polluting one’s mind with an existing solution.

Selling SAAS to universities

Recommended audience: Startups and large companies who intend to sell software to universities.

Most SAAS is sold on a per-seat basis. But this does not scale to universities, as we have a large number of possible seats, but most of them (students, possibly from different scientific areas) do not use the software, at least for it to be worthwhile.

On the other hand, unpredictable costs (when paying per activity) is also something that does not work, as we need other budget it yearly.

Chris Siebenmann has a really good write up on this issue, which I recommend if you manage or sell to universities.

Gremllm

Take python magic methods and add LLM code generation. That’s Gremlin, which no one should use.

However, I would certainly use this (if the output had a different mark, like color in my interpreter) for debugging code.

from gremllm import Gremllm

counter = Gremllm(“counter”)
counter.value = 5
counter.increment()
print(counter.value) # 6?
print(counter.to_roman_numerals()) # VI?