Ik verwacht een framework waarmee ik makkelijk een omgeving op kan zetten blocks en modules die ik zelf wilquote:Op woensdag 12 december 2007 11:39 schreef SharQueDo het volgende:
[..]
Wat verwacht je van Ice7? Wat verwacht je te testen en te kunnen zien?
People Hate Perlquote:Op woensdag 12 december 2007 16:44 schreef Farenji het volgende:
Jammer dat niemand verder in perl programmeert... alleen maar dat php
Het is duidelijk dat je niet weet wat perl is anders had je het niet met zo'n mank vooroorlogs speelgoedtaaltje als QBasic vergeleken. Laat ik het je daarom maar vergeven.quote:Op woensdag 12 december 2007 16:47 schreef SharQueDo het volgende:
Perl? Wat is dat?
Ook jammer dat niemand meer in QBasic programmeert.
PHP is een samenraapseltje... alle functies in 1 namespace... inconsequente functiebenamingen, inconsequente argumenten, het is traag, moeilijk uitbreidbaar, en het nodigt uit tot lelijk programmeren.quote:Op woensdag 12 december 2007 16:59 schreef H4ze het volgende:
[..]
People Hate Perl
Kan je me misschien de voordelen van Perl tov PHP vertellen? Is Perl volwassener wat OOP betreft?
kan je eens een stukje plakken hier?quote:Op woensdag 12 december 2007 17:25 schreef Farenji het volgende:
[..]
PHP is een samenraapseltje... alle functies in 1 namespace... inconsequente functiebenamingen, inconsequente argumenten, het is traag, moeilijk uitbreidbaar, en het nodigt uit tot lelijk programmeren.
Perl is veel consistenter en consequenter, veel volwassener, en ontzettend uitbreidbaar dmv de CPAN repository waar je alles wat je wil kan vinden, en meer. Nieuwe modules installeren is supermakkelijk - vergelijkbaar met iets als apt-get van debian als je dat kent.
Het idee dat perl ouderwets en traag is klopt gewoon niet - CGI was traag maar met de komst van mod_perl voor apache is het bloedsnel geworden, want gecompileerd en stateful. Je script hoeft dus niet elke keer opnieuw gecompileerd te worden, dit hoeft alleen de eerste keer dat je het runt.
Ik zal niet zeggen dat je in perl niet lelijk kan programmeren (want oh wat kan je er een onbegrijpelijke bagger mee maken als je wil) maar je wordt wel meer gedwongen zaken meer te structureren. Bovendien kun je alles met perl, het is veel krachtiger dan php, ook omdat het niet beperkt tot webdevelopment is. Je kan er volledige GUI applicaties mee maken inclusief 3d graphics.
Wat betreft OO vind ik perl ontzettend elegant - en heel intuitief zodra je die elegantie inziet. Bij php is de OO er later een beetje bijgehacked. Dat zie je nog terug aan het schrijnende gebrek aan OO benadering in alle functies van PHP.
Oke duidelijkquote:Op woensdag 12 december 2007 17:25 schreef Farenji het volgende:
[..]
PHP is een samenraapseltje... alle functies in 1 namespace... inconsequente functiebenamingen, inconsequente argumenten, het is traag, moeilijk uitbreidbaar, en het nodigt uit tot lelijk programmeren.
Perl is veel consistenter en consequenter, veel volwassener, en ontzettend uitbreidbaar dmv de CPAN repository waar je alles wat je wil kan vinden, en meer. Nieuwe modules installeren is supermakkelijk - vergelijkbaar met iets als apt-get van debian als je dat kent.
Het idee dat perl ouderwets en traag is klopt gewoon niet - CGI was traag maar met de komst van mod_perl voor apache is het bloedsnel geworden, want gecompileerd en stateful. Je script hoeft dus niet elke keer opnieuw gecompileerd te worden, dit hoeft alleen de eerste keer dat je het runt.
Ik zal niet zeggen dat je in perl niet lelijk kan programmeren (want oh wat kan je er een onbegrijpelijke bagger mee maken als je wil) maar je wordt wel meer gedwongen zaken meer te structureren. Bovendien kun je alles met perl, het is veel krachtiger dan php, ook omdat het niet beperkt tot webdevelopment is. Je kan er volledige GUI applicaties mee maken inclusief 3d graphics.
Wat betreft OO vind ik perl ontzettend elegant - en heel intuitief zodra je die elegantie inziet. Bij php is de OO er later een beetje bijgehacked. Dat zie je nog terug aan het schrijnende gebrek aan OO benadering in alle functies van PHP.
Ik plak een paar regels uit de eerste perl file die ik zie.quote:Op woensdag 12 december 2007 17:37 schreef PiRANiA het volgende:
[..]
kan je eens een stukje plakken hier?
Zo ziet het er idd uit..quote:Op woensdag 12 december 2007 19:18 schreef soylent het volgende:
[..]
Ik plak een paar regels uit de eerste perl file die ik zie.
$VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/;
$Text =~ s/\%(s|d)/$Dyn[$_]/;
$ReturnString =~ s{(\%A)}{$Self->Get($DAYS[$wd]);}egx;
Eigenlijk kan je gewoon random met kracht op je toetsenbord rammen, het resultaat is vrijwel altijd valide perl.
Ik ben het helemaal met je eens, alleen heb ik het met Java versus PHP. In Java word je geforceerd om richting perfectionisme te programmeren, in PHP kun je doen en laten wat je wilt. Ik zie vaak mensen in PHP een class als functie-verzameling gebruiken..... dat leer je in Java wel af.quote:Op woensdag 12 december 2007 17:25 schreef Farenji het volgende:
[..]
PHP is een samenraapseltje... alle functies in 1 namespace... inconsequente functiebenamingen, inconsequente argumenten, het is traag, moeilijk uitbreidbaar, en het nodigt uit tot lelijk programmeren.
....
Wat betreft OO vind ik perl ontzettend elegant - en heel intuitief zodra je die elegantie inziet. Bij php is de OO er later een beetje bijgehacked. Dat zie je nog terug aan het schrijnende gebrek aan OO benadering in alle functies van PHP.
Exact.quote:Op woensdag 12 december 2007 19:36 schreef Geqxon het volgende:
[..]
Ik ben het helemaal met je eens, alleen heb ik het met Java versus PHP. In Java word je geforceerd om richting perfectionisme te programmeren, in PHP kun je doen en laten wat je wilt. Ik zie vaak mensen in PHP een class als functie-verzameling gebruiken..... dat leer je in Java wel af.
omdat perl een VEEELS te hoge learningcurve heeft misschien wel?quote:Op woensdag 12 december 2007 16:44 schreef Farenji het volgende:
Jammer dat niemand verder in perl programmeert... alleen maar dat php
Een stukje posten? Ik weet niet of het veel zegt als je geen perl kent, het kan misschien nogal obscuur overkomen maar als je er een beetje ervaring mee hebt is het heel helder. Hier is bijvoorbeeld de User class van een applicatie die ik onlangs heb ontwikkeld. Deze zorgt oa voor authenticatie, opslaan van user session variables en laden/opslaan van usergegevens in de database. Ik heb oa voor de database, configuratie, sessie en taalondersteuning afzonderlijke classes gemaakt. Dit zijn universeel inzetbare modules die ik in vrijwel elke applicatie kan hergebruiken. Voor het meerendeel van deze classes val ik terug op bestaande perl modules (CGI, CGI::Session, DBI) waarvan ik vaak een eigen implementatie heb gemaakt die alle properties en methods overerven dmv OO. Zoals je kan zien heeft het wel wat weg van php (of eigenlijk andersom: php heeft wel wat weg van perl). Alleen dan is perl gewoon veel mooier. ;)quote:Op woensdag 12 december 2007 17:37 schreef PiRANiA het volgende:
[..]
kan je eens een stukje plakken hier?
het klinkt wel tof...
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 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 | use strict; use Session; use Language; use Database; use Configuration; use Request; use Digest::SHA1 qw(sha1_base64); use Data::Dumper; sub new { my $classname = shift; my $user = { ID => 0, username => '', password => '', name => '', email => '', request => Request->new(), @_ }; my $session = Session->new( request => $user->{request}, ); $user->{session} = $session; bless $user, $classname; return $user; } sub getByID { my $self = shift; my ($ID) = @_; my $dbh = Database->instance(); my $sth = $dbh->prepare('select ID, username, name, email, userlevel, languageID from users where ID = ?;'); $sth->execute($ID); my $user = User->new(); if (my $ref = $sth->fetchrow_hashref()) { $user->{session}->param( authenticated => 1, ID => $ref->{ID}, userlevel => $ref->{userlevel}, username => $ref->{username}, name => $ref->{name}, email => $ref->{email}, languageID => $ref->{languageID}, ); $user->fillFromHash($ref); $user->setLanguage($ref->{languageID}); return $user; } } sub reload { my $self = shift; if ($self->{ID}) { $self = $self->getByID($self->{ID}); } return $self; } sub getLanguageID { my $self = shift; my $languageID = $self->{session}->param('languageID') ? $self->{session}->param('languageID') : Language->defaultID(); return $languageID; } sub setLanguage { my $self = shift; my $config = Configuration->instance(); my ($lang) = @_; if (my $language = Language->get($lang)) { $self->{session}->param( languageID => $language->{ID}, ); } # die $self->getLanguageID(); if (my $referer = $self->{request}->referer()) { # $referer =~ s/language=[a-z0-9]*//gi; # die $referer; print $self->{request}->redirect($referer); } else { print $self->{request}->redirect("http://" . $config->{site}->{domain} . $config->{site}->{script}); } exit(); } sub authenticate { my $self = shift; my $args = { username => '', password => '', @_ }; if (!$args->{username} || !$args->{password}) { return 0; } my $passwordhash = sha1_base64($args->{password}); my $dbh = Database->instance(); my $sth = $dbh->prepare('select ID, username, name, email, userlevel, languageID from users where username = ? and passwordhash = ?;'); $sth->execute($args->{username}, $passwordhash); if (my $ref = $sth->fetchrow_hashref()) { # user is authenticated, fill session $self->{session}->param( authenticated => 1, ID => $ref->{ID}, userlevel => $ref->{userlevel}, username => $ref->{username}, name => $ref->{name}, email => $ref->{email}, languageID => $ref->{languageID}, ); $self->fillFromHash($ref); $self->setLanguage($ref->{languageID}); return 1; } else { $self->{session}->param( authenticated => 0 ); return 0; } } sub changePassword { my $self = shift; return if (!$self->{ID}); my ($password, $passwordConfirm) = @_; if ($password eq $passwordConfirm) { my $dbh = Database->instance(); my $sth = $dbh->prepare(" update users set passwordhash = ? where ID = ?; "); $sth->execute(sha1_base64($password), $self->{ID}) or die $sth->errstr; $self->logout(); return 1; } } sub isAuthenticated { my $self = shift; return $self->{session}->param('authenticated'); } sub logout { my $self = shift; # just to be sure $self->{session}->param( 'userlevel' => 0, 'authenticated' => 0, ); $self->{session}->delete(); } sub getUserlevel { my $self = shift; my $userlevel = $self->{session}->param('userlevel') ? $self->{session}->param('userlevel') : 0; return $userlevel; } sub getUsername { my $self = shift; return $self->{session}->param('username'); } sub getName { my $self = shift; return $self->{session}->param('name'); } sub getEmail { my $self = shift; return $self->{session}->param('email'); } sub fillFromHash { my $self = shift; my %userData = @_; foreach my $key (%userData) { $self->{$key} = $userData{$key}; } return $self; } sub saveSession { # save al user vars to session my $self = shift; my $session = $self->{session}; $session->param('ID', $self->{ID}); $session->param('languageID', $self->{languageID}); $session->param('username', $self->{username}); $session->param('name', $self->{name}); $session->param('email', $self->{email}); $session->param('userlevel', $self->{userlevel}); } sub getSession { # get al user vars from session my $self = shift; my $session = $self->{session}; $self->{ID} = $session->param('ID'); $self->{languageID} = $session->param('languageID'); $self->{username} = $session->param('username'); $self->{name} = $session->param('name'); $self->{email} = $session->param('email'); $self->{userlevel} = $session->param('userlevel'); return $self; } sub isUnique { # is the username unique? my $self = shift; my $dbh = Database->instance(); my $sth = $dbh->prepare(" select * from users where ID != ? and username = ?; "); $sth->execute($self->{ID}, $self->{username}) or die $sth->errstr; if ($sth->fetchrow_hashref) { return; } else { return 1; } } sub save { # save user vars to db my $self = shift; my $dbh = Database->instance(); if ($self->{ID}) { # existing user, update my $sth = $dbh->prepare(" update users set username = ?, name = ?, email = ?, userlevel = ? where ID = ?; "); $sth->execute( $self->{username}, $self->{name}, $self->{email}, $self->{userlevel}, $self->{ID} ) or die $sth->errstr; } else { # new user, insert my $sth = $dbh->prepare(" insert into users (username, passwordhash, name, email, userlevel) values (?, ?, ?, ?, ?); "); $sth->execute( $self->{username}, sha1_base64($self->{password}), $self->{name}, $self->{email}, $self->{userlevel} ) or die $sth->errstr; $self->{ID} = $sth->{mysql_insertid}; } $self->saveSession(); return $self->{ID}; } sub getSessionParam { my $self = shift; my ($param) = @_; return $self->{session}->param($param); } sub getSessionParams { my $self = shift; return $self->{session}->param_hashref(); } sub setSessionParam { my $self = shift; my %params = @_; foreach my $key (keys %params) { $self->{session}->param($key, $params{$key}); } } 1; |
Het geposte fragment is "net" in de zin dat de hele applicatie netjes het MVC model volgt - het is onderdeel van een ontzettend veel grotere applicatie die ik uiteraard niet ga posten omdat daar geen ruimte voor is op fok en ook omdat ik niet alles ga weggeven - mijn klant betaalt me goed voor het maken van deze applicatie.quote:Op donderdag 13 december 2007 00:58 schreef mschol het volgende:
dat php wat wegheeft van perl is logisch.. maar perl mooier? niet echt...
ik ken perl code die best rommelig is (maar perfect werkt, drukke webwinkel) en php scripts die echt veel netter zijn dan dat... dus het is maar net je programmeerstijl
Er zijn voor PHP hele aardige frameworks en mbv deze frameworks kun je je webapps op een vrij simpele manier het MVC model laten volgenquote:Op donderdag 13 december 2007 01:13 schreef Farenji het volgende:
[..]
Het geposte fragment is "net" in de zin dat de hele applicatie netjes het MVC model volgt
Dat dus. Dat je in PHP de vrijheid hebt om te coden "zoals je wilt", betekent niet dat je daardoor niet netjes kan programmeren in PHP.quote:Op woensdag 12 december 2007 18:13 schreef Tuvai.net het volgende:
PHP is makkelijker en trekt daardoor veel onkundige hobbyisten aan, maar is bij verre niet incapabel te noemen. 'Lelijk programmeren' kun je net zo goed in Java, ASP, Perl of welke andere taal dan ook. Net zo goed als dat je wel netjes en object georiënteerd kunt programmeren in PHP.
1 2 3 4 5 6 7 | if ((string)"false" == (int)0) { echo "true"; } else { echo "false"; } ?> |
lol dat is wel erg door geschoten jaquote:Op donderdag 13 december 2007 09:54 schreef Farenji het volgende:
En FOR CRYING OUT LOUD. Neem dit stukje code nou:
[ code verwijderd ]
Volgens php is de STRING "false" gelijk aan de INTEGER 0.![]()
![]()
Dat je gewoon in het wilde weg variabelen kunt gebruiken, zonder ze te declareren als int, bool, wat dan ook, is inderdaad irritant. Dan krijg je niet alleen rare fratsen met statements en vergelijkingen zoals in jouw voorbeeldstukje, maar dan krijg je ook gevallen als een ongedeclareerde $var. Wat is $var? Is het een $_COOKIE['var']? Is het een $_POST['var']? Op het feit dat je toch gewoon ongedeclareerd $var kunt gebruiken gaan heel veel 'programmeurs' de mist in. Ongelooflijk veelvoorkomend beveiligingslek is zoiets ook.quote:Op donderdag 13 december 2007 09:54 schreef Farenji het volgende:
En FOR CRYING OUT LOUD. Neem dit stukje code nou:
[ code verwijderd ]
Volgens php is de STRING "false" gelijk aan de INTEGER 0.![]()
![]()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | return files.size(); } public UserFile getFile(int i){ return files.get ![]() } public UserFile getFile(String s){ for (int i = 0; i < files.size(); i++){ if (files.get ![]() return files.get ![]() } } } |
Fok!?quote:Op donderdag 27 december 2007 22:44 schreef WyriHaximus het volgende:
Ben zelf trouwens met een class bezig die bij de combi Username, Email, URL van een comment een avatar bij de volgende sites zoekt: 'digg','twitter','blogcatalog','mybloglog','gravatar','default' (Zal hem later wel ff posten nu nog niet.) En nu vroeg ik me af wat volgens jullie nou sites zijn waar ik support voor moet toevoegen? Het is oorspronkelijk voor me blog comments bedoelt en wil het daar ook in de burt bij houden maar wil het in 1 keer goed uitgebreid maken zodat het ook een groot bereik heeft. Een 'demo' van de avatar class in actie is hier te zien: http://wyrihaximus.net/home/guestbook/
Fok was ook het eerst wat in me opkwamquote:Op donderdag 27 december 2007 23:09 schreef Spike1506 het volgende:
[..]
Fok!?
Ik was bezig met een simpel IRC client voor 1 bepaalde site die een eigen soort IRC-protocol gebruiken..
Oftewel een verneukte IRC-protocol xD
Ja idd Fok! is wel een idee.quote:Op donderdag 27 december 2007 23:09 schreef Spike1506 het volgende:
[..]
Fok!?
Ik was bezig met een simpel IRC client voor 1 bepaalde site die een eigen soort IRC-protocol gebruiken..
Oftewel een verneukte IRC-protocol xD
Dat is idd ook wel een idee. Punt is dat het originele idee van de class was om er een stuk of 10 grote internationale sites in te proppen iig voor de download zodat het een mooie class was die een gemiddelde blogger kon gebruiken en wou daarom in die hoek blijven. Maar kan nu net zo goed daarnaast nog een zooi functies maken voor maar specifieke sites zoals fok en tweakersquote:Op donderdag 27 december 2007 23:14 schreef JortK het volgende:
[..]
Fok was ook het eerst wat in me opkwam
grote sites als tweakers.net misschien ook wel, aangezien je toch een tech achtig bloggie hebt
En dan ook phpBB.com
Ja precies dat is het idee. Het lijkt mij alleen een beetje over the top om hier een OO object voor te maken:quote:Op vrijdag 28 december 2007 00:59 schreef Geqxon het volgende:
Dan kun je voor elke grote user-community een eigen mooi object maken. OO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | { $user_url = 'http://digg.com/users/' . $nick . '/h.png'; $random_url = 'http://digg.com/img/udh.png'; $user = file_get_contents($user_url); if(!$user) { return false; } $md5_user = md5($user); $md5_random = md5(file_get_contents($random_url)); if($md5_user!=$md5_random) { return $user_url; } else { return false; } } |
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 | String userURL; String randomURL; public AvatarSource(String userURL, String randomURL){ // Constructor this.userURL = userURL; this.randomURL = randomURL; } public String getAvatar(String nickName){ String user = file_get_contents(sprintf(userURL,nickName)); String random = file_get_contents(randomURL); if (user == false){ return null; } String userMD5 = md5(user); String randomMD5 = md5(random); if (userMD5.equals(randomMD5)){ return null; } else { return user; } } } AvatarSource digg = new AvatarSource('http://digg.com/users/%s/h.png', 'http://digg.com/img/udh.png'); String avatarContent = digg.getAvatar('WyrilHaximus'); |
perl perl perlquote:Op woensdag 12 december 2007 16:44 schreef Farenji het volgende:
Jammer dat niemand verder in perl programmeert... alleen maar dat php
Goeie idd, kan zoiets gebruiken voor de sites die op deze manier checkquote:Op vrijdag 28 december 2007 12:05 schreef Geqxon het volgende:
Zelf zou ik in bijvoorbeeld Java iets als volgt oplossen:
[ code verwijderd ]
Niet eens zo heel erg overkill, en makkelijk te gebruiken om meerdere users te checken zonder constant dezelfde redudante code uit te moeten voeren, maar simpelweg met hetzelfde object.
Je kan vertellen welke contestquote:Op vrijdag 28 december 2007 13:04 schreef Chandler het volgende:
Ik ben bezig met een 15KB contest scriptje waar ik helaas weinig over kan mededelen
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |