Dream desktop

My computer should try benefit my life as much as possible. Modern desktops don’t even try. They don’t learn about me or give me advice. I want to give my demographics to my computer, my location, my salary and have the computer calculate things about me. We have all this untapped computer resource but most people only idle their computers.

Here are some crazy ideas that desktop computers could do.

  • Crazy remote indexes – We’ve got spare resources on an average desktop. Synchronize my files with a remote server, then do some crazy indexes on the files for all sorts of combinations. Index my files contents for content based searches. It doesn’t matter if the indexing is expensive, because it’s on a different server.
  • Arbitrary Correlations It’s easy to arbitrarily correlate behaviours of humans on a computer. We can track what times the user opens certain programs and then open them automatically at the correlated time.
  • Information age worker Download various data sets to the desktop and allow users to run queries against the data. Would be nice if you could import Wikidata data this way.
  • Digital Shop Provide tools to view or start an online shop, including a product search engine.
  • Overlay network My desktop should form an overlay network with all my phones and servers so that I can share services privately. It should connect as part of login to the computer. Should be like Zerotier, but with automatic login and connection.
  • Social P2P network My desktop should connect to a federated social network, a bit like twitter where you can share things. I can create mockups for an app in my desktop environment and share it.
  • Program cross-referencer We often run multiple applications in parallel and even arrange them so we can see both of them at the same time. What if you could write queries to open applications to combine data across two applications? Or write simple loops over Spreadsheet data and interact with the browser with an API? I should be able to write joins across programs visually.
  • Display Cone It would be nice if one could control the window manager and compositing with a text API. So one could create convert a window into a custom geometry and display that. So one could create dashboards of existing programs. This would be useful for information radiators without having to run Xmonad or other tiling window manager.
  • Payments integration Support payments and the listing of digital services in an online marketplace. We need to democratize the act of taking money and exchanging it. It shouldn’t be the purview of large corporations only taking payments. Anybody should be able to take a payment.
  • Website management Run a web site with your desktop computer. Desktop acts like a VPS, with dynamic IP hosting, web server and database.
  • Object maker Describe the properties an object should have and have them stored in a collection. Write queries to retrieve them, sort them. Drag and drop text boxes, sliders etc to create a GUI.
  • Live tree and rich GUI editor Every window, widget, dialogue, GUI on the screen forms part of a global tree data structure which can be used to interrogate what is on the screen and automate behaviour. Think of it as a global document object model (DOM) for the desktop but is actually a scenegraph. So every widget is accounted for. Someone can copy and paste a tree branch an create an identical but separated GUI from the root and modify it with drag and drop.
  • Life strategy quiz Ask where you’re sleeping tonight. What you doing for food. With the ability to order food via the system or acquire accommodation with a search. When the user answers they have no food or no where to sleep, dispense information to counteract homelessness and other social problems.
  • CPU manuals The desktop should come with documentation about CPU instructions, a compiler, and documentation about the desktop environment. It should be possible to create apps from an installation with minimal expertise.
  • API suite The desktop should have an installable set of pluggable APIs that are really easy to use from different places: from programming languages, over the network and from an executor GUI. I should be able to create an API invocation and chain them together with a GUI.
  • Event maker The ability to view events that get fired by the desktop environment, from the network stack, from arbitrary applications and add behaviour to events. A way to hook into events over the network, so you can ‘subscribe’ to events on another machine.
  • Log aggregation Log errors and error dialogs to be automatically synced to the cloud where other they turn into community issues. Issues can be commented by other users.
  • Errors become things Errors become a thing in my desktop. They appear in the system tray and don’t go away so easily and they can be re-tried easily. They appear in an error viewer. You can then try solutions against the error to see if it works, it it works, the error will go away. You can see comments about the error and try known solutions to the error. Known solutions are gathered online.
  • Social desktop There should be a chat room associated with every view. If you’re copying files, you can join the copy files chat room.
  • Shared desktop sessions It should be possible for multiple users to join a desktop session. The session is not single player, reserved for one person but possible for multiple people to join the same session.
  • Cloud designer Advertise cloud features to me and let me use cloud features in my home network such as S3.

