Kategorie: Programmierung

Net::SSLeay: load_file:Das angegebene Modul wurde nicht gefunden

· · 0 Kommentare

Der Versuch, das Perl-Modul "WWW::Mechanize" zu installieren scheitert mit der Meldung, daß ein Modul nicht gefunden werden kann:

cpan> install WWW::Mechanize
...
Can't load 'C:/Strawberry/perl/vendor/lib/auto/Net/SSLeay/SSLeay.xs.dll' for module Net::SSLeay: load_file:Das angegebene Modul wurde nicht gefunden at C:/Strawberry/perl/lib/DynaLoader.pm line 193.
  at C:/Strawberry/perl/vendor/lib/IO/Socket/SSL.pm line 19.
...
Can't load 'C:/Strawberry/perl/vendor/lib/auto/Crypt/SSLeay/SSLeay.xs.dll' for module Crypt::SSLeay: load_file:Das angegebene Modul wurde nicht gefunden at C:/Strawberry/perl/lib/DynaLoader.pm line 193.
  at C:/Strawberry/perl/vendor/lib/Net/SSL.pm line 20.
...

Die ausgegebene Fehlermeldung führt allerdings zuerst auf eine falsche Fährte, denn in angegebenen Ordnern ist das Modul sehr wohl zu finden:

C:\>dir C:\Strawberry\perl\vendor\lib\auto\Net\SSLeay\SSLeay.xs.dll
...
 Verzeichnis von C:\Strawberry\perl\vendor\lib\auto\Net\SSLeay

17.03.2020  05:24           485.888 SSLeay.xs.dll
...

C:\>dir C:\Strawberry\perl\vendor\lib\auto\Crypt\SSLeay\SSLeay.xs.dll
...
 Verzeichnis von C:\Strawberry\perl\vendor\lib\auto\Crypt\SSLeay

17.03.2020  05:26            59.904 SSLeay.xs.dll
...

Die Ursachenforschung im Internet führt überwiegend zu Treffern, die darauf hin deuten, daß ein Problem mit Modulabhängigkeiten besteht und überprüft werden sollte, ob der der Ordner "C:\Strawberry\c\bin" im Pfad enthalten ist. Dies ist der Fall:

Path=...;C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;

Eine Analyse mit Microsofts Process Monitor zeigt, daß es an insgesamt drei Modulen aus dem Ordner "C:\Strawberry\c\bin" liegt, die trotz vorhandenem Pfad-Eintrag nicht gefunden werden.

 

Zum Beheben des Fehlers können entweder die drei Module in den Ordner "C:\Strawberry\perl\vendor\lib\auto\Net\SSLeay\" kopiert oder (als vielleicht elegantere Lösung) entsprechende Links gesetzt werden:

C:\>cd C:\Strawberry\perl\vendor\lib\auto\Net\SSLeay\

C:\Strawberry\perl\vendor\lib\auto\Net\SSLeay>mklink libcrypto-1_1-x64__.dll C:\Strawberry\c\bin\libcrypto-1_1-x64__.dll
symbolische Verknüpfung erstellt für libcrypto-1_1-x64__.dll <<===>> C:\Strawberry\c\bin\libcrypto-1_1-x64__.dll

C:\Strawberry\perl\vendor\lib\auto\Net\SSLeay>mklink libssl-1_1-x64__.dll C:\Strawberry\c\bin\libssl-1_1-x64__.dll
symbolische Verknüpfung erstellt für libssl-1_1-x64__.dll <<===>> C:\Strawberry\c\bin\libssl-1_1-x64__.dll

C:\Strawberry\perl\vendor\lib\auto\Net\SSLeay>mklink zlib1__.dll C:\Strawberry\c\bin\zlib1__.dll
symbolische Verknüpfung erstellt für zlib1__.dll <<===>> C:\Strawberry\c\bin\zlib1__.dll

Anschließend läuft die Installation ohne Probleme durch:

cpan> install WWW::Mechanize
...
All tests successful.
Files=62, Tests=816, 147 wallclock secs ( 0.23 usr + 0.19 sys = 0.42 CPU)
Result: PASS

Referrer oder Referer?

· · 0 Kommentare

Ich bin gerade darüber gestolpert, daß der Referrer in der Verwendung als HTTP_REFERER nur mit einem "R" geschrieben wird. Wie die Wikipedia erläutert, ist ein Versehen in der RFC 2068 dafür verantwortlich:

