Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4475[/thread]

Board-rewrite: allgemeine Ideen (Seite 3)



<< |< 1 2 3 4 5 >| >> 45 Einträge, 5 Seiten
Strat
 2003-08-30 23:23
#39380 #39380
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich schlage eine strikte trennung zwischen cgi und statischen dokumenten vor, und zwar aus folgenden gruenden:
1. falls man mal die rechte falsch setzt, kann man cgi-scripte uebers web trotzdem nicht lesen (oder Konfigurationsdateien mit passwoertern oder so)
2. Es ist besser geordnet, und man koennte z.B. fuer statische dokumente auch was verwenden, was schneller als apache ist (z.B. tux)

Was denkst du darueber, jedes posting in der Datenbank doppelt abzuspeichern, einmal als originaltext und einmal als HTML-output (so als caching)? dann wuerde man beim output die ganze konvertierung sparen, und braucht beim editieren oder zitieren nicht alles zurueckumwandeln...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2003-10-14 18:21
#39381 #39381
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
eine gute idee fände ich http://selfhtml.teamone.de/html/kopfdaten/beziehungen.htm

z.B. "next" für die nächste seite im thread (bzw. bei ende des
threads für den nächsten thread), "contents" für die startseite,
"glossar" und/oder "help" ein link aufs wiki, etc.

damit lässt es sich dann ganz komfortabel navigieren, da alle diese funktionen
(zumindest in opera und mozilla, bei IE weiss ichs nicht) mit shortcuts
erreichbar sind.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Ishka
 2003-10-14 20:40
#39382 #39382
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Mir ist grad noch ne Idee gekommen:
[ ] Diesen Thread möchte ich [1 Stunde|3 Stunden|1 Tag|3 Tage|1 Woche|1 Monat|immer] lang nicht mehr sehen
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
SirLant
 2003-08-25 00:53
#39383 #39383
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Wenn Esskar das sagt,muss es stimmen :) (<-da ist kein funken Ironie drin! )

Eine Funktion wie im alten Bord, die das anhängen eines Scriptes ermöglicht, fände ich nicht schlecht.
Und was spricht gegen statische Seiten, die können ja aktualisiert werden, wenn sich etwas im Layout ändert(das Board wir ja nicht ständig bearbeitet wie dieses hier, da es ja von vorn herein den Wünschen entsprechend entwickelt wird).

Edit:
Mir fällt da ein Bug auf, schreibt man nen ! und ne )-Klammer nebeneinander passiert das !)\n\n

<!--EDIT|SirLant|1061758490-->
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
jan
 2003-08-25 11:12
#39384 #39384
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
bzgl statisch / dynamisch: sachen wie die suche würde ich immer über die DB realisieren - aber die ausgabe eines threads, der sich nicht ändert, ist ein klassisches beispiel dafür, effizient zu cachen und das wäre in diesem fall ganz prima mit simplen htmldateien möglich. wozu, um mal ein drastisches beispiel zu nehmen, bei einem thread-seite1, die 1000 mal gelesen wird, ohne dass etwas hinzugefügt wird (werden kann, wenn der thread schon weiter ist als seite 1, nur ev. eine neue seitennummer), jedes mal die datenbank bemühen, die einzelnen daten hervorzukramen.
dass man dann etliche htmlseiten herumfliegen hat, stimmt schon, aber ich nehme an, das kann man sich irgendwie abnehmen, sei es durch unterverzeichnisse, in denen jeweils hundert threads liegen oder oder oder. eine layout-änderung würde einfach durch ein neu-erzeugen der htmls umgesetzt, ansonsten werden die nur geändert, wenn ein neuer beitrag kommt etc pp. imho gerade bei großem datenbestand ein vorteil, der sich in belastbarkeit ausdrückt. wenn (ich bin optimistisch ;)) die 2000 user erst mal wieder voll sind und vielleicht ein paar mehr dazukommen, dürfte die last ordentlich steigen - das kann man dann natürlich einfach mit einem zweiten dbserver und ein bisschen balancing abfangen, oder eben durch einen anderen ansatz. ist definitiv komplizierter zu schreiben, da stimme ich zu, dennoch eine interessante sache.
allerdings wäre ich auch glücklich, wenn's erstmal ohne gemacht wird, sowas kann man später ja immer noch implementieren, wenn man zeit und lust hat.
esskar
 2003-08-25 19:20
#39385 #39385
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich würde gern anfangen, das board zu schreiben, da ich ab oktober weniger zeit hab, da dann wieder die uni anfängt und ich nach dem semster alle meine Scheine haben will, damit ich semester drauf mit meiner Dipl.Arbeit anfangen kann.
momentan bin ich nur dahingehend gebunden, dass ich auf der arbeit eingespannt bin, dass bin ich aber während der vorlesungszeit auch, wodurch ich in der zeit, in der ich nur arbeiten gehe, quasi viel freizeit hab, in der ich produktiv sein kann. da meine freundin demnächst 8 Wochen Praktikum an einer Grundschule macht und ich sie deswegen nur am WE sehen kann, bedeutet dies für mich, dass ich im september und oktober viel zeit haben werde.

lange Rede, kurzer Sinn: Wie gehen wir es an?
soll es nun wirklich mod_perl sein? das kann für mich gefährlich werden, da man ja anscheind module in c schreiben und diese an den apache kleben kann. sowas verführt mich bestimmt!!!
CGI hat den vorteil, dass es kaum ne umstellung für mich bedeutet, und vielleicht mehrere von euch mit machen können und es (vielleicht) dadurch schnell und besser wird! obwohl bekanntlich ja viele köche den brei verderben können.

die statische Seiten generierung könnte auch ein toller anreiz sein, und dieses mod_rewrite könnte man doch über .htaccess simulieren, oder hab ich da was falsch verstanden?
kabel
 2003-08-25 21:58
#39386 #39386
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
wenn es nu noch einen mechanismus gibt, %BoardConf::Actions dynamisch zu erweitern, ist das sehr flexibel.

wie wärs mit einem apache-ähnlichem callback design?

ParameterCheckHandler
PageHeaderHandler
ParameterParserHandler
PageContentHandler
PageFooterHandler

prozedural? oo? gemischtes eis mit sahne? ;)
-- stefan
esskar
 2003-08-26 05:13
#39387 #39387
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
so nebenbei...
damit das ganze funzt, müsste man es natürlich so machen

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package BoardConf;
use strict;
use warnings;

use vars qw(%Actions);

# Program logic is defined here
%Actions = (
    start => {
        subs => [ 
            \&BasicFunctions::WriteStandardHtmlHeader, 
            \&BasicFunctions::WriteLogonPage,
            \&BasicFunctions::WriteStandardHtmlFooter,
        ],
    }, # start

    logonUser => {
        subs => [
            \&BasicFunctions::WriteStandardHtmlHeader, 
            \&BasicFunctions::ValidateUser,
            \&BasicFunctions::WriteStandardHtmlFooter,
        ],
    }, # logonUser
    # ...

); # %Actions

# ------------------------------------------------------------
1; # modules have to return a true value
Strat
 2003-08-26 15:40
