Learn how to create an animated GIF that’s small enough to upload but with a decent quality.
Animated GIFs are after all these years still pretty popular. FFmpeg is a good FLOSS tool to create these animated GIFs. FFmpeg is available for Windows, Linux and OSX. A word of warning FFmpeg is a command line tool that’s very versatile but it’s not for everybody. In fact suppose this post is more for users that like to tinker a lot with their animated GIFs. Below I will explain not only how to create a animated GIF from an mpeg4 movie but I also provide instructions to improve the quality.
The basic command to create an animated GIF from a mpeg4 is:
ffmpeg -i input.mp4 output.gif
where the name of the input file is input.mp4 and output.gif is the name of the output file. Unfortunately gif images are large due to their lossless data compression. So you’ll end up with a file that’s much bigger than the original mpeg4 and probably something that exceeds the upload limit of Diaspora*, Friendica or Mastodon.
In order to reduce the size of the file we can reduce the size of the images or we can reduce the number of frames per second. To achieve this we need the following command:
ffmpeg -i input.mp4 -r 12 -s 320x180 output.gif
This command reduces the framerate to 12 per second and resizes to 320×180 pixels. For the size of the GIF make sure that the aspect ratio remains the same or the resulting GIF will be distorted.
When we look closely at the resulting GIF we clearly notice some shortcomings in the animation. This is due to the default GIF encoding in FFmpeg. Because GIFs only uses 256 colors the number of colors from the mpeg4 needs to be reduced. FFmpeg by default uses a generic palette of 256 colors that covers the widest range of content. This is in general not optimal for the specific video that you want to convert. Luckily FFmpeg allows us to create a custom palette for our specific video. To create this palette type:
When we look in the folder of our mpeg file well noice that a file ‘palette.png’ has been added. This is our newly created 256 color palette for our specific video which is generated by the palettegen filter. To use the new palette with our mpeg video type:
FFmpeg needs two input files (streams) in this case test.mp4 and our newly created palette.png. The paletteuse filter takes the two streams as input specified by [0:v] and [1:v] where v stands for video and the preceding number for the number of the stream. The output file is renamed to prettyOutput.gif to differentiate it from the earlier output.gif. The resulting video should be much … prettier. If your resulting video is still too large either reduce the frame rate or resize even further (or just reduce the length of the video of course).
While Big Tech and Big IP holders are fighting the EU citizens are caught in the middle and are in danger of becoming the victim of this fight.
Article 13 and upload filters
In March or April the EU Parliament will vote for a new EU Copyright Directive. Recently France and Germany agreed on a proposal text for the Directive that according to the Electronic Frontier Foundation (EFF ) is the worst one yet. Earlier I wrote about the EU Copyright Directive and the threat it poses for average users like you and me. The reason is that Article 13 of the Directive will inevitably result in upload filters.
thanks for all this DRM
The EU Copyright Directive is actually a clash between Big Tech and Big IP holders and the EU citizens are caught in the middle. Worse they are manipulated by both sides for there own purposes. It reminds me of the Digital Rights Management (DRM) discussion where IP holders were trying to limit the access of software and multimedia content with technical means. Leaving the user with bad products and restricting their rights such a making a back-up. Instead of prohibiting DRM the legislators, influenced by the IP holders, tried to criminalize the circumvention of DRM, communication about such circumvention, and the creation and distribution of tools used for such circumvention.
Now with Article 13 history repeats itself. On one hand there are wealthy technology companies such as Google and Facebook. They take the lion share of all the profits made on the internet. The winner takes all principle on the internet has denied other companies to enter the arena and gain a significant market share. Mean while Big Tech has gained access to user data and profited from this on an unprecedented scale.
On the other hand are the Big IP holders that exercise, in their eyes, unlimited and perpetual rights to all intelectual property and as we have seen with DRM enforce it with all means possible. In the middle is the internet user which in general is not a criminal and is not purposely trying to infringe copyright. Nevertheless this user has to pay in the same way as they did with DRM with access to the internet being subjected to upload filters that can reject any content that the user is trying to share.
let’s fight back
The solution to the DRM problem came from the community providing users with tools such as Handbrake enabling them to make that back-up copy. This time around the solution is likely to come from the community again and the tool is probably already available. For that we have to go back to 2010 and the origins of Diaspora. The initial inspiration for Diaspora came from a speech by Eben Moglen, Freedom in the Cloud, where he proposed a distributed system of pods, called Freedombox. The idea of Eben Moglen was for every user to have a server with his/her data in his/her home. This idea never came to fruition and currently Diaspora is a system of pods serving dozens or hundreds of users per pod. What if we were to go back to this original idea. It’s possibe. Freedombox is still here and the’re similar solution like Freedombone and perhaps others that I’m not familiair with.
Freedombox has a planned feature to create a Diaspora pod running on top of Freedombox and Freedombone allows the user to install a Friendica instance on it. Surely these homepods and instances will be free of all the restrictions mentioned in Article 13 as long as they are not-for profit. Your pod in your home therefore doesn’t need an upload filter and you can share all the information that you like as long as you’re respecting copyrighted material. It will create an iron clad distributed network where you detemine what you want to share without passing any third party upload filter. It is also a message to both Big Tech and Big IP holders that no matter what they think of the community will always come back with a solution to be able to share data in a way they want to.
In Part III of my Bash scripting adventures I’ll write a script rename all .jpg files in a folder.
My third post on Bash scripting. This time I used a loop in the script. It’s still a simple script but also a very useful one. I regularly import photos from my digital camera or from my smartphone. The file names of these photos are either a number or a random string of characters. I like to rename these photos to give them a more meaningful name for instance summer2018.
The script lets me choose a folder and next asks for a file name. Then the script determines whether the folder exists and if it does it copies all .jpg files and gives the copied files a new name and a number starting with 0 and increasing the number with one for every photo in the folder. The files are copied so the old files still exists just in case a mistake was made. If I’m satisfied I delete the original files manually.
Question: I’d rather have a file name number with three decimals starting from 000 but I haven’t got I clue how to do that. Any ideas?
If you want to use this script, copy the code below and paste it into an editor like vim, vi or Geany. Save it e.g under the name rename and make this file executable by typing.
chmod 755 rename
To run the script just type.
2 # written by Eric Buijs 29 januari 2019
3 # rename changes all the jpg files in a user specified folder
7 read -p 'type the name of the folder here (e.g: /Users/myname/Documents): ' dname
9 read -p 'type the new name of the files (without extension): ' fname
11 if [ -d $dname ]
13 echo directory exists
14 cd $dname
15 echo $dname
17 for file in $files
19 cp $file $dname/$fname$counter.jpg
23 echo directory does not exist
26 echo 'All done'
News is spreading that Google will replace classic Hangouts with Hangouts Chat and Hangouts Meet. Since Google had already decided to close G+ forcing me to look for an alternative this was a good moment replace Hangouts with a FLOSS alternative. I’m pretty happy with the Fediverse social networks as a replacement for G+ but I haven’t been able to find a chat service in the Fediverse. Luckily the’re other FLOSS options. Two of those are Matrix and Movim. I briefly checked the Riot client of Matrix as a guest so I can’t tell much about it. Maybe later more on that. I’ve spend a considerable amount of time with Movim which is actually more than just a webbased chat service. Movim is a distributed social network built on top of XMPP.
XMPP is a communication protocol. It is, unlike for instance ActivityPub, a real-time protocol and therefore suitable for message oriented services like chat or IM. It’s an open protocol so any developer willing can use it in his/her application. There’s a sizeable list of application that support XMPP ranging from apps for the mobile phone to web oriented services.
Being build on top of XMPP, Movim has a good chat capability. You can create a public chatroom that anyone can join or have a private chat with another person. It also enables the user to create a community (or more) and a news stream. An advantage of Movim using the XMPP protocol is that with an Movim account you’re able to communicate with anyone with an XMPP account not just with Movim. To give an example I’ve been exchanging messages with someone that uses a Friendica server with a XMPP addon.
Movim is completely federated due to the underlying XMPP protocol which means that even when a server goes down the network keeps functioning and you’re still able to chat with your friends, as long as they were not logged into that specific server of course. The federated structure also provides privacy for the user. Your information is kept only on your XMPP server and information is being shared with other servers only if you decided to share it.
In the current version of Movim (0.14) end-to-end encryption is not implemented but it is planned for the next version. This means that currently Movim is not suitable if you need secure communication.
In Part II of my Bash scripting adventures I’ll write a script to resize an image.
As a follow up on my Bash scripting efforts that I started this year I wrote a script that resizes a photo to a specified width in pixels. The script should work both on Linux and OSX (tested on OSX, will test on Linux later). For this script to work ImageMagick needs to be installed. The script tests if an argument is specified (the original photo of course), if ImageMagick has been installed and if the file output.jpg exists. If output.jpg exists the user gets the option to overwrite the existing file or exit the script. Finally the user needs to specify the width in pixels of the output.jpg.
If you want to use this script, copy the code below and paste it into an editor like vim, vi or Geany. Save it e.g under the name resize and make this file executable by typing.
chmod 755 resize
Now if the photo is in the same folder as the script just type.
# written by Eric Buijs 12 january 2019
if [ $# -eq 0 ]
echo You need to specify a file.
echo e.g: resize photo.jpg
if [ ! $(which convert) ]
echo This script requires Imagemagick!
echo You can download it at http://www.imagemagick.org/
if [ -e output.jpg ]
echo output.jpg already exists.
read -p "Do you want to overwrite it? (Y/N) " answer
if [ $answer = "N" ]
read -p "What is the desired width in px: " width
convert $1 -resize $width output.jpg
If you’re still looking for an alternative social network to replace G+ here is a guide to the Fediverse that helps you choose.
Time is running out for GPlus refugees. G+ will close on April 2nd. So to help people that haven’t decided yet where to go in the Fediverse I made some pointers.
I divided this guide in a number of sections. Each section describes a certain use of social networks and which networks are most suitable for this specific use. Combine this with your preferred use of a social network and you should be able make a decision.
Micro- or macroblog
In general a macroblogger writes longer posts with longer intermittent periods while a microblogger writes short bursts on a daily basis. Microblog networks typically have a maximum post length of hundreds of characters. The macroblogger can choose between Diaspora*, Socialhome, Friendicaand Hubzilla. The microblogger can choose between Mastodon, Pleroma, Misskey or GNU Social.
Arguably the most important part of a social network is the interface. Lot’s of G+ users like the smooth interface with the grid layout, the stream with updates on people, collections and communities that you follow and the lack of ads. G+ has an algorithm but unlike FB my stream felt mostly relevant with interesting posts (ok, lets forget about discover which I never used because it mostly served me rubbish).
First, none of the social networks of the Fediverse show ads or have some kind of algorithm to influence the stream of posts. All macroblog social networks (see above) have a stream only with updates on people and topics (tags in Diaspora*) that you! follow. The interface of Mastodon is very different from G+ and has more similarities with Twitter. It allows you the follow users but not topics (although the user can search for tags). Nevertheless the interface of Mastodon works very well and might be an important reason that this social network is currently by far the most popular of the Fediverse.
If the grid-like layout of G+ is important to you, Socialhome features a similar grid-like layout.
ease of use
The different social networks in the Fediverse have a widely different user experience. Now it’s up for debate which is easy to use and which is not but I’ll give my opinion on this. The most easy to use social networks are in my opinion Mastodon and Diaspora* and I recommend them for beginners in the Fediverse. Both have a relatively simple interface with easy access to the functions and concentrate on social interaction. On the other end of the spectrum are Hubzilla and Friendica. Both these social networks are packed with functionality and Hubzilla is even more than a social network (e.g it allows the user to create a website). The interface for both can be difficult to master with lots of options, menus and submenus. It took me a considerable time to find all the functionality in Friendica and after half a year I still find new options.
If mobile is important it’s good to know that some social network are supported by multiple mobile apps while others (mostly the newer social network) current don’t have a mobile app. I believe that Mastodon is best supported with multiple mobile apps. Diaspora*, Friendica, Hubzilla, GNU Social and Pleroma have at least one mobile app. As far as I know Socialhome lacks a mobile app.
Support for Diaspora* protocol
If it’s important to connect with friends on Diaspora* it’s good to know that currently not all social networks in the Fediverse enable you to do that. Socialhome is based on the Diaspora* protocol while Friendica and Hubzilla support it. Friendica and Hubzilla are the only social networks that’s able to connect with (I believe) all social networks of the Fediverse.
If photo’s are very important to you (think Instagram) Pixelfed is designed with photo sharing in mind. The same can be said about PeerTube for video.
If your interested in sharing more than discussing or having a conversation you either need to choose for a social network with the largest number of users or a social network that can connect with all other networks. The best choice for that is either Mastodon or for the latter Friendica or perhaps Pleroma or Hubzilla.
If you want to discover what’s going on in the Fediverse you’ll either want to choose Mastodon because of its size or a network that connects with most other social networks. I believe that in the latter case Friendica is the best choice but if you’re less interested in the Diaspora* side of things you can also choose Hubzilla or Pleroma.
G+ was the shared interest network and that gap is hard to fill. Nevertheless there are options. Mastodon has servers that are for people interested in specific topics like art (mastodon.art), open source (Fosstodon), Linux (linuxrocks.online), technology (mastodon.technology)) or science (scholar.social). Diaspora* takes a different approach where contacts can be ordered in aspects. By default the aspects are Family, Friends, Acquaintances and Work (social circles) but special interests aspects such as Science op OpenSource can very well be added. The groups in Friendica have a similar working.
Social networks such as Mastodon, Diaspora, Friendica and Hubzilla can be used for private messages but keep in mind that if you’re on Diaspora you can’t send a private message to someone on Mastodon vice versa.
Connect with G+ friends
G+ users went everywhere but the’re some likely places where you can
meet old G+ friends. The most prominent is likely the Diaspora* instance
(=server) Pluspora. As the name indicates Pluspora is
especially created for G+ refugees so there’s a good chance you’ll find
friends over there. It may be good to point out that Pluspora is part of
the Diaspora* network. I’ve also seen some of my old G+ friends
surfacing on either Mastodon or on Diaspora*.
There is no denying that G+ filled a gap in the market of social media networks. G+ was a shared interest network where the user could follow multiple persons on collections or I could join a community around a specific interest. This gap isn’t easy to fill by any social media network. Now my last tip is this. Take your time to look around in your new network, don’t expect it to be like G+ but keep an open mind and judge it on its own merits. After some time you’ll discover that this new social network has its own qualities that you start to care about and love.
EDIT 25 February 2019: I removed the Osada social network because the developers decided to abandon it. Instead they are concentrating their efforts on the Zap social network which is similar to Osada with one huge difference that Zap doesn’t support the ActivityPub protocol.
This post contains some use cases where Friendica could be a better choice than Diaspora*
Lately I’ve came across discussions and questions about the difference between Diaspora* and Friendica. So, after an earlier reply today describing when it’s worthwile to use Friendica instead of Diaspora, I decided to expand on that post. On the surface both social networks look similar, they’re allow for blogging with a markup language to structure text, the interface shows similarities and they share most of the functionality. Although they were both released in 2010 Diaspora is much better known and has more users. So why use Friendica at all?
I therefore defined some typical use cases where Friendica could be benificial:
Being able to connect and communicate with contacts from various social networks of the Fediverse. Friendica supports different social networking protocols and federates with Mastodon, Diaspora* and Pleroma and others.
Being able to automatically post from Friendica to several social networks (even non-federated and even to your WordPress blog) e.g. important for people that cast on mulitple social networks at once. This service alone is one that some people are willing to pay for.
Being able to follow and discuss certain hashtags over multiple social networks. See 1). Important if you don’t want to miss anything 😉
To setup a forum for a certain purpose for multiple people to join.
A link to a website doesn’t show a preview on my current Friendica server squeet.me. This is for some people a very important feature that’s missing.
The upload limit for a photo can be lower depending on the server. On the popular server squeet.me it is 781.25Kb this is way lower than the 4.2 Mb of Diaspora*. I guess the message is to carefully choose a server for your account.
All additional features of Friendica come at a price, complexity of the UI. This is I think the reason that Friendica is harder to master than Diaspora. Diaspora fulfills the needs of most people and the simplicity of the interface is in fact one of the strong suits of this social network. Friendica on the other hand is more for power users or people that absolutely need one of the use cases mentioned above.
Full disclosure I use both Friendica and Diaspora* and currently I don’t prefer one over the other.
To kick off the year I started to learn Bash scripting, something I wanted to do a very long time. I humbly began with tutorials on the web like this one and I’m rewriting scripts from Smokey01, a fanatic Puppy Linux user. As an exercise I simply rewrote this script to work on OSX. If you want to use it you need to install exiftool. I installed exiftool with Homebrew and typed brew install exiftool but there’s also a dmg file available. If you don’t use Homebrew you do have to change the check if exiftool is installed.
Now for the script. It reads a jpeg file that must contain geocoordinates. After some checks for parameter and exiftool installed it reads the geocoordinates and stores them in the variable coord. This variable is then added to a Google search query and the result displayed in the browser.
Save the script e.g. with the name place and run with place /path/to/photo.jpg to display the location where photo.jpg was taken.
2 # Originally written by smokey01 28 May 2017
3 # Rewritten for OSX by Eric Buijs 9 Jan 2019
4 if [ $# -eq 0 ]
6 echo You need to specify a file.
7 echo EG: place photo.jpg
8 exit 1
11 if [ ! -d /usr/local/Cellar/exiftool ]
13 echo “This script requires exiftool!”
14 exit 1
17 coords=`exiftool -n -p ‘$GPSLatitude,$GPSLongitude’ $@`
18 read -e -p “Do you want to see the location in your Browser? ” choice
19 [[ “$choice” == [Yy]* ]] && open https://www.google.com/search?q=$coords || exit 1
With G+ closing in a couple of months community owners are searching for alternatives. I provide a number of FLOSS options.
With the demise of G+ a lot of community owners are suddenly looking for a new home. Since a lot of G+ users despise FaceBook (and rightfully so) other social networks are mentioned. The problem with a lot of these networks is that they are centralized and proprietary making the users depending on the whims of the owner of the network. Below I summerize the FLOSS options for people interested in setting up a community. This is not an exhaustive list. I encountered these options after discussions often on G+ and I experimented with some of these options during the last couple of months.
Self-hosted or not
An important decisions is whether or not to host the forum or community yourself. If you want to host it yourself you’ll keep full control of the server however the maintenance is considerably more labor-intensive than with a non-selfhosted solution. You also need to install the software on a server and configure it.
Both are macroblogging social media networks that offer the possibility to create a forum. The UI of Friendica doesn’t look very modern but the functionality needed to use and maintain a forum is all there. Click this link to see an example of what a Friendica forum looks like. If you want to create a forum on a existing server please note that the administrator of this server can place limits to the forum e.g the number of participant or the number of forums that can be created by one account. Be aware that you’re a guest on someone else’s server.
A practical example. In the German town of Zwenkau the citizens are provided with a community platform, the Zwenkauer Flaschenpost, for online communication and discussion between citizens. This is all done with a standard Friendica install on a server. If you want to read more here is a link.
Movim is social platform that let you share and chat. Movim is build on top of the XMPP communication protocol. A strength of Movim is that is federates and that everyone with a XMPP account (e.g Jabber) can connect. Once you’ve created an account it’s very easy to create a community. The UI looks modern but some community admin features are missing (or I couldn’t find them). As an example as an owner I couldn’t ban someone from the community. This is a link to a Movim community. Also a word of warning if you create a forum on an existing server be aware that you’re a guest of that server and that restriction may be applicable.
Mastodon is a microblog social network that has a TweetDeck like interface. I was hesitant to add it to this list because the UI and the dynamic experience differ from a classical forum where the same post remains in the viewport for days or weeks. However when joining the right instance (=server) or create one yourself it may very well become a great dedicated community. Here is a link to mastodon.art an instance where artists can show their artwork.
Open source forum software that is currently in beta. Nice, modern UI. I’ve read some concerns about the beta status and the stability of Flarum. If you want to see what the interface looks like here is a link.
EDIT: I removed the Osada social network because the developers decided to abandon it. Instead they are concentrating their efforts on the Zap social network which is similar to Osada with one huge difference that Zap doesn’t support the ActivityPub protocol.
Friendica is a good alternative to the Diaspora* social network. One of the features that makes Friendica shine are various filtering options. This article describes them.
Diaspora* vs Friendica
About two months ago I created a Friendica account to make a comparison with Diaspora*. I wanted to know if Friendica is a good alternative to Diaspora*. A problem that I have with Diaspora*, at least on my pod, is the lack of control of the stream. The stream contains all the posts from the hashtags and people that I follow. Although this is an excellent way to create a stream it also results in much unwanted posts. An example, if I follow someone on Diaspora* I get every post. If for instance I find another person interesting for his/her ideas about the Fediverse I also get all the kitty pictures. In this case I often end up ignoring the person entirely which is a pity.
Filtering in Friendica
Friendica provides much better control over the posts in /network (this is the equivalent of the Diaspora* stream). This is achieved with several filter options. Under /settings/addon these filtering options can be found. Here is a summary:
Collapse (=partially hide) posts from specified users with Blockem
Allow only specified languages. Other languages are collapsed (Language Filter)
Collapse posts with specified hashtags e.g nsfw (Content Filter)
Block specified users (Superblock)
Advanced Content Filter, a very versatile filter that allows to collapse posts on about every property found in a post, such as body text, title, author boolean combinations of properties. This is done in so called rules. The Advanced Content Filter uses Symfony’s Expression Language. The following link provides some examples https://github.com/friendica/friendica/wiki/Advanced-Content-Filter-addon. Advanced Content Filter enables the user for instance to collapse every post that has an image (and saves me a lot of scrolling) or has certain text in the body. A simple example, the rule body matches "/politics/" collapses every post that contains the word ‘politics’.
Furthermore Friendica displays at the top of a post when a filter is used. This way it’s easy to determine if the filtering works as intended.
All in all the filtering options of Friendica are a good way to control the posts in the stream improving the experience of the social network. The image filter and the language filter alone strongly reduce the amount of mouse scrolling for me.