Skip to content

Category: Technology

Goals

Gazing in my crystal ball and reading some tea leaves, it looks like the Fediverse is going to grow substantially over the next few years as people realize Facebook, Instagram, and Twitter act are acting against their interests. There are a growing number of websites that are federated and interconnected, on top of the thousands that already do so, so leaving the Big Tech companies behind becomes less of an issue.

At the moment, the Fediverse is a bit like the World Wide Web was during the early 1990s. It’s a place of people-in-the-know, the early-adopters, the technically-savvy, and social-media-weary-looking-for-safe-havens. It’s the Wild West frontier of social media, where there are lots of apps, lots of websites, and lots of opportunities to gain users.

Project goals

Work on Amore has always been a bit of fun, playing with code. It’s been a personal side project, nothing more. That was until people started to get interested in it. This encouraged me to do more work on it, and make more of an effort at making a finished product. While working on Amore 0.3, I became aware of other projects that were supposed to make it easy for PHP projects to connect to the Fediverse. As I looked through their code and read their (sparse) documentation, it was apparent those projects wouldn’t work for me. What I needed to do was create my own Fediverse friendly PHP framework, then use that to build Amore. Thus Federama was born.

Federama is meant to provide a bare minimum of ActivityPub functionality. It will be able to stand on it’s own as a Fediverse platform, but can also be hacked to create something new. In my mind, if Federama is properly built, it can be used to create dating software, forum software, help desk software, microblogging software, media library software, translation software, wiki software, knowledgebase software, dictionary software, password lockers, and so much more. If there is a type of software that requires a user to sign in, it’s would be a good candidate for using Federama. That’s the goal anyway.

Put another way, the short-term goal (for the rest of 2019) is to make Federama a viable project that connects to the Fediverse. User should be able to sign in and send and receive messages with users on platforms like Mastodon, Pleroma, and Misskey. The slightly longer term goal is to build Amore as a dating application for the Fediverse. If Federama works by the end of 2019, Amore should work in early 2020.

Fundraising goals

Along with the project goals for Amore and Federama, I have some vague fundraising goals. In the sidebar are links to my profiles on some fundraising websites. Other than earning my gratitude and a thank you, there are no tiers or perks for donating at the moment. I’ll create goals and perks and levels after I can get Federama to connect to my accounts on Mastodon and Pleroma. That’s my incentive to work on coding.

For now, the main goal of fundraising is to earn money to help pay for hosting, domain registration, and occasional computer issues, like the monitor I had to replace last week.

Protocols

There are a lot of different protocols on the web (XKCD sums it up nicely). Basically, every big company has their own way of doing things making stuff easier to find, or putting stuff in context. The three protocols below are encouraged by different major tech companies, though they all kind of do the same thing.

  • Open Graph protocol: http://ogp.me/
  • Microformats: http://microformats.org/
  • Schema: https://schema.org/

The protocols below are used by different projects on the Fediverse.
OStatus protocol: https://www.w3.org/community/ostatus/wiki/Main_Page
ActivityPub: https://www.w3.org/TR/activitypub/
Zot: https://project.hubzilla.org/help/en/developer/zot_protocol
Diaspora: https://diaspora.github.io/diaspora_federation/

OStatus is an older protocol and is mainly used by older projects on the Fediverse, such as GnuSocial.

ActivityPub is a newer protocol which has been adopted as a standard by the W3C, giving it some authority over the others. It’s mainly used by newer projects, such as Misskey, and it’s the one I’ll be focusing on in Amore.

Zot was developed by the Hubzilla project, but is also used by Osada.

The diaspora* protocol was developed by the diaspora* project, but is also implemented in Friendica.

Some Fediverse projects, such as Mastodon and Pleroma, implement multiple protocols, usually to include OStatus, ActivityPub, or both.

Rabbit holes

Several years go I used to get sucked into the rabbit hole that is Wikipedia. I used to visit its Main Page, then click on some random link, go to an article, and get caught in this loop of clicking random links and reading random articles. It was exciting and it felt like I was absorbing all this valuable information when most of it was, in fact, useless.