#39388 #39388
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Habe gerade mal einen Scanner fuer tags geschrieben, in denen nicht mehr weitere Ersetzungen vorgenommen werden (z.B. perl, code, perldoc) und die die Form haben
Code: (dl )
1
2
[perldoc]text[perldoc]
(also nicht: [perldoc=attribute]text[/perldoc]


Taugt der was? oder habe ich was uebersehen?
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#! /usr/bin/perl
use warnings;
use strict;

use vars qw(@TagsBlocked);
@TagsBlocked = qw(perle codex perldocy);

&#36/ = undef;
my &#36posting = <DATA>;

&ParseText(&#36posting);
# ------------------------------------------------------------
sub ParseText {
    my (&#36text) = @_;

    my @scanned = ();

    foreach my &#36tag (@TagsBlocked) { # @scanned yet empty, start with &#36text
        unless (scalar (@scanned)) {
            @scanned = &PostFilterBlocked(&#36text, &#36tag);
        } # unless

        # @scanned filled, start scanning the rest
        else {
            my @scanned2 = (); # temporary variable
            foreach (@scanned) {
               
               
 # skip already scanned parts               
                push(@scanned2, &#36_), next if ref(&#36_); 

               
                # scan only if scalar
                push (@scanned2, &PostFilterBlocked(&#36_, &#36tag));

            } # foreach
            @scanned = @scanned2;
        } # else

    } # foreach

    use Data::Dumper;
    print "

", Dumper(\@scanned);

} # ParseText
# ------------------------------------------------------------
sub PostFilterBlocked {
    my (&#36text, &#36tag) = @_;

    my &#36startLength = length("[&#36tag]");
    my &#36endLength   = length("[/&#36tag]");

    my @scanned = ();
    
    my &#36startPos = index(&#36text, "[&#36tag]");
    my &#36lastPos = 0;
    
    print "
Scanning for tag [&#36tag]";
    while (&#36startPos != -1) {
        print " &#36startPos";

        # add leading part to @scanned
        my &#36string = substr(&#36text, &#36lastPos, &#36startPos-&#36lastPos);
        push (@scanned, &#36string) if length &#36string;
        
        # check if [&#36tag]...[/&#36tag]-block found
        &#36lastPos = index(&#36text, "[/&#36tag]", &#36startPos+&#36startLength);
        print "-&#36lastPos";
        unless (&#36lastPos == -1) { # if found

            # push reference to @scanned: { &#36tag => &#36string }
            my &#36string = substr(&#36text, &#36startPos+&#36startLength, 
                                &#36lastPos-&#36startPos-&#36startLength);
            push (@scanned, {&#36tag => &#36string}) if length &#36string;

        } # if

        else { # if not found

            # push rest of &#36text to @scanned (as string)
            my &#36string = substr(&#36text, &#36startPos, -1);

            # if last line was in @TagsBlocked, add new array element
            if (ref &#36scanned[-1]) {
               
 push (@scanned, &#36string) if length &#36string;
            }

            # if not, append as text to the last element
            else {
               
 &#36scanned[-1] .= &#36string;
            } # else

            last; # and exit while

        } # else

        # (re-)initialize next search position
        &#36lastPos += &#36endLength; 

        # search for next [tag]
        &#36startPos = index(&#36text, "[&#36tag]", &#36lastPos);

    } # while

    # care for rest of &#36text
    if (&#36lastPos != -1) {
        my &#36string = substr(&#36text, &#36lastPos, -1);
        push (@scanned, &#36string) if length(&#36string);
    } # if

    return @scanned;
} # PostFilterBlocked
# ------------------------------------------------------------

Hallo Leute,

das ist mein erstes Posting:
[perldocy]CGI[/perldocy]
[perle]
#! /usr/bin/perl
use warnings;
use strict;
use CGI ();
my &#36cgi = CGI->new();
[/perle]
und das ist was anderes:
[perldocy]CGI[/perldocy]
[perle]
#! /usr/bin/perl
use warnings;
use strict;
use CGI ();
my &#36cgi = CGI->new();
my &#36string = "[perldocy]CGI[/perldocy]";
[/perle]
normaltext
[codex]
#! /usr/bin/perl
use warnings;
use strict;
use CGI ();
my &#36cgi = CGI->new();
[/codex]
[perle] this is perl without finishing tag
[codex]
#! /usr/bin/perl
[/codex]


Habe perle, codex und perldocy genommen, damit mir das forum nicht dazwischenpfuscht...

<edit>hmmm, irgendwie mag [perl] diesen code nicht... \ n wird durch einen Zeilenumbruch ersetzt, die formatierung ist auch nicht das wahre... wenn jemand den code haben will, einfach eine mail schicken an martin@fabiani.net oder eine nachricht uebers forum\n\n

<!--EDIT|Strat|1061898246-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2003-08-26 22:18
#39389 #39389
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Strat,26.08.2003, 19:55]ich richte gleich develop.perl-community.de ein...[/quote]
ist eingerichtet, und mail ist unterwegs
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 3 4 5 >| >> 45 Einträge, 5 Seiten



View all threads created 2003-08-25 00:08.