Go to English page

Neuigkeiten

Projektbeschreibung:

An API written in PHP for the OID repository oid-info.com.

The majority of the functions provided by this API helps developers in creating XML files which can be uploaded to the OID repository to add multiple OIDs, but the API also contains other helpful utilities related to OIDs, UUIDs and the OID repository in general. The XML generation can be useful for Registration Authorities (RAs) that want to deliver their assignments to oid-info.com , but also for people who want to support the OID repository by adding OIDs from public sources.
Daniel Marschall
ViaThinkSoft Mitbegründer
Projektbeschreibung:

VGWhoIs is a fork of the tool GWhoIs (currently not actively developed). It allows users to find information about domains, IP addresses, ASN numbers etc by querying the best fitting WhoIs service automatically. The information about the whois services is stored in a pattern file and can be altered or extended by new pattern files.

The usage is pretty simple:

vgwhois example.com
Daniel Marschall
ViaThinkSoft Mitbegründer
Projektbeschreibung:

OIDplus ist eine OpenSource-Datenbanklösung zum Verwalten von Objekt-Identifiern ("OIDs") und vielen anderen Objekttypen (z.B. COM+ GUIDs). Mit OIDplus können Sie Ihre eigene "Registration Authority" betreiben, und ihre erzeugten Objekte entweder öffentlich zur Verfügung stellen, oder nur intern verwalten (versteckt für die Öffentlichkeit). Ihre Objekte und die Schreibrechte darauf können Sie an untergeordnete RAs, also andere Benutzer im System, vererben, sodass diese autonom arbeiten und ihre eigene RA betreiben können.

Die ViaThinkSoft Registration Authority setzt OIDplus 2.0 bereits produktiv ein und bietet Anwendern sogar die Möglichkeit, kostenlose OIDs zu erzeugen.

Wir sind dankbar für jede Person, die OIDplus auf ihrem System installieren möchte, da wir es lieben, wenn sich unser Produkt verbreitet und wir Feedback zur Benutzererfahrung erhalten. Wenn wir Ihnen bei der Installation von OIDplus und der Migration Ihrer Daten nach OIDplus helfen können, teilen Sie uns dies bitte mit. Wir unterstützen Sie dabei kostenlos!

Downloaden/Updaten über SVN (empfohlen):
svn co https://svn.viathinksoft.com/svn/oidplus/trunk/

Systemanforderungen:
- PHP-Kompatibler web server (getestet mit Apache 2, nginx und Microsoft IIS)
- PHP 7.0 oder höher
- PHP-Erweiterung GMP oder BCMath
- PHP-Erweiterung MBString
- PHP-Erweiterung MySQLi, PostgreSQL, PDO oder ODBC
- Datenbank: MySQL/MariaDB (empfohlen), PostgreSQL oder Microsoft SQL Server
- Unabhängig vom Betriebssystem (getestet mit Linux und Windows)

Demo-System anschauen
Daniel Marschall
ViaThinkSoft Mitbegründer
Downloadbeschreibung:

Der YouTube Downloader ist ein Tool für Linux. Es basiert auf dem Tool youtube-dl und bietet einige Zusatzfunktionen wie z.B. das Herunterladen und Suchen in Kanälen oder das Herunterladen von Playlists. Es können sowohl Videos als auch Audio-Dateien heruntergeladen werden. Youtube-IDs können in die ID-Tags von heruntergeladenen MP3-Dateien eingebunden werden. Eine automatisch verwaltete Liste mit bereits heruntergeladenen Videos erlaubt es, die heruntergeladenen Dateien zu verschieben, ohne dass die Videos neu heruntergeladen werden. YouTube Downloader ist vollständig kommandozeilenbasiert und für Cronjobs optimiert.

Anforderungen:
- PHP CLI
- Paket "youtube-dl"
- Falls MP3-Dateien extrahiert werden sollen: "avconv" oder "ffmpeg", sowie optional "id3v2"
- Ein Youtube API-Key (hier kostenlos beantragen)
Daniel Marschall
ViaThinkSoft Mitbegründer
Projektbeschreibung:

LogViewer ist ein kleines Tool für Linux, das Logdateien (üblicherweise von PHP) ausliest und in eine MySQL-Datenbank speichert.
Dort werden die Fehler kategorisiert und nach Eintrittszeitpunkt und Anzahl zusammengefasst.
Über ein Webinterface können die Fehler sortiert und gefiltert werden. Da es das Ziel ist, die Fehler zu korrigieren, kann mit einem Klick der Fehler ausgeblendet werden. Er wird dann nur noch eingeblendet, wenn er trotzdem nocheinmal auftritt.
Daniel Marschall
ViaThinkSoft Mitbegründer
Downloadbeschreibung:

Beta-Release von ViaThinkSoft CryptoChat.
Daniel Marschall
ViaThinkSoft Mitbegründer
Projektbeschreibung:

In this project, you will find various downloads about the PC version of the ancient game "Plumbers Don't Wear Ties".
Daniel Marschall
ViaThinkSoft Mitbegründer
Downloadbeschreibung:

Mit diesem Editor kann die GAME.BIN-Datei geändert werden, um die Szenen des Spiels zu ändern oder neue hinzuzufügen.
Daniel Marschall
ViaThinkSoft Mitbegründer
Downloadbeschreibung:

This engine replaces the original 16-bit engine. It is compatible with all Windows Operating Systems beginning with Windows 95.

If a file called INTRO.AVI is existing, the 32-bit engine will play it at the beginning at the game.
Daniel Marschall
ViaThinkSoft Mitbegründer
32/64 Bit Delphi (Windows 95+):

uses
  MMSystem, Windows;

function Supports16BitWaveout: boolean;
var
  caps: TWaveOutCaps;
begin
  ZeroMemory(@caps, sizeof(caps));
  waveOutGetDevCaps(0, @caps, sizeof(caps));
  result := caps.dwFormats and $CCCCCCCC <> 0;
end;

16 Bit Delphi (Windows 3.x):

uses
  MMSystem;

function Supports16BitWaveout: boolean;
var
  caps: TWaveOutCaps;
begin
  waveOutGetDevCaps(0, @caps, sizeof(caps));
  result := caps.dwFormats and $CCCC <> 0;
end;

Funktionsweise:

{ 11.025 kHz, Mono,   8-bit  }  WAVE_FORMAT_1M08   00000001 and CCCCCCCC = 00000000 ==> "8 Bit"
{ 11.025 kHz, Stereo, 8-bit  }  WAVE_FORMAT_1S08   00000002 and CCCCCCCC = 00000000 ==> "8 Bit"
{ 11.025 kHz, Mono,   16-bit }  WAVE_FORMAT_1M16   00000004 and CCCCCCCC = 00000004 ==> "16 Bit"
{ 11.025 kHz, Stereo, 16-bit }  WAVE_FORMAT_1S16   00000008 and CCCCCCCC = 00000008 ==> "16 Bit"

{ 22.05  kHz, Mono,   8-bit  }  WAVE_FORMAT_2M08   00000010 and CCCCCCCC = 00000000 ==> "8 Bit"
{ 22.05  kHz, Stereo, 8-bit  }  WAVE_FORMAT_2S08   00000020 and CCCCCCCC = 00000000 ==> "8 Bit"
{ 22.05  kHz, Mono,   16-bit }  WAVE_FORMAT_2M16   00000040 and CCCCCCCC = 00000040 ==> "16 Bit"
{ 22.05  kHz, Stereo, 16-bit }  WAVE_FORMAT_2S16   00000080 and CCCCCCCC = 00000080 ==> "16 Bit"

{ 44.1   kHz, Mono,   8-bit  }  WAVE_FORMAT_44M08  00000100 and CCCCCCCC = 00000000 ==> "8 Bit"
{ 44.1   kHz, Stereo, 8-bit  }  WAVE_FORMAT_44S08  00000200 and CCCCCCCC = 00000000 ==> "8 Bit"
{ 44.1   kHz, Mono,   16-bit }  WAVE_FORMAT_44M16  00000400 and CCCCCCCC = 00000400 ==> "16 Bit"
{ 44.1   kHz, Stereo, 16-bit }  WAVE_FORMAT_44S16  00000800 and CCCCCCCC = 00000800 ==> "16 Bit"

{ 48     kHz, Mono,   8-bit  }  WAVE_FORMAT_48M08  00001000 and CCCCCCCC = 00000000 ==> "8 Bit"
{ 48     kHz, Stereo, 8-bit  }  WAVE_FORMAT_48S08  00002000 and CCCCCCCC = 00000000 ==> "8 Bit"
{ 48     kHz, Mono,   16-bit }  WAVE_FORMAT_48M16  00004000 and CCCCCCCC = 00004000 ==> "16 Bit"
{ 48     kHz, Stereo, 16-bit }  WAVE_FORMAT_48S16  00008000 and CCCCCCCC = 00008000 ==> "16 Bit"

{ 96     kHz, Mono,   8-bit  }  WAVE_FORMAT_96M08  00010000 and CCCCCCCC = 00000000 ==> "8 Bit"
{ 96     kHz, Stereo, 8-bit  }  WAVE_FORMAT_96S08  00020000 and CCCCCCCC = 00000000 ==> "8 Bit"
{ 96     kHz, Mono,   16-bit }  WAVE_FORMAT_96M16  00040000 and CCCCCCCC = 00040000 ==> "16 Bit"
{ 96     kHz, Stereo, 16-bit }  WAVE_FORMAT_96S16  00080000 and CCCCCCCC = 00080000 ==> "16 Bit"
Daniel Marschall
ViaThinkSoft Mitbegründer

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using System.Threading;
using System.Net.Sockets;
using System.Net;
using System.Linq;

namespace ConsoleApp6
{

    class Program
    {


        public class AtomzeitAsync
        {
            public struct Atomzeit
            {
                public string server;
                public DateTime zeit;
            }

            protected static DateTime GetNetworkTime(string ntpServer, bool utc = false)
            {
                // https://stackoverflow.com/questions/1193955/how-to-query-an-ntp-server-using-c

                // NTP message size - 16 bytes of the digest (RFC 2030)
                var ntpData = new byte[48];

                //Setting the Leap Indicator, Version Number and Mode values
                ntpData[0] = 0x1B; //LI = 0 (no warning), VN = 3 (IPv4 only), Mode = 3 (Client Mode)

                var addresses = Dns.GetHostEntry(ntpServer).AddressList;

                //The UDP port number assigned to NTP is 123
                var ipEndPoint = new IPEndPoint(addresses[0], 123);
                //NTP uses UDP

                using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
                {
                    socket.Connect(ipEndPoint);

                    //Stops code hang if NTP is blocked
                    socket.ReceiveTimeout = 3000;

                    socket.Send(ntpData);
                    socket.Receive(ntpData);
                    socket.Close();
                }

                //Offset to get to the "Transmit Timestamp" field (time at which the reply 
                //departed the server for the client, in 64-bit timestamp format."
                const byte serverReplyTime = 40;

                //Get the seconds part
                ulong intPart = BitConverter.ToUInt32(ntpData, serverReplyTime);

                //Get the seconds fraction
                ulong fractPart = BitConverter.ToUInt32(ntpData, serverReplyTime + 4);

                //Convert From big-endian to little-endian
                intPart = SwapEndianness(intPart);
                fractPart = SwapEndianness(fractPart);

                var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);

                //**UTC** time
                var networkDateTime = (new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddMilliseconds((long)milliseconds);

                return utc ? networkDateTime : networkDateTime.ToLocalTime();
            }

            private static uint SwapEndianness(ulong x)
            {
                // https://stackoverflow.com/questions/1193955/how-to-query-an-ntp-server-using-c
                // stackoverflow.com/a/3294698/162671
                return (uint)(((x & 0x000000ff) << 24) +
                               ((x & 0x0000ff00) << 8) +
                               ((x & 0x00ff0000) >> 8) +
                               ((x & 0xff000000) >> 24));
            }

            static AtomzeitAsync()
            {
                string zeitServerFile = "TimeserverNTP.txt";
                if (File.Exists(zeitServerFile))
                {
                    bool containsSomething = false;
                    var lines = File.ReadAllLines(zeitServerFile);
                    foreach (var line in lines)
                    {
                        if (line.Trim() == "") continue;
                        if (line.Trim().Substring(0, 1) == "#") continue;
                        containsSomething = true;
                        break;
                    }
                    if (containsSomething)
                    {
                        Array.Resize(ref servers, 0);
                        foreach (var line in lines)
                        {
                            if (line.Trim() == "") continue;
                            if (line.Trim().Substring(0, 1) == "#") continue;
                            Array.Resize(ref servers, servers.Length + 1);
                            servers[servers.Length - 1] = line.Trim();
                        }
                    }
                }
                else
                {
                    string[] dummyList = { };
                    File.WriteAllLines(zeitServerFile, dummyList.ToList());
                }
            }
            public static string[] servers = {
        "ptbtime1.ptb.de",
        "ptbtime2.ptb.de",
        "ptbtime3.ptb.de"
        };

            public static Atomzeit? GetAtomzeit(int timeout = 1000)
            {
                List<Task<Atomzeit>> tasks = new List<Task<Atomzeit>>();

                int bakWorkerThreads = 0;
                int bakCompletionPortThreads = 0;
                ThreadPool.GetMinThreads(out bakWorkerThreads, out bakCompletionPortThreads);
                ThreadPool.SetMinThreads(bakWorkerThreads + servers.Length, bakCompletionPortThreads + servers.Length);
                try
                {
                    for (int i = 0; i < servers.Length; i++)
                    {
                        tasks.Add(GetFileLengthsAsync(servers[i], false));
                    }

                    Thread.Sleep(timeout);

                    for (int ctr = 0; ctr < tasks.Count; ctr++)
                    {
                        if (tasks[ctr].Status == TaskStatus.RanToCompletion)
                        {
                            return tasks[ctr].Result;
                        }
                    }

                    return null;
                }
                finally
                {
                    ThreadPool.SetMinThreads(bakWorkerThreads, bakCompletionPortThreads);
                }
            }

            private static Task<Atomzeit> GetFileLengthsAsync(string serverIp, bool utc)
            {
                return Task.Factory.StartNew(() =>
                {
                    // Variable für Fehlermeldungen
                    string errors = null;

                    try
                    {
                        Atomzeit res = new Atomzeit();
                        res.server = serverIp;
                        res.zeit = GetNetworkTime(serverIp, utc);
                        return res;
                    }
                    catch (Exception ex)
                    {
                        // Fehler dokumentieren
                        if (errors != null) errors += "\r\n";
                        errors += "Fehler bei der Abfrage von '" +
                           serverIp + ": " + ex.Message;
                    }

                    // Wenn die Methode hier ankommt, sind bei allen Abfragen
                    // Fehler aufgetreten, also eine Ausnahme werfen
                    throw new Exception(errors);
                });
            }

        }

        public static void Main()
        {
            AtomzeitAsync.Atomzeit? az = AtomzeitAsync.GetAtomzeit();
            if (az == null)
            {
                Console.WriteLine("Atomzeit konnte nicht ermittelt werden");
            }
            else
            {
                Console.WriteLine("Atomzeit: {0} gemeldet durch {1}", ((AtomzeitAsync.Atomzeit)az).zeit, ((AtomzeitAsync.Atomzeit)az).server);
            }

            Console.ReadLine();
        }

    }
}
Daniel Marschall
ViaThinkSoft Mitbegründer
ATTENTION: The DayTime-Protocol is outdated! Please use the NTP variant here.

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Net.Sockets;

namespace ConsoleApp6
{

    class Program
    {
        public class AtomzeitAsync
        {
            public struct Atomzeit
            {
                public string server;
                public DateTime zeit;
            }
            public static string[] servers = { "time-a.nist.gov", "time-b.nist.gov", "time.nist.gov", "utcnist.colorado.edu", "nist1.datum.com" };
            public static Atomzeit? GetAtomzeit(int timeout = 1000)
            {
                List<Task<Atomzeit>> tasks = new List<Task<Atomzeit>>();

                int bakWorkerThreads = 0;
                int bakCompletionPortThreads = 0;
                ThreadPool.GetMinThreads(out bakWorkerThreads, out bakCompletionPortThreads);
                ThreadPool.SetMinThreads(bakWorkerThreads + servers.Length, bakCompletionPortThreads + servers.Length);
                try
                {
                    for (int i = 0; i < servers.Length; i++)
                    {
                        tasks.Add(GetFileLengthsAsync(servers[i], false));
                    }

                    Thread.Sleep(timeout);

                    for (int ctr = 0; ctr < tasks.Count; ctr++)
                    {
                        if (tasks[ctr].Status == TaskStatus.RanToCompletion)
                        {
                            return tasks[ctr].Result;
                        }
                    }
                    return null;
                }
                finally
                {
                    ThreadPool.SetMinThreads(bakWorkerThreads, bakCompletionPortThreads);
                }
            }

            private static Task<Atomzeit> GetFileLengthsAsync(string serverIp, bool utc)
            {
                return Task.Factory.StartNew/*Task.Run*/(() =>
                {


                        // Variable für Fehlermeldungen
                        string errors = null;

                    TcpClient tcpClient = null;
                    try
                    {
                            // TcpClient erzeugen und den Empfangs-Timeout auf eine Sekunde
                            // setzen
                            tcpClient = new TcpClient();
                        tcpClient.ReceiveTimeout = 1000;

                            // Versuch zum aktuellen Server eine Verbindung aufzubauen
                            tcpClient.Connect(serverIp, 13);

                            // Den NetworkStream referenzieren
                            NetworkStream networkStream = tcpClient.GetStream();

                        string result = null;
                        if (networkStream.CanWrite && networkStream.CanRead)
                        {
                                // Das Ergebnis empfangen und in ASCII konvertieren
                                byte[] bytes = new byte[tcpClient.ReceiveBufferSize];
                            try
                            {
                                networkStream.Read(bytes, 0,
                                   (int)tcpClient.ReceiveBufferSize);
                                result = Encoding.ASCII.GetString(bytes);
                            }
                            catch (Exception ex)
                            {
                                    // Fehler dokumentieren
                                    if (errors != null) errors += "\r\n";
                                errors += "Fehler bei der Abfrage von '" + serverIp +
                                   ": " + ex.Message;
                            }
                        }

                        if (result != null)
                        {
                                // Das Ergebnis, das die Form JJJJJ YR-MO-DA HH:MM:SS TT L H msADV 
                                // UTC(NIST) OTM besitzt, in einzelne Token aufsplitten
                                string[] token = result.Split(' ');

                                // Anzahl der Token überprüfen
                                if (token.Length >= 6)
                            {
                                    // Den Health-Status auslesen und überprüfen
                                    string health = token[5];
                                if (health == "0")
                                {
                                        // Alles ok:  Datums- und Zeitangaben auslesen
                                        string[] dates = token[1].Split('-');
                                    string[] times = token[2].Split(':');

                                        // DateTime-Instanz mit diesen Daten erzeugen
                                        System.DateTime utcDate =
                                   new System.DateTime(Int32.Parse(dates[0]) + 2000,
                                   Int32.Parse(dates[1]), Int32.Parse(dates[2]),
                                   Int32.Parse(times[0]), Int32.Parse(times[1]),
                                   Int32.Parse(times[2]));

                                        // Lokale Zeit berechnen und zurückgeben
                                        if (utc)
                                    {
                                        Atomzeit res = new Atomzeit();
                                        res.server = serverIp;
                                        res.zeit = utcDate;
                                        return res;
                                    }
                                    else
                                    {
                                        Atomzeit res = new Atomzeit();
                                        res.server = serverIp;
                                        res.zeit = TimeZone.CurrentTimeZone.ToLocalTime(utcDate);
                                        return res;
                                    }
                                }
                                else
                                {
                                        // Fehler dokumentieren
                                        if (errors != null) errors += "\r\n";
                                    errors += "Fehler bei der Abfrage von '" + serverIp +
                                       ": Der Health-Status ist " + health;
                                }
                            }
                            else
                            {
                                    // Fehler dokumentieren
                                    if (errors != null) errors += "\r\n";
                                errors += "Fehler bei der Abfrage von '" + serverIp +
                                   ": Die Anzahl der Token ist kleiner als 6";
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                            // Fehler dokumentieren
                            if (errors != null) errors += "\r\n";
                        errors += "Fehler bei der Abfrage von '" +
                           serverIp + ": " + ex.Message;
                    }
                    finally
                    {
                        try
                        {
                                // TcpClient schließen
                                tcpClient.Close();
                        }
                        catch { }
                    }

                        // Wenn die Methode hier ankommt, sind bei allen Abfragen
                        // Fehler aufgetreten, also eine Ausnahme werfen
                        throw new Exception(errors);
                });
            }

        }

        public static void Main()
        {
            AtomzeitAsync.Atomzeit? az = AtomzeitAsync.GetAtomzeit();
            if (az == null)
            {
                Console.WriteLine("Atomzeit konnte nicht ermittelt werden");
            }
            else
            {
                Console.WriteLine("Atomzeit: {0} gemeldet durch {1}", ((AtomzeitAsync.Atomzeit)az).zeit, ((AtomzeitAsync.Atomzeit)az).server);
            }

            Console.ReadLine();
        }

    }
}
Daniel Marschall
ViaThinkSoft Mitbegründer
Projektbeschreibung:



VNag (ViaThinkSoft Nagios) ist ein Framework für PHP, das es erlaubt, Plugins für Nagios-kompatible Systeme (z.B. auch Icinga2) gemäß den Richtlinien zu erstellen.

Das Download-Paket enthält Dokumentation und Beispiele und eine Vielzahl an neuen Plugins, z.B. um eine WordPress-Installation auf Updates zu überprüfen.

VNag ermöglicht es nicht nur, normale Nagios/Icinga-Plugins zu entwickeln (PHP wird über CLI aufgerufen), sondern erlaubt auch, ein Plugin über das Web zur Verfügung zu stellen:

  • Das ist PHP geschriebene Plugin kann über einen HTTP-Daemon (z.B. Apache) im Browser angezeigt werden. Neben der Anzeige der Nagios-Ausgabe (Summary, Verbose information, Performance data) können beliebige HTML-Ausgaben hinzugefügt werden, um z.B. noch Diagramme zu präsentieren. Es ist nur eine Codebasis erforderlich!

  • Die Web-Ausgabe enthält einen maschinenlesbaren (unsichtbaren) Teil, der mit Hilfe des "web reader"-Plugins von VNag ausgelesen und in das Standardformat für die Überwachung mit einer lokalen Nagios Instanz umgewandelt werden kann. Somit ist es z.B. möglich, mittels Nagios bestimmte Dinge (z.B. eine WordPress-Version) auf einem entfernten System, bei dem kein Shell-Zugriff möglich oder kein Nagios installiert ist, zu überwachen.

  • Es ist auch möglich, Webseiten zu erzeugen, die nur einen unsichtbaren maschinenlesbaren Teil besitzen (bzw. Sie können eine VNag Ausgabe in Ihre bestehende Webseite einbinden), jedoch ohne visuellen Teil. Dieser maschinenlesbare Teil kann optional signiert und/oder verschlüsselt werden.

Im Download-Paket von VNag sind folgende Plugins enthalten:

  • 4images_version: Prüft 4images Installationen auf verfügbare Updates.
  • disk_running: Prüft, ob Festplatten, die über keine SMART-Funktionalität verfügen, online sind
  • file_timestamp: Warnt, wenn Dateien in einem bestimmten Interval nicht aktualisiert wurden, bzw. wenn sie ein gewisses Alter erreicht haben.
  • ipfm: Prüft die Log-Dateien des Tools "ipfm" und warnt, wenn der gemessene Traffic das Monatslimit erreicht.
  • joomla_version: Prüft Joomla Installationen auf verfügbare Updates.
  • last: Prüft die Ausgabe des Tools "last" und warnt, wenn Logins aus verdächtigen IP-Adressen festgestellt wurden.
  • mdstat: Wertet die Datei "/proc/mdstat" aus und warnt, wenn Festplatten in einem RAID-Array ausfallen.
  • mediawiki_version: Prüft MediaWiki Installationen auf verfügbare Updates.
  • pmwiki_version: Prüft PmWiki Installationen auf verfügbare Updates.
  • net2ftp_version: Prüft net2ftp Installationen auf verfügbare Updates.
  • nocc_version: Prüft NOCC webmail Installationen auf verfügbare Updates.
  • openbugbounty: Warnt, wenn Ihre Domains bei OpenBugBounty.org auftauchen.
  • phpbb_version: Prüft phpBB Installationen auf verfügbare Updates.
  • phpmyadmin_version: Prüft phpMyAdmin Installationen auf verfügbare Updates.
  • roundcube_version: Prüft RoundCube Installationen auf verfügbare Updates.
  • smart: Prüft SMART Attribute der Festplatten und warnt wenn kritische Werte entdeckt werden.
  • virtual_mem: Prüft die Größe des virtuellen Speichers (Physikalischer Speicher und Swap).
  • webreader: Lies die Ausgabe eines VNag plugins auf einem entfernten System, übertragen per HTTP.
  • wordpress_version: Prüft WordPress Installationen auf verfügbare Updates.
  • x509_expire: Prüft X.509 (PEM) Dateien und warnt, wenn diese ein gewisses Alter erreichen.
Daniel Marschall
ViaThinkSoft Mitbegründer
Projektbeschreibung:

This small class in PHP has following functionalities:

- Get MIME Type from a filename (useful if your system does not support mime_content_type)
- Get a name/description of a given file or filename

The project contains a small lookup-table for file type names in English.
Daniel Marschall
ViaThinkSoft Mitbegründer
Projektbeschreibung:

This small class in PHP has following functionalities:

- Get MIME Type from a filename (useful if your system does not support mime_content_type)
- Get a name/description of a given file or filename

The project contains a small lookup-table for file type names in English.
Daniel Marschall
ViaThinkSoft Mitbegründer
Projektbeschreibung:

FastPHP ist ein einfacher und dennoch komfortabler Editor/IDE für PHP.

Besondere Funktionen:
  • Sehr schnelle Ladezeit, ähnlich Notepad
  • Syntax-Highlighting
  • Code-Explorer
  • Ausführen von PHP-Dateien in der IDE ohne Browser
  • PHP Lint
  • Automatisches Umwandeln von Leerzeichen in Tabs
  • Integrierte PHP-Hilfe zu jeder Funktion per F1-Tastendruck
  • Möglichkeiten, PHP-Dateien ähnlich wie HTA-Dateien per Doppelklick auszuführen.
  • Dunkles und Helles Design
  • Formatierungszeichen anzeigen
Daniel Marschall
ViaThinkSoft Mitbegründer
Projektbeschreibung:

ViaThinkSoftSimpleLogEvent offers a COM interface for easily logging things into the Windows Event Log.

Using a COM interface enables some applications which cannot call arbitary DLL functions (like PHP) to write to the Event Log.

Additionally, ViaThinkSoftSimpleLogEvent registeres a "Log Event Provider" which will prevent the message "The description for Event ID ... from source ... cannot be found" that would show up if you would call the WinAPI function "ReportEvent" without MessageTable/Provider.


Example usage with VBScript

Dim objMyObject

set objMyObject = CreateObject("ViaThinkSoftSimpleLogEvent.ViaThinkSoftSimpleEventLog")

const LOGEVENT_MSG_SUCCESS       = 0
const LOGEVENT_MSG_INFORMATIONAL = 1
const LOGEVENT_MSG_WARNING       = 2
const LOGEVENT_MSG_ERROR         = 3

objMyObject.LogEvent "MySourceName", LOGEVENT_MSG_WARNING, "This is a test warning written by VBS"

Example usage with PHP

define('CLASS_ViaThinkSoftSimpleEventLog', '{E4270053-A217-498C-B395-9EF33187E8C2}');

define('LOGEVENT_MSG_SUCCESS',       0);
define('LOGEVENT_MSG_INFORMATIONAL', 1);
define('LOGEVENT_MSG_WARNING',       2);
define('LOGEVENT_MSG_ERROR',         3);

$x = new COM(CLASS_ViaThinkSoftSimpleEventLog);
$x->LogEvent('MySourceName', LOGEVENT_MSG_WARNING, 'This is a test warning written by PHP');

Example usage with Delphi

uses
  ActiveX,
  ViaThinkSoftSimpleLogEvent_TLB;

procedure LogTest;
var
  x: IViaThinkSoftSimpleEventLog;
begin
  CoInitialize(nil); // needs to be called only once
  x := CoViaThinkSoftSimpleEventLog.Create;
  x.LogEvent('MySourceName', ViaThinkSoftSimpleLogEvent_TLB.Warning, 'This is a test warning written by Delphi');
  x := nil;
end;
Daniel Marschall
ViaThinkSoft Mitbegründer

Screenshots zu diesem Projekt

  Beispiel eines Logbuch-Eintrags  
Projektbeschreibung:

FastPHP ist ein einfacher und dennoch komfortabler Editor/IDE für PHP.

Besondere Funktionen:
  • Sehr schnelle Ladezeit, ähnlich Notepad
  • Syntax-Highlighting
  • Code-Explorer
  • Ausführen von PHP-Dateien in der IDE ohne Browser
  • PHP Lint
  • Automatisches Umwandeln von Leerzeichen in Tabs
  • Integrierte PHP-Hilfe zu jeder Funktion per F1-Tastendruck
  • Möglichkeiten, PHP-Dateien ähnlich wie HTA-Dateien per Doppelklick auszuführen.
  • Dunkles und Helles Design
  • Formatierungszeichen anzeigen
Daniel Marschall
ViaThinkSoft Mitbegründer
Downloadbeschreibung:

Dieser Patch behebt einige Fehler in der Deutschen und Englischen Ausgabe des Spiels.

Bei der zensierten (FSK12) Fassung des Spiels wurden die Videofehler, die zu einem schwarzen Raum geführt haben, behoben. Damit das Spiel trotzdem weiterhin FSK12 bleibt, wurden die Bilder der Geiseln durch transparente Stellen ersetzt.

Eine Liste der Änderungen ist hier zu finden (in Englisch)
Daniel Marschall
ViaThinkSoft Mitbegründer
Downloadbeschreibung:

Dieser Patch ist nur für die zensierte Fassung der Spielebox von ALDI notwendig (schwarze CD mit orangener Schrift). Die Version aus dem Einzelhandel ist FSK 16 und besitzt keinerlei zensierten Videos.

Dieser inoffizielle Patch ersetzt zensierte Videos mit den Videos der deutschen Vollversion. Es wurden beispielsweise alle Abbildungen von Bomben, Explosions-Animationen, dem Helikopterabsturz oder Videos mit der weinenden Tochter durch Standbilder ersetzt.

Dieser Patch ist vor allem deswegen notwendig, da bei der Zensur Fehler unterlaufen sind, wodurch einige Räume schwarz dargestellt wurden, und man blind klicken musste.
Daniel Marschall
ViaThinkSoft Mitbegründer