Advertising features to me

My desktop computer has installed various services and APIs. My desktop should advertise what features are available to me.

Horizontally scaling a query

I have a simple distributed hash database at hash-db/server.py at master · samsquire/hash-db (github.com)

The data re-balances itself across nodes as they join. When a fresh node joins, the server sends that nodes’ data to the new server.

One thing I’m not sure how to do is how to scale the queries. I have queries such as sort key begins with, sort key between and partition key and sort key both between. There’s probably a way to send these queries to the cluster to compute in parallel. Currently they’re only executed by the server node but I’ve taken steps to move begins_with query execution to client nodes.

One of the data structures I’m using for between queries is a binary search tree and another is a prefix tree (trie). It would be nice if we could cut the tree in half and send it to two computers to walk in parallel. Perhaps it would be faster to index the list of sorted values with a tree, then each branch refers to a sublist of 32 or so items. Then in parallel, we loop over those sublists and find values that are between the query values. It’s really wasteful to do a full scan when you have lots of records.

We can do a full table scan in parallel. We can maintain a sorted list of data. Then partition it. remembering the start value and end value of each partition. To parallelise, we synchronize the index with multiple machines. We assign the partitions to each machine, each machine does a scan >= start_value <= end_value, with some optimisations on partition start value and end values, we can skip partitions that obviously don’t need traversal.

House prices unaffordable pandemic

House prices in the developed world are overpriced. Do not buy.

Do you really want to be working 25 years to afford a house? Houses used to be really cheap. But now you’re working more and more as a proportion of your life just to pay for a mortgage.

Why do it to yourself?

Scientific taxation

When society has a goal, it sets up various actions to meeting that goal such as tax law, exemptions, funding. It doesn’t scientifically collect evidence that the goal is working. The spend on combatting poverty is massive but the research on verifying the results is pretty non-existent. We’re terrible at verifying our spending, tax exemptions are doing what they say they are doing. As a result, companies pay little tax due to exemptions that were made to encourage certain behaviours. Nobody puts 2 and 2 together to work out if we’re getting the outcome in behaviour that we planned for.

An occasional PhD study on poverty a few years after the taxation laws are changed is not good enough. We need to close the feedback cycle of taxation and outcomes. There should be a department that studies the outcomes of tax exemptions The exemption amounts themselves should be tracked, as this represents decentralised spending on policy goals.

Government business incubator

People doing things is a good thing. I want there to be lots of businesses: restaurants, coffee shops, consulting firms, retail shops and internet businesses.

But starting a business is difficult. I propose a type of incubator that comes after age 18 that simply implements all the skeletal parts of a business. One can work for the skeletal business. People are staffed in roles of the nascent business and the business is separated from the incubator at some later date when it can survive on its own two feet.

Trickle up philosophy

We need to distribute money to the poorest in society and have it circulate around the low end economy. We need universal basic income. Society’s ills would dissipate as everybody has what they need.

Shelter should be free. Shelter is a human right. I don’t see why people should have to pay landlords for rent when landlords do nothing. Landlords are rent seekers and do not offer any useful service or function in an economy. They suck the life force out of economies.

If my shelter was free, it would free up £650 to be spent in the economy, that could give people jobs. It could mean that coffee shops could stay open longer. It could mean more restaurants. More people exchanging money, doing transactions, raising corporate and small business profits.

90% of the cache line is wasted or Instruction selection is only worth 10% of total performance

If data layout is the main contributor in application performance, why isn’t there any tools to help program data layout?

Code shouldn’t have such drastically different cache performance, code we have written that works should have maximum (reliable) performance regardless.

I’m thinking of automatic batching and automatic layout algorithms to place data in a way that is efficient for the code in question.

