avatar image

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
  • November 22, 2019, 01:48 AM
  • Proudly celebrating 13 years online.
  • Donate now to become a lifetime supporting member of the site and get a non-expiring license key for all of our programs.
  • donate

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - Tuxman [ switch to compact view ]

Pages: [1] 2 3 4next
N.A.N.Y. 2020 / NANY 2020: quick generator peek
« on: October 09, 2019, 04:21 PM »
(One more software for this year before I resort to not finish the other two large utilities I had planned for 2020... I'll dump my other three tools which I had released before some time before New Year's Eve, as always. ;))

NANY 2020 Entry Information

Application Name quick generator peek
Version 1.0
Short Description Adds a toolbar button to display the current website's Generator meta tag (if possible) to your Chrome/Chromium/Vivaldi browser.
Supported OSes All which have Chrome or something.
Web Page
Download Link https://chrome.googl...ianlfcpjdjhacgljabjb
System Requirements
  • Chrome or Vivaldi or something.
Version History
  • 1.0: Works. Kind of.
Author hi.  8)


Some software, like certain HTML editors and weblog software like WordPress, adds an information to your site's source code that says which software was used to generate it. This Chrome extension will read this information and display it as a pop-up.

Planned Features
Nope. This is quick and dirty. There are more sophisticated add-ons which do everything beyond that.

See the website.


Using the Application
The extension will add a toolbar button. Use it.

Remove the extension from your browser. Done.

Known Issues
Websites without a generator tag will still have the toolbar button.

Coding Snacks / Reverse Geocoding in Go
« on: September 30, 2019, 05:20 AM »
From a project of mine:

I have a latitude and a longitude, e.g. from Google Maps or OSM, and I need a street name for that.

There is an API named Nominatim to solve this issue. Go code:

import (

// ...

type ReverseGeoCode struct {
    // <reversegeocode> mapping
    XMLName     xml.Name    `xml:"reversegeocode"`
    AdressParts AdressParts `xml:"addressparts"`

type AdressParts struct {
    // <adressparts> mapping
    XMLName      xml.Name   `xml:"addressparts"`
    HouseNumber  string     `xml:"house_number"`
    Road         string     `xml:"road"`
    Suburb       string     `xml:"suburb"`
    District     string     `xml:"city_district"`
    City         string     `xml:"city"`
    State        string     `xml:"state"`
    Postcode     string     `xml:"postcode"`
    Country      string     `xml:"country"`
    CountryCode  string     `xml:"country_code"`

func CheckError(err error) {
    if err != nil {

func GetXML(url string) ([]byte, error) {
    resp, err := http.Get(url)
    defer resp.Body.Close()

    if resp.StatusCode != http.StatusOK {
        return []byte{}, fmt.Errorf("Statusfehler: %v", resp.StatusCode)

    data, err := ioutil.ReadAll(resp.Body)

    return data, nil

func FindAddress(lat float32, lon float32) {
    url := fmt.Sprintf("", lat, lon)
    xmlBytes, err := GetXML(url)


    var xmlFile ReverseGeoCode
    xml.Unmarshal(xmlBytes, &xmlFile)

    adressData := xmlFile.AdressParts

    p1 := ""
    p2 := ""
    p3 := ""

    if adressData.Road != "" {
        p1 = fmt.Sprintf("%s %s, ", adressData.Road, adressData.HouseNumber)

    if adressData.District != "" {
        p2 = fmt.Sprintf("%s, ", adressData.District)

    if adressData.Postcode != "" {
        p3 = fmt.Sprintf("%s %s", adressData.Postcode, adressData.City)

    location := fmt.Sprintf("%s%s%s", p1, p2, p3)

    // location has something like "John Doe Street 123, Random District, 12345 Imaginary City" now.
    // Save it or whatever.

General Software Discussion / Goodbye, Bitbucket!
« on: August 21, 2019, 02:44 PM »
After years of making me sufficiently happy, my favorite project hosting platform declared yesterday that they'll phase out Mercurial support next year because "everyone uses Git. come to the dark side hurr durr".

I'll move all of my projects over to Darcshub (the smaller ones) and probably somewhere else (the larger ones) before the deadline. Expect surprising updates in some of my threads. Still, it's kind of a "self-fulfilling prophecy" in my opinion: Take away Mercurial support, spend all of your marketing money to promote Git - and then claim that nobody seems to use Mercurial anyway. Oh geez.


No JavaScript.

No media except the avatar (which is optional).

Open Source.


Living Room / N.A.N.Y. and the Too Many Projects Phenomenon
« on: August 13, 2019, 07:07 AM »
As some of you may know, I usually have a dozen unfinished projects in my pipeline. So many ideas, but only such a limited time!

When I started participating in the N.A.N.Y. contests, it motivated me to get some of these projects done instead of just having them float around as a rough TODO list. Now some of these projects take too much time, so I publish them early in the next year. That leads to a certain feeling that I should probably write more code until the end of the year is approaching fast, because it feels wrong to submit projects twice. ;)

Now my increased productivity - or, at least, I hope that's what it is - has an interesting side effect: When I'm working on a project and I am stuck, I start another one for the time being. I usually choose a different toolset for each, so I'm not stuck in the same place in more than one project at a time.

So I am currently trying to finish one COBOL, one Pascal and one Perl project until Dec 31, and I am mostly sure that only the Perl project will be done within the time frame (because it is already "done", I only need to adjust the GUI and tweak the performance before I consider it release-ready). One of the big problems with projects which have no paid deadline is that you just don't care enough anymore...

General Software Discussion / Stop using LaTeX!
« on: July 18, 2019, 02:31 PM »
Just a random article, preparing for one more software from me (you'll never guess what it is!):

What I call the ‘LaTeX fetish’ is the conviction that there is something about LaTeX that makes it good for writing in. As we shall see, arguments in favour of writing in LaTeX are unpersuasive on a rational level: LaTeX is in fact quite bad for writing in (although it could be worse, i.e. it could be TeX). This doesn’t mean that people shouldn’t use LaTeX at all, but it does mean that people probably ought to stop recommending it as a writing tool.


DC Member Programs and Projects / Unping all the links!
« on: April 19, 2019, 10:01 AM »
In April 2019, Chrome-based browsers lost their ability to disable hyperlink tracking, resulting in major security/privacy problems.

I wrote a Chrome extension that removes hyperlink trackers right from the HTML code.

Chrome Web Store: https://chrome.googl...cikojdkmfgncbbgadkkj
Code repository:


Non-Windows Software / git9 - A Git file system for Plan 9
« on: April 13, 2019, 02:32 PM »
Now this is awesome. Finally, Git has at least one advantage over Mercurial.  :-[


(Basically, you'll "mount" your Git repositories.)

Ironically, the repository is hosted via Mercurial...

Did you know that (some) mobile browsers support a new(ish) API to integrate your mobile operating system's sharing functions via JavaScript?

Well, here you go.


Admin page:


Tested on Chrome on Android, Firefox won't work just yet. Enjoy or whatever.
Probably won't be hosted on (they require the shitty GPL license). Probably will be a NANY 2020 project.

The plug-in website may or may not stop being 404 some time.  :-[

1. Unzip the zip file into wp-content/plugins/.
2. Activate the plugin.
3. Donate 1 Million USD to me because I need it.

Good luck, have fun, whatever.

DC Website Help and Extras / Is DC attacked again?
« on: December 25, 2018, 10:20 PM »
A lot of server errors lately, incl. 50x...?  :huh:

N.A.N.Y. 2019 / NANY 2019 - A whisky exposé for reddit
« on: December 08, 2018, 10:06 AM »
NANY 2019 Entry Information

Application Name reddit whisky exposé
Short Description A simple HTML generator for whisky reviews posted on reddit
Supported OSes Wherever you have Racket
Web Page https://code.rosaele...acket-whisky-reviews
System Requirements
  • Some version of Racket
  • The Racket "yaml" module
Author  :huh:

I needed that.  :P

Can generate an HTML table from a YAML file in which you manage your whisky reviews posted on reddit. All subreddits (/r/worldwhisky, /r/scotch etc.) are supported.

Planned Features
Nah, it's enough for me.


Download the main.rkt file and set up a whiskies.yaml file like the example that comes with it.

Using the Application
Get Racket, get the YAML module, run the file. A web server will be started and your HTML file will be loaded in your default browser. (You could run it on your server if you have one.)

Known Issues
The CSS looks like shit. I'm lazy.

Living Room / Have you ever walked through a computer?
« on: September 16, 2018, 04:18 PM »

DC Member Programs and Projects / ZenTweet is Open Source now.
« on: August 19, 2018, 05:07 PM »
Look, another software from me! This time, it is really, really old and it's in German only... but you can contribute!

I open-sourced ZenTweet, my minimalistic Twitter client for web browsers which has not seen major updates in years, a few minutes ago. I started it in 2014 or so, the current instance is here. As people keep hating Twitter for doing Twitter things, this might be a good moment to notify you that ZenTweet's limited features are not affected by the API changes in the foreseeable future.


N.A.N.Y. 2019 / N.A.N.Y. 2019: logpad for Vim and GNU Emacs
« on: July 29, 2018, 07:04 PM »
Just throwing together my other 2019 applications before writing new ones...

NANY 2019 Entry Information

Application Name logpad
Short Description Writing a journal with Vim and GNU Emacs.
Supported OSes Any which have Vim or GNU Emacs.
Web Page https://www.donation...ndex.php?topic=45696
Download Link Vim script, GNU Emacs plugin.
System Requirements
  • logpad.vim: Vim.
  • logpad.el: GNU Emacs.
Author me (both)

logpad simulates the Windows Notepad logging behavior by automatically inserting the current timestamp on top of a file which starts with ".LOG".

- Automatically creates a journal for you.



- logpad.vim: Download the script file and load it with your preferred package manager (or manually).
- logpad.el: Download logpad via MELPA and start logpad-mode: M-x logpad-mode.

Using the Application
All you need is logpad (or Notepad  ;D) and a file that starts with ".LOG". Everything else is automagic.

Known Issues
The GNU Emacs variant could be more flexible.

N.A.N.Y. 2019 / N.A.N.Y. 2019: GDPR Blocking (PHP Edition)
« on: July 29, 2018, 06:56 PM »
Just throwing together my other 2019 applications before writing new ones...

NANY 2019 Entry Information

Application Name GDPR Blocking (PHP Edition)
Short Description One of my usual social comments, this time concerning the GDPR and its consequences.
Supported OSes Any, as long as we have PHP.
Web Page https://www.donation...ndex.php?topic=45495
Download Link The PHP snippet is available from the website.
System Requirements
  • PHP.
Author Tuxman! Ha!

This is meant to be a free and easy alternative to the various GDPR blocking services which came over the world in 2018. It is a PHP snippet that blocks all visitors from EU IPs.


Your country does not want you to be here.

Integrate the snippet in your own PHP code.

Remove the snippet from your own PHP code.

Known issues
Does not catch proxies, of course.

N.A.N.Y. 2019 / N.A.N.Y. 2019: The Decision Sieve
« on: July 29, 2018, 06:49 PM »
Just throwing together my other 2019 applications before writing new ones...

NANY 2019 Entry Information

Application Name The Decision Sieve
Short Description A web service that will help you filter your bucket list.
Supported OSes Any.
Web Page https://tuxproject.d...ects/decision-sieve/
Download Link
System Requirements
  • It's a HTML site, entirely written in JavaScript/CSS. There are not many systems which don't support that.
Author uhm, yes

Generally spoken, this is a web service that will help you filter your bucket list. If you have a limited budget or you need to limit your shopping to a certain number of things, the Decision Sieve can help you clean up your list to a reasonable amount. I actually wrote it to decide about which whisky to buy - and it helped me a lot.

- Can filter your bucket list.



Priority Sieve:

- Enter a list of things in your list.
- Optionally, mark a couple of things as "less important" or "more important" using the slider on the right side.
- Enter the maximum number of things that should be left after sieving.
- Press the button and watch the magic happen.

Price Sieve:

- Enter a list of things in your list.
- Specify the particular price for each thing in the list.
- Enter the maximum budget.
- Press the button and watch the magic happen.

del /S *

Known Issues
I am bad at web design.

Just throwing together my other 2019 applications before writing new ones...

NANY 2019 Entry Information

Application Name libvldmail
Version 0.1.1
Short Description A library that can validate e-mail addresses according to RFC 6531 with a fallback to RFC 5321 ff.
Supported OSes Any, I hope.
Web Page https://www.donation...ndex.php?topic=45118
Download Link None, actually. This is a library, it needs to be integrated with your own applications...
System Requirements
  • You will need a C compiler. Nothing else.
Version History0.1.1 [2018-02-25]:
- Introducing the BREAK_LOOP_FAIL macro. (Thank you, stsc.)
- Improved output of one of the validation messages.

0.1.0 [2018-02-24]:
- Initial version.
Author when in doubt, me

Your friendly e-mail address validation library.

- Can validate e-mail addresses.
- Comes with a test


Using the Application

You can use libvldmail from inside your own applications. :)
Example code (C):

    #include <vldmail.h>
    int main(void) {
        /* ... your code ... */
        vldmail validator = validate_email(L"foo@bar.quux");
        if (0 == validator.success) {
            /* success == 0 means that something was wrong. */
            printf(L"Validating foo@bar.quux failed: %ls\n", validator.message);
        /* ... more of your code ... */

Just remove it, I guess.

Just throwing together my other 2019 applications before writing new ones...

NANY 2019 Entry Information

Application Name remv
Version 1.0.1
Short Description A sane way to rename files/directories with a regular expression.
Supported OSes Any, as long as we have a C++17 compiler.
Web Page https://www.donation...ndex.php?topic=44941
Download Link Attached in the "website" topic.
System Requirements
  • Binary: Windows.
  • Compile yourself: Any that has a new(ish) Clang compiler set.
Version History
  • 1.0.1  [2018-01-14]: remv deleted files. Oops.
  • 1.0.0  [2018-01-13]: initial release
Author whatever

remv should solve my regular problem of having to recursively rename files according to a regex pattern.

- Renames files and folders.
- Can simulate that as well.


(Sorry - attachments don't currently work.)

Unpack the .exe anywhere (or build one wherever you want).

Using the Application
        remv [COMMANDS]
        remv [OPTIONS] <regex> <replacement> [<startpath>]

 OPTIONS (any combination):
        -r      Recurse into subdirectories.
        -d      Also rename directories on the way.
        -s      Sets the start directory to the last parameter
                else, remv will start in '.'.
        -v      Verbose logging.
        -vv     Very verbose logging.
        -n      Dry run - don't modify anything just yet.

        -V      Display the remv version and exit.
        -h      Display this help screen and exit.

 You can use $1, $2 etc. in your replacement strings for back-

Delete the executable file. You might want to add its path to your %PATH% if you want easier access.

Don't.  ;D

Known Issues
It sucks!

General Software Discussion / Listary 6
« on: June 03, 2018, 06:39 PM »
I totally missed that:

Listary 6 will be a complete rewrite and is about to be released "soon" (in a programmer's definition of "soon").

Did you know that Windows Notepad can make a journal for you?

A couple of years ago, I wrote a Vim script to simulate this behavior.

Today, I ported it to GNU Emacs (will probably be released in the MELPA repositories soon).


Basic Info

App NameAcme
Supported OSesPlan 9, its forks (9atom, 9front, Harvey OS, JehanneOS et al.) and Inferno; UNIX, Linux and related operating systems are supported through plan9port. There is/was a Windows version called Acme-SAC but it does not seem to work on Windows 10 anymore.
Pricing SchemeThis is free software.
Reviewer Donation LinkGive me virtual money replacements.
Screencast Video URL


This is actually both a review and a tutorial. Please don't hurt me for partially ignoring the headline.


After the UNIX 7th Edition which almost anything that claims to be "UNIX-like" is either based upon or inspired by had been released, the developers continued to work on it. However, the last three UNIX releases did not see much adoption: Between UNIX Version 7, released in 1979, and UNIX Version 8, released in 1985, the UCB's UNIX distribution BSD had been developed so far that it had more than twice of UNIX's system calls. In fact, the eighth UNIX was basically a reimported version of 4.1cBSD, modified to run on VAX computers.

Neither the 9th nor the 10th (and final) UNIX were ever released as a complete operating system, efforts to work on it were soon stopped in favor of what should have been UNIX's successor for operating systems research, named Plan 9 from Bell Labs, inspired by what was called "the worst movie of all times". (I will not link that.) The developers of Plan 9, mostly being recruited from the UNIX and C teams (among them, Rob Pike and Ken Thompson), continued from what they had: the graphical terminal Blit came in the 8th edition, Mk and the rc shell were there in the last UNIX version as well. Plan 9 tried to complete UNIX's approach of "everything is a file" by introducing the 9P protocol which acted as a replacement for regular APIs (including sockets and other device calls). Using the wikifs layer, even the Wikipedia could be edited as if it was a collection of files on the local machine. (Sadly, this layer does not seem to have been ported to other operating systems yet. edit: There is a FUSE version though.)

Of course, since the 70s were over, the usual computer had a real screen instead of a printer and Apple, Amiga and Atari had successfully taken Xerox's revolutionary input device, the "mouse", out of obscurity by the mid-80s, this was what was considered the best way to interact with a computer: The Plan 9 operating system, including its text editors sam and acme, was developed to be used with a three-button mouse. The designers decided that light blue and light yellow were the best colors to stare at all day, so there was not much to configure. Theming was not a thing.

This is how everything in Plan 9 - and its various distributions - looks like:


(This is Acme running in Xming on Windows 10. I'll talk about that in a short while.)

Although Plan 9 did not convince the majority of people just yet, probably because there is no good web browser available for it (but NetSurf is said to be ported soon) and because generations of UNIX, BSD and Linux people, including me, have bragged about the efficiency of being able to use a keyboard for everything, some of its ideas (virtual filesystems, its text editors, ...) were made available to other operating systems. "Plan 9 from User Space", not a bad pun in my opinion, works on most systems - excluding Windows. But after some time spent with Acme on a different system, I want to try it on Windows as well.

The tutorial part begins.

Installing Acme on Windows 10:

Windows 10 has got support for being used as a host system for Linux applications as of today. I do not like Linux, but this is the least inconvenient way to use Acme on Windows. What we need is both an X server (Xming is still good enough, install and start it before continuing) and a Linux distribution running on the Windows NT subsystem. I chose to install the "nightly" version of plan9port via Debian. Here's how to install it. In theory, you could run any Debian desktop application with this combination now, but let's stick to the topic here.

When the Debian installation is completed, start the bash (while I prefer the csh, Windows itself only comes with a native bash.exe) and install the essential build tools:

$ sudo apt-get install build-essential xorg-dev git

If you happen to be stuck behind a proxy and the above command fails to connect to the servers, add the following text to your ~/.bashrc file (a number of editors are already installed, including nano and a version of Vim as vi):

export http_proxy=http://your.proxy:port
export https_proxy=http://your.proxy:port

Now grab and build the Plan 9 tools:

$ git clone
$ cd plan9port

This will take a while - not too long though. The relevant utilities will be inside /home/USERNAME/plan9port/bin then. You can reach the / folder from Windows as %localappdata%\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\, but that will not help you much: Those are Linux binaries. (But it might or might not be a good idea to hardlink your ~ directory to where you can access it more easily.)

Prepare your bash to find both acme and your X server - add to your ~/.bashrc file:

PLAN9=/home/USERNAME/plan9port export PLAN9
PATH=$PATH:$PLAN9/bin export PATH
export DISPLAY=:0

Now you have two options in order to see the glory of Acme for the first time:

1. Restart your bash and type acme &.
2. Make a desktop shortcut for Acme which you could also pin to the taskbar and/or the start menu if you want to.

I find the second option to be notably more convenient. The command for the shortcut is:

powershell -windowstyle hidden -command "&{ bash -ic acme }"

The -i flag is important since you'll definitely want to read your .bashrc file before trying to start Acme. - As far as I could see, there is no easier way to do that without having a terminal window open all the time. Maybe Microsoft will improve this in the future.

How to use (the basics of) Acme?

The blue part on top of your Acme window contains commands ("tags") like your usual toolbar does. It is editable (I'll explain why - just read on). Middle-clicking "New" opens a new text window, "Newcol" adds a new column where you could open even more text windows. The square in the top left corner allows you to change the size of each window. By default, the text you are writing is not assigned to a file name. If you want to save it to a file, move your mouse cursor to the top left corner of your text window and write down the path. A new item named "Put" will appear in your tagline. Middle-click it to save the file. If you want to open any file instead, write down its path anywhere and right-click it. (Obvious, isn't it?) The "Putall" command will save all modified buffers which have assigned paths, by the way.

Note: Since we are in an emulated environment here, "C:\" is actually "/mnt/c". This might be important when dealing with your files.

You can either use the particular tags or - the recommended way - mouse chords for cutting, copying ("snarfing") and pasting text. Consult the documentation for a general overview. There are six keybindings, mostly inspired by Emacs's, but that's about it.

One more note: Your up/down cursor keys won't work. Use the mouse to move between lines. Scroll down to "The Good" for more surprising features.

Let us come back to the usual review now.

Who is this app designed for:

Freaks. ;D Also, Acme is an awesome developers' editor because of its near-perfect interaction with the operating system. No, it does not have syntax highlighting. Do you really need that though? Third, if you are one of those who think a mouse does not make you work any faster (or you want to convince someone of either the keyboard or the mouse), Acme could help you. Or disturb you. Or them.

The Good

Everything in Acme is text. Even the "toolbar" is text. You can not only remove existing commands (although they'll reappear), you can also add your own ones; in fact, Acme is its own command shell. You can see one example on my screenshot from above: Type a command, middle-click it and it will be executed. By default, the output appears in the "+Errors" window, but you can also inline the output by prefixing the command with a pipe.


Middle-clicking that will print the current date at the cursor position. Since you probably don't want to have "|date" appear in your actual file, you can use the tag bar for that: Hover your mouse over the second bar (the one that ends with "Delcol") and enter "|date" there.


Middle-clicking it does exactly what you think it does. You can use any command there, including text manipulation commands and compilers.

Interestingly, that works in both directions. Do you remember that I have mentioned the 9P protocol in the Intro section which allows Plan 9 applications to talk to each other? Since we have installed the whole plan9port package (you did follow my instructions, right?), we can access our currently running Acme instance from Windows with the 9p command. To see what I mean, open a command prompt via cmd or something (or you could use the bash directly, but that needs no further explanation):

C:\> bash -ic "9p ls acme"

The most interesting part is behind the numbers. Each number is assigned to one text window inside your running Acme instance. You can read what is typed there by extracting the "body":

C:\> bash -ic "9p read acme/3/body"

This will print what you see on the screen in the window with the ID "3". Spooky? Not yet! You can also write into it, e.g.:

C:\> bash -ic "echo 'Hey DonationCoder!' | 9p write acme/3/data"

That will insert "Hey DonationCoder!" at the cursor position in the window with the ID "3". 8) Basically, you can control every aspect of Acme - including its tag bars, of course - using any programming language which is able to print text on the screen. This is both weird and amazing and there is no reason why no other IDE does that. Since you can control anything inside Acme from outside Acme, you could use that to write a shell script that formats your source code as well.

The needs improvement section

  • The look. I like the colors (I have set up my Emacs to use them), but I would like to have a better default font than what comes with plan9port.
  • I really want to have a native Windows version of Acme because using /mnt/c/... breaks my workflow. Mimicking 9p on Windows could be quite a huge task though... probably that's why nobody has done that yet.
  • Added: Acme does not support file/directory names which contain a space character yet. This is a known bug, it will probably be fixed.

Why I think you should use this product

Try something new? Dive into history? Show off your weirdness to your friends? Do nerdy things with nerdy software? Acme has it.

How does it compare to similar apps

Ha! Hahahaha! Haha!

Oh, well... there actually are some. A number of people have written Acme clones (usually with some Vim thrown in) for various operating systems, including "Acme for Vim":

(Could be continued.)

I haven't spent much time with those yet, but none of those seems to have been developed with Windows in mind, so none of those is able to work around the "Needs improvement" part, at least not the standalone ones. Someone should really change that.

Added: There actually is a reimplementation of (some of) Acme minus the 9P part which might or might not be interesting for those who want to try new things:


I feel dizzy.

DC Member Programs and Projects / GDPR Blocking (PHP Edition)
« on: May 04, 2018, 05:27 AM »
There is an expensive web service that makes your website GDPR-compliant by adding a JavaScript that redirects visitors from the EU to an error page.

This is my attempt to provide a simple and free PHP script for those who want to achieve the same result on server side.

Code: PHP [Select]
  1. <?php
  2. /*
  3.   Copyright © 2018 tux. <[email protected]>
  4.   This work is free. You can redistribute it and/or modify it under the
  5.   terms of the Do What The Fuck You Want To Public License, Version 2,
  6.   as published by Sam Hocevar. See for more details.
  8.   GDPR SHIELD [PHP draft v1]
  10.   Prerequisites:
  11.   * PHP
  12.   * GeoIP as described here:
  14.   Usage:
  15.   <?php require("gdprshield.php"); ?>
  16.   <!doctype html>
  17.   <html>
  18.     ...
  19.   </html>
  20. */
  21. $disallowed_countries = ["BE", "BG", "CZ", "DK", "DE", "EE", "IE", "EL", "ES", "FR", "HR", "IT", "CY", "LV", "LT", "LU", "HU", "MT", "NL", "AT", "PL", "PT", "RO", "SI", "SK", "FI", "SE", "UK"];
  22. $ip = $_SERVER["REMOTE_ADDR"];
  23. if (in_array(geoip_country_code_by_name($ip), $disallowed_countries)) {
  24.     die("Your country does not want you to be here.");
  26.     /*
  27.       The above code displays a plain error text.
  28.       If you prefer to redirect to a full-featured HTML page,
  29.       you could delete it and use a Location header instead:
  30.     */
  31.     header("Location: GDPR_blocked.php", true, 451);
  32. }
  33. ?>

Enjoy. And feel free to extend/fix/implement it as you wish.

I was bored.


Official support thingy.
(Does this still count as a viable NANY item for 2019?  :-[)

When I was talking about an application which I prototyped as a web service, I was talking about this:

From the FAQ:

Generally spoken, this is a web service that will help you filter your bucket list. If you have a limited budget or you need to limit your shopping to a certain number of things, the Decision Sieve can help you clean up your list to a reasonable amount. I actually wrote it to decide about which whisky to buy - and it helped me a lot.

Here's the ugly source code. I'll probably procrastinate doing it "right". Also, I suck at CSS.
Enjoy or something.

What would you rather use and why?

I prototyped a new project (basically, a decision helper) in Javascript and ugly CSS and I need an idea if it would be worth the additional effort to reimplement it as native applications. (Platform-independent, of course.)

Pages: [1] 2 3 4next