Meine Güte, was für'n Blah!
5 Suchtreffer
- 2019-05-12
- [*]
HashTags
Purpose
Sometimes one might want to search and find socalled
#hashtags
or@mentions
in one’s texts (in a broader sense) and store them for later retrieval. This package offers that facility. It provides theTHashList
class which can be used to parse texts for the occurrence of both#hashtags
and@mentions
and store the hits in an internal list for later lookup; that list can be both, stored in a file and later read from a file.Installation
You can use
Go
to install this package for you:go get -u github.com/mwat56/hashtags
Usage
In principle for each
#hashtag
or@mention
a list of IDs is maintained. These IDs can be any (string) data that identifies the text in which the#hashtag
or@mention
was found, e.g. a filename or some database record reference. The only condition is that it is unique as far as the program using this package is concerned.Note that both
#hashtag
and@mention
are stored lower-cased to allow for case-insensitive searches.To get a
THashList
instance there’s a simple way:fName := "mytags.lst" htl, err := hashtags.New(fName) if nil != err { log.PrintF("Problem loading file '%s': %v", fName, err) } // … // do something with the list // … written, err := htl.Store() if nil != err { log.PrintF("Problem writing file '%s': %v", fName, err) }
The package provides a boolean variable called
UseBinaryStorage
which istrue
by default. It determines whether the data written byStore()
and read byLoad()
use plain text (i.e.UseBinaryStorage = false
) or a binary data format. The advantage of the plain text format is that it can be inspected by any text related tool (like e.g.diff
). The advantage of the binary format is that it is about three to four times as fast when loading/storing data and it uses a few bytes less than the text format. For this reasons it’s used by default (i.e.hashtags.UseBinaryStorage == true
); during development of your own application using this package, however, you might want to change to text format for diagnostic purposes.For more details please refer to the package documentation.
Libraries
No external libraries were used building
HashTags
.Licence
Copyright © 2019, 2020 M.Watermann, 10247 Berlin, Germany All rights reserved EMail : <support@mwat.de>
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
You should have received a copy of the GNU General Public License along with this program. If not, see the GNU General Public License for details.
- 2019-05-10
- [*]
Die Korrumpierten wollen gefälligst Geld sehen …
#Corruption @FDP @Germany #Parteispenden #Money #NieWiederCDU
- [*]
The @Intercept apparently got another one of their informants arrested. I wonder when they will start to take their responsibility seriously.
- 2019-05-08
- [*]
PassList
Purpose
Sometimes there is a need to password-protect your web-server, either in whole or just some parts of it. That’s were this little package comes in. It offers to simply integrate the popular BasicAuth mechanism into your own web-server.
Note: To be on the safe side your web-server should use
HTTPS
instead of plain oldHTTP
to avoid the chance of someone eavesdropping on the username/password transmission.Installation
You can use
Go
to install this package for you:go get -u github.com/mwat56/passlist
Usage
PassList
provides an easy way to handle HTTP Basic Authentication by simply calling the package’sWrap()
function and implementing theTAuthDecider
interface which only requires the single function or methodNeedAuthentication(aRequest *http.Request) bool
That function may decide on whatever means necessary whether to grant access (returning
true
) or deny it (returningfalse
).For your ease there are two
TAuthDecider
implementations provided:TAuthSkipper
(which generally returnsfalse
) andTAuthSkipper
(which generally returnstrue
). Just instantiate one of those – or, of course, your own implementation – and pass it to theWrap()
function.func Wrap(aHandler http.Handler, aRealm, aPasswdFile string, aAuthDecider TAuthDecider) http.Handler
The arguments mean:
aHandler
: the HTTP handler you implemented for your web-server; you will use the return value ofWrap()
after you called this function.aRealm
: the name of the host/domain to protect (this can be any string you like); it will be shown by most browsers when the username/password is requested.aPasswdFile
: the name of the password file that holds all the username/password pairs to use when authentication is actually required.aAuthDecider
: the deciding function we talked about above.
So, in short: implement the
TAuthDecider
interface and callpasslist.Wrap(…)
, and you’re done.However, the package provides a
TPassList
class with methods to work with a username/password list. It’s fairly well documented, so it shouldn’t be too hard to use it on your own if you don’t like the automatic handling provided byWrap()
. You can create a new instance by either callingpasslist.LoadPasswords(aFilename string)
(which, as its name says, tries to load the given password file at once), or you callpasslist.NewList(aFilename string)
(which leaves it to you when to actually read the password file by calling theTPassList
object’sLoad()
method).There’s an additional convenience function called
passlist.Deny()
which sends an “Unauthorised” notice to the remote host in case the remote user couldn’t be authenticated; this function is called internally whenever yourTAuthDecider
required authentication and wasn’t given valid credentials from the remote user.To further improve the safety of the passwords they are peppered before hashing and storing them. The default pepper value can be read by calling
pepper := passlist.Pepper()
And the pepper value can be changed by calling
myPepper := "This is my common 'pepper' value for the user passwords" passlist.SetPepper(myPepper)
Note: Changing the pepper value after storing user/password pairs will invalidate all existing userlist entries!
Please refer to the source code documentation for further details ot the
TPassList
class.In the package’s
cmd/
folder you’ll find thepwaccess.go
program which implements the maintenance of password files with the following options:-add string <username> name of the user to add to the file (prompting for the password) -chk string <username> name of the user whose pass to check (prompting for the password) -del string <username> name of the user to remove from the file -file string <filename> name of the passwordfile to use (default "pwaccess.db") -lst list all current usernames from the list -q whether to be quiet or not (suppress screen output) -upd string <username> name of the user to update in the file (prompting for the password)
Password list
This library provides a couple of functions you can use in your own program to maintain your own password list without having to use the
TPassList
class directly.AddUser(aUser, aFilename string)
reads a password foraUser
from the commandline and adds it toaFilename
.CheckUser(aUser, aFilename string)
reads a password foraUser
from the commandline and compares it with the one stored inaFilename
.DeleteUser(aUser, aFilename string)
removes the entry foraUser
from the password list stored inaFilename
.ListUsers(aFilename string)
readsaFilename
and lists all users stored in that file.UpdateUser(aUser, aFilename string)
reads a password foraUser
from the commandline and updates the entry in the password list inaFilename
.
Note: All these functions do not return to the caller but terminate the respective program with error code
0
(zero) if successful, or1
(one) otherwise.Libraries
The following external libraries were used building
PassList
:Licence
Copyright © 2019, 2020 M.Watermann, 10247 Berlin, Germany All rights reserved EMail : <support@mwat.de>
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
You should have received a copy of the GNU General Public License along with this program. If not, see the GNU General Public License for details.
- [*]
Kaliber
Note
Please note that this is a work in progress. Changes – even API breaking changes – can happen at any time.
Purpose
I love books. Always have. Since I was a kid. Over the years several thousand books gathered in my flat; so many that I sort of ran out of space. Reluctantly I started to investigate and then use eBooks, first on my main desktop computer, later with a dedicated eBook reader.
Soon – and again – there were so many that I started looking for some convenient way to handle, store, and retrieve them for reading. That’s when I became acquainted with Calibre, a great software for working with eBooks. Of course, there were some problems but since that software is actively maintained and extended all the time those problems either went away on their own with the next update or I found some way around them. And sure, it took some work to get all the eBooks into that library system, and since there are always coming new titles the work kind of never ends.
Another question soon became urgent: How to access my books when I’m not at home? As it turned out,
Calibre
comes bundled with its own web-server. After figuring out how to start it automatically when the machine gets restarted (which happens once in a while when some kernel software upgrade requires it) the server did its job. Quite another question, however, is how it does its job. And there the problem lies. The web-server coming withCalibre
serves pages that are heavily dependent on JavaScript; so much so that the pages simply don’t appear or work at all if you have JavaScript disabled in your browser e.g. for privacy or security reasons. For a while I grudgingly activated JavaScript whenever I wanted to access my books remotely. I asked the author ofCalibre
whether he’d be willing to provide a barrier-free alternative (i.e. without JavaScript) but unfortunately he declined: “Not going to happen.”Well, due to other projects I didn’t find the time then to do something about it, and it took some more years before I started seriously to look for alternatives. Therefore now there’s
Kaliber
, a barrier-free web-server for yourCalibre
book collection. It doesn’t depend on – or even need – JavaScript, but just requires a web-browser capable to read plain HTML on the remote user’s side. So even privacy or security conscious people or those who depend on assisting technologies (like e.g. screen-readers) can now access their library.As an aside: > I never really understood the desire to multiply the work needed to be done for a web page. > > A server is a server which means it should serve. > When in a restaurant ordering a meal you surely expect it to be brought to you fully prepared and ready to be consumed. You’d probably were seriously annoyed if the waiter/server just brought you the ingredients and left it to you to prepare the meal for yourself. > > For some strange reason, however, that’s exactly what happens on a growing number of web-presentations: Instead of delivering a ready-to-read web-page they send every user just program code and let the user’s machine do the preparing of the page. > In other words: Instead of one server doing the work and delivering it to thousands of remote users nowadays the server forces thousands (or even millions) of remote users to spend time and electricity to just see a single web-page.
Since I couldn’t find a documentation of the database structure and/or API used by
Calibre
to store its meta-data I had to reverse engineer ways to access the stored book data. The same is true – to a certain lesser degree – for the web-pages served byKaliber
: it’s kind of a mix ofCalibre
’s normal (i.e. JavaScript based) andmobile
pages. The overall layout of the web-pages served byKaliber
is intentionally kept simple (KISS).Features
- Simplicity of use;
- Barrier-free (no JavaScript required);
- Books list layout either
Cover Grid
orData List
; - Easy navigation (
First
,Prev
,Next
,Last
button/links); - Fulltext search as well as datafield-based searches;
- Ordered in either
ascending
ordescending
direction; - Selectable number of books per page;
- Sortable by
author
,date
,language
,publisher
,rating
,series
,size
,tags
, ortitle
; - Anonymised access logging;
- Optional user/password based access control.
Installation
You can use
Go
to install this package for you:go get -u github.com/mwat56/kaliber
Usage
After downloading this package you go to its directory and compile
cd $GOPATH/src/github.com/mwat56/kaliber go build app/kaliber.go
which should produce an executable binary.
Commandline options
$ ./kaliber -h Usage: ./kaliber [OPTIONS] -accessLog string <filename> Name of the access logfile to write to (default "/home/matthias/devel/Go/src/github.com/mwat56/kaliber/access.log") -authAll <boolean> whether to require authentication for all pages (default true) -booksPerPage int <number> the default number of books shown per page (default 24) -certKey string <fileName> the name of the TLS certificate key -certPem string <fileName> the name of the TLS certificate PEM -dataDir string <dirName> the directory with CSS, FONTS, IMG, SESSIONS, and VIEWS sub-directories (default "/home/matthias/devel/Go/src/github.com/mwat56/kaliber") -errorlog string <filename> Name of the error logfile to write to (default "/home/matthias/devel/Go/src/github.com/mwat56/kaliber/error.log") -gzip <boolean> use gzip compression for server responses (default true) -ini string <fileName> the path/filename of the INI file to use (default "/home/matthias/.kaliber.ini") -lang string the default language to use (default "de") -libraryName string Name of this Library (shown on every page) (default "MeiBucks") -libraryPath string <pathname> Path name of/to the Calibre library (default "/var/opt/Calibre") -listen string the host's IP to listen at (default "0") -logStack <boolean> Log a stack trace for recovered runtime errors (default true) -port int <portNumber> The IP port to listen to (default 8383) -realm string <hostName> Name of host/domain to secure by BasicAuth (default "eBooks Host") -sessionTTL int <seconds> Number of seconds an unused session keeps valid (default 1200) -sidName string <name> The name of the session ID to use (default "sid") -sqlTrace string <filename> Name of the SQL logfile to write to (default "/home/matthias/devel/Go/src/github.com/mwat56/kaliber/sqlTrace.sql") -theme string <name> The display theme to use ('light' or 'dark') (default "dark") -ua string <userName> User add: add a username to the password file -uc string <userName> User check: check a username in the password file -ud string <userName> User delete: remove a username from the password file -uf string <fileName> Passwords file storing user/passwords for BasicAuth (default "/home/matthias/devel/Go/src/github.com/mwat56/kaliber/pwaccess.db") -ul <boolean> User list: show all users in the password file -uu string <userName> User update: update a username in the password file Most options can be set in an INI file to keep the command-line short ;-) $ _
As you can see there are quite a few options available, but almost all of them are optional since they come with reasonable default values most of which can be set in the accompanying INI-file (in fact, the “default” values shown above are coming from the INI-file used).
INI file
You don’t have to give all those commandline options listed above every time you want to start
Kaliber
. There’s an INI file which can take all the options (apart from the user handling options) all in one place:$ cat kaliber.ini # Default configuration file for the Kaliber server [Default] # Name of the optional access logfile to write to. # NOTE: a relative path/name will be combined with `dataDir` (below). accessLog = ./access.log # Authenticate user for all pages and documents. # If `false` only the download links need user authentication # (see `passFile` below). authAll = false # Number of documents to show per page. booksPerPage = 24 # Path-/filename of the TLS certificate's private key to enable # TLS/HTTPS (if empty standard HTTP is used). # NOTE: a relative path/name will be combined with `dataDir` (below). certKey = ./certs/server.key # Path-/filename of the TLS (server) certificate to enable TLS/HTTPS # (if empty standard HTTP is used). # NOTE: A relative path/name will be combined with `dataDir` (below). certPem = ./certs/server.pem # The directory root for the "css", "fonts", "img", "sessions", # and "views" sub-directories. # NOTE: This should be an _absolute_ path name! dataDir = ./ # Name of the optional error logfile to write to. # NOTE: a relative path/name will be combined with `dataDir` (above). errorLog = ./error.log # Use gzip compression for server responses. gzip = true # The default UI language to use ("de" or "en"). lang = de # Name of this library (shown on every page). libraryName = "MeiBucks" # Path of Calibre library. # NOTE: this must be the absolute pathname io the Calibre library. libraryPath = "/var/opt/Calibre" # The host's IP number to listen at. listen = 127.0.0.1 # Whether or not log a stack trace for recovered runtime errors. # NOTE: This is merely a debugging aid and should normally be `false`. logStack = true # The host's IP port to listen to. port = 8383 # Password file for HTTP Basic Authentication. # NOTE: a relative path/name will be combined with `dataDir` (above). passFile = ./pwaccess.db # Name of host/domain to secure by BasicAuth. realm = "eBooks Host" # Number of seconds an unused session stays valid. sessionTTL = 1200 # Name of the session ID field. sidName = sid # Optional (debugging) SQL trace file. # NOTE: a relative path/name will be combined with `dataDir` (above). sqlTrace = ./sqlTrace.sql # Default web/display theme to use ("dark" or "light"). theme = dark # _EoF_ $ _
An INI-file as shown above is looked for at five different places:
- in your (i.e. the current user’s) current directory (
./kaliber.ini
), - in the computer’s main config directory (
/etc/kaliber.ini"
), - in the current user’s home directory (e.g.
$HOME/.kaliber.ini
), - in the current user’s configuration directory (e.g.
$HOME/.config/kaliber.ini
), - in the
-ini <filename>
commandline option (if given).
All these files (if they exist) are read in the given order at startup before finally parsing the commandline options shown earlier. So each step overwrites the previous one, the commandline options having the highest priority.
Authentication
Why, you may ask, would you need an username/password file anyway? Well, there may be several reasons one of which could be Copyright problems.
If not all your books are in the public domain and Copyright-free in most countries you may not make them publicly available. In that case you’re most likely the only actual remote user allowed to access the books in your library. Depending on your country’s legislation you may or may not include your family members. If in doubt please consult a Copyright expert.
The
authAll
commandline option (and INI setting) allows you to specify whether access to all pages require user authentication; if that flag isfalse
then only the download links require authentication, iftrue
any access requires a given username/password pair.Whenever there’s no password file given (either in the INI file
passfile
or the command-line-uf
) all functionality requiring authentication will be disabled which in turn means that everybody can access your library.Note that the password file generated and used by this system resembles the
htpasswd
used by the Apache web-server, but both files are not interchangeable because the actual encryption algorithms used by both are different.User/password file & handling
Only usable from the commandline are the
-uXX
options, most of which need an username and the name of the password file to use.Note that whenever you’re prompted to input a password this will not be echoed to the console.
$ ./kaliber -ua testuser1 -uf pwaccess.db password: repeat pw: added 'testuser1' to list $ _
Since we have the
passfile
setting already in our INI file (see above) we can forget the-uf
option for the next options.With
-uc
you can check a user’s password:$ ./kaliber -uc testuser1 password: 'testuser1' password check successful $ _
This
-uc
you’ll probably never actually use – it was just easy to implement.If you want to remove a user the
-ud
will do the trick:$ ./kaliber -ud testuser1 removed 'testuser1' from list $ _
When you want to know which users are stored in your password file
-ul
is your friend:$ ./kaliber -ul matthias $ _
Since we deleted the
testuser1
before only one entry remains.That only leaves
-uu
to update (change) a user’s password.$ ./kaliber -ua testuser2 password: repeat pw: added 'testuser2' to list $ ./kaliber -uu testuser2 password: repeat pw: updated user 'testuser2' in list $ ./kaliber -ul matthias testuser2 $ _
First we added (
-ua
) a new user, then we updated the password (-uu
), and finally we asked for the list of users (-ul
).Directory structure
Under the directory given with the
datadir =
entry in the INI file (or the-datadir
commandline option) there are several sub-directories expected:css
: containing the CSS files used,fonts
: containing the fonts used,img
: containing the images used,sessions
: containing the remote users’ session data,views
: the Go templates used to generate the pages.
All of this directories and files are part of the
Kaliber
package. You can use them as is or customise them as you see fit to suit your needs. However, please note: I will not support any customisations, you’re on your own with that – and you should know what you’re doing.Caveats
There are some
Calibre
features which are not available (yet) withKaliber
and not currently supported:- custom columns defined by the respective
Calibre
user; - different/multiple libraries for the user to switch between;
- OPDS formatted access;
- book uploads are not planned to be included.
Once I figure out how they are realised by
Calibre
I expect they find their way intoKaliber
as well (provided I find actually time to do it).Logging
Like almost every other web-server
Kaliber
writes all access data to a logfile (logfile =
in the INI file and-log
at the commandline).As privacy becomes a serious concern for a growing number of people (including law makers) – the IP address is definitely to be considered as personal data – the logging facility anonymises the requesting users by setting the host-part of the respective remote address to zero (
0
). This option takes care of e.g. European servers who may not without explicit consent of the users store personal data; this includes IP addresses in logfiles and elsewhere (eg. statistical data gathered from logfiles).Since the generated logfile resembles that of the popular
Apache
server you can use all tools written forApache
logfiles to analyse the access data.Libraries
The following external libraries were used building
Kaliber
:Licence
Copyright © 2019, 2020 M.Watermann, 10247 Berlin, Germany All rights reserved EMail : <support@mwat.de>
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
You should have received a copy of the GNU General Public License along with this program. If not, see the GNU General Public License for details.
1834 Artikel
504 Hashtags
714 Erwähnungen
#5g #abmahnung #abortion #abuse #advertising #agriculture #ai #air #alcohol #alexander_fleming #algorithm #ambroise_paré #anatomy #andreas_vesalius #anesthesia #animal_husbandry #anonymity #anopensecret #antisemitism #antizionism #apartheid #archive #artikel13 #assault #astronomy #asylum #austerity #authoritarians #autogynephilia #aviation #backdoor #banks #becourageus #bidenerasedwomen #biology #biometrics #bitcoin #blacklivesmatter #blackpantherisaltright #blockchain #border #boristhebutcher #bosnia #boycott #brain #brexit #buddhism #bundesdatenschutzgesetz #burstiness #bürgerversicherung #caa #canada #cancel_culture #cancer #cannabis #capitalism #carbon #cat #causality #causalitydilemma #censorship #census #ceta #charger #chatgpt #children #christianity #church #civil_disobedience #civil_rights #climate_change #cloud #co2 #coal #commerce #communication #communism #computer #conspiracy #copyright #corona #corruption #crime #cross #cryptoleaks #culture #dalit #data_protection #death #deepfake #defamation #democracy #detransition #devops #diasporastudies #dictionary #digitisation #dioscorides #discrimination #diseases #diversity #diy #dmca #docker #drm #drones #drugs #dsgvo #döner #ebooks #eccentricity #echo_chamber #ecology #ecommerce #economy #education #edward_jenner #egypt #eikonal #election #email #eme #emotions #encryption #energy #equality #erasistratus #espionage #ethics #evolution #experimentation #extremism #facial_recognition #fake_news #fascism #fbgc #fbpe #femicide #feminism #file_sharing #filibuster #filterbubble #fingerprints #fire #fisa #fish #food #football #footnotes #forest #fracking #fraud #free_speech #free_tibet #freedom #freedomofexpression #fridays-for-future #future #galen #galileo_galilei #gambling #gay #gdpr #gender #genderwoowoo #genetics #genitalia #genocide #germany #getstonewalloutofourinstitutions #git #github #glyphosat #gnu #go #golang #gratitude #greece #greed #grundeinkommen #grundgesetz #gutachten #hacker #hacking #harassment #hashtag #hashtags #hate #headphone #health #healthcare #herophilus #hindi #hindu #hippocrates #history #holocaust #homophobia #homosexuality #honour #human_genome_project #human_rights #hygiene #ice #identity #ideology #illness #imhotep #immunity #impeachment #imperialism #imsi-catcher #inclusiveness #independence #india #indien #industrialisation #industry #infection #influenza #infowar #infrastructure #intelligence #interdependence #internet #intersex #iot #iran #isaac_newton #islamophobia #isp #israelipalestinianconflict #istandwithjkrowling #istandwithkeirabell #istandwithmaya #italia #italy #james_young_simpson #javascript #jealousy #jewishethics #jewishhistory #jewishidentity #jewishscholars #jews #johannes_kepler #jornalism #joseph_lister #journalism #justice #keepiton #knowledge #kohleausstieg #labour #language #lgb #lgballiance #liability #liberty #library #licence #lifegetsbetter #linguistics #literature #lobbyism #love #maaslos #marijuana #markdown #marketplaces #marriage #masturbation #meat #media #medicaid #medicine #men #mental-health #metadata #metaphysics #metoo #mietpreisbremse #migration #military #minderheitsregierung #mindset #mining #misogyny #missiles #mobbing #mobile_phone #money #motivation #movies #murder #music #muslim #mussels #mutilation #nacktimnetz #narendra_modi #nationalism #nazis #net_neutrality #netherlands #netzdg #neurodiversity #new_zealand #newspapers #niewiedercdu #nlp #nobel_prize #nuclear_weapons #nürnberg #obamacare #observation #obsession #occupation #oil #open_source #openai #oppression #organspende #paedophiles #pandemic #paris_agreement #parliament #parteispenden #password #patent #paternalism #pc #peace #pension #perception #perplexity #personaldevelopment #pharma #philosophy #phishing #phone #physics #physiology #pigs #piracy #poem #police #politicalphilosophy #pollution #populism #pornography #poverty #prison #privacy #privacy_shield #privatisation #programmers #programming #prompt #prompts #propaganda #prostitution #protest #psychiatry #psychology #puberty_blocker #putsch #quicksilver #racism #rain #rain-forest #rape #readme #reality #recycling #refugees #regime_change #relationships #religion #religiousdebate #renaissance #rent #reportit #repression #research #rigaer94 #righttoknow #riots #robot #roma #rome #router #safety #sanctions #sand #satire #saveourinternet #scandals #schufa #science #scifi #sea_weed #secrecy #secularism #security #selbstbestimmungsgesetz #selfid #selfimprovement #sex #sexism #sexuality #sjw #smartphone #smoke #snowflakes #social-media #social_media #software #solar_panel #solidarity #soy #space #spam #sports #staatstrojaner #sterilisation #stgb #stophateforprofit #streisand-effekt #strike #subsidies #sugar #suicide #supremacy #surgery #surveiilance #surveillance #tagname #tanks #tax #technology #telegram #tents #terror #terrorism #thisisnotadrill #tobacco #tolerance #tomato #torture #tq #tracing #tracking #trade #traffic #transgender #transparency #transsexual #trees #trojan_horse #truth #ttip #tuberculosis #tv #twitter #uncertainty #uploadfilter #vaccination #vaccines #victim #video #violence #volkstrojaner #vorratsdatenspeicherung #voting #wall #war #waronwomen #waste #water #watergate #wealth #weapons #weather #whistleblower #white_house #who #wifi #william_harvey #william_thomas_green_morton #wind #wokeness #women #wordstar #writing #www #zensur #zensur-behörden #zensur-maßnahmen #zensurheberrecht #zeppelin #zionism #§218 #§219 @aadhaar @aakashhassan @abigail_shrier @aclu @adl @adolf_eichmann @adolf_hitler @afd @afghanistan @africa @alain_de_botton @albania @alessandro_strumia @alex_jones @alexa @alexandria_ocasio-cortez @alice-salomon-hochschule @alice_schwarzer @alice_weidel @alliancelgb @allie_funk @allison_bailey @alphago @amanda_tapping @amazon @amnesty_international @andrea_voßhoff @andreas_scheuer @android @angela_davis @angela_merkel @anis_amri @anke_ehrhardt @antifa @antoni_comín @anyabike @aol @apple @ard @area @aserbaidschan @asia @assam @att @attac @attila_hildmann @augusto_pinochet @australia @austria @axel_voss @ayodhya @bahrain @balochistan @bangladesh @barack_obama @barcelona @barereality @barry_reay @basel @bavaria @bayer @bbc @beatles @beijing @belarus @berlin @bernie_sanders @betsy_reed @bettina_gaber @betty_steiner @bgh @bill_clinton @bill_gates @bill_oreilly @bitcoin @bjp @bjportraits @bka @blokada @bmw @bnd @bob_murray @bodo_ramelow @bolivia @bollywood @boris_johnson @boris_yeltsin @botswana @brasilia @brazil @brazil's @bsi @buchbinder @bulgaria @bundesfinanzhof @bundestag @bverfg @caityjohnstone @california @cambridge @cambridge_analytica @cameroon @campact @canada @canada's @cargill @carles_puigdemont @carola_rackete @catalonia @cathy_newman @ccc @cdu @charles_ihlenfeld @charles_stross @charlize_theron @chelsea_manning @chemnitz @chennai @christa_peterson @christian_lindner @christine_lambrecht @christoph_heusgen @cia @cia’s @cisco @claus_schenk_graf_von_stauffenberg @clearview @clinton_foundation @coca-cola @columbia @cornelsen @cory_doctorow @costa_rica @croatia @crypto_ag @csu @cuba @dachau @daimler @dalai_lama @dale_o'leary @dan_gillmor @daniel_suarez @darknet @darwin @david_bell @david_cameron @dbd @debra_soh @defectivebydesign @delhi @deniz_yücel @denmark @dentons @deutsche_bahn @deutsche_bank @deutsche_wohnen @dexter @dfb @dgb @dhs @die_linke @die_partei @digitalcourage @dilay_banu_büyükavci @dirgegirl @disney @docstockk @dominic_cummings @donald_trump @donna_hughes @douma @dr_em @drbiden @dreamhost @dresden @drummond_pike @duckduckgo @düsseldorf @ecosia @ecuador @eddie_izzard @edinburghuni @edward_snowden @edward_w_felten @eff @egypt @einar_wegener @ellen_page @elmar_brok @elon_musk’s @elsevier @emmanuel_macron @eritrea @erwin_schrödinger @ethiopia @eu @eugen_gomringer @europe @europeancommission @evo_morales @ezb @facebook @fairplaywomen @fbi @fcc @fdp @fefe @fff @finfisher @finland @firefox @florida @focus @fondofbeetles @forwomenscot @fox_news @frag_den_staat @france @frank-walter_steinmeier @frank_rieger @franz_josef_strauß @françois_hollande @friedrich_merz @frontex @fsf @ftp @g20 @gaby_weber @gchq @gender @george_floyd @george_orwell @george_osborn @george_soros @george_takei @george_w_bush @germaine_greer @germany @gff @ggreenwald @ghana @gids @gimp @gina_rippon @github @glastonbury @glenn_greenwald @god @google @google’s @great_britain @greece @greenpeace @greta_thunberg @groko @grüne @guardian @guinness @gurbanguly_berdimuhamedov @göttingen @günther_oettinger @haiti @halle @hamburg @hannah_arendt @hans-christian_ströbele @hans-georg_maaßen @hans-peter_uhl @harry_benjamin @harvard's @heiko_maas @helensteel12 @helsinki @her @hermann_otto_solms @hillary_clinton @hjoycegender @hohenzollern @honduras @hong_kong @hongkong @horst_seehofer @huawei @hubertus_heil @hungary @ican @iceland @idad @ietf @iglyo @ikea @immunity @imran_khan @india @intercept @internet_archive @ipcc @iran @iraq @ireland @isaac_asimov @israel @istandwithher1 @italy @iwf @jacob_appelbaum @jacob_rees-mogg @jair_bolsonaro @james_comey @james_damore @james_flynn @jan_kalbitzer @jane_philpott @janice_raymond @japan @jared_kushner @jawaharlal_nehru @jean_luc_melenchon @jeff_bezos @jeff_sessions @jennifer_pritzker @jens_spahn @jeremy_corbyn @jeremy_hunt @jesse_williams @jessica12uk @jimmy_kimmel @jitsi @jk_rowling @jo_bartosch @jody_wilson-raybould @joe_biden @joe_rogan @john_le_carré @john_money @john_oliver @john_oliver's @jon_stryker @jonathan_pie @jonathan_pie's @jordan_peterson @jordanbpeterson @joseph_fischer @juan_guaido @judith_butler @julian_assange @julian_assange’s @justin_trudeau @jutta_ditfurth @kali_linux @kamala_harris @karin_strenz @karl_marx @kaschmir @kashmir @kaspersky @katarina_barley @katharina_nocun @kathleen_stock @kathmurray1 @kazakhstan @ke_jie @keir_starmer @keira_bell @kenneth_zucker @kevin_kühnert @kickstarter @kim_jong-un @kkk @klbfax @kolkata @kristina_hänel @kurds @laura_poitras @lawrence_kubie @lawrence_lessig @lebanon @leipzig @lesbianlabour @lesleysemmens @lili_elbe @lilylilymaynard @linkedin @linus_torvalds @linux @lisa_eckhart @lithium @liverpool @london @lufthansa @lybia @mad @magnus_hirschfeld @mahatma_gandhi @malaysia @malta @margaret_hamilton @margaret_thatcher @margarete_stokowski @marine_le_pen @mark_bonham @mark_hamill @mark_weinstein @mark_zuckerberg @markmair @mars @martin_schulz @martin_sonneborn @martina_navratilova @martine_rothblatt @mathias_döpfner @matteo_salvini @mauramaxwell @max_schrems @maya_forstater @mcleaver @medium @mellibeinhorn @mention @mentionedname @mentions @mermaids @mesut_özil @mewe @mexico @michael_flynn @michel_temer @michigan @microsoft @mike_pence @mike_pompeo @minneapolis @minnesota @mirandanewsom @miroandrej @monsanto @mordor @mosaic @mozilla @muhammadali_jinnah @mumbai @munich @mutilation @mwat @myanmar @narendra_modi @nawaz_sharif @nayantara_sehgal @nestle @netflix @new-delhi @new_york @new_york_times @new_zealand @nextcloud @nga @nhs @nicaragua @nicolas_maduro @nigel_farage @nigeria @nils_melzer @noam_chomsky @norbert_röttgen @north_korea @northern_ireland @norway @nsa @nytimes @ofcom @okbiology @okuna @olaf_scholz @oliver_bierhoff @onelook @opcw @openai @openbook @oriol_junqueras @osaka @oskar_lafontaine @oslo @oxfam @oxford @pakistan @palestine @panama @pankhurstem @paris @parler @passie_kracht @patricia_trimble @patrick_breyer @paul_mchugh @paul_ziemiak @pen @penny_pritzker @pentagon @pepsi @peter_altmaier @peter_handke @peter_ramsauer @peter_schaar @philip_sutton @philipp_amthor @philippines @pimeyes @piraten @pokémon @poland @pope_francis @portland @portugal @posteo @postillon @pr_china @privacyint @profalices @public_domain @puerto_rico @qanon @rachel_levine @raf @rainer_meyer @rainer_wendt @rana_ayyub @ranaayyub @rashmee_kumar @raspberry_pi @ray_blanchard @reality_winner @recep_tayyip_erdoğan @reconquista_internet @reinhard_grindel @renate_künast @rex_tillerson @rezo @rheinmetall @ric_weiland @richard_fitzgibbons @richard_grenell @richard_nixon @ricky_gervais @riot @rob_hoogland @robert-koch-institut @robert_muller @robert_stoller @rodrigo_duterte @romania’s @rose_of_dawn @rote_hilfe @rss @rudolf_henke @rupert_murdoch @russia @ruth_hunt @rüdiger_kruse @saddam_hussein @safoora_zargar @samsung @san_francisco @sappfo @saskia_esken @saudi_arabia @scandinavia @sci-hub @scotland @sean_spicer @sebastian_brehm @sebastian_kurz @seerutkchawla @segmtweets @serbia @shelia_jeffreys @sibiria @sibylle_berg @siemens @sigmar_gabriel @signal @silvio_berlusconi @sina @singapore @siri @sjferguson3 @smh @somalia @sonia_kennebeck @south_africa @south_korea @south_sudan @spain @spd @spezialdemokratie @spiegel @srf @startpage @stellaomalley3 @stern @steve_bannon @steven_pinker @stonewall @strato @sun @sundar_pichai @susan_stryker @suzanne_moore @sweden @swipewright @switzerland @symantec @syria @taiga @taiwan @tajikistan @taliban @tamil_nadu @tampax @tavistock @taz @teamviewer @teatea1337 @telegram @terry_pratchett @thailand @the_economist @the_guardian’s @the_intercept @theresa_may @thierry_breton @thomas_de_maizière @thomas_de_maiziére @thomas_szasz @thomson_reuters_foundation @threema @tiananmen @tibby17 @tibet @tiktok @tim_berners-lee @tim_cook @tim_gill @tinder @tonto_1964 @tony_blair @tor @toronto @transgendertrd @turkey @turkmenistan @twisterfilm @twitter @tönnies @uber @ulla_schmidt @uluru @un @united_internet @uno @ursula_k_le_guin @ursula_von_der_leyen @usa @valentinamedici @vanessa_rodel @varavara_rao @venezuela @venezuela’s @verfassungsschutz @verizon @vietnam @viktor_orban @vladimir_putin @volker_kauder @volkswagen @w3c @wallonia @washington_post @washingtonpost @wau_holland @wdr @welt @whatsapp @who @wikileaks @wikileaks' @wikipedia @william_golding @windows @wire @wirecard @wolf @wolfgang_kubicki @wolfgang_schulz @wolfgang_schäuble @womans_place_uk @womenreadwomen @wpath @wwf @xi_jin_ping @xiaomi @xr @xychelsea @xychelsea's @yanis_varoufakis @yaniv @yemen @yonatanzunger @youtube @yugoslavia @zdf @zoom @zürich @évian