Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Der Code-Schnippsel-Thread
gandro Online
Quälgeist

Beiträge: 8.951
Registriert seit: Jul 2008
Beitrag #1
Der Code-Schnippsel-Thread
Weil ich in den letzten beiden Tagen zweimal das Bedürfnis hatte ein paar Codeschnipssel zu posten, aber dafür keinen Thread eröffnen wollte und es doch würdig genug für den On-Topic halte, hier einen Thread für kleine Codeschnippsel aller Art.

Um gleich anzufangen, ein bisschen PHP-Code. Weil ich mich so eben entschieden habe, PHPs Templatefunktionen wahrzunehmen (weil schneller als jedes auf PHP basierende Templatesystem) und desweiteren dies mit den kurzen PHP-Tags machen möchte (<? und <?=), diese aber (zurrecht) auf Servern abgeschaltet sind, hier Streamfilter der die Short-Tags durch die lange Version ersetzt:

PHP-Code:
<?php
// Die Filterklasse
class short_open_tags_filter extends php_user_filter {

    private 
$replacements = array(
        
'<?'    => '<?php',
        
'<?='   => '<?php echo ',
        
'<?php' => '<?php' /* stupid, but we want long tags */
    
);

    public function 
filter($in$out, &$consumed$closing) {
        while (
$bucket stream_bucket_make_writeable($in)) {
            
$end substr($bucket->data, -2);
            if(
$end[1] == '<' || $end == '<?') {
                return 
PSFS_FEED_ME;
            }

            
$bucket->data strtr($bucket->data$this->replacements);
            
$consumed += $bucket->datalen;
            
stream_bucket_append($out$bucket);
        }
        return 
PSFS_PASS_ON;
    }
}

// Den Filter registrieren
stream_filter_register('short_open_tags''short_open_tags_filter');

// Verwendung
$prefix '';
if(!@
ini_get('short_open_tag')) {
    
// siehe http://php.net/wrappers.php
    
$prefix "php://filter/read=short_open_tags/resource=";
}
// Öffnet die PHP-Datei und ersetzt noch während dem Einlesen die Tags
include($prefix."content.php");
}
?>
06.04.2010 18:07
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
LukeGee Offline
Misanthrop

Beiträge: 2.021
Registriert seit: Dec 2009
Beitrag #2
Der Code-Schnippsel-Thread
Objektserialisierung in Perl ist toll:

Code:
#!/usr/bin/perl -w

use strict;

package MySerialize;

sub save {
        my ($obj, $file) = @_;

        open(my $fh, ">" . $file) or die $!;

        use Data::Dumper;
        print $fh Dumper($obj);

        close($fh) or die $!;
}

sub open {
        my $file = shift;

        open(my $fh, "<" . $file) or die $!;

        my $s;
        map { $s .= $_ } <$fh>;

        close($fh) or die $!;

        return eval("my " . $s);
}

package SerializeTest;

my $foo = {
        item1 => "hallo",
        item2 => "test",
        blubb => [0,1,2,3,4,5]
};

MySerialize::save($foo, "foo.bar");

my $new_obj = MySerialize::open("foo.bar");

use Data::Dumper;
print Dumper($new_obj);

Das gespeicherte Objekt sieht dann so aus:

Code:
VAR1 = {
          'blubb' => [
                       0,  
                       1,  
                       2,  
                       3,  
                       4,  
                       5  
                     ],  
          'item1' => 'hallo',
          'item2' => 'test'
        };
09.04.2010 09:21
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
chiaki Offline
Die Pommesfee

Beiträge: 12.554
Registriert seit: Jul 2008
Beitrag #3
Der Code-Schnippsel-Thread
sieht kompliziert aus
09.04.2010 09:47
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
LukeGee Offline
Misanthrop

Beiträge: 2.021
Registriert seit: Dec 2009
Beitrag #4
Der Code-Schnippsel-Thread
chiaki schrieb:  sieht kompliziert aus

Liegt aber wohl eher an Perl. Da sehen mache Sachen komisch aus ;)

Naja, in der save Methode wird das Objekt einfach in ne File reingedumpt.
In der open-Methode les ich das File wieder zeilenweise in $s (statt map könnt man auch ne while-schleife nehmen). Danach mach ich einfach ein eval um $s und bekomm das als Objekt dann wieder zurück.
09.04.2010 10:46
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
klemmi Offline
Erfahrener Benutzer

Beiträge: 901
Registriert seit: Jul 2008
Beitrag #5
Der Code-Schnippsel-Thread
Ein kurzes LaTeX-Code-Schnippsel:

Es liest eine pdf (Querformat, A4) ein, teilt die Seite in der Mitte und erzeugt ein neues pdf Größe A5 mit den einzelnen Seiten:

bildliche Erklärung:

Code:


(Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2010 19:50 von klemmi.)
09.04.2010 19:17
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Online
Quälgeist

