[alg] Slechtste programmeervoorbeelden deel 2 Vorige deel Overzicht Volgende deel Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1 ... 10 11 Laatste
Acties:
  • 10.587 views sinds 30-01-2008

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 19:59
.oisyn schreef op donderdag 14 juni 2007 @ 13:54:
[...]

That kinda defeats the whole purpose ;)
Waarom zet je dan die ; op de 2e regel? :+

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 20-05 12:47
Ik hoop dat je dit niet serieus meent, dat dit stoer is. Goeie programmeurs kijken met schaamte terug op dat soort bagger.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 23-05 07:23
Onder het motto "why should code be commented? It was hard to write, so it should be hard to understand" :).

zeroxcool.net - curity.eu


Acties:
  • 0 Henk 'm!

  • netvor
  • Registratie: September 2000
  • Laatst online: 08-04-2024
^^ Met Hydra.

Dingen als de IOCCC zijn IMHO een relikwie uit de jaren '80. In de jaren '90 leefde het nog wel een beetje, maar tegenwoordig wordt spaghetticode meestal niet meer als "stoer" gezien.

Aan de andere kant staren mensen zich tegenwoordig wel een beetje blind op alles wat "stoer anno 2007" is: design patterns, web services, en de twee grote datastructure-religies: de kerk van "alles in een RDBMS" en de cult van "alles in een XML doc"

*zucht* mode... ;)

Computer Science: describing our world with boxes and arrows.


Acties:
  • 0 Henk 'm!

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 23:03
Eentje van mij :X

Java:
1
return someObject == null ? null : someObject;


Ooit werd er van someObject een defensive copy gemaakt met someObject.clone(), maar dat is gerefactored. De conditional stond er echter nog steeds :*)

[ Voor 0% gewijzigd door Kwistnix op 19-06-2007 10:31 . Reden: Gruwelijke schaamte... ]


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

FallenAngel666 schreef op dinsdag 19 juni 2007 @ 09:18:
Eentje van mij :X

Java:
1
return someObject == null : null ? someObject;


Ooit werd er van someObject een defensive copy gemaakt met someObject.clone(), maar dat is gerefactored. De conditional stond er echter nog steeds :*)
Oeioei. :)

Dat merk je wel vaker bij voorbeelden op dit forum en ook in de praktijk, dat je na een verandering niet de rest van je code aanpast en dan rare dingen te zien krijgt...

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 25-05 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

FallenAngel666 schreef op dinsdag 19 juni 2007 @ 09:18:
Eentje van mij :X

Java:
1
return someObject == null : null ? someObject;


Ooit werd er van someObject een defensive copy gemaakt met someObject.clone(), maar dat is gerefactored. De conditional stond er echter nog steeds :*)
Jammer alleen dat dit een syntax error oplevert :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

.oisyn schreef op dinsdag 19 juni 2007 @ 10:27:
[...]


Jammer alleen dat dit een syntax error oplevert :P
Lol, idd. : en ? moeten omgedraaid worden.

@.oisyn: Scherp gespot hoor. :)

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 23:03
.oisyn schreef op dinsdag 19 juni 2007 @ 10:27:
[...]


Jammer alleen dat dit een syntax error oplevert :P
SLECHT!
Meer koffie :O
Scherp hoor ;)

[ Voor 4% gewijzigd door Kwistnix op 19-06-2007 10:33 ]


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 22-05 15:44
Hmm, mag slechte codevoorbeelden ook?

In de topicwaarschuwing is de <a> niet afgesloten waardoor de tekst 'Quick Reply' klikbaar is, evenals alles eronder...

We are shaping the future


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 25-05 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

Lol, sterker nog, hij wordt afgesloten met een </html> 8)7

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:34

Creepy

Tactical Espionage Splatterer

Fixed :Y)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 22-05 15:44
.oisyn schreef op dinsdag 19 juni 2007 @ 18:03:
Lol, sterker nog, hij wordt afgesloten met een </html> 8)7
Au, dat is helemaal pijnlijk :p

We are shaping the future


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 19:59
Oh, vandaar. Ik heb me al diverse keren afgevraagd waarom in een bepaald topic 'verstuur bericht' me naar pagina 33 stuurde. Dat komt dus gewoon omdat de modjes geen HTML kennen... :X

Acties:
  • 0 Henk 'm!

Anoniem: 13701

Kwam in de code van CMS Made Simple dit tegen:
PHP:
26
27
28
29
30
31
32
33
34
35
36
37
38
$modulename = 'menumanager';
$inline = false;

foreach ($cmsmodules as $key=>$value)
{
    if (strtolower($modulename) == strtolower($key))
    {
        $modulename = $key;
    }
}

if (isset($modulename))
{


Het eerste wat ik dacht was, goh, dit is eigenlijk ook zinloos. De enige reden die ik kan verzinnen dat je zoiets wilt doen is dat je niet weet hoe je in dit geval menumanager hebt gespeld (met kleine of hoofdletters). Een beetje secuur werken zou volgens mij beter zijn...

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 19:59
ehm, daar hebben we toch array-walk en co voor?

Acties:
  • 0 Henk 'm!

  • remco_k
  • Registratie: April 2002
  • Laatst online: 21:33

remco_k

een cassettebandje was genoeg

Eentje van mezelf:
C++:
1
2
3
4
5
Query->Open();
while (!Query->Eof) {
    // doe dingen, lees velden en vul variabelen...
    // en vooral: -geen- Query->Next(); neerzetten op deze plek
}

Code was threaded, dus ik maar denken... Vanwaar die 100% cpu load... :'(
Terwijl de app zelf nog wel reageerde.

Ik vergeet ook vaak de break; in de switch:
C++:
1
2
3
4
5
6
7
8
9
10
11
switch (WhatEver) {
   case OPTION1: {
      // do dingen1
   }
   case OPTION2: {
      // do dingen2
   }
   default: {
      throw Exception("This option does not exist. Call remco_k");
   }
}

Met als gevolg dat als WhatEver==OPTION1, dat dan alle andere cases ook uit worden gevoerd. :(
Soms wil je dat, maar ik wil dat meestal niet.

[ Voor 49% gewijzigd door remco_k op 22-06-2007 09:12 ]

Alles kan stuk.


Acties:
  • 0 Henk 'm!

  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:37
MBV schreef op dinsdag 19 juni 2007 @ 20:49:
Oh, vandaar. Ik heb me al diverse keren afgevraagd waarom in een bepaald topic 'verstuur bericht' me naar pagina 33 stuurde. Dat komt dus gewoon omdat de modjes geen HTML kennen... :X
Dus dat was het... :P Ik heb me er ook al verschillende keren over verbaasd. Het kwam alleen in dit topic voor. Ik heb op het punt gestaan om een bugmelding te openen.

http://hawvie.deviantart.com/


Acties:
  • 0 Henk 'm!

  • schoene
  • Registratie: Maart 2003
  • Laatst online: 20:33
remco_k schreef op vrijdag 22 juni 2007 @ 09:08:
Eentje van mezelf:
C++:
1
2
3
4
5
Query->Open();
while (!Query->Eof) {
    // doe dingen, lees velden en vul variabelen...
    // en vooral: -geen- Query->Next(); neerzetten op deze plek
}

Code was threaded, dus ik maar denken... Vanwaar die 100% cpu load... :'(
Terwijl de app zelf nog wel reageerde.
Gezien Query vermoedelijk een TDataSet is uit BCB:

C++:
1
2
3
4
for (Query->First ();!Query->Eof; Query->Next ())
{
// ...
}

veel veiliger om zo'n fouten niet tegen te komen

Acties:
  • 0 Henk 'm!

  • ikke007
  • Registratie: Juni 2001
  • Laatst online: 16-05 11:05
Ik ben zoeken naar de variabele $c_color_tcolor1 want die is niet
defined... Zoeken zoeken zoeken.. kom ik deze constructie tegen. Bah!

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
/* De Kleur variabele zijn automatisch gelinkt aan de kolomnaam */
$query = ("SELECT * FROM config_vormgeving WHERE site_id = '$siteID'");
$result = pg_query($query) ;
while($row = pg_fetch_array($result))
{
  foreach ($row as $columnName => $value)
  {
    if(!is_numeric($columnName) AND !is_float($columnName))
    {
      $$columnName = $value;
    }
  }
}


De constructie is niet 'fout'.. als je hem in een local scope zou gebruiken

Maar hij werd als een 'global' gebruikt -O- talking about mystery variables!

Lets remove all security labels and let the problem of stupidity solve itself


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 19:59
Da's nog niet leuk. Weet je wat leuker is: een project, van pak-em-beet 100.000 regels PHP-code, die her en der wat globals definieert. Waarbij de require/include-boom dus 5 lagen diep doorlopen moet worden om erachter te komen waar hij vandaan komt. Meestal in /include/common.inc.php, anders in /include/header.inc.php, als hij daar niet staat in dirname(__FILE__)/header.php, en als hij daar niet staat: good luck fishing! :P Ik heb dus een bash-script phpgrep:
$ phpgrep \$variabele.* = 
# wordt:
$ grep -ir --include=*.php "\$variabele.* =" *

Die gebruik ik echt veel te vaak. Hoofdreden voor het script: ik vergat steeds de * erachter te zetten :+

Ook zoiets leuks: sendMessage(...). Zonder eclipse is daar niet doorheen te komen: uiteindelijk werd hij pas na 8 function calls verzonden! :(

[ Voor 17% gewijzigd door MBV op 22-06-2007 11:24 ]


Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 24-05 08:52

Spockz

Live and Let Live

MBV, wat je zou kunnen proberen in zo'n geval is een conditional breakpoint toevoegen op die global. Dan kan je zo zien waar hij gedefiniëerd wordt. :)

Zelf kwam ik laatst een stuk code tegen waarin je 3x door hetzelfde lijstje liep en niets deed. :x

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 19:59
Tja, aangezien we over een paar weken PHP eruit gooien om in .NET te gaan programmeren, heb ik weinig zin om de debugger in eclipse aan de praat te krijgen. die() werkt prima als debugger :+

Het zou trouwens wel leuk zijn als ik de definitie van een variabele ook kon opzoeken met Eclipse PDT. Of de plekken waar een functie wordt aangeroepen. Maar voor dat soort dingen ben ik toch nog aangewezen op grep...

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:34

Creepy

Tactical Espionage Splatterer

MBV schreef op dinsdag 19 juni 2007 @ 20:49:
Oh, vandaar. Ik heb me al diverse keren afgevraagd waarom in een bepaald topic 'verstuur bericht' me naar pagina 33 stuurde. Dat komt dus gewoon omdat de modjes geen HTML kennen... :X
Geen idee of je weet wat er gebeurd als modjes met HTML gaan spelen in posts en topics? In de HK is er vast nog wel een topic te vinden. Veel ranziger qua HTML gaat het niet worden (en dan past het weer prima in dit topic :P ).

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Marcj
  • Registratie: November 2000
  • Laatst online: 23-05 11:21
Creepy schreef op vrijdag 22 juni 2007 @ 13:43:
[...]

Geen idee of je weet wat er gebeurd als modjes met HTML gaan spelen in posts en topics? In de HK is er vast nog wel een topic te vinden. Veel ranziger qua HTML gaat het niet worden (en dan past het weer prima in dit topic :P ).
Deze?

Disclaimer: ik ben niet verantwoordelijk voor eventueel vastlopende browsers :P

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Niet een code fuckup, maar een taal fuckup. VB(A).

Visual Basic:
1
If IsMissing(conn) Or (conn Is Nothing) Or IsEmpty(conn) Or IsNull(conn) Then

Deze regel heb ik zojuist getypt. Ik snap nou echt niet wat in welke situatie geldt. In een échte taal heb je gewoon null, en basta.

* kenneth gromt nog wat na

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

Anoniem: 49627

kenneth schreef op donderdag 12 juli 2007 @ 11:32:
Niet een code fuckup, maar een taal fuckup. VB(A).
Sterk inderdaad, ik zou alleen voor isEmpty zo op het eerste gezicht een afwijkende invulling kunnen geven (lege arrays/strings). De rest kan inderdaad allemaal hetzelfde betekenen.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Maak een functie IsMissingOrIsNothingOrIsEmptyOrIsNull() :P

{signature}


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 25-05 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

of IsBogus() in het kort :+

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Muscrerior
  • Registratie: September 2005
  • Laatst online: 13-03-2024
offtopic:
IsNotFortyTwo();

Acties:
  • 0 Henk 'm!

  • abeker
  • Registratie: Mei 2002
  • Laatst online: 05-05 11:32

abeker

...

Als conn geen object/Nothing is dan krijg je wel een mooie error. En wat is IsMissing nu weer dan?

the less one forgets, the less one remembers


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Iets waarmee je kan controleren of een optionele parameter in een Function/Sub is meegegeven. Niet dat het werkt, trouwens.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • abeker
  • Registratie: Mei 2002
  • Laatst online: 05-05 11:32

abeker

...

Oh weer wat geleerd :P Het werkt trouwens alleen bij het type Variant, lekker handig...

for the record:
IsMissing(x) om te testen of een parameter mist (van het type Variant)
IsEmpty(x) om te testen of een variabele leeg is (null/nothing is niet leeg!)
(x Is Nothing) om te testen of een variable Nothing is (moet dus een object óf Nothing zijn)
IsNull(x) om te testen of een variabele null is

[ Voor 64% gewijzigd door abeker op 12-07-2007 14:19 ]

the less one forgets, the less one remembers


Acties:
  • 0 Henk 'm!

  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:37
Wat is het verschil tussen nothing en null? :?

http://hawvie.deviantart.com/


Acties:
  • 0 Henk 'm!

  • remco_k
  • Registratie: April 2002
  • Laatst online: 21:33

remco_k

een cassettebandje was genoeg

Ik heb zojuist dit gemaakt:
code:
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
update tabelnaam set strvalue=upper(left(strvalue,1))+lower(right(strvalue,length(strvalue)-1));
update tabelnaam set strvalue=REPLACE(strvalue, ' a',' A');
update tabelnaam set strvalue=REPLACE(strvalue, ' b',' B');
update tabelnaam set strvalue=REPLACE(strvalue, ' c',' C');
update tabelnaam set strvalue=REPLACE(strvalue, ' d',' D');
update tabelnaam set strvalue=REPLACE(strvalue, ' e',' E');
update tabelnaam set strvalue=REPLACE(strvalue, ' f',' F');
update tabelnaam set strvalue=REPLACE(strvalue, ' g',' G');
update tabelnaam set strvalue=REPLACE(strvalue, ' h',' H');
update tabelnaam set strvalue=REPLACE(strvalue, ' i',' I');
update tabelnaam set strvalue=REPLACE(strvalue, ' j',' J');
update tabelnaam set strvalue=REPLACE(strvalue, ' k',' K');
update tabelnaam set strvalue=REPLACE(strvalue, ' l',' L');
update tabelnaam set strvalue=REPLACE(strvalue, ' m',' M');
update tabelnaam set strvalue=REPLACE(strvalue, ' n',' N');
update tabelnaam set strvalue=REPLACE(strvalue, ' o',' O');
update tabelnaam set strvalue=REPLACE(strvalue, ' p',' P');
update tabelnaam set strvalue=REPLACE(strvalue, ' q',' Q');
update tabelnaam set strvalue=REPLACE(strvalue, ' r',' R');
update tabelnaam set strvalue=REPLACE(strvalue, ' s',' S');
update tabelnaam set strvalue=REPLACE(strvalue, ' t',' T');
update tabelnaam set strvalue=REPLACE(strvalue, ' u',' U');
update tabelnaam set strvalue=REPLACE(strvalue, ' v',' V');
update tabelnaam set strvalue=REPLACE(strvalue, ' w',' W');
update tabelnaam set strvalue=REPLACE(strvalue, ' x',' X');
update tabelnaam set strvalue=REPLACE(strvalue, ' y',' Y');
update tabelnaam set strvalue=REPLACE(strvalue, ' z',' Z');

:X
Doel: Maak van elke eerste letter van een woord een hoofdletter in strvalue.
Bij gebrek aan tijd en aan een fatsoenlijke functie in sybase (vergelijkbaar met ucwords in PHP) dit maar gemaakt...
Ach, het werkt. Echt trots ben ik er niet op. (wel op mijn vindingrijkheid om REPLACE te gebruiken...)

Alles kan stuk.


Acties:
  • 0 Henk 'm!

  • g4wx3
  • Registratie: April 2007
  • Laatst online: 20-05 11:59
2 regeltjes code, zelfde functie, maar die mij allebij nogal fout lijken (2 de ongetest)
code:
1
if( $accountfolder[ strlen( $accountfolder ) - 1 ] != '/') $accountfolder .= '/';

code:
1
$folder = implode(  '/' , explode( '/' , $accountfolder )) . '/';


Volgens mij hoor je dit met een reguliere expressie op te lossen, maar daar heb ik geen kaas van gegeten

[ Voor 16% gewijzigd door g4wx3 op 12-07-2007 17:42 ]

http://www.softfocus.be/


Acties:
  • 0 Henk 'm!

Anoniem: 84120

Waarom voor zoiets simpels (je wil een '/' achteraan hebben?) een regex gebruiken? Dat is nodeloos ingewikkeld, en waarschijnlijk ook een heel stuk trager.

*noot: Bovenste heeft eigenlijk mijn voorkeur, alhoewel je hem wat ruimer (as in, enters) of minder ruim (as in, spaties) had kunnen schrijven, kan hem nu moeilijk in een blik overzien.

[ Voor 54% gewijzigd door Anoniem: 84120 op 12-07-2007 17:50 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02:38
Op de overdosis spaties na, lijkt de eerste regel me prima.

Wat de tweede regel probeert te bereiken is me niet helemaal duidelijk... Misschien expliciete conversie naar string forceren? (Wel een beetje rare manier om dat te doen dan.)

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Die tweede gaat helaas fout, omdat explode('/', 'asdf/') een array teruggeeft met twee elementen (eentje 'asdf', en een leeg element) in plaats van één.
Ik zou het zelf trouwens zo aanpakken: if(substr($accountfolder, -1) != '/') $accountfolder .= '/';

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 20:41
Of:
PHP:
1
$accountfolder = rtrim($accountfolder,'/') .'/';

't Is niet helemaal equivalent omdat een string die eindigt op '//' wordt omgezet naar een einde met een enkele slash. Als je met paden werkt is dat echter juist ook gewenst gedrag.

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • g4wx3
  • Registratie: April 2007
  • Laatst online: 20-05 11:59
HAHA, ben net een beetje mijn eigen code aan het checken, na 2 minuten zie ik dit al staan(PHP):
PHP:
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
<?php
if( $sfile == 'accountmanager' )
    include( 'web/accountmanager.php');

if( $sfile == 'setlichtkrant' )
    include( 'web/setlichtkrant.php');

if( $sfile == 'setinstellingen' )
    include( 'web/setinstellingen.php');

if( $sfile == 'logon' )
{
?>
<form method="POST" action="index.php?q=admin" id="logon">
    <img src="img/keys.gif" alt="keys" id="keys">
    <ul>
    <li><dl><dt><label for="user">Gebruiker:</label></dt><dd><input type="text" name="user" id="user"  value="uniz0"></dd></dl></li>
    <li><dl><dt><label for="password">Paswoord:</label></dt><dd><input type="password" name="password" id="password" value="huub2007"></dd></dl></li>
    <li><br><button type="submit" name="login" value="login"><img src="img/goed.gif" alt="login"> Aanmelden</button></li>
    </ul>
<div style="clear:both"></div>
</form>
<?php 
}
?>


voor duidelijkheid het gaat over de 4 verschillend if-js, mja heb geen zin het te herschrijven

edit
toch maar even geven hoe het dan wel moet:

PHP:
1
2
3
4
5
if ( $sfile=='logon')
{
}
else
include ( 'web/' . $sfile . '.php');

[ Voor 6% gewijzigd door g4wx3 op 13-07-2007 09:33 ]

http://www.softfocus.be/


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 22-05 15:44
Is $sfile een betrouwbare variabele (dus niet $sfile = $_REQUEST['sfile'];) ?

Als hij niet betrouwbaar is moet je het nooit zo doen, eerst error-checken lijkt me...

We are shaping the future


Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 22:43

Reinier

\o/

HawVer schreef op donderdag 12 juli 2007 @ 14:53:
Wat is het verschil tussen nothing en null? :?
Dat staat hier een beetje uitgelegd :)

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 24-05 13:49

kokx

WIN

Tijdje geleden kwam ik zoiets tegen, ik weet niet meer waar, ook niet meer precies, maar wel lekker dom:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$search = 'b';
$string = 'haha blaat';
$do = true;

for ($i = 0, $size = strlen($string); $i < $size; $i++) {
    if ($do) {
        if ($string[$i] == $search) {
            $do = false;
            echo 'Gevonden';
        }
    }
}


Edit: Voordat iedereen denkt dat $string[$i] alleen voor arrays is, dat is er niet fout. Zoiets kun je ook voor strings gebruiken (gelijkend met substring, $string[0] is hetzelfde als substr($string, 0, 1);).

[ Voor 22% gewijzigd door kokx op 13-07-2007 10:00 ]


Acties:
  • 0 Henk 'm!

  • g4wx3
  • Registratie: April 2007
  • Laatst online: 20-05 11:59
Alex) schreef op vrijdag 13 juli 2007 @ 09:37:
Is $sfile een betrouwbare variabele (dus niet $sfile = $_REQUEST['sfile'];) ?

Als hij niet betrouwbaar is moet je het nooit zo doen, eerst error-checken lijkt me...
sfile= $_GET['s'] komt dus recht uit de url van heet beheergedeelte, dus inderdaad checken.

Hoe? zie hier de merkwaardige manier, wel veilig :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
$sfile = 'logon';
if (  isset( $_SESSION['user'] )  ) //doorverwijzen bij ingelogd
    {
    $sfile = 'accountmanager';
    if ( isset( $_GET['s'] ) )
        {
        if ( $_GET['s'] == 'setlichtkrant' )
            $sfile = 'setlichtkrant';
        if ( $_GET['s'] == 'setinstellingen' )
            $sfile = 'setinstellingen';
        }
    }


kan naruurlijk beter door $sfile = $_GET['s'] te doen ipv hardcoded

edit
er was ook een functie "is_in_array()", dan kun je zoiets zo schrijven:
PHP:
1
2
if ( is_in_array( array( 'setinstellingen', 'setlichtkrant' ) ,  striptags( $_POST['s'] ) ) )
$sfile = en hoe nu verder, ik weet het al niet meer..

[ Voor 13% gewijzigd door g4wx3 op 13-07-2007 10:03 ]

http://www.softfocus.be/


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 19:59
WTF? Waarom niet gewoon:
PHP:
1
2
3
4
$allowed = array ('setlichtkrant', ...);
if (in_array($_GET['s'], $allowed))
      include('...'.$_GET['s'].'.php');
else  show_login();

Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 22-05 15:44
MBV schreef op vrijdag 13 juli 2007 @ 10:02:
WTF? Waarom niet gewoon:
PHP:
1
2
3
4
$allowed = array ('setlichtkrant', ...);
if (in_array($_GET['s'], $allowed))
      include('...'.$_GET['s'].'.php');
else  show_login();
Iets netter genoteerd:
PHP:
1
2
3
4
5
6
7
8
9
$allowed = array('setlichtkrant', ...);
if (in_array($_GET['s'], $allowed))
{
      include('...'.$_GET['s'].'.php');
}
else
{
      show_login();
}

Maar dit is een stuk veiliger ja...

We are shaping the future


Acties:
  • 0 Henk 'm!

  • g4wx3
  • Registratie: April 2007
  • Laatst online: 20-05 11:59
het hele stuk heb ik nu veranderd door
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$sfile = 'logon';
$allowed = array ('logon');
if (  isset( $_SESSION['user'] )  )
    {
    $sfile = 'accountmanager';
    $allowed = array ( 'setlichtkrant', 'accountmanager' , 'setinstellingen');
    }
if( isset($_GET['s']))
    {
    if (in_array($_GET['s'], $allowed))
        $sfile = $_GET['s'];
    }


maar dit valt mischien eerder onder optimalisatie, dan onder slecht programeerwerk?
Bij me komen deze dingen er vooral, omdat ik altijd een stuk of 5 bestanden teglijkertijd aan het editten ben, en dan vlug 'tijdelijk' even dingen hardcode in plaats van een net algoritme te vinden.

http://www.softfocus.be/


Acties:
  • 0 Henk 'm!

  • cowgirl
  • Registratie: November 2000
  • Laatst online: 17-12-2020
Ik ben wel eens de volgende code tegengekomen, commentaar is ook (ongeveer) origineel behalve de uitleg van de aangeroepen routines. Taal is Progress.
code:
1
2
3
4
5
6
7
8
9
10
11
// Bereken de datum van 6 maanden geleden, hoeft niet heel nauwkeurig
int weeknr, jaartal
run v/week.p(input today, output weeknr, output jaartal)  // v/week.p is een routine die weeknummer en jaartal van een gegeven datum teruggeeft.
if weeknr > 26
then weeknr = weeknr - 26
else do:
   // ga altijd uit van 52 weken in een jaar, het hoeft tenslotte niet nauwkeurig
   jaartal = jaartal - 1
   weeknr = 52 - (26 - weeknr)
end.
p/week.p (input weeknr, input jaartal, output datum) // p/week.p is een routine die adhv weeknr/jaar de datum van de maandag in die week teruggeeft

Ik heb dit indertijd vervangen door de volgende regel, het hoeft tenslotte niet heel nauwkeurig en een halfjaar is ~183 dagen.
code:
1
datum = today - 183

Nog mooier (en nauwkeurig!) is natuurlijk om gewoon het maanddeel uit de datum te halen, 6 af te trekken en een nieuwe datum maken.

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 19:59
g4wx3 schreef op vrijdag 13 juli 2007 @ 10:19:
het hele stuk heb ik nu veranderd door
[snip]

maar dit valt mischien eerder onder optimalisatie, dan onder slecht programeerwerk?
Bij me komen deze dingen er vooral, omdat ik altijd een stuk of 5 bestanden teglijkertijd aan het editten ben, en dan vlug 'tijdelijk' even dingen hardcode in plaats van een net algoritme te vinden.
Dit valt echt onder slecht programmeerwerk. Als je code niet kan lezen, kan je het ook niet onderhouden. Uiteraard doet het wel eventjes iets, maar dat is eigenlijk worse than failure: je leert er niks van. Het is precies bovenstaand gepruts dat ervoor zorgt dat een applicatie niet te onderhouden is. Daarnaast had je nog een gigantisch veiligheidsgat erin zitten, en je zag het geeneens :X

Probleem met je code zoals je die net neerzet, is dat het nog steeds onleesbaar is. Je gebruikt $allowed 2x voor verschillende dingen: 1x om rechten te beperken tot login, 1x als instelling welke pagina's gebruikt mogen worden.
Zet dus bovenaan, op de eerste regel van het bestand, de array $allowed, dan kan je daar in de toekomst je pagina's aan toevoegen. Vervolgens zet je ergens daaronder de regel if($loggedin && in_array(...)) neer voor de include, en de else voor de weergave van de login of index-pagina.
cowgirl schreef op vrijdag 13 juli 2007 @ 10:48:

code:
1
datum = today - 183

Nog mooier (en nauwkeurig!) is natuurlijk om gewoon het maanddeel uit de datum te halen, 6 af te trekken en een nieuwe datum maken.
http://nl2.php.net/manual/nl/function.strtotime.php:
PHP:
1
echo strtotime ("-6 months") . "\n";

:Y)

[ Voor 11% gewijzigd door MBV op 13-07-2007 11:50 ]


Acties:
  • 0 Henk 'm!

Anoniem: 105463


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 19:59
vandaar dat ik zo blij ben met php, dat symboliseert :Y) toch? ;)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 25-05 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

Idd, het moet wel heel erg met je gesteld zijn om blij te zijn met PHP :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 19:59
.oisyn schreef op vrijdag 13 juli 2007 @ 14:34:
Idd, het moet wel heel erg met je gesteld zijn om blij te zijn met PHP :P
nou, blij met dat aspect van PHP. Of van welke linux-gebaseerde scripttaal dan ook.

Welke slechte gewoonte die heel veel php-prutsers hebben corrigeert deze regex?
code:
1
:%s/\[\([a-zA-Z][^$\]]*\)\]/['\1']/gc

Dit is een vim-commando:%s/in/out/gc vervangt een match met 'in' op alle plekken door 'out', \1 pakt datgene wat tussen \( en \) staat.

Hint: je hebt er pas last van met E_ALL aan :X en die heb ik wel eens nodig om typo's op te sporen.
spoiler:
$array[constante] wordt $array['constante']. Kan leuke effecten hebben als er nieuwe constanten aan PHP worden toegevoegd, maar is bovendien gewoon smerig :(

[ Voor 3% gewijzigd door MBV op 13-07-2007 14:57 ]


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Wanneer is iets linux-gebaseerd?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 21-05 10:52
netvor schreef op zaterdag 16 juni 2007 @ 10:49:
^^ Met Hydra.

Dingen als de IOCCC zijn IMHO een relikwie uit de jaren '80. In de jaren '90 leefde het nog wel een beetje, maar tegenwoordig wordt spaghetticode meestal niet meer als "stoer" gezien.

Aan de andere kant staren mensen zich tegenwoordig wel een beetje blind op alles wat "stoer anno 2007" is: design patterns, web services, en de twee grote datastructure-religies: de kerk van "alles in een RDBMS" en de cult van "alles in een XML doc"

*zucht* mode... ;)
;) jongens denk je nu echt dat ik dit serieus bedoeld, "stoer" was redelijk sarcastisch bedoeld hoor ;) ik vind het over het algemeen goed als andere mensen mijn code begrijpen, dan hoef ik een progsel niet in mijn eentje te onderhouden ;)

*zucht modus hier dus ook!*

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 22-05 15:44
code:
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
$ofs="";'"$(0'+
  '..(0'+
    'xa*['+
      'Math'+
        ']::R'+
          'ound'+
            '([Ma'+
              'th]:'+
                ':Pi/'+
                  '2,1)'+
                    ')|%{'+
                      '[cha'+
                        'r][i'+
                          'nt]"'+
                            '"$($'+
                              '("""'+
                                '"0$('+
                                   '1838'+
                                   '1589'+
                                '*726'+
                              '371*'+
                            '60)$'+
                          '(877'+
                        '7365'+
                      '981*'+
                    '263*'+
                  '360)'+
                '$(22'+
              '2330'+
            '793*'+
          '1442'+
        '99)$'+
      '(310'+
    '9*37'+
  ') ""'+        '"")[' + '($_*' + '3)..' + 
'($_*'+        '3+2)' + '])""' + ' })"'|iex


Gooi dit maar eens in de PowerShell-prompt :Y)


(Het doet niets gek, het print alleen een paar woorden)

We are shaping the future


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 21-05 10:52
Alex) schreef op vrijdag 13 juli 2007 @ 15:21:
code:
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
$ofs="";'"$(0'+
  '..(0'+
    'xa*['+
      'Math'+
        ']::R'+
          'ound'+
            '([Ma'+
              'th]:'+
                ':Pi/'+
                  '2,1)'+
                    ')|%{'+
                      '[cha'+
                        'r][i'+
                          'nt]"'+
                            '"$($'+
                              '("""'+
                                '"0$('+
                                   '1838'+
                                   '1589'+
                                '*726'+
                              '371*'+
                            '60)$'+
                          '(877'+
                        '7365'+
                      '981*'+
                    '263*'+
                  '360)'+
                '$(22'+
              '2330'+
            '793*'+
          '1442'+
        '99)$'+
      '(310'+
    '9*37'+
  ') ""'+        '"")[' + '($_*' + '3)..' + 
'($_*'+        '3+2)' + '])""' + ' })"'|iex


Gooi dit maar eens in de PowerShell-prompt :Y)


(Het doet niets gek, het print alleen een paar woorden)
Mooi ASCII ART ;)

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 22-05 15:44
Afbeeldingslocatie: http://4programmers.net/bin/powershell-logo.png

;)

We are shaping the future


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 19:59
kenneth schreef op vrijdag 13 juli 2007 @ 15:13:
Wanneer is iets linux-gebaseerd?
als er flink wat gnu-tool-achtige dingen in voorkomen. PHP, perl, en zo zijn er nog een paar talen.

edit:
@hieronder: nee, da's een term die ik net uit heb gevonden. Ik had gehoopt dat wel duidelijk was wat ik bedoelde.

[ Voor 20% gewijzigd door MBV op 13-07-2007 15:58 ]


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Oh, heet dat tegenwoordig linux-gebaseerd ...

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:47

Robtimus

me Robtimus no like you

cowgirl schreef op vrijdag 13 juli 2007 @ 10:48:
Nog mooier (en nauwkeurig!) is natuurlijk om gewoon het maanddeel uit de datum te halen, 6 af te trekken en een nieuwe datum maken.
Ja top, werkt perfect als je een half jaar van 31 augustus wilt afhalen. Dan krijg je volgens die methode 31 februari.

Die fout heb ik ook eens gemaakt. Ik moest een script laten slapen tot de volgende dag. Die volgende dag bepaalde ik dus door de huidige dag te nemen en er dan 1 bij op te tellen. Werkte prima, tot 31 juli. Daarna wou het script slapen tot 32 juli, dat lukte logischerwijs niet en dus ging het script nog een keer runnen. En nog een keer. En nog een keer.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

  • cowgirl
  • Registratie: November 2000
  • Laatst online: 17-12-2020
Haha, daar heb je inderdaad gelijk in. KOmt nog een stukje extra controle bij.

Zo draait er nog steeds bij een klant van ons een stukje maatwerk dat elke 4 jaar op 29 februari faalt. Elke 4 jaar (behalve in 2000 dus :p) wordt daar dus een melding over gedaan en als het de volgende dag wordt opgepakt is het probleem als sneeuw voor de zon verdwenen en wordt het doorgaans toch maar niet opgelost. Zonde van de tijd.

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 19:59
Huh? Je moet gewoon maketime of iets dergelijks gebruiken, zowel in C als in PHP werkt dat prima. Die rekent uit dat 51 januari hetzelfde is als 20 februari, toch?

Acties:
  • 0 Henk 'm!

  • Alain
  • Registratie: Oktober 2002
  • Niet online
cowgirl schreef op vrijdag 13 juli 2007 @ 19:52:
Haha, daar heb je inderdaad gelijk in. KOmt nog een stukje extra controle bij.

Zo draait er nog steeds bij een klant van ons een stukje maatwerk dat elke 4 jaar op 29 februari faalt. Elke 4 jaar (behalve in 2000 dus :p) wordt daar dus een melding over gedaan en als het de volgende dag wordt opgepakt is het probleem als sneeuw voor de zon verdwenen en wordt het doorgaans toch maar niet opgelost. Zonde van de tijd.
Als ik een applicatie schrijf die afhankelijk is van tijd zorg ik dat ik 1 keer de tijd ingeef en de applicatie dus moedwillig kan laten denken dat het een andere tijd is. Maargoed, als je het zonde van de tijd vindt om bugs op te lossen zou ik er vooral niks aan doen.
MBV schreef op vrijdag 13 juli 2007 @ 20:07:
Huh? Je moet gewoon maketime of iets dergelijks gebruiken, zowel in C als in PHP werkt dat prima. Die rekent uit dat 51 januari hetzelfde is als 20 februari, toch?
Dus als je een foute berekening maakt moet je het verdoezelen met een functie die een even incorrect antwoord oplevert (29 februari wordt 1 maart), maar geen foutmelding genereert?

Dit lijkt me symptoombestijding.

You don't have to be crazy to do this job, but it helps ....


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 19:59
Dat is het niet: hij doet namelijk precies wat je wilt. Als je de tegenhanger van mktime gebruikt, een X aantal maanden erbij optelt, en dan een functie gebruikt die daar weer een legale datum van maakt, dan is dat toch alleen maar goed? Anders zou elk programma zjin eigen kalenderfuncties moeten schrijven, daar hadden we bibliotheekfuncties voor uitgevonden :)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 25-05 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

cowgirl schreef op vrijdag 13 juli 2007 @ 19:52:
Zo draait er nog steeds bij een klant van ons een stukje maatwerk dat elke 4 jaar op 29 februari faalt. Elke 4 jaar (behalve in 2000 dus :p) wordt daar dus een melding over gedaan en als het de volgende dag wordt opgepakt is het probleem als sneeuw voor de zon verdwenen en wordt het doorgaans toch maar niet opgelost. Zonde van de tijd.
Waarom in 2000 niet? Dat was gewoon een schikkeljaar hoor.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23-05 15:21

NMe

Quia Ego Sic Dico.

.oisyn schreef op zaterdag 14 juli 2007 @ 03:45:
[...]

Waarom in 2000 niet? Dat was gewoon een schikkeljaar hoor.
Misschien runde het programma gewoon niet in 2000. :+

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

.oisyn schreef op zaterdag 14 juli 2007 @ 03:45:
[...]


Waarom in 2000 niet? Dat was gewoon een schikkeljaar hoor.
Dat was niet gewoon een schrikkeljaar ;)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23-05 15:21

NMe

Quia Ego Sic Dico.

kenneth schreef op zaterdag 14 juli 2007 @ 10:40:
[...]