Lately, my latest rabbit hole has been to go to fediverse.network or the-federation.info, and find random Fediverse instances to visit. I imagine this is what it felt like when Facebook and Twitter were still new and shiny and trusted by their users.

For what it’s worth, Mastodon runs more than 70% of all Fediverse instances.

Cool feature of the day: Some Mastodon instances have public membership lists, like this one at mastodon.social.

That’s Amore

When the site you visit first
Is on the Fediverse,
That’s Amore!

It’s almost winter break, so it almost goes without saying that I’ve been thinking about a project to keep me from getting bored. Over the past month or so I’ve been looking at the Fediverse and the projects associated with it. It sort of started with Twitter and Facebook clones, but it’s really taken off over the past couple of years due to Mastodon. Since finding about the Fediverse, and after trying and failing to get along with GnuSocial, the idea of creating my own version started taking hold.

But that would be too simple. Since there are already a bunch of applications that play in the federated universe, surely I could find one that suited my needs. Alas, that’s not the case. None of the applications I looked at had simple installation instructions. Some of them even required specific usernames on the server in order to run (Yes, PeerTube, I’m giving you the evil eye). Ideally, I want a web-based application that can be installed and running in under five minutes. While I’m willing to take an hour or two if I think the software is worth it, most Fediverse friendly applications don’t seem worth the effort.

Not finding an admin-friendly application, I decided to create Amore, an open-source, Fediverse friendly, microblogging and dating application written in PHP, using MySQL/MariaDB. PHP and MySQL are at the backbone of millions of websites, including Facebook, Wikipedia, Wikia, and any website running WordPress, so it’s only natural to expect to find a web-based application that uses them. Applications that run other languages or use other databases create hurdles to use.

With regard to social media, I like Twitter a lot. I’m on it nearly every day. I like the character limit, since it forces people to get to the point. Plus, it’s easier to be witty in small doses.

If all of this wasn’t difficult enough, I also want the software to function as a dating site, though the implementation will be left up the individual website owners. I’ve tried a lot of dating apps and websites, and I’m usually disappointed by them. I understand, most dating websites only exist to make money for the owners. If there’s no profit motive, the website/app wouldn’t exist. In contrast, most Fediverse websites are run without ads, either relying on donations or being run out of someone’s pocket. To me, a dating website that runs without ads, or without requiring paid memberships would be great, but it leads to a potential problem.

An ideal dating website/app has millions of active users all around the globe. However, unless it’s owned by a billionaire, it’s hard to imagine it getting by without ads or paid memberships. Millions of users means a lot of servers, a lot of bandwidth, and a lot of money to keep running.

I’m hoping that the decentralized nature of the Fediverse – combined with easy to install, setup, and use – will encourage website admins to consider running Amore, preferably without ads or the need for paid memberships.

Despite all that, Amore is still very much alpha software. It’s not suitable to be run on a production website. It lacks many features found on most CMS software, let alone any Fediverse apps, or dating applications.

Mycroft AI

Today I found out about Mycroft AI, which is an open-source answer to Alexa, Siri, Cortana, and OK Google. Like its proprietary competitors, Mycroft will listen to your commands and do stuff for you, such as setting an alarm, playing music, telling you the weather, getting stock quotes, and so on. Unlike its proprietary brethren, Mycroft won’t analyze this information to play targeted ads for you.

I haven’t installed it yet because I’m still looking into it. I have a lot of questions that I still have to find answers for. For example…

I have a Linux laptop that I use pretty frequently, plus an Android smartphone, a Linux PC in the home office, and another Linux PC being used as an entertainment center. My first question is whether I should us a different wake word for each device, or use the same one for all of them? Is it like the issue of password reuse, where it’s more secure to use different wake words?

It’s an interesting idea, so I hope they keep the development going.

JavaScript Coding Challenge 1

JavaScript Coding Challenge 1

For a long time, JavaScript was a programming language I tried to stay away from. It’s notorious for being insecure, but maybe a lot of that is due to sloppy coding by some of the people who use it. These days, however, it’s nearly everywhere, so it’s hard to escape. When creating websites, it’s considered as essential to know as HTML and CSS. Recently, I noticed Udemy had a sale on virtually all classes, so I signed up for The Complete JavaScript Course: Build a Real-World Project. I’ve only been doing it a few days, so I’ve got a long way to go. Of the 113 lectures, some of them are called “Coding Challenges”, where the student tries to write a project based on what has been taught already.

Lecture 14 is Coding Challenge 1. The challenge is a simple game between two players. Each player takes their height in centimeters and adds it to five times their age, and the winner is the one with the highest number. To make the game a bit more complex, a third player later joins the game. The code below is my solution.

// simple game
// highest value of height (in cm) and five times age wins

var playerOneHeight = 180;
var playerOneAge    = 26;
var playerTwoHeight = 190;
var playerTwoAge    = 22;

var p1Score = playerOneHeight + playerOneAge * 5;
var p2Score = playerTwoHeight + playerTwoAge * 5;

/*
if (p1Score > p2Score) {
    console.log('Player One wins');
} else if (p1Score < p2Score) {
    console.log('Player Two wins');
} else {
    console.log('Players One and Two are tied');
}
*/

// make it more complex
var playerThreeHeight   = 176;
var playerThreeAge      = 54;

var p3Score    = playerThreeHeight + playerThreeAge * 5;

if (p1Score > p2Score && p1Score > p3Score) {
    alert('Player 1 wins!');
} else if (p2Score > p1Score && p2Score > p3Score) {
    alert('Player 2 wins!');
} else if (p3Score > p1Score && p3Score > p2Score) {
    alert('Player 3 wins!');
} else if (p1Score === p2Score && p1Score > p3Score) {
    alert('Players 1 and 2 have tied!');
} else if (p1Score === p3Score && p1Score > p2Score) {
    alert('Players 1 and 3 have tied!');
} else if (p2Score === p3Score && p2Score > p1Score) {
    alert('Players 2 and 3 have tied!');
} else {
    alert('All players have tied');
}
    
 console.log('Player 1: ' + p1Score + ' Player 2: ' + p2Score + ' Player 3: ' + p3Score);

I’ll post more of the coding challenges later.

Music and the Lollipop Lock Screen

Music and the Lollipop Lock Screen

After the battery started giving me trouble in my THL T6 Pro, I broke down and bought a slightly more upscale smartphone – an ASUS Zenfone 2. Both phones are about the same height and width, though the ASUS seems to be a bit thicker. One of the main differences in the phones is that the THL used KitKat (Android v. 4.4.x) and the ASUS uses Lollipop (Android v. 5.x). Anytime I get a new piece of technology, it takes awhile to figure it out and get it to work the way I want it to. I don’t plan on everything working right out-of-the-box.

Because it’s a good security practice, and because my employer requires it, I always set my mobile devices to require a PIN or password at the lock screen. This isn’t much of an issue, unless I’m listening to music. When I’m walking to or from work, I like to listen to music. The music app is set to shuffle, but it sometimes lands on a song that I don’t feel like listening to. With Android KitKat, I was able to go to the lock screen and fast-forward to another song, but I wasn’t to do this in Android Lollipop. Trying to figure it out, it looks like I’m not the only one with this problem.

Although I tried some of the online suggestions, they didn’t work for me. All of the suggestions I read had the same instructions: go to Settings -> Sound & Notification -> When device is locked -> Show all notification content. I did this but my lock screen was still only showing the time, the temp, and the number pad for the PIN.

To fix it, after doing the step above, I went into Settings -> Lock screen -> Skip the slide page -> Off. The Slide page is where the music widget shows up. Try it out.

Go to Music and start a song, then press the power button on the device to turn the screen off. Press the power button again to get the lock screen. Your song should still be playing, and you should be see the music widget, plus whatever other notifications you have enabled. If you want to unlock the device, you can swipe up from the bottom.