Beiträge: 8.951
Registriert seit: Jul 2008
Beitrag #6
Der Code-Schnippsel-Thread
Auch kein Programmiercode, aber wenigstens XML. Fenster-Management via Tastatur in Openbox. Mit Caps Lock wird der Modus aktiviert und dann kann man über entsprechende Modifier und Pfeiltasten die Fenster verschieben und vergrössern und so:


09.04.2010 19:45
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Online
Quälgeist

Beiträge: 8.951
Registriert seit: Jul 2008
Beitrag #7
Der Code-Schnippsel-Thread
Teilweise wieder eine Config-File, aber ein vollwertiges Programm an sich eigentlich:

Code:
options.timeout = 120

gmx = IMAP {
    server = 'imap.gmx.com',
    username = 'geheim',
    password = 'noch viel geheimer',
    ssl = 'tls1',
}

eth = IMAP {
    server = 'mail.ethz.ch',
    username = 'geheim',
    password = 'noch viel geheimer',
    ssl = 'tls1',
}


function check_mails()
    gmx_exist  = 0
    gmx_unread = 0
    gmx_unseen = 0

    -- überprüft drei die Ordner
    for _, mailbox in ipairs({'INBOX', 'gandro@gmx.net', 'Spam'}) do
        exist, unread, unseen = gmx[mailbox]:check_status()
        gmx_exist  = gmx_exist  + exist
        gmx_unread = gmx_unread + unread
        gmx_unseen = gmx_unseen + unseen
    end

    -- überprüft nur die Inbox
    eth_exist, eth_unread, eth_unseen = eth['INBOX']:check_status()

    if gmx_unseen > 0 or eth_unseen > 0 then
        os.execute('zenity --notification '..
            '--window-icon="/usr/share/icons/gnome/24x24/actions/mail-message-new.png" '..
            '--text="GMX: '..gmx_unseen..' Neue Nachrichten\n'..
                    'ETH: '..eth_unseen..' Neue Nachrichten"'
        )
    end
end

become_daemon(5, check_mails)

Ein Lua-Script für imapfilter (funktioniert auch nur damit, weils dessen teilweise Funktionen verwendet) und zenity (GNOME XDialog Clone), was in meinen beiden Postfächern nach Mails prüft und falls welche vorhanden sind nen Icon ins Systray malt. Codetechnisch ggf. noch optimierungswürdig, hab die Lua-Syntax noch nicht ganz raus.
10.04.2010 14:26
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
LukeGee Offline
Misanthrop

Beiträge: 2.021
Registriert seit: Dec 2009
Beitrag #8
Der Code-Schnippsel-Thread
Hab mir mal eben schnell ein Pseudo-Volume-Notify Dingens gemacht:
(weiß aber noch selber nicht ob ichs denn nutzen soll :>)

Code:
#!/bin/bash

[ -z "$1" ] && exit 1

icon="/usr/share/icons/gnome/48x48/status/audio-volume-high.png"

case "$1" in
        up)
                amixer -q set PCM 5%+
                current_vol=$(amixer get PCM | grep 'Front Left:' | cut -d ' ' -f 7 | sed -r 's/\[(.*)\]/\1/')
                notify-send -i ${icon} "Volume up" "<b>Volume: ${current_vol}</b>"
        ;;  
        down)
                amixer -q set PCM 5%-
                current_vol=$(amixer get PCM | grep 'Front Left:' | cut -d ' ' -f 7 | sed -r 's/\[(.*)\]/\1/')
                notify-send -i ${icon} "Volume down" "<b>Volume: ${current_vol}</b>"
        ;;  
esac
11.04.2010 13:19
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
SnGtKs Offline
DEXTER

Beiträge: 1.616
Registriert seit: Jul 2008
Beitrag #9
Der Code-Schnippsel-Thread
weil ich gerade mal wieder auf nen DOS tripp bin ;) hier mal wie man nen reboot machen kann unter dos
ne textdatei erstellen mit folgendem inhalt
Code:
A 100
MOV AH,0D
INT 21h
MOV AX, 40
MOV DS, AX
DS:
OR  BYTE PTR    [17],0C
MOV AX,4F53
INT 15h
DS:
MOV WORD PTR [72],1234
JMP F000:FFF0

R CX
20
N REBOOT.COM
W
Q

dann debug <reboot.txt <-oder wie auch immer ihr eure textdatei nennt

dann habt ihr ne reboot.com ;)

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Früh aufstehen ist der erste Schritt in die falsche Richtung.

Uri Geller verbiegt Löffel. Na und, Maggi macht Knoten rein!

Ich bin im WH Forum seit dem 11.05.2003 ... wow
11.04.2010 18:16
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
DosAmp Offline
Anderes Zeigegerät

Beiträge: 12.219
Registriert seit: Jul 2008
Beitrag #10
Der Code-Schnippsel-Thread
Das geht kürzer !_!
Direkter Shutdown aus DOS?? - Windows 3.1x Support Forum

CCITTグループ4またはZIP圧縮のモノクロ300dpiで最高の再現性
11.04.2010 18:19
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste