An Open Letter to Google

I've submitted many appeals to Google in the past, but this one I will be making public as well. This is the content of the Adsense ban appeal that I've just submitted.

Hello!

We're coming up on the seven-and-a-half year mark from when my Adsense account was disabled. I've submitted several appeals, each one denied, and am once again submitting my appeal due to insufficient information provided in your previous responses.

I was fourteen years old then, and just getting into a new hobby of taking apart Nintendo devices and learning about how they work, and decided to start a blog about it. With the help of my parents, I was able to get Adsense set up! It was a pretty exciting time for me...until the Adsense account got disabled.

I was able to work out that a well-meaning friend of mine decided to click on the ads a large number of
times. This led to my Adsense account getting disabled, which although upsetting, did not affect my greatly as I was just a kid between middle and high school.

Times are different now. For several years, I have been growing and fully financially supporting a large community of artists and animators, as well as working on preserving their defining moments in the form of Flipnotes from Flipnote Hatena. As time went on, and the traffic and server demands grew, the financial demands grew as well. As I've expanded and grown, I've tried to motivate people to donate, but had very little consistent success. I needed something more consistent.

I tried Project Wonderful ads, which were not successful. I submitted many appeals but had each turned down without sufficient explanation or information.

I'm in debt now. I'm struggling to pay between $250-275 each month for server bills, and to pay off the hard drives I purchased to archive content from Flipnote Hatena ($1000 - 23 TB of content). I have credit card debt and car payments as well. I need help, desperately, especially when we finish reverse-engineering Nintendo's format so that I can make all of the archived content available to people to watch again, thus preserving the history.

I must beg of you again to please take into consideration the community that I've put years of my life into growing, with my time, my love, and a serious chunk of my finances.

Please let me do my best to grow the community of Sudomemo and of Flipnote Hatena. Please let me do what I need to do to lighten the financial burden that I have to struggle with. For the sake of the entire Sudomemo and Flipnote artist community, please responsibly consider this appeal so that I can reach towards my dream of having the site sustain itself, and towards being free from debt.

Hagex

人の命は世界中のお金より価値あるものです。
 
私は祈ります。憎しみにかられた男の手によって地上から連れ出されたHagex氏のために。
そして、Hagex氏を家族や彼のブログの読者、彼のキャリアから恩恵を受けた人から奪った人の魂のために。
 
闇と邪悪から救われない魂はないと信じています。
贖いには悔い改め、赦される必要があります。

安らかな眠りを心よりお祈り申し上げます。


I believe that a human life is worth more than all the money in the world.
I pray for the soul of Mr. Hagex, who was taken from this world at the hands of another man who was burning with hatred.
I pray for the soul of the man who has taken Hagex from his family, from the readers of his blog, and from those who benefitted from Hagex's work and career.
For I also believe that no soul is unable to be redeemed from the darkness and evil that consumes it.
Redemption starts with forgiveness, and continues with repentance.

cPanel disk cleanup helper

I've been working on a tool to help with finding where disk space is unnecessarily used on cPanel servers.

https://github.com/sudofox/cleanhelper

It's called cleanhelper; I might expand it to non-cPanel servers in the future.

It finds

  • Old copies of public_html
  • Softaculous backups
  • cPanel trash folders
  • .tar.gz files in /home directories - old cPanel backups?
  • .zip files in /home directories - old manually-made backups?
  • Large PHP-FPM error logs
  • Failed uploads for cPanel File Manager
  • Old/failed ImageMagick temp files
  • Old Roundcube mail attachment temp files
  • Old Horde Mail drafts (more than 10 MB in size)
  • Horde ImageMagick temp files
  • Updraft backups
  • Akeeba backups
  • ai1wm-backups
  • BackWPup backups
  • envato-backups
  • WP-DBManager
  • BackUpWordPress
  • .Trash, .spam, .Junk IMAP folders
  • Failed/partially created zip files
  • zip files > 100 MB
  • Large error_logs (>30MB) within cPanel accounts (public_html)

pam_systemd(crond:session): Failed to create session: Failed to activate service - timed out

Ever have this issue? SSH logins slow, things are taking ages?


May 23 09:20:26 redacted crond[21684]: pam_systemd(crond:session): Failed to create session: Failed to activate service 'org.freedesktop.login1': timed out
May 23 09:20:26 redacted sshd[21715]: pam_systemd(sshd:session): Failed to create session: Failed to activate service 'org.freedesktop.login1': timed out
May 23 09:20:26 redacted sshd[21715]: pam_unix(sshd:session): session opened for user root by (uid=0)


Just restart systemd-logind!


systemctl restart systemd-logind

Flipnote Hatena and Flipnote Gallery: World Archive

At a very high cost to me, I have archived Flipnote Hatena and Flipnote Gallery: World. 23 terabytes.
Flipnote count:
44,351,673 from Flipnote Hatena (🇯🇵🇺🇸🇪🇺)
18,832,032 from Flipnote Gallery: World (🇯🇵)

I would appreciate donations if you wish to preserve history. The drives cost ~$1000. (They must be stored redundantly in case of drive failure.)

They are in Flipnote Studio 3D format. When we have reverse-engineered the format, I will make these available to download and view at no cost.

I believe that the benefit of preserving the history and formative works of many hundreds of thousands of artists outweighs any sacrifice made to preserve it.

How to change cPanel PHP-FPM configuration values (EasyApache 4)

cPanel did not make this an easy thing to do. You'd expect it to be something that can be done in WHM...nope!

I wrote this while using cPanel and WHM version 70.

Primer: YAML syntax

YAML files use the following syntax:


directive1: "value"
directive2: "value1,value2,value3"

You don't specifically need quotes for values -- this would work too:


directive3: value

cPanel's default PHP-FPM configurations

To override one of these, just specify it in the global or per-domain config file.

Directive Default
php_admin_value_disable_functionsphp_admin_value_disable_functions: "exec,passthru,shell_exec,system"
php_admin_flag_allow_url_fopenphp_admin_flag_allow_url_fopen: on
php_admin_value_short_open_tagphp_admin_value_short_open_tag: on
php_admin_value_error_logphp_admin_value_error_log: "[% homedir %]/logs/[% scrubbed_domain %].php.error.log"
php_admin_flag_log_errorsphp_admin_flag_log_errors: on
php_value_error_reportingphp_value_error_reporting: "E_ALL & ~E_NOTICE"
pm pm: ondemand

A more exhaustive list of configuration values can be found here:
cPanel Documentation: Configuration Values of PHP-FPM

Setting PHP-FPM directives globally

If the folder /var/cpanel/ApachePHPFPM/ doesn't exist, you'll want to create it:


mkdir -p /var/cpanel/ApachePHPFPM

If the file /var/cpanel/ApachePHPFPM/system_pool_defaults.yaml doesn't exist, you'll want to create it.

Here's what to put inside it (at the bare minimum) to make it a valid YAML-format PHP-FPM config file:

    • -

_is_present: 1

Now you can set options globally. For example, say we want to disable the short_open_tag functionality, our file would look like this:

    • -

_is_present: 1
php_admin_value_short_open_tag: "Off"

Let's say that we also want to allow all PHP functions to be used. We will add a line to set disable_functions to a blank value.

    • -

_is_present: 1
php_admin_value_short_open_tag: "Off"
php_admin_value_disable_functions: " "

Setting PHP-FPM values on a per-domain basis

If you want to set a PHP-FPM value on a per-domain basis, just edit this file instead:


/var/cpanel/userdata/$CPANEL_USERNAME/$DOMAIN.TLD.php-fpm.yaml

For example, for the cPanel account example and domain example2.net, you would edit


/var/cpanel/userdata/example/example2.net.php-fpm.yaml

Now we can make our changes just as we did for the global configuration.

Important!

After editing the files, we'll need to rebuild our PHP-FPM configurations. Do so by running this:


/scripts/php_fpm_config --rebuild

and then


/scripts/restartsrv_apache_php_fpm

If it fails to restart, you may have goofed the syntax.

Prevent PHP-FPM from setting specific php_admin_value in the pool configuration

PHP SettingYAML entry
disable_functionsphp_admin_value_disable_functions: { present_ifdefault: 0 }
allow_url_fopenphp_admin_flag_allow_url_fopen: { present_ifdefault: 0 }
short_open_tagphp_admin_value_short_open_tag: { present_ifdefault: 0 }
error_logphp_admin_value_error_log: { present_ifdefault: 0 }
log_errorsphp_admin_flag_log_errors: { present_ifdefault: 0 }
error_reportingphp_value_error_reporting: { present_ifdefault: 0 }

Questions

Can I set values on a per-PHP-version basis?

No.
cPanel does not have any method that allows for this. The default values for pools and the values for the master configurations will be the same across all EasyApache-provided PHP versions.

How can I debug a PHP-FPM process?

If you want to know how to do this, leave a comment and I'll write an article on ways to do this.

I might write more about PHP-FPM since it's often hard to figure out. Let me know if you're interested!

Hatena Haiku Spam Filtering Userscript

こんにちは! 💕 =(^o^)=

I'm working on a userscript to automatically hide spam using data from my tool: http://haikuantispam.lightni.ng

It's pretty rough at the moment, but I will do my best to improve it.

Right now it loads average user spam scores at page load time and hides posts from users with an average spam score above 5.

To do:

  • Automatically update spam score from my API every so often
  • Make API request asynchronous and wait to iterate through elements until they are ready (to avoid race condition issues)
  • Add option to re-show hidden post
  • Hide spammy-looking keywords
  • Add SSL to Haiku Anti-Spam (haven't done it yet as I haven't wanted to mess around with my Apache configuration to move everything into a VirtualHost)