Die korrekte englische Schreibweise lautet Referrer. Der ursprüngliche RFC (RFC 2068) enthielt jedoch versehentlich die falsche Schreibweise Referer und erhebt diesen Wortlaut damit zum Standard innerhalb von HTTP. [Quelle]


Windows-Hintergrundbild mit Perl setzen

· · 0 Kommentare

Das Setzen des Windows-Hintergrundbilds ist von Perl aus ganz einfach - zumindest wenn man die Win32-API verwendet:

use strict;
use warnings;
use Win32::API;

use constant SPI_SETDESKWALLPAPER => 0x0014;
use constant SPIF_UPDATEINIFILE   => 0x0001;
use constant SPIF_SENDCHANGE      => 0x0002;
use constant ZERO                 => 0x0000;

my $syspinf = Win32::API->new('user32', 'SystemParametersInfo', [I,I,P,I], I) or die "SystemParametersInfo not available.\n";

$syspinf->Call(SPI_SETDESKWALLPAPER, ZERO, $ARGV[0], SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);

Das Skript erwartet den Namen des Bildes inklusive Pfad als Parameter.


Javascript, Objekte, Werte und Referenzen

· · 0 Kommentare

Im Gegensatz zu einigen anderen Sprachen kopiert JavaScript bei einer Zuweisung lediglich bei der Verwendung primitiver Datenelemente den Wert der ursprünglichen Variablen. Bei allen anderen Datenstrukturen wird nur die Referenz kopiert, was zu unerwarteten und unerwünschten Ergebnissen führen kann.

var band = {
	name : 'Deep Purple',
	year : 1968,
	members : {
		vocals : 'Rod Evans',
		guitar : 'Ritchie Blackmore'
	}
}

Wird einer zweiten Variablen der Wert der ersten Variable zugewiesen, so wird intern keine Kopie der Werte erzeugt, sondern lediglich die Referenz auf die Werte kopiert. Dies führt dazu, daß bei einer Änderung von "band2" auch "band" geändert wird.

var band2 = band;
band2.year = 1969;

console.log(band);

{
"name": "Deep Purple",
"year": 1969,
"members": {
	"vocals": "Rod Evans",
	"guitar": "Ritchie Blackmore"
}
}

Weiterlesen


plxPilot

· · 0 Kommentare

Eines der wenigen Spiele, das ich unter Android mehr oder minder auf allen meinen Geräten installiert habe ist Radiant - ein sog. Shoot ’em up, das mit seiner leuchtenden Grafik die wenigen Pixel gekonnt in Szene setzt.

Durch ein paar neuerliche Runden kam die Idee, selbst ein paar Sprites über den Bildschirm fliegen zu lassen - etwas, das ich seit meinen wenig erfolgreichen Gehversuchen auf dem Commodore 64 eigentlich nicht mehr getan habe.

Testflug

Da auch über 30 Jahre nach ihrem Erscheinen Spiele wie Uridium und Katakis noch in mehr als guter Erinnerung waren, folgten ein paar neuerliche Runden (diesmal allerdings ohne den C64 aus dem Kellerverlies zu befreien mit Hilfe der C64 Classix), bevor der Entschluss feststand, selbst einen Shooter nach Retro-Art zu basteln.

Die Suche nach passender Technik führte zu Phaser 3, welches ein solides Grundgerüst für die Entwicklung plattformunabhängiger Spiele in Javascript bietet und an Infrastruktur außer Texteditor und Browser eigentlich nichts benötigt. Zu Phaser gibt es eine gute Dokumentation, zahlreiche Beispiele und Tutorials, so daß der Einstieg nicht allzu schwer fällt. Die verwendeten Grafiken sind alle selbstgemacht und wurden zum Teil mit GrafX2 erstellt, welches bereits beim Zeichnen das notwenige Retro-Gefühl vermittelt.

Das Ziel ist nicht, sich mit den Klassikern zu messen. Was Andrew Braybrook, Manfred Trenz oder Stavros Fasoulas geschaffen haben sind zeitlose Meisterwerke, die sich auch 2020 nicht zu verstecken brauchen. Mein persönliches Ziel ist überhaupt mal wieder kreativ am Bildschirm tätig zu sein, neue Dinge zu erlernen und dabei eine kleine Hommage an die Helden meiner Jugend entstehen zu lassen.

pxlPilot ist Work in progress, ob es jemals fertig wird, steht in den Sternen ...

Weiterlesen