kostenloser Webspace werbefrei: lima-city


Suche auf lima-city

  • in: C# (.exe) mysql passwort -> sicher?

    geschrieben von riku79

    Die eigentlich sicherste Methode finde ich selbst das "Tunneln". Das heißt, das du nicht die Datenbank auf direktem Wege kontaktierst, sondern in Wirklichkeit ein PHP-Script anlegst, welches die Anfrage weiterleitet. EMS Database Manager hatte da mal eine Datei namens emsproxy.php.
    Sind etwa 9 KB gewesen, allerdings mit unverschlüsselter Verbindung.
    Ich hab die Datei sogar noch da, falls du sie dir abkopieren möchtest:

    <?
        header('Content-Type: application/octet-stream');
         
        error_reporting(125);
        $data = '';
         
        function err( $error )
        {
        die("err: $error");
        }
         
        function myerr()
        {
        $e = mysql_error();
        mysql_free_result( mysql_query( 'ROLLBACK' ) );
        err( $e );
        }
         
        function pgerr( $err )
        {
        $e = pg_last_error();
        if( $e == '' ) $e = $err;
        if( $e == '' ) $e = 'unknown pgsql error';
        pg_free_result( pg_query( 'ROLLBACK' ) );
        err( $e );
        }
         
         
        function dump( $val )
        {
        global $data;
        $len = strlen($val);
        if( $len < 255 )
        $data .= chr($len);
        else
        $data .= "\xFF".pack('V',$len);
        $data .= $val;
        }
         
         
        array_key_exists('server',$_POST) and array_key_exists('host',$_POST) and array_key_exists('port',$_POST) and array_key_exists('user',$_POST) and array_key_exists('password',$_POST) and array_key_exists('dbname',$_POST) or err("mailformed request");
         
        if( get_magic_quotes_gpc() )
        foreach( $_POST as $key => $value )
        $_POST[$key] = stripslashes($value);
         
         
        $commit = array_key_exists('commit',$_POST);
         
        if( $_POST['server'] == 'mysql' ) {
         
        $host = $_POST['host'];
        if( $_POST['port'] )
        $host .= ':'.$_POST['port'];
        $conn = mysql_connect($host,$_POST['user'],$_POST['password']) or myerr();
        if( $_POST['dbname'] != '' )
        mysql_select_db( $_POST['dbname'] ) or myerr();
         
        $result = FALSE;
        mysql_free_result( mysql_query( 'BEGIN' ) );
        for( $rn = 1; $rn < 1000; ++$rn ) {
        if( !array_key_exists( 'r'.$rn, $_POST ) )
        break;
        $data = '';
        $req = $_POST['r'.$rn];
        if( $req == 'connect' ) {
        dump( mysql_get_server_info() );
        dump( mysql_get_client_info() );
        dump( mysql_get_proto_info() );
        dump( mysql_get_host_info() );
        } else {
        $result = mysql_query($req) or myerr();
        if( $result === TRUE ) {
        dump( 0 );
        dump( mysql_affected_rows() );
        } else {
        $width = mysql_num_fields($result);
        $height = mysql_num_rows($result);
        dump($width);
        dump($height);
        for( $i = 0; $i < $width; ++$i ) {
        dump( mysql_field_name( $result, $i ) );
        $type = mysql_field_type( $result, $i );
        $len = mysql_field_len( $result, $i );
        $meta = mysql_fetch_field( $result, $i );
        $sflags = explode( ' ', mysql_field_flags ( $result, $i ) );
        $fl = 0;
        if( $meta->not_null ) $fl += 1;
        if( $meta->primary_key ) $fl += 2;
        if( $meta->unique_key ) $fl += 4;
        if( $meta->multiple_key ) $fl += 8;
        if( $meta->blob ) $fl += 16;
        if( $meta->unsigned ) $fl += 32;
        if( $meta->zerofill ) $fl += 64;
        if( in_array( 'binary', $sflags ) ) $fl += 128;
        if( in_array( 'enum', $sflags ) ) $fl += 256;
        if( in_array( 'auto_increment', $sflags ) ) $fl += 512;
        if( in_array( 'timestamp', $sflags ) ) $fl += 1024;
        if( in_array( 'set', $sflags ) ) $fl += 2048;
        if( $type == 'int' ) {
        if( $len > 11 ) $type = 8; # LONGLONG
        elseif( $len > 9 ) $type = 3; # LONG
        elseif( $len > 6 ) $type = 9; # INT24
        elseif( $len > 4 ) $type = 2; # SHORT
        else $type = 1; # TINY
        } elseif( $type == 'real' ) {
        if( $len == 12 ) $type = 4; # FLOAT
        elseif( $len == 22 ) $type = 5; # DOUBLE
        else $type = 1; # DECIMAL
        } elseif( $type == 'null' ) $type = 6; # NULL
        elseif( $type == 'timestamp' ) $type = 7; # TIMESTAMP
        elseif( $type == 'date' ) $type = 10; # DATE
        elseif( $type == 'time' ) $type = 11; # TIME
        elseif( $type == 'datetime' ) $type = 12; # DATETIME
        elseif( $type == 'year' ) $type = 13; # YEAR
        elseif( $type == 'blob' ) {
        if( $len > 65536 ) $type = 251; # LONG BLOB
        elseif( $len > 255 ) $type = 252; # BLOB
        else $type = 249; # TINY BLOB
        } elseif( $type == 'string' ) $type = 253; # VARCHAR
        else
        $type = 252;
        dump( $type );
        dump( $fl );
        dump( $len );
        }
        for( $i = 0; $i < $height; ++$i ) {
        $row = mysql_fetch_row( $result );
        for( $j = 0; $j < $width; ++$j )
        if( is_null($row[$j]) )
        dump( '' );
        else
        dump( ' '.$row[$j] );
        }
        mysql_free_result( $result );
        }
        }
        }
        mysql_free_result( mysql_query( $commit ? 'COMMIT' : 'ROLLBACK' ) );
         
        } elseif( $_POST['server'] == 'pgsql' ) {
         
        $conn = '';
        if( $_POST['host'] != '' ) $conn .= "host=$_POST[host]";
        if( $_POST['port'] != '' ) $conn .= " port=$_POST[port]";
        if( $_POST['dbname'] != '' ) $conn .= " dbname=$_POST[dbname]";
        if( $_POST['user'] != '' ) $conn .= " user=$_POST[user]";
        if( $_POST['password'] != '' ) $conn .= " password=$_POST[password]";
        $conn = pg_connect( $conn ) || pgerr('some connection error');
         
        if( !$commit || array_key_exists( 'r2', $_POST ) )
        pg_free_result( pg_query( 'BEGIN' ) );
        $result = FALSE;
        for( $rn = 1; $rn < 1000; ++$rn ) {
        if( !array_key_exists( 'r'.$rn, $_POST ) )
        break;
        $data = '';
        $req = $_POST['r'.$rn];
        if( $req == 'connect' ) {
        dump( 0 );
        dump( 0 );
        dump( 0 );
        } elseif( substr($req,0,11) == 'blob_create' ) {
        list($oid) = sscanf( $req, 'blob_create %u' );
        pg_free_result( pg_query( $commit ? 'COMMIT' : 'ROLLBACK' ) );
        pg_free_result( pg_query( 'BEGIN' ) );
        $oid = pg_lo_create() or pgerr('lo_create failed');
        pg_free_result( pg_query( 'COMMIT' ) );
        pg_free_result( pg_query( 'BEGIN' ) );
        dump($oid);
        } elseif( substr($req,0,11) == 'blob_delete' ) {
        list($oid) = sscanf( $req, 'blob_delete %u' );
        $oid = pg_lo_unlink($oid) or pgerr('lo_unlink failed');
        } elseif( substr($req,0,10) == 'blob_write' ) {
        list($oid) = sscanf( $req, 'blob_write %s ' );
        $bin = substr($req,12+strlen($oid));
        $obj = pg_lo_open($oid,'w') or pgerr( 'lo_open failed' );
        $res = pg_lo_write($obj,$bin) or pgerr( 'lo_write failed' );
        pg_lo_close($obj);
        dump($res);
        } elseif( substr($req,0,9) == 'blob_read' ) {
        list($oid) = sscanf( $req, 'blob_read %u' );
        $obj = pg_lo_open($oid,'r') or pgerr( 'lo_open failed' );
        pg_lo_seek($obj,0,PGSQL_SEEK_END);
        $len = pg_lo_tell($obj);
        pg_lo_seek($obj,0,PGSQL_SEEK_SET);
        $res = pg_lo_read($obj,$len) or pgerr( 'lo_read failed' );
        pg_lo_close($obj);
        dump($res);
        } else {
        $result = pg_query($req) or pgerr("error at request: $req");
        if( pg_result_status($result) == PGSQL_COMMAND_OK ) {
        dump( 0 );
        dump( pg_affected_rows($result) );
        dump( pg_last_oid($result) );
        pg_free_result($result);
        } elseif( pg_result_status($result) == PGSQL_EMPTY_QUERY ) {
        dump( 0 );
        dump( 0 );
        pg_free_result($result);
        } elseif( pg_result_status($result) == PGSQL_TUPLES_OK ) {
        $width = pg_num_fields($result);
        $height = pg_num_rows($result);
        dump($width);
        dump($height);
        for( $i = 0; $i < $width; ++$i ) {
        $type = pg_field_type( $result, $i );
        dump( pg_field_name( $result, $i ) );
        dump( $type );
        dump( pg_field_size( $result, $i ) );
        }
        for( $i = 0; $i < $height; ++$i ) {
        $row = pg_fetch_row( $result );
        for( $j = 0; $j < $width; ++$j )
        if( is_null($row[$j]) )
        dump( '' );
        else
        dump( ' '.$row[$j] );
        }
        pg_free_result( $result );
        } else {
        $e = pg_result_error($result);
        pg_free_result($result);
        err( $e );
        }
        }
        }
        pg_free_result( pg_query( $commit ? 'COMMIT' : 'ROLLBACK' ) );
         
        } else {
        err("server type '$_POST[server] is not supported");
        }
         
        echo('OK:' . $data);
        ?>


    (Soll jetzt nur als Tunnelbeispiel gedacht sein. Hier wird aber auch entsprechend nach dem DB-Passwort gefragt)

    Du müsstest den Code entsprechend anpassen, oder zumindest mal als Idee auffassen. Zusätzlich kannst du dann im Programm, sowie im Script eine Zweiseitige Verschlüsselung einbauen (als blödes Beispiel Blowfish). Der Vorteil an der Methode sehe ich dadrin, das das wirkliche DB-Passwort nur zwischen PHP-Script und Datenbank bekannt ist, und deine Anwendung ein Dummy-Passwort nutzt, was zur Verifizierung am PHP-Script dient. Sonstige Lösungen wären ja nur noch Arten von SSL, aber ob du dir solche teuren Lizenzen kaufen möchtest, bezwifel ich (zudem macht es das ganze noch viel schwerer).
  • in: DirectSound-Effekte auf mp3s

    geschrieben von riku79

    Nachdem mein PC leider nach 6 Jahren WinXP (wow) ohne ReInstall jetzt endgültig neu installiert werden musste, hat sich leider meine Antwort verzögert....

    Du hast mich aufjedenfall mit den Arrays auf ne Idee gebracht. Nach einiger herumsucherei im Web bin ich dann auf 2 Sachen gekommen: NAudio und Mp3Sharp. Ich hab beides inkl. Source-Code und .dll bekommen. Letztendlich habe ich mich für Mp3Sharp entschieden da es im Gegenteil zu NAudio mehr mp3's abspielt (allerdings diese manchen oft leider mit der falschen Samplerate).

    Nach etwas Umbau am Sourcecode (um auch den SecondaryBuffer zu kommen und Effekte drauf anzuwenden) läufts bis jetzt super.
    Beim Übergeben der Effekte entsteht kein Knacken oder sonstwas und es läuft sehr CPU-sparsam. Selbst wenn ich (Extremtest) ihm 40 Veränderungen (25ms) von 32 Effekten (getestet als 31 Band EQ + 1 Flanger) zusende, wird der CPU gerade um max. 8% (bei nem AMD64 3GHz) ausgelastet.

    Was die Sache mit dem 1024 Byte-Array angeht... viel zu klein, kann aber auch von dir eher ironisch/nur beispielhaft gemeint sein. Wenn ich mich recht erinnere, nutzen manche Soundkarten so um die 50ms Buffer. Im Waveformat wäre das aufjedenfall einiges mehr, aber egal.
    Mp3Sharp arbeitet mit Stream-Technik (base System.IO.Stream / MemoryStream / BufferStream (habs noch nicht so weit durchgeschaut)). Durch NotifyEvents werden dann immer rechtzeitig die Streams wie Buffer gefüllt und die Effekte sogar dadrin bearbeitet. Der Buffer ist 1 Sekunde lang, jedoch frag ich mich, wie er in den bereits aktiven Buffer die veränderung auswirken lässt. Es ist aber egal, solangs klappt.

    ich hab zwar ogg usw. noch nicht so ganz rausbekommen, aber das wichtigste ist schonmal mp3.

    Für die, welche sich auch für sowas interessieren:

    http://robburke.net/mle/mp3sharp/ (Mp3Sharp)
    http://naudio.codeplex.com/ (NAudio)

    Danke dir aufjedenfall vielmals. Der Tip hat mir sehr weitergeholfen.
  • in: Bleach

    geschrieben von riku79

    Ich habe mir jetzt auch in den letzten Tagen Bleach angesehen, im Moment laufen diese auch wieder auf Animax (Sonntag kommen die Folgen 7-12) und muß mich manchmal vor lachen krümmen. Ich finds ja geil, das man (in Folge 1) als Begrüssung nen Fuß in die Fresse bekommt, und das Fluchen (die Animationen dazu) sind auch gut gelungen.
    Bin im Moment auch bei Folge 52 angekommen.
    Ich kanns jedem weiterempfehlen... es ist neben Death Note eins meiner Lieblinge schon geworden und trotz das es kindlich gemacht ist, ist die Handlung top :)

    Hoffentlich wird daran weitergearbeitet. Wäre schade, wenn ich zukünftige Folgen mit Untertitel lesen muß.
  • in: Thread beenden (C#)

    geschrieben von riku79

    beph19 schrieb:
    Vielen Dank, das hat mir geholfen.
    Wenn ich isBackground beim Thread auf true ändere, wird dieser beendet, wenn die Form geschlossen wird.

    nein, wenn ich mich gerade recht entsinne, hat dies eher mit der Priorität zu tun.
    Einen Thread, der in einer unendlichschleife laufen würde, kann man Alternativ beenden mit static-Variablen. Diese können von allen Threads eingesehen werden. Du könntest z.B. folgendes anlegen:

    public static bool isMainFormOpened = true;

    wenn die Form schließt, legst du ins OnClose-Event einfach:

    isMainFormOpened = false;

    wenn der Thread als Endllosschleife läuft, würde er mit

    while (isMainFormOpened) { ... }

    die Schleife so lange laufen lassen, bis der Wert false auftritt.

    wie UdpClient.Receive jetzt genau arbeitet, ist nicht ganz mein Bereich. setDaemon sagt mir auch nichts. Eventuell gibt es ja nen UdpClient-Event namens OnReceive. Dadrin könntest du dann auch die isMainFormOpened-Variable prüfen und dann den Cancel (oder was auch immer) auslösen, und darauf den Thread verlassen.
    Ganz brutal währe Thread.Kill oder auch Dispose. Das könnte klappen, wobei ich ungerne Dispose anpacke (es killt sogesehen alles ohne Amen).

    Edit: Wenn dein Thread nicht mehrfach ausgeführt wird, könntest du den UdpClient auch static setzen. Dann müsstest du auch innerhalb der Form zugreifen können, und somit die Verbindung kappen.
  • in: DirectSound-Effekte auf mp3s

    geschrieben von riku79

    Moin.
    Bisher hab ich es nur geschafft, per DirectSound-Effekte (Chrous, Flanger, Gargle usw.) auf wav-Dateien anzuwenden, da sich darüber anscheinend auch nur Wave-Dateien wiedergeben lassen. Allerdings nutzt man heute ja fast nur noch mp3s für die Wiedergabe. Ich könnte jetzt ja auf die schnelle durch z.B. ffmpeg.exe eine schnelle Umwandlung durchführen, und diese dann wiedergeben. Bei kleinen Dateien ists kein Problem. Doch angenommen man hat eine Aufzeichnung, die 2 Stunden geht... als Wave-Datei sinds dann mal eben locker an die 1,5GB. Das Umzuwandeln kostet demnach auch seine Zeit. Ich habs dann per SoundBuffer-Capturing versucht, aber die Effekte schlagen dann auf alles an, was rausgeht, und selbst wenns nur so nen blöder Ton ist wie "Sie haben Post".
    Weiß jemand von euch, wie man eventuell so etwas hinbekommen kann, oder wo es vernünftige Guides gibt? In C# find ich da aufjedenfall nichts geeignetes. C++ außerhalb des .net-Bereichs ist für mich eher nen Fremdgebiet und das was ich dazu nur finde, ist eben in dem Verfahren geschrieben (und mir nicht so verständlich).

    Weiterhin wäre es praktisch, auch dies auf andere Formate (möglichst viele wie auch u.a. wmv oder ogg) anzuwenden.
  • in: Ordner auf Vorhandenheit prüfen

    geschrieben von riku79

    ggamee schrieb:
    ...
    für den fall des webspace google mal ajax. hiermit kannst du das ganz einfach bewerkstelligen ;-)


    Du nimmst auch direkt die ganze Hand, wenn man nen Finger bietet... *lach*
    für solch einfache Dinge verwendet man nicht Ajax.

    Eine clientseitige Abfrage geht aus Sicherheitsgründen nicht, zumindest nicht für Ordner. Für Dateien hingegen gibts da Tricks, die ich aber nicht eingehe, da die in ne Dunkelgraue Zone fallen (fällt schon eher unter Hacking, und sowas poste ich nicht!).

    Serverseitig bleibt auch nur eine Serverseitige abfrage über, die dann in PHP geschrieben ist, wenn ichs gerade richtig im kopf habe, heißt da das php-zauberwort...
    <? echo dir_exists($verzeichnisname)?"true":"false"; ?>


    Dies gibt dann true oder false aus als Text. Mit Javascript muß ich gerade etwas raten.
    var objectName = new Object();
    objectName.src = "(die URL, die er abfragen soll)";

    Das Objekt enthält aufjedenfall dann die Daten, aber wiegesagt, ich sag dir nicht mit 100%iger Sicherheit zu, das es klappt. Alternativen währen die getElemtById.innerHTML-Methoden, wenn man z.B. unsichtbare iFrames auslesen möchte (was auch ne möglichkeit wäre).
    ich habe damit mal früher gearbeitet, jedoch mit XML-Objekten. Vielleicht hilft die Google mit den begriffen "Load XML to javascript string".
  • in: Bilder zu Video zusammenfügen

    geschrieben von riku79

    ich möchte hierbei anmerken, das das einzelne zusammensetzen von Bildern für langsamere CPUs (Non-DualCore) nicht gerade den Prozessor freut.
    Der binäre Inhalt von Videodateien ist je nach Codec so aufgebaut, das immer einzelne Bereiche gespeichert werden. Es gibt 3 Arten nachher in der Ausgabe...
    Ums mal mit vereinfachten Worten auszudrücken (IPB-Verfahren):
    Generieren: Erzeugt das Bild aus den Objekten
    Polieren: Glättet das Bild um scharfe Kanten zu entfenen.
    Index (Indexieren): Ist ein Schlüsselbild, um die Inhalte beim Pause-Drücken sauber anzuzeigen.
    Wenn du jetzt viele Bilder hast, und möchtest diese mit 25 fPs abspielen, sagt ein langsamer PC "Bye".
    Wenn du dir z.B. die Struktur einer Gif-Datei ansiehst, wirst du merken, das immer nur die Veränderung in jedem Bild gespeichert wird. Nicht anders ist es bei Videofilmen. Schau also am besten auch mal eine Referenz zu Gif89a an. Wenn du aufjedenfall erzwingen würdest, das jedes Bild komplett gespeichert wird, haste nachher eine viel zu große Datei. ich würd für einmalige Dinge da eher direkt ein Programm nehmen. Selbst der Windows-Movie-Maker ist in der Lage, auß einzelnen Bildern eine Sequenz schnell zu analysieren, wenn du jedes Bild mit ner Länge von z.B. 40ms angibst (bei 25fps). Den Rest kannste dann ruhig dem Encoder überlassen
  • in: neue gute Programmiersprachen

    geschrieben von riku79

    Ich kann dir zwar Andoid und solche Dinge empfehlen, aber es kommt auch darauf an, was du machen möchtest. Ich selbst schreibe in C# .net verschiedene Anwendungen.
    Vorteil: Die Software (Visual C#) ist vom Aufbau her schnell zu verstehen. Es werden alle Objekte gelistet, und unter den Eigenschaften sind auch jede Menge Eigenschaften und Events zu finden. Der Code-Bereich ist übersichtlich, und je nach Einstellung werden auch Vertiefungen (Tabstops) automatisch eingesetzt. Zudem kann man einige AddOns (SDKs) integrieren.
    Ich nutze Erweiterungen für DirectX, XNA (Xbox-Spiele) und einige kleinere Dinge, die mit Bild-, Ton und sogar Medienwiedergabe in allen erdenklichen Formaten zu tun haben.
    Das Programm führt eine saubere Codeprüfung durch. Den PC dabei abzuschießen ist ziemlich unwahrscheinlich, es sei denn du schreibst, das er dir alles erdenkliche löschen soll. Es lassen sich sogar (fortgeschritten) Operatoren, Delegate, Interface und viel mehr Kram erstellen, und exakt die Zugriffsrechte steuern. Sogar bereits bestehende Elemente können per base-override manipuliert werden.
    Während der Codegenaeration wird sogar in den extremsten Fällen automatisch Instanztreiber erstellt (dies sorgt dafür, das User es auch nutzen können, die eine andere Windows-Version haben), wo evtl. diese Funktionen verändert wurden (Kompatiblität = Pro)
    Nachteil ist natürlich das .net-Framework. Aber das hat heute wirklich jeder.
    In Sachen Internet rate ich ganz klar zu PHP. ASP scheint hingegen schön und gut zu sein, aber ich halte es für eine aussterbende Sprache.
    Es kommt letztendlich immer auf den Verwendungszweck an.
    Im Internetbereich kann ich ansonst zu allem richtung AJAX (JSON usw.) raten. Viele Seiten basieren seit einiger Zeit auf diesem Verfahren, weil es Elemente wesentlich attraktiver macht. Ajax und Co. ist letztendlich zwar Javascript, aber andersrum erspart es einiges an Arbeit, wenn man bewegende Elemente (z.B. bei Browsergames) entwickeln möchte.
    Zuletzt noch... um z.B. auf Java oder ActionScript (Flash) einzugehen...
    Java stirbt zumindest im Applet-Bereich immer mehr aus. Im Anwendungsbereich mein ich, es hat sich nicht soooo sehr durchgesetzt.
    Flash/Actionscript hingegen wird auch oft bei Browsergames verwendet, doch hör ich immer wieder, das viele Leute Probleme mit plugincontainer.exe haben (ne Komponente von Firefox).
    Eine sinnvolle Idee wärs natürlich, c-basiertes mit dem web zu kreuzen, aber dazu muß einmal der server entsprechend eingerichtet sein, zum anderen muß auch ne idee her.
    Vielleicht hört sich das ganze interessant für dich an.

Login zum Webhosting ohne Werbung!