So you could write some code and have the layout transformed by the data layout compiler.

The layout and the code that accesses the data must be rewritten to accommodate the different styles of accessing batched data. The actual layout and code executed should be transparent to the programmer. It would make debugging harder but would improve performance.

Array of Structures and Structures of Array should be hidden from the programmer with code written to be ergonomic as possible. The transformation should happen behind the scenes.

Hyperwork – How making money should be socialized

Why is it so hard to make money? There’s never quite enough of it.

You should be able to make money by logging into a website and doing tasks listed. It should be simple, fun, easy. You should have the money in your bank account by the end of the day.

The secrets of making money are fiercely guarded. Society always has some problems that need solving, why not share the problems that need solving (the demand), by attempting to give them prices and have a marketplace of problems.

For example, my library needs a lick of paint. I should be able to vote for this, provide a stake how much I’m willing to pay towards a lick of paint and then people should be able to bid on the work. Get paid if they paint the library.

I should be able to list something I want and the price I’m willing to pay for it. I should be able to see a list of the tasks that need doing and prices that people are willing to pay for it.

The Struggle to Stay Relevant

You need to understand the economy (and some economics) to do well in society. This stuff isn’t taught at school or universities. Our manufacturing economies have been gutted by outsourcing and restructuring. You have to be aggressively creating value to succeed in our economy which has been gutted. In other words, you have to be prepared to work hard. doing things that are unusual. What if there is an intelligent way to be paid well while working at an average level?

It doesn’t look good. Wage stagnation is the long term trend. Labour has lost the war against capital. You cannot rest your laurels. So I recommend you aggressively save money. Eventually if you save enough, you won’t have to work.

The answer is often just learn to code. That’s what everyone else is doing. An army of low quality programmers awaits to do your React app. Pushing the prices of software engineering even lower than today. I find this solution to be wholly inadequate and unsatisfying.

Software engineering will be gutted too as it gets outsourced. Covid has shown that work from home is more productive and efficient than working in a noisy open plan office.

Ideas for computers in the 21st Century

I think about creating a manual for a theoretical computer system that would be detailed, with rendered screenshots and act as a guide on how to implement such a theoretical system.

Some features that are missing in computers

Instant sign up

The computer should begin collecting information about you, for you. It should collect your first name, surname, email address so you can instantly sign up to any online services. This is the instant sign up feature.

Payment integrations

The computer should be integrated with world markets and payment systems. Not as an app but as a native feature. It should be possible to collect payments with just a desktop computer, with a simple point of sale interface.

Distributed by default

A desktop computer should attempt to form connections with other computers for performance. The desktop computer should support decentralized and decentralized operation. For traditional systems this is called scaling out. A desktop operating system should scale out. Searches, computations, running programmes should run atop multiple computers for performance reasons.

So I should be able to connect my laptop and desktop into a cluster and have them both contribute computation and storage.

Single file system

We want a file system that abstracts across storage media in a way that makes sense to normal people. So you can have one giant file system with all your files composed from lots of smaller file systems such as Synalogy RAID drives, internal hard drives etc. GlusterFS does this but is rather advanced software to use and configure. As simple as AWS Elastic File System to use but composed from the user’s disks and drives.

Spreadsheet pipelines

How do we create communication protocols not in code?

It would be nice if we could create layers of behaviour with spreadsheet cells that are not mathematical but are communication. I’d like to be able to create an audio stream in spreadsheet and delineate a cell that is on another computer and have that audio go to that computer and create a cell outputting to the current computer coming from the other computer, this would be a basic audio chat.

Creating a devops pipeline should be something that anybody can do with a few minutes time. So I propose a spreadsheet like interface for creating pipelines.

International work ticketing system

The ability to request help with some work on a computer. Define a piece of work, inputs, expected outputs and raise the ticket on a work ticketing system that is public that anybody can use. Would be used by the desktop environment to make new features available and to encourage users to develop features together.