Dat was niet gewoon een schrikkeljaar ;)
Schrikkeljaren zijn om de 4 jaar, gerekend vanaf het jaar 0, met uitzondering van alle eeuwwisselingen waarvan het jaartal niet deelbaar is door 400, toch? Dan is het dus wél "gewoon" een schrikkeljaar volgens de regels. Dat het wat complexer in elkaar zit dan veel mensen denken wil niet zeggen dat het bijzonder is. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Nouja wat betreft schrikkeljaren wordt het niet veel bijzonderder. Dus voor de schrikkeljaarliefhebber :Y) was 2000 toch écht een bijzonder jaar .... :P

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

Anoniem: 224515

offtopic:
Ik ben het alweer vergeten. Maar nu ik er zo over nadenk.. schreef je toen ook 14-07-00? ( en dan gaat het dus over 00 x) )

[ Voor 7% gewijzigd door Anoniem: 224515 op 14-07-2007 12:21 ]


Acties:
  • 0 Henk 'm!

  • Deikke
  • Registratie: Juni 2004
  • Laatst online: 20:27
Het is een schrikkeljaar mits:
- Het jaar deelbaar is door 4
- Het jaar niet deelbaar is door 100 (eeuwwisselingen)
- Uitzondering: Het jaar deelbaar is door 400 (dus 2000 weer wel)

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Zoiets dus:
Java:
1
2
3
public static boolean isSchrikkelJaar(int jaar) {
    return jaar % 4 == 0 && jaar % 100 != 0 || jaar % 400 == 0;
}
Slecht programmeervoorbeeld? Mwah, het is alleen beetje lastig te interpreteren voor de noeps. Een handvol haakjes zal de leesbaarheid wel wat bevorderen :+

Acties:
  • 0 Henk 'm!

Anoniem: 14829

Deikke schreef op zaterdag 14 juli 2007 @ 18:05:
Het is een schrikkeljaar mits wanneer:
- Het jaar deelbaar is door 4
- Het jaar niet deelbaar is door 100 (eeuwwisselingen)
- Uitzondering: Het jaar deelbaar is door 400 (dus 2000 weer wel)

Acties:
  • 0 Henk 'm!

  • kunnen
  • Registratie: Februari 2004
  • Niet online
Java:
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
public strictfp class Semantics extends Exception {
    private static volatile transient boolean l = false;
    private transient volatile static short j = 1;
    public volatile static transient Exception LogicClass = new Semantics();
    protected strictfp synchronized boolean WTF() throws Exception {
        again: do {
            l = !l;
            without: try {
                assert l ? true : LogicClass instanceof Semantics;
                continue;
            } catch (AssertionError e) {
                j++;
                LogicClass = new Exception();
                break again;
            } finally {
                switch (j % 2) {
                case 0:
                    LogicClass = this;
                    break again;
                default:
                    break without;
                }
            }
        } while (--j > -10 ? false : true);
        throw this;
    }
    public static void main(String[] args) {
        Semantics s = new Semantics();
        try {
            System.out.println(s.WTF());
 
        } catch (Exception e) {
            System.out.print(s.l);
        }
    }
}

Acties:
  • 0 Henk 'm!

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 19:22
BalusC schreef op zaterdag 14 juli 2007 @ 18:48:
Zoiets dus:
Java:
1
2
3
public static boolean isSchrikkelJaar(int jaar) {
    return jaar % 4 == 0 && jaar % 100 != 0 || jaar % 400 == 0;
}
Slecht programmeervoorbeeld? Mwah, het is alleen beetje lastig te interpreteren voor de noeps. Een handvol haakjes zal de leesbaarheid wel wat bevorderen :+
Lastige taal ook, dat Java
PHP:
1
2
3
function isSchrikkeljaar($jaar) {
    return date('L', mktime(1, 1, 1, 1, 1, $jaar)) == 1;
}

Of voor het huidige jaar:
PHP:
1
2
3
function isSchrikkeljaar() {
    return date('L') == 1;
}

[ Voor 2% gewijzigd door EdwinG op 15-07-2007 20:09 . Reden: Oeps, wel 1 gebruiken bij de mktime ]

Bezoek eens een willekeurige pagina


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

EdwinG schreef op zondag 15 juli 2007 @ 20:04:
[...]

Lastige taal ook, dat Java
PHP:
1
2
3
function isSchrikkeljaar($jaar) {
    return date('L', mktime(1, 1, 1, 1, 1, $jaar)) == 1;
}

Of voor het huidige jaar:
PHP:
1
2
3
function isSchrikkeljaar() {
    return date('L') == 1;
}
Lastige taal, dat PHP:
Java:
1
boolean schrikkeljaar = new GregorianCalendar().isLeapYear(jaar);

In Java hoef je er niet eens een functie voor te maken. Van elk GregorianCalendar object (de datumklasse in Java) kun je opvragen of het een schrikkeljaar is.

Zonder magische Strings met de letter L. Zonder magische 1 getallen. Compile time alles gecontroleerd. :)

Hoewel ik het niet logisch blijf vinden dat je een jaar parameter moet meegeven. Gewoon de jaarcomponent uit de Calender instantie trekken zou genoeg geweest zijn...

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 19:59
http://nl2.php.net/manual/nl/function.mcal-is-leap-year.php

Alleen gaat iedereen het opnieuw uitvinden, dat zal wel in alle talen zo zijn :)

Acties:
  • 0 Henk 'm!

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 20-05 22:18
Pulsher schreef op zondag 15 juli 2007 @ 17:47:
Java:
1
2
3
public strictfp class Semantics extends Exception {
    ... 
}
code:
1
true
Ik snap het niet?

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

DaCoTa schreef op zondag 15 juli 2007 @ 21:11:
[...]
code:
1
true
Ik snap het niet?
- Om te beginnen is dit absoluut geen exception maar een applicatie (zie main())
- strictfp is hier in mijn optiek zinloos aangezien er geen floating point berekeningen gedaan worden.
- Labels zijn EVIL. (vraag maar aan Sun :) )
- Ternary operator is zinloos.
- without label op een try is volgens mij ook zinloos.
- Transient is in deze context ook niet echt bruikbaar.
- leesbaarheid --.
- strictfp is volgens mij trouwens niet nodig op een individuele methode als het al op de class gedefinieerd is.

Genoeg lelijke dingen gezien? :P Ik mis trouwens nog genoeg denk ik.

Ps. Wisten jullie dat Sun smerige spelletjes speelt door het toe te staan dat je op willekeurige plekken in je code (in methoden/initializers) http://java.sun.com mag intypen? Probeer maar eens.
Sluikreclame of is het toch iets anders? :)

spoiler:
http: is een label en dat mag je overal neerzetten.
//blaaaaaaa is commentaar en mag dus ook.
Flouw hè?:P

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 22-05 15:44
spoiler:
Zet overal in je code:
http://gathering.tweakers.net heerst!

Zal Java ook leuk vinden :)

We are shaping the future


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:47

Robtimus

me Robtimus no like you

JKVA schreef op zondag 15 juli 2007 @ 22:02:
[...]

- Om te beginnen is dit absoluut geen exception maar een applicatie (zie main())
- strictfp is hier in mijn optiek zinloos aangezien er geen floating point berekeningen gedaan worden.
- Labels zijn EVIL. (vraag maar aan Sun :) )
- Ternary operator is zinloos.
- without label op een try is volgens mij ook zinloos.
- Transient is in deze context ook niet echt bruikbaar.
- leesbaarheid --.
- strictfp is volgens mij trouwens niet nodig op een individuele methode als het al op de class gedefinieerd is.

Genoeg lelijke dingen gezien? :P Ik mis trouwens nog genoeg denk ik.
Vergeet niet het gebrek aan consistentie:
- static volatile transient
- transient volatile static
- volatile static transient

Dezeflde keywords, op drie achtereenvolgende regels op drie verschillende volgorders.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02:38
Het doel van de code die JVKA gejat heeft, was het laten zien welke constructies en keywords Java kent die je niet zo vaak in gewone code tegenkomt. Lijkt me niet terecht om dat als slecht programmeervoorbeeld aan te halen, want het was nooit als serieuze code (of als goed voorbeeld) bedoelt.

[ Voor 3% gewijzigd door Soultaker op 15-07-2007 23:32 ]


Acties:
  • 0 Henk 'm!

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 20-05 22:18
Soultaker schreef op zondag 15 juli 2007 @ 23:07:
Het doel van de code die JVKA gejat heeft, was het laten zien welke constructies en keywords Java kent die je niet zo vaak in gewone code tegenkomt. Lijkt me niet terecht om dat als slecht programmeervoorbeeld aan te halen, want het was nooit als serieuze code (of als goed voorbeeld) bedoelt.
Ja, dat bedoelde ik dus. Dat het evil/lelijk/onduidelijk is, was duidelijk, maar ik zocht dus naar het nut van dit voorbeeld. Het leek me inderdaad een soort showcase voor code constructies omdat ik er geen touw aan vast kon knopen.

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 20-05 12:47
BalusC schreef op zaterdag 14 juli 2007 @ 18:48:
Zoiets dus:
Java:
1
2
3
public static boolean isSchrikkelJaar(int jaar) {
    return jaar % 4 == 0 && jaar % 100 != 0 || jaar % 400 == 0;
}
Slecht programmeervoorbeeld? Mwah, het is alleen beetje lastig te interpreteren voor de noeps. Een handvol haakjes zal de leesbaarheid wel wat bevorderen :+
Neuh. Je ziet precies wat die functie doet, en hoe de implementatie niet werkt. Als je dat niet kunt lezen zuig je als Java programmeur ;)
EdwinG schreef op zondag 15 juli 2007 @ 20:04:

Lastige taal ook, dat Java
PHP:
1
2
3
function isSchrikkeljaar($jaar) {
    return date('L', mktime(1, 1, 1, 1, 1, $jaar)) == 1;
}

Of voor het huidige jaar:
PHP:
1
2
3
function isSchrikkeljaar() {
    return date('L') == 1;
}
Lastig dat scheiden van 'taal' en 'API'. |:(

https://niels.nu


Acties:
  • 0 Henk 'm!

  • netvor
  • Registratie: September 2000
  • Laatst online: 08-04-2024
Hier op het werk een leuke tegengekomen:
C++:
1
std::string szFileName;


FileName is zijn leven lang geleden begonnen als een ouderwetse array van chars. Op een gegeven moment is iemand erachter gekomen dat het beter is om std::string te gebruiken. Ben ik het op zich helemaal mee eens, doe ik zelf ook voor alles behalve communicatiecode. Maar onze refactoring specialist heeft de naam van de variabele gelaten voor wat het was, en nu impliceert szFileName in al zijn Hongaarse glorie een volstrekt ongerelateerd datatype. |:(

[rant]

En dat is nog het ergste niet. De code die ik krijg toegestuurd is soms echt om te huilen. Overal en nergens unreferenced variables, totaal geen naming convention, en stapels compiler warnings. En dit soort vreemde taferelen:
C++:
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
    new cTestLoadHdp;
    ;
    //auxiliary variables
    char ReturnString[60];
    ;
    //keyboard
    enumKeySetLow  LowKeySet;
    enumKeySetHigh HighKeySet;
    LowKeySet=KeySetLow_LOAD_PLAYER;
    HighKeySet=KeySetHigh_LOAD_PLAYER;
    char chKl1=0,chKl2=0;
    int  iNOfKl=0;
    int  iKeyCaseState=0;//use in case - read value (use in key underswitch)
    char achKeyBuffer[256];
    int  iLenKeyBuffer=0;
    bool fUseKeyBuffer=false;//use in case - write to true
    int  iKeyCaseStateAfterBuffer=1;//use in case - write any value
    bool fClearAfterBuffer=true;
    char chKl1BeforeUseKeyBuffer=0,chKl2BeforeUseKeyBuffer=0;
    int  iNOfKlBeforeUseKeyBuffer=0;
    ;
    //state variables for test in main loop
    int CARD=0;
    int DSPT=0;
    int FaxChannel;
    ;
    PrintMainHint();
    ;


Waar al die puntkomma's toch voor dienen is mij echt een raadsel. Dacht deze programmeur misschien dat de applicatie beter draait als er een riante hoeveelheid NOP's in de executable zit?

Elke maand of twee krijg ik weer zo'n grote pan met spaghetti van onze mogelijk klinisch gestoorde senior programmer. Geen touw aan vast te knopen. Vervolgens ben ik dus twee maanden aan het aanmodderen en als het er eindelijk een beetje redelijk uitziet krijg ik weer een nieuwe lading meuk, mag de vorige de prullenbak in, en kan ik weer van voor af aan beginnen.

Zucht. ;(

[/rant]

Computer Science: describing our world with boxes and arrows.


Acties:
  • 0 Henk 'm!

  • PolarBear
  • Registratie: Februari 2001
  • Niet online
JKVA schreef op zondag 15 juli 2007 @ 20:45:
[...]

Lastige taal, dat PHP:
Java:
1
boolean schrikkeljaar = new GregorianCalendar().isLeapYear(jaar);

In Java hoef je er niet eens een functie voor te maken. Van elk GregorianCalendar object (de datumklasse in Java) kun je opvragen of het een schrikkeljaar is.

Zonder magische Strings met de letter L. Zonder magische 1 getallen. Compile time alles gecontroleerd. :)

Hoewel ik het niet logisch blijf vinden dat je een jaar parameter moet meegeven. Gewoon de jaarcomponent uit de Calender instantie trekken zou genoeg geweest zijn...
Visual Basic .NET:
1
2
3
4
dim schrikkeljaar as boolean
dim jaar as integer

schrikkeljaar = Date.IsLeapYear(jaar)

Acties:
  • 0 Henk 'm!

  • g4wx3
  • Registratie: April 2007
  • Laatst online: 20-05 11:59
En dat is nog het ergste niet. De code die ik krijg toegestuurd is soms echt om te huilen. Overal en nergens unreferenced variables, totaal geen naming convention, en stapels compiler warnings. En dit soort vreemde taferelen:
C++:
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
    new cTestLoadHdp;
    ;
    //auxiliary variables
    char ReturnString[60];
    ;
    //keyboard
    enumKeySetLow  LowKeySet;
    enumKeySetHigh HighKeySet;
    LowKeySet=KeySetLow_LOAD_PLAYER;
    HighKeySet=KeySetHigh_LOAD_PLAYER;
    char chKl1=0,chKl2=0;
    int  iNOfKl=0;
    int  iKeyCaseState=0;//use in case - read value (use in key underswitch)
    char achKeyBuffer[256];
    int  iLenKeyBuffer=0;
    bool fUseKeyBuffer=false;//use in case - write to true
    int  iKeyCaseStateAfterBuffer=1;//use in case - write any value
    bool fClearAfterBuffer=true;
    char chKl1BeforeUseKeyBuffer=0,chKl2BeforeUseKeyBuffer=0;
    int  iNOfKlBeforeUseKeyBuffer=0;
    ;
    //state variables for test in main loop
    int CARD=0;
    int DSPT=0;
    int FaxChannel;
    ;
    PrintMainHint();
    ;
WeLkE VeEl oP MsN ZiTTenDE PRoGrAMeUR HeEfT DeRgELijKE BReeZaH CoDE GeScHReVeN??;

'K hEB CoMpATIE MeT jE;

http://www.softfocus.be/


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 25-05 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

ik zie er weinig breezah in anders... Gewoon de gebruikelijke camelCasing.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02:38
netvor schreef op vrijdag 20 juli 2007 @ 12:45:
En dat is nog het ergste niet. De code die ik krijg toegestuurd is soms echt om te huilen.
[..]
C++:
1
    new cTestLoadHdp;
Deze eerste regel is nog wel het raarst. Hoe werkt die cTestLoadHdp, als je die kunt instantiëren zonder een reference op te slaan? Wat gebeurt er als ik een automatic variable van dit type instantieer? Crasht er dan ergens iets, of lekt de huidige code gewoon geheugen?

Als dit geen memory leak oplevert omdat er ergens een pointer wordt geregistreed die tzt weer vrijgegeven wordt, dan vraag ik me wel af waarom deze code door middel van een constructor aangeroepen wordt, en niet een static member function.

[ Voor 19% gewijzigd door Soultaker op 20-07-2007 15:49 ]


Acties:
  • 0 Henk 'm!

  • netvor
  • Registratie: September 2000
  • Laatst online: 08-04-2024
.oisyn schreef op vrijdag 20 juli 2007 @ 15:24:
ik zie er weinig breezah in anders... Gewoon de gebruikelijke camelCasing.
Inderdaad, het is camelCasing, dat is niet echt het probleem. Waar ik zo moe van wordt is bijvoorbeeld dat de helft van de identifiers Hongaars is en de andere helft niet. Of dat er een hele rits variabelen (dit blokje wat ik postte was slechts een fractie) wordt gedeclareerd met vrijwel identieke namen zonder logische groepering in structs en dergelijke. En sommige variabelen worden in main.cpp gedeclareerd, daar geheel niet gebruikt, maar worden ergens ver weg via 'extern' opgeroepen. Als je dus denkt "ha, redundant variable, ikke weghalen :w " dan kom je er pas bij de linker achter dat er iets fout zit.

En dat op een vrijdag... :O

EDIT: @Soultaker: kijk, dat is nou precies het soort vragen dat ik mezelf heb aangeleerd niet meer te stellen, daar krijgt een mens alleen maar hoofdpijn van. Wat mij betreft zijn er twee mogelijk scenarios:
  1. Het doet iets heel obscuurs wat waarschijnlijk helemaal diep verborgen ligt onder een laag spaghetti. In zulke situaties zeg ik "If it ain't broken, don't fix it."
  2. Het is inderdaad volstrekt overbodig (ik zie bijvoorbeeld in de constructor een reeks member assignments staan). In dat geval kan het geen kwaad en met een beetje geluk optimiseert de compiler het er wel uit.
Hoe dan ook, ik laat dit soort relikwieen gewoon staan. Not My Job.

[ Voor 29% gewijzigd door netvor op 20-07-2007 16:02 ]

Computer Science: describing our world with boxes and arrows.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 25-05 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

netvor schreef op vrijdag 20 juli 2007 @ 15:53:
En sommige variabelen worden in main.cpp gedeclareerd, daar geheel niet gebruikt, maar worden ergens ver weg via 'extern' opgeroepen. Als je dus denkt "ha, redundant variable, ikke weghalen :w " dan kom je er pas bij de linker achter dat er iets fout zit.
Ik vind dat dan ook een erg domme conclusie. Als een variabele niet static is, of niet in een anonymous namespace zit, dan weet je dat hij mogelijkerwijs vanuit een andere sourcefile gebruikt wordt. De gangbare handeling in mijn boekje is dan gewoon even een find-in-all-files op die identifier te doen (of Find References, als je Visual C++ icm Visual Assist gebruikt), en niet zomaar die var weghalen en hopen dat je niets breekt :).

Desalniettemin, ik ben het er mee eens dat die code erg slecht is opgezet ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Anoniem: 140111

Even een brainfart:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function CreateSaveObject()
    {
        $QueryBuilder = "INSERT INTO ". $this->Tabelnaam ." (";
        for($i = 0; $i < (sizeof($this->VeldenArray) - 1); $i++)
        {
            $QueryBuilder .= $this->VeldenArray[$i] .', ';
        }
        $QueryBuilder .= $this->VeldenArray[(sizeof($this->VeldenArray) - 1)];
        $QueryBuilder .= ') VALUES (';
        for($i = 0; $i < (sizeof($this->VeldenArray) - 1); $i++)
        {
            $QueryBuilder .= '\'".$this->'.$this->VeldenArray[$i].'."\', ';
        }
        $QueryBuilder .= '\'".$this->'.$this->VeldenArray[(sizeof($this->VeldenArray) - 1)].'."\')';
        
        echo $QueryBuilder;
    }

Net uit zitten poepen, leuk voor de volgende 8)7

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 25-05 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

Idd, iets met implode() enzo :). Vooral leuk als VeldenArray geen elementen bevat. Daarnaast, waarom wil je in hemelsnaam een string als '".$this->kolomnaam."' in je database hebben?

[ Voor 70% gewijzigd door .oisyn op 20-07-2007 17:33 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Anoniem: 140111

Het is de bedoeling dat over een paar weekjes dit code voor me gaat genereren :)

Je krijgt dus een string terug als:

INSERT INTO <tabel> (kolom1, kolom2) VALUES ('". $this->kolom1."', '". $this->kolom2 .'")

[ Voor 45% gewijzigd door Anoniem: 140111 op 21-07-2007 11:41 ]


Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 01-01 18:57
Anoniem: 140111 schreef op zaterdag 21 juli 2007 @ 11:03:
Het is de bedoeling dat over een paar weekjes dit code voor me gaat genereren :)

Je krijgt dus een string terug als:

INSERT INTO <tabel> (kolom1, kolom2) VALUES ('". $this->kolom1."', '". $this->kolom2 .'")
Is het niet veel makkelijker om de volgende query te genereren 8)7
SQL:
1
INSERT INTO tabel SET kolom1=value1, kolom2=value2


PHP:
1
2
3
4
5
6
$sql = 'INSERT INTO tabel SET';
$i = 0;
foreach ($array as $key => $val) {
    $i++;
    $sql.= ($i !== 1) ? ', ' : '') . "`$key` = '$val'";
}

.


Acties:
  • 0 Henk 'm!

Anoniem: 14829

Optix schreef op zaterdag 21 juli 2007 @ 12:01:
Is het niet veel makkelijker om de volgende query te genereren 8)7
SQL:
1
INSERT INTO tabel SET kolom1=value1, kolom2=value2
Da's geen standaard SQL. Dat is de syntax voor een UPDATE, en er zal vast ook wel een database zijn die 't ondersteunt voor inserts, maar volgens de SQL standaard is 't
SQL:
1
INSERT INTO tabel (kolom1, kolom2) VALUES (value1, value2)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 25-05 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

Anoniem: 140111 schreef op zaterdag 21 juli 2007 @ 11:03:
Het is de bedoeling dat over een paar weekjes dit code voor me gaat genereren :)
En dat moet via een database omdat...?
Blijkbaar weet je de kolomnamen al. Dan kun je dus ook gewoon on the fly code genereren, zonder eerst redundante data in een database te zetten.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Anoniem: 140111

De kolomnamen worden ingevoerd op een vorige pagina, aan de hand daarvan worden ook de vars etc declareerd en worden er enkele functies gegenereerd zoals Save, SelectAll(), SelectByID($id) etc
Verder genereerd het ook het CREATE TABLE statement, met PK etc

[ Voor 14% gewijzigd door Anoniem: 140111 op 21-07-2007 14:12 ]

Pagina: 1 ... 10 11 Laatste

Dit topic is gesloten.

Let op:
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes. :)

Het is hier ook niet het "korte vraagjes" topic. Zie deze post