Re: The Perl Jam 2 [32c3] ... for the LoLz

Netaniel Rubin continues his crusade to eradicate Perl from the planet, on 32C3 this time. I will not respond to the technical details, as others are already doing so.

During his talk Netaniel complains about the Perl Community, which he assumes is being represented by the people on, responding to his talk last year aggressively, personally and with trolling. Well, this comment will be personal as well and surely offending. 

Let's be clear first: the problems pointed out by Netaniel during his second talk are indeed real in a sense. But they are not new, nor are they perl specific. At least they are well known for years (see the gist linked above for more details). The problem I'm seeing with this talk is the tone.

You see, there's criticism and there's rants. Netaniel's talk is a rant. And it's not justified. Obviously he REALLY hates perl. He makes fun of it, he shouts at it, he even insults it. However, we're talking about a fucking programming language, not a human being, or an organisation or the like. This boy stands on the stage and behaves like a five year old shouting at his non-functioning Lego construction: "You Moron!".

My impression of this talk (and thus Netaniel) is worse than the last one. It's funny if you don't have a clue but insults the intelligence of the initiated.

Dear Netaniel: "Stop using Perl!" is a childish, ridiculous and unrealistic demand. And your "arguments" aren't getting the more valid the louder you shout them. Therefore, let me explain to you how the real world looks like:

There are lots of computers running these days (not counting PCs, notebooks, tablets or phones). The majority of them is not connected to the internet. These are headless servers running unattended most of the time (just to make sure you understand what I'm talking about since you're a windows user: headless in this context means "no GUI", just a console). Such systems are operated by system administrators, labeled as "DevOps" these days.

Administrators are responsible for lots of systems, hundreds or even thousands of servers. Many of such servers are legacy systems running legacy operating systems and legacy software. Sometimes it's not possible to update them, sometimes it's not allowed, sometimes there's no developer for the particular software running on it left in the company. So they keep running. And running, and running, and running.

Administrators are a lazy species. If they ever watch themselfes entering the same cascade of commands twice they put them into an shell alias. And if it grows so much that it doesn't fit into an alias, they put it into a shell function. Sometimes such a function grows and grows so much that it doesn't make any sense any more to maintain it as a shell function in .bashrc or something. So, the administrator puts the function into a script.

The script grows further and sometimes reaches a point where it is a pain in the ass to continue to develop it as a shell script. The administrator decides to go to the next level and rewrite the thing with something more powerful and flexible than a shell script. In essence he wants to convert the script from a beast into an elegant lady.

Now, Netaniel, remember what I told you earlier about legacy systems. You cannot install node.js on an AIX system of the past decade. You're not allowed to install Go on a mainframe. There's no modern ruby package for that ancient Sun machine. But there's Perl.

Let me repeat: but there's Perl!

Perl is part of the base installation of most operating systems of relevance (that is: not Windows, Netaniel, sorry) for decades. A well crafted perl script can be deployed over dozens of different platforms doing the same simple thing, stable, portable and maintainable. Sometimes Python can be used instead. If all servers have python. Sometimes even ruby might be used. But the more heterogeneous a network gets and the more legacy systems it contains the higher the probability that you will be stuck with Perl.

The reason is simple: Perl itself is a legacy system. It was born out of system administration, designed by system administrators just to make their live easier. Not necessarily yours, that is.

Of course, since its inception, people have done things with Perl beyond imagination. The even wrote CGI scripts, replaced them with application servers which they then replaced with content management systems. And all those dirty features built into Perl to make administrators happy are still there, waiting to be exploited by Kids like yourself.

That's the reason thousands of developers all over the world implemented better systems like Mojolicious, because we already know of those features. Your demo code will not work if you just put an "use strict" in there. And we urge people to do so since years after years. The fact that you don't seem to know it, shows how unfamiliar you are with perl. And the fact that you don't seem to know that flexibility with variables is not in any way specific to Perl, shows you never developed anything. Someone in the monk thread (linked above) from last year pointed out that he couldn't find anything you ever developed. This didn't change 2015: there's still nothing to find made by you. Even your Github account with which you responded to the gist post linked above is fresh and has not a single repository or contribution.

Let me say it bluntly: Don't diskuss battle tactics with us unless you bled with us! 

03 January 2016 | #source


Quantenphysik und Kosmologie [32C3]

03 January 2016 | #gefunden


Apple Security Professionals

This is how "security professionals" sound these days:

[..] modifying the hosts file isn’t super easy. It’s a multistep process that varies depending upon which operating system you are using. Here’s a good overview of how to edit the hosts file on different Mac and Windows systems.

And their "howto" is even wrong.

So sad... 

11 November 2015 | #networking


Ascend lebt

Faszinierend, nach soooo langer Zeit lebt der Ascend FTP-Server noch:

% ftp
Connected to
220 ftp FTP server (Version wu-2.6.2(17)-GD Tue May 11 19:47:08 PDT 2010) ready.
Name ( ftp
331 Guest login ok, send your complete e-mail address as password.
230-The response 'ftp' is not valid
230-Next time please use your e-mail address as your password
230-        for example: joe@.......
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub/Software-Releases/Pipeline
250-Pipeline software releases:
250-This directory contains current released SW for the Pipeline 25, 50, 75, 85,
250-130, 220, and 400.
250-3/23/98 -  
250-Archive			Previous releases of Pipeline software.
250-Release-6.0.X		Current shipping software for Pipelines.
250-NOTE - Release notes pertaining to the versions of firmware are located in the "doc" subdirectory within each firmware directory.
250-For example:
250-6.0.0 Release Notes are to be found in:
250-Please read the file README
250-  it was last modified on Mon Apr  3 15:03:47 2000 - 5690 days ago
250 CWD command successful.
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 72
-rwxrwxr-x   1 600          510 Apr  3  2000 .message
drwxrwxr-x   7 600          512 Apr  3  2000 Archive
drwxrwxr-x   8 600          512 Apr  3  2000 CellPipe
drwxrwxr-x   4 600          512 Jan 25  2001 Current
drwxrwxr-x   5 600          512 Apr  3  2000 Pipeline-15
-rwxrwxr-x   1 600          510 Apr  3  2000 README
drwxrwxr-x   9 600          512 Apr  3  2000 Release-6.0.X
drwxrwxr-x  12 600          512 Feb 24  2002 Release-6.1.X
drwxrwxr-x   7 600          512 Feb 19  2002 Release-7.3.X
drwxr-xr-x   4 1            512 Jan 25  2001 Release-8.0-101.0
drwxr-xr-x   4 1            512 Feb 24  2002 Release-8.0-101.2
drwxrwxr-x   3 600          512 Apr  3  2000 SuperPipe
-rwxrwxr-x   1 600        11794 Apr  3  2000 Upgrade-Filenames.txt
-rwxrwxr-x   1 600        12005 Apr  3  2000 Upgrade-Instructions.txt
226 Transfer complete.
ftp> 221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 2149 bytes in 1 transfers.
221-Thank you for using the FTP service on ftp.
221 Goodbye.

05 November 2015 | #draussengewesen


MDD, Module Dependency Disorder, the perl plague

There's a problem with more and more perl modules I'd like to call "Module Dependency Disorder", MDD. Many perl modules, especially the newer ones have so many dependencies - it's just a mess. In the old times you could install modules by using "perl Makefile.PL && make && sudo make install", under some OSes like Linux and FreeBSD most modules are packaged. But this is over.

Thanks goodness there's Perlbrew so I don't have to mess with my system in order to just test a new module. Today I wanted to play a little with Geo::GPX and GIS::Distance, so I installed them inside my perlbrew environment using 'cpanm'. This is what it looked like:

% cpanm GIS::Distance
--> Working on GIS::Distance
Fetching ... OK
Configuring GIS-Distance-0.09 ... OK
==> Found dependencies: Type::Tiny, Moo, Class::Measure, namespace::clean, strictures
--> Working on Type::Tiny
Fetching ... OK
Configuring Type-Tiny-1.000005 ... OK
Building and testing Type-Tiny-1.000005 ... OK
Successfully installed Type-Tiny-1.000005
--> Working on Moo
Fetching ... OK
Configuring Moo-2.000002 ... OK
==> Found dependencies: Module::Runtime, Role::Tiny, Devel::GlobalDestruction, Class::Method::Modifiers
--> Working on Module::Runtime
Fetching ... OK
Configuring Module-Runtime-0.014 ... OK
Building and testing Module-Runtime-0.014 ... OK
Successfully installed Module-Runtime-0.014
--> Working on Role::Tiny
Fetching ... OK
Configuring Role-Tiny-2.000001 ... OK
Building and testing Role-Tiny-2.000001 ... OK
Successfully installed Role-Tiny-2.000001
--> Working on Devel::GlobalDestruction
Fetching ... OK
Configuring Devel-GlobalDestruction-0.13 ... OK
==> Found dependencies: Sub::Exporter::Progressive
--> Working on Sub::Exporter::Progressive
Fetching ... OK
Configuring Sub-Exporter-Progressive-0.001011 ... OK
Building and testing Sub-Exporter-Progressive-0.001011 ... OK
Successfully installed Sub-Exporter-Progressive-0.001011
Building and testing Devel-GlobalDestruction-0.13 ... OK
Successfully installed Devel-GlobalDestruction-0.13
--> Working on Class::Method::Modifiers
Fetching ... OK
Configuring Class-Method-Modifiers-2.11 ... OK
Building and testing Class-Method-Modifiers-2.11 ... OK
Successfully installed Class-Method-Modifiers-2.11
Building and testing Moo-2.000002 ... OK
Successfully installed Moo-2.000002
--> Working on Class::Measure
Fetching ... OK
Configuring Class-Measure-0.05 ... OK
==> Found dependencies: Sub::Exporter
--> Working on Sub::Exporter
Fetching ... OK
Configuring Sub-Exporter-0.987 ... OK
==> Found dependencies: Data::OptList, Sub::Install, Params::Util
--> Working on Data::OptList
Fetching ... OK
Configuring Data-OptList-0.109 ... OK
==> Found dependencies: Params::Util, Sub::Install
--> Working on Params::Util
Fetching ... OK
Configuring Params-Util-1.07 ... OK
Building and testing Params-Util-1.07 ... OK
Successfully installed Params-Util-1.07
--> Working on Sub::Install
Fetching ... OK
Configuring Sub-Install-0.928 ... OK
Building and testing Sub-Install-0.928 ... OK
Successfully installed Sub-Install-0.928
Building and testing Data-OptList-0.109 ... OK
Successfully installed Data-OptList-0.109
Building and testing Sub-Exporter-0.987 ... OK
Successfully installed Sub-Exporter-0.987
Building and testing Class-Measure-0.05 ... OK
Successfully installed Class-Measure-0.05
--> Working on namespace::clean
Fetching ... OK
Configuring namespace::clean-0.26 ... OK
==> Found dependencies: Package::Stash, B::Hooks::EndOfScope
--> Working on Package::Stash
Fetching ... OK
==> Found dependencies: Dist::CheckConflicts
--> Working on Dist::CheckConflicts
Fetching ... OK
Configuring Dist-CheckConflicts-0.11 ... OK
Building and testing Dist-CheckConflicts-0.11 ... OK
Successfully installed Dist-CheckConflicts-0.11
Configuring Package-Stash-0.37 ... OK
==> Found dependencies: Package::Stash::XS, Module::Implementation
--> Working on Package::Stash::XS
Fetching ... OK
Configuring Package-Stash-XS-0.28 ... OK
Building and testing Package-Stash-XS-0.28 ... OK
Successfully installed Package-Stash-XS-0.28
--> Working on Module::Implementation
Fetching ... OK
Configuring Module-Implementation-0.09 ... OK
Building and testing Module-Implementation-0.09 ... OK
Successfully installed Module-Implementation-0.09
Building and testing Package-Stash-0.37 ... OK
Successfully installed Package-Stash-0.37
--> Working on B::Hooks::EndOfScope
Fetching ... OK
Configuring B-Hooks-EndOfScope-0.15 ... OK
==> Found dependencies: Variable::Magic
--> Working on Variable::Magic
Fetching ... OK
Configuring Variable-Magic-0.59 ... OK
Building and testing Variable-Magic-0.59 ... OK
Successfully installed Variable-Magic-0.59
Building and testing B-Hooks-EndOfScope-0.15 ... OK
Successfully installed B-Hooks-EndOfScope-0.15
Building and testing namespace::clean-0.26 ... OK
Successfully installed namespace::clean-0.26
--> Working on strictures
Fetching ... OK
Configuring strictures-2.000001 ... OK
==> Found dependencies: indirect, bareword::filehandles, multidimensional
--> Working on indirect
Fetching ... OK
Configuring indirect-0.36 ... OK
Building and testing indirect-0.36 ... OK
Successfully installed indirect-0.36
--> Working on bareword::filehandles
Fetching ... OK
==> Found dependencies: B::Hooks::OP::Check, ExtUtils::Depends
--> Working on B::Hooks::OP::Check
Fetching ... OK
==> Found dependencies: ExtUtils::Depends
--> Working on ExtUtils::Depends
Fetching ... OK
Configuring ExtUtils-Depends-0.404 ... OK
Building and testing ExtUtils-Depends-0.404 ... OK
Successfully installed ExtUtils-Depends-0.404
Configuring B-Hooks-OP-Check-0.19 ... OK
Building and testing B-Hooks-OP-Check-0.19 ... OK
Successfully installed B-Hooks-OP-Check-0.19
Configuring bareword-filehandles-0.003 ... OK
==> Found dependencies: Lexical::SealRequireHints
--> Working on Lexical::SealRequireHints
Fetching ... OK
Configuring Lexical-SealRequireHints-0.009 ... OK
Building and testing Lexical-SealRequireHints-0.009 ... OK
Successfully installed Lexical-SealRequireHints-0.009
Building and testing bareword-filehandles-0.003 ... OK
Successfully installed bareword-filehandles-0.003
--> Working on multidimensional
Fetching ... OK
Configuring multidimensional-0.011 ... OK
Building and testing multidimensional-0.011 ... OK
Successfully installed multidimensional-0.011
Building and testing strictures-2.000001 ... OK
Successfully installed strictures-2.000001
Building and testing GIS-Distance-0.09 ... OK
Successfully installed GIS-Distance-0.09
27 distributions installed

% cpanm Geo::Gpx 
--> Working on Geo::Gpx
Fetching ... OK
Configuring Geo-Gpx-0.26 ... OK
==> Found dependencies: XML::Descent, DateTime, DateTime::Format::ISO8601
--> Working on XML::Descent
Fetching ... OK
Configuring XML-Descent-1.04 ... OK
==> Found dependencies: XML::TokeParser, Test::Differences
--> Working on XML::TokeParser
Fetching ... OK
Configuring XML-TokeParser-0.05 ... OK
==> Found dependencies: XML::Parser
--> Working on XML::Parser
Fetching ... OK
Configuring XML-Parser-2.44 ... OK
==> Found dependencies: LWP::UserAgent
--> Working on LWP::UserAgent
Fetching ... OK
Configuring libwww-perl-6.13 ... OK
==> Found dependencies: File::Listing, HTTP::Cookies, HTTP::Request::Common, WWW::RobotRules,
HTTP::Request, URI, URI::Escape, HTTP::Daemon, HTTP::Date, LWP::MediaTypes, HTTP::Negotiate,
Net::HTTP, HTTP::Status, HTTP::Response --> Working on File::Listing Fetching ... OK Configuring File-Listing-6.04 ... OK ==> Found dependencies: HTTP::Date --> Working on HTTP::Date Fetching ... OK Configuring HTTP-Date-6.02 ... OK Building and testing HTTP-Date-6.02 ... OK Successfully installed HTTP-Date-6.02 Building and testing File-Listing-6.04 ... OK Successfully installed File-Listing-6.04 --> Working on HTTP::Cookies Fetching ... OK Configuring HTTP-Cookies-6.01 ... OK ==> Found dependencies: HTTP::Headers::Util --> Working on HTTP::Headers::Util Fetching ... OK Configuring HTTP-Message-6.11 ... OK ==> Found dependencies: URI, IO::HTML, LWP::MediaTypes --> Working on URI Fetching ... OK Configuring URI-1.69 ... OK Building and testing URI-1.69 ... OK Successfully installed URI-1.69 --> Working on IO::HTML Fetching ... OK Configuring IO-HTML-1.001 ... OK Building and testing IO-HTML-1.001 ... OK Successfully installed IO-HTML-1.001 --> Working on LWP::MediaTypes Fetching ... OK Configuring LWP-MediaTypes-6.02 ... OK Building and testing LWP-MediaTypes-6.02 ... OK Successfully installed LWP-MediaTypes-6.02 Building and testing HTTP-Message-6.11 ... OK Successfully installed HTTP-Message-6.11 Building and testing HTTP-Cookies-6.01 ... OK Successfully installed HTTP-Cookies-6.01 --> Working on WWW::RobotRules Fetching ... OK Configuring WWW-RobotRules-6.02 ... OK Building and testing WWW-RobotRules-6.02 ... OK Successfully installed WWW-RobotRules-6.02 --> Working on HTTP::Daemon Fetching ... OK Configuring HTTP-Daemon-6.01 ... OK Building and testing HTTP-Daemon-6.01 ... OK Successfully installed HTTP-Daemon-6.01 --> Working on HTTP::Negotiate Fetching ... OK Configuring HTTP-Negotiate-6.01 ... OK Building and testing HTTP-Negotiate-6.01 ... OK Successfully installed HTTP-Negotiate-6.01 --> Working on Net::HTTP Fetching ... OK Configuring Net-HTTP-6.09 ... OK Building and testing Net-HTTP-6.09 ... OK Successfully installed Net-HTTP-6.09 Building and testing libwww-perl-6.13 ... OK Successfully installed libwww-perl-6.13 Building and testing XML-Parser-2.44 ... OK Successfully installed XML-Parser-2.44 Building and testing XML-TokeParser-0.05 ... OK Successfully installed XML-TokeParser-0.05 --> Working on Test::Differences Fetching ... OK Configuring Test-Differences-0.63 ... OK Building and testing Test-Differences-0.63 ... OK Successfully installed Test-Differences-0.63 Building and testing XML-Descent-1.04 ... OK Successfully installed XML-Descent-1.04 --> Working on DateTime Fetching ... OK Configuring DateTime-1.21 ... OK ==> Found dependencies: Test::Warnings, DateTime::TimeZone, DateTime::Locale, Params::Validate --> Working on Test::Warnings Fetching ... OK Configuring Test-Warnings-0.021 ... OK ==> Found dependencies: CPAN::Meta::Check --> Working on CPAN::Meta::Check Fetching ... OK Configuring CPAN-Meta-Check-0.012 ... OK ==> Found dependencies: Module::Metadata --> Working on Module::Metadata Fetching ... OK Configuring Module-Metadata-1.000027 ... OK Building and testing Module-Metadata-1.000027 ... OK Successfully installed Module-Metadata-1.000027 (upgraded from 1.000011) Building and testing CPAN-Meta-Check-0.012 ... OK Successfully installed CPAN-Meta-Check-0.012 Building and testing Test-Warnings-0.021 ... OK Successfully installed Test-Warnings-0.021 --> Working on DateTime::TimeZone Fetching ... OK Configuring DateTime-TimeZone-1.94 ... OK ==> Found dependencies: Class::Singleton, Params::Validate, List::Util --> Working on Class::Singleton Fetching ... OK Configuring Class-Singleton-1.5 ... OK Building and testing Class-Singleton-1.5 ... OK Successfully installed Class-Singleton-1.5 --> Working on Params::Validate Fetching ... OK Configuring Params-Validate-1.21 ... OK Building and testing Params-Validate-1.21 ... OK Successfully installed Params-Validate-1.21 --> Working on List::Util Fetching ... OK Configuring Scalar-List-Utils-1.42 ... OK Building and testing Scalar-List-Utils-1.42 ... OK Successfully installed Scalar-List-Utils-1.42 (upgraded from 1.27) Building and testing DateTime-TimeZone-1.94 ... OK Successfully installed DateTime-TimeZone-1.94 --> Working on DateTime::Locale Fetching ... OK Configuring DateTime-Locale-0.92 ... OK Building and testing DateTime-Locale-0.92 ... OK Successfully installed DateTime-Locale-0.92 Building and testing DateTime-1.21 ... OK Successfully installed DateTime-1.21 --> Working on DateTime::Format::ISO8601 Fetching ... OK Configuring DateTime-Format-ISO8601-0.08 ... OK ==> Found dependencies: DateTime::Format::Builder --> Working on DateTime::Format::Builder Fetching ... OK Configuring DateTime-Format-Builder-0.81 ... OK ==> Found dependencies: DateTime::Format::Strptime, Class::Factory::Util --> Working on DateTime::Format::Strptime Fetching ... OK Configuring DateTime-Format-Strptime-1.57 ... OK Building and testing DateTime-Format-Strptime-1.57 ... OK Successfully installed DateTime-Format-Strptime-1.57 --> Working on Class::Factory::Util Fetching ... OK Configuring Class-Factory-Util-1.7 ... OK Building and testing Class-Factory-Util-1.7 ... OK Successfully installed Class-Factory-Util-1.7 Building and testing DateTime-Format-Builder-0.81 ... OK Successfully installed DateTime-Format-Builder-0.81 Building and testing DateTime-Format-ISO8601-0.08 ... OK Successfully installed DateTime-Format-ISO8601-0.08 Building and testing Geo-Gpx-0.26 ... OK Successfully installed Geo-Gpx-0.26 30 distributions installed

Yes that's right. 55 perlmodules were installed as dependencies, which doesn't take the ones I already had installed into account.Of course the most of them are recursive dependencies. But these days developers don't look at the dependency tree when they decide which module to use.

This is just shit. Fucking shit. Stinking shit. Idiotic shit. No wonder most people think perl is dead. Perl itself might be alive but the founding idea behind it is surely dead. What a nightmare.

30 October 2015 | #source