[alg] Slechtste programmeervoorbeelden deel 4 Vorige deel Overzicht Laatste deel

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

Pagina: 1 ... 41 ... 103 Laatste
Acties:
  • 993.663 views

Acties:
  • 0 Henk 'm!

  • jostefa
  • Registratie: Januari 2006
  • Laatst online: 07-10 17:21
Random r = new Random();
int index = MultiView1.ActiveViewIndex;

while (index == MultiView1.ActiveViewIndex)
{
index = r.Next(0, MultiView1.Views.Count());
}

MultiView1.ActiveViewIndex = index;

Theoretisch gezien kan je in een oneindige loop komen. Maar mag je dit zo programmeren?

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
jostefa schreef op woensdag 17 november 2010 @ 10:44:
Random r = new Random();
int index = MultiView1.ActiveViewIndex;

while (index == MultiView1.ActiveViewIndex)
{
index = r.Next(0, MultiView1.Views.Count());
}

MultiView1.ActiveViewIndex = index;

Theoretisch gezien kan je in een oneindige loop komen. Maar mag je dit zo programmeren?
Mjah, is gewoon een Las Vegas algoritme, in theorie kan het oneindig zijn, in de praktijk niet. De kans dat het oneindig lang loopt is namelijk oneindig klein (limiet = 0).

Je kunt ook Monte Carlo nemen. Dan weet je zeker dat het eindigt, maar niet zeker dat de waarden verschillend zijn.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 06-10 10:20

Janoz

Moderator Devschuur®

!litemod

Of er had eigenlijk een != moeten staan ipv ==, of ik begrijp het doel niet helemaal en wordt de while lus (muv concurrency issues) nooit uitgevoerd.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Nu online

Reptile209

- gers -

@Janoz: de lus wordt toch juist altijd uitgevoerd:
C:
1
2
3
4
int index = MultiView1.ActiveViewIndex;

while (index == MultiView1.ActiveViewIndex)
{ }

En dan vervolgens net zo lang een nieuw random getal pakken, totdat je een andere index gevonden hebt dan de huidige en die actief maken.

Volgens mij is het een kortere klap om de index met een willekeurig getal tussen 1 en Count()-1 te verhogen, en vervolgens te mod-en met Count(), dan ben je in één klap klaar en is het altijd een andere waarde dan de huidige. In beide gevallen (ook in het voorbeeld van jostefa) zit er volgens mij een leuke uitdaging voor Count()==0 ;).

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 06-10 10:20

Janoz

Moderator Devschuur®

!litemod

|:( ..... * Janoz neemt nog maar eens even een kop koffie.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 07-10 18:52
Davio schreef op woensdag 17 november 2010 @ 10:49:
Mjah, is gewoon een Las Vegas algoritme, in theorie kan het oneindig zijn, in de praktijk niet. De kans dat het oneindig lang loopt is namelijk oneindig klein (limiet = 0).
Inderdaad, het algoritme termineert almost surely: niet gegarandeerd, maar wel met kans 1.
Reptile209 schreef op woensdag 17 november 2010 @ 11:19:
In beide gevallen (ook in het voorbeeld van jostefa) zit er volgens mij een leuke uitdaging voor Count()==0 ;).
Er is schijnbaar een active index, dus zal Count() >= 1 zijn lijkt me, maar dan heb je nog gelijk dat het moeilijk gaat worden een ándere index te vinden als er maar eentje is. :P

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Geh, dat doet me denken aan een stukje QBasic code dat ik zag toen ik nog heel jong was:
code:
1
2
False = 0
True = Not False

Ik: WTF :? Hoe weet ie nou welke waarde anders dan 0. Na wat experimenten dacht ik dat Not x gewoon -x - 1 deed :P

[ Voor 14% gewijzigd door .oisyn op 17-11-2010 12:10 ]

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!

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 07-10 09:09

Knutselsmurf

LED's make things better

jostefa schreef op woensdag 17 november 2010 @ 10:44:
Random r = new Random();
int index = MultiView1.ActiveViewIndex;

while (index == MultiView1.ActiveViewIndex)
{
index = r.Next(0, MultiView1.Views.Count());
}

MultiView1.ActiveViewIndex = index;

Theoretisch gezien kan je in een oneindige loop komen. Maar mag je dit zo programmeren?
Volgens mij gaat dat fout als er maar 1 view is. Dan zal er nooit een andere geselecteerd worden en heb je een oneindige lus.

- This line is intentionally left blank -


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Als je de while lus koppelt aan een conditie welke controleerd of the view collection ook daadwerkelijk meerdere views bevat kun je niet in een oneindige lus komen..

C#:
1
2
3
4
5
6
if (MultiView1.Views.Count() > 1)
{
   while { .. }
}
else
  index = 0;

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • yade
  • Registratie: Mei 2002
  • Laatst online: 16-07 13:47
jostefa schreef op woensdag 17 november 2010 @ 10:44:
Random r = new Random();
int index = MultiView1.ActiveViewIndex;

while (index == MultiView1.ActiveViewIndex)
{
index = r.Next(0, MultiView1.Views.Count());
}

MultiView1.ActiveViewIndex = index;

Theoretisch gezien kan je in een oneindige loop komen. Maar mag je dit zo programmeren?
De kans is heel groot dat het niet oneindig loopt maar crasht. (ArgumentOutOfRangeException)

Een oplossing:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
Random r = new Random();

if (MultiView1.Views.Count()>1) 
{
  int newIndex = r.Next(0,MultiView1.Views.Count()-2);
  if (newIndex>=MultiView1.ActiveIndex) 
  {
    newIndex++;
  }

  MultiView1.ActiveIndex = newIndex;
}

[ Voor 20% gewijzigd door yade op 17-11-2010 15:14 ]


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Ik zou het zelf zo doen, met afvangen van errors en optimalisaties:

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
29
30
31
int count = MultiView1.Views.Count(); // Beter gelijk opslaan, anders moet hij elke keer de functie Count() uitvoeren, is blijkbaar niet opgeslagen zoals bijvoorbeeld bij Arrays

switch (count)
{
    case 0:
        // Gooi er eventueel een logmelding uit
        break;
    case 1:
        // Er is maar één view, een andere random view kiezen gaat dus niet
        break;
    case 2:
        // Er zijn twee views, de enige andere random view is gewoon de andere view
        // Belangrijk om hier te optimaliseren, want juist in dit geval zou hij vaak dezelfde index kunnen kiezen
        if (MultiView1.ActiveIndex == 0)
        {
            MultiView1.ActiveIndex = 1;
            break;
        }

        MultiView1.ActiveIndex = 0;
        break;
        // Je zou hier de 1 en 0 ook kunnen swappen middels een binary not (~), maar dat vond ik voor dit voorbeeld de moeite niet
        // Dan moet je ook weer casten naar boolean en weer terug en dat is veel te veel gedoe voor zoiets simpels
    default:
        Random r = new Random();
        int ix;
        // Lege for-loop, gebruik ik omdat je dan een assignment en conditie in één kunt bouwen
        for (ix = MultiView1.ActiveIndex; ix == MultiView1.Views.ActiveIndex; ix = r.Next(0, count - 1));
        MultiView1.ActiveViewIndex = ix;
        break; // Switch-condities mogen volgens mij nooit zonder break of return
}


Je kan ook een Monte Carlo approach nemen door bijvoorbeeld alle indices minus de ActiveViewIndex (die dus gewoon overslaan als je hem tegenkomt in de for-loop) te kopiëren naar een array met integers (die dus één element kleiner/korter is) , dan kun je uit die lijst een random index kiezen en is het altijd een andere.

Ik verwacht echter dat in dit geval Las Vegas in de praktijk stukken sneller is dan het door mij genoemde Monte Carlo alternatief, het is ook puur om het verschil tussen Las Vegas en Monte Carlo aan te geven.

[ Voor 27% gewijzigd door Davio op 17-11-2010 16:44 ]


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Nu online

Reptile209

- gers -

Waarom toch steeds die loop met een willekeurig getal om een nieuwe te raden?
Stel, je hebt een range 0-9 (count=10) en huidige index 4. Kies een willekeurig getal tussen 1 en count-1 (dus tussen 1 en 9) en tel dat bij de huidige index op. Die wordt dan tussen 5 en 13. Neem modulo 10 (count) daarvan en je zit netjes tussen 0 en 9, en nooit op 4 dus per definitie anders dan de oorspronkelijke waarde. 't Is net zo makkelijk te volgen als zo'n rare lus en waterdicht :).

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hetzelfde principe, een net wat andere aanpak, is om een getal tussen 0 en count-2 te pakken, en als die gelijk is als de huidige index dan neem je count-1.

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!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Reptile209 schreef op woensdag 17 november 2010 @ 16:45:
Waarom toch steeds die loop met een willekeurig getal om een nieuwe te raden?
Stel, je hebt een range 0-9 (count=10) en huidige index 4. Kies een willekeurig getal tussen 1 en count-1 (dus tussen 1 en 9) en tel dat bij de huidige index op. Die wordt dan tussen 5 en 13. Neem modulo 10 (count) daarvan en je zit netjes tussen 0 en 9, en nooit op 4 dus per definitie anders dan de oorspronkelijke waarde. 't Is net zo makkelijk te volgen als zo'n rare lus en waterdicht :).
Handige truc, die kende ik nog niet, programmeer ook niet veel wiskunde, eerder met MVC's :).
Dan heb je mijn tweede case ook niet meer nodig.

Ik zeg doen.

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Davio schreef op woensdag 17 november 2010 @ 16:30:
C#:
1
2
3
        // Je zou hier de 1 en 0 ook kunnen swappen middels een binary not (~), maar dat vond ik voor dit voorbeeld de moeite niet
        // Dan moet je ook weer casten naar boolean en weer terug en dat is veel te veel gedoe voor zoiets simpels
   
Een not op 0 levert 0xFFFFFFF... op, niet 1. Wat je wilt doen is 1 - MultiView1.ActiveIndex.

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
uit code: Beter gelijk opslaan, anders moet hij elke keer de functie Count() uitvoeren, is blijkbaar niet opgeslagen zoals bijvoorbeeld bij Arrays

Is dat zo? Wordt de methode iedere case opnieuw uitgevoerd?

in PHP niet:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
var_dump(printf(" hi "));
switch(printf(" hi ")):
case -2:break;
case -1:break;
case  0:break;
case  1:break;
case  2:break;
endswitch;
?>


output: " hi int(4) hi ";

[ Voor 3% gewijzigd door Gamebuster op 17-11-2010 17:54 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Gamebuster schreef op woensdag 17 november 2010 @ 17:52:
[...]

uit code: Beter gelijk opslaan, anders moet hij elke keer de functie Count() uitvoeren, is blijkbaar niet opgeslagen zoals bijvoorbeeld bij Arrays

Is dat zo? Wordt de methode iedere case opnieuw uitgevoerd?

in PHP niet:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
var_dump(printf(" hi "));
switch(printf(" hi ")):
case -2:break;
case -1:break;
case  0:break;
case  1:break;
case  2:break;
endswitch;
?>


output: " hi int(4) hi ";
Ik bedoelde niet dat de methode iedere case opnieuw uitgevoerd wordt, maar wel elke keer in de for-loop waar hij ook staat.

Als ik LINQ-enumerables gebruik, hebben ze ook een methode Count() in plaats van een property Count en dan lijkt het me toch dat het uitvoeren van een methode langzamer is dan een property.

Ik lees net op de MSDN dat elke verzameling die IEnumerable implementeert een methode Count() heeft. Maar ook las ik dat Views, een ViewCollection, gewoon de property Count heeft. Je zou dus de Count() method in dit geval kunnen vervangen door een Count property.

Als ik alles wat hierboven al gezegd is, samenvat, kan ik reviseren tot het volgende:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
switch (MultiView1.Views.Count)
{
    case 0:
        break;
    case 1:
        break;
    case 2:
        MultiView1.ActiveIndex = 1 - MultiView1.ActiveIndex;
        break;
    default:
        Random r = new Random();
        MultiView1.ActiveIndex = (MultiView1.ActiveIndex + r.Next(1, MultiView1.Views.Count - 1)) % MultiView1.Views.Count;
        break;
}

Acties:
  • 0 Henk 'm!

  • C.Hariri
  • Registratie: November 2010
  • Laatst online: 02-10 14:52
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 20:06
C.Hariri schreef op woensdag 17 november 2010 @ 19:01:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
Brainfuck? :P

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Gamebuster schreef op woensdag 17 november 2010 @ 17:52:
[...]

uit code: Beter gelijk opslaan, anders moet hij elke keer de functie Count() uitvoeren, is blijkbaar niet opgeslagen zoals bijvoorbeeld bij Arrays

Is dat zo? Wordt de methode iedere case opnieuw uitgevoerd?

in PHP niet:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
var_dump(printf(" hi "));
switch(printf(" hi ")):
case -2:break;
case -1:break;
case  0:break;
case  1:break;
case  2:break;
endswitch;
?>


output: " hi int(4) hi ";
Dit kan de compiler optimaliseren. Maar in het geval dat de uitvoer van printf() niet constant is, is een optimalisatie niet mogelijk en wordt het inderdaad altijd uitgevoerd. Dus als de compiler niet kan detecteren of de (eind)conditie in een if/for/switch/while/enz.. constant is, dan moet deze altijd worden aangeroepen. En als je een slechte compiler hebt, dan doet die dat sowieso.

Daarom is het als programmeur verstandig om de waarde altijd apart op te slaan. Ik weet niet of ze in C# een const hebben, net als in C++, maar dan is de programmeur nu alsnog fout en had hij een const int count moeten maken, als hij er blijkbaar echt zoveel om geeft.

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Lijkt op zo'n gekke oneline-programmeertaal die ik op Project Euler wel eens voorbij zie komen.

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
HuHu schreef op woensdag 17 november 2010 @ 19:38:
[...]

Dit kan de compiler optimaliseren. Maar in het geval dat de uitvoer van printf() niet constant is, is een optimalisatie niet mogelijk en wordt het inderdaad altijd uitgevoerd. Dus als de compiler niet kan detecteren of de (eind)conditie in een if/for/switch/while/enz.. constant is, dan moet deze altijd worden aangeroepen. En als je een slechte compiler hebt, dan doet die dat sowieso.

Daarom is het als programmeur verstandig om de waarde altijd apart op te slaan. Ik weet niet of ze in C# een const hebben, net als in C++, maar dan is de programmeur nu alsnog fout en had hij een const int count moeten maken, als hij er blijkbaar echt zoveel om geeft.
In C# heb je de readonly modifier, die alleen voor fields gebruikt kan worden, hiermee kan je één keer assignen (hoeft niet gelijk bij de declaration).

Je hebt ook de const modifier, maar die kan je alleen gebruiken als de waarde van de variabele tijdens compile-time bekend is en dus niet met object references.

In mijn snippet kan geen van tweeën dus gebruikt worden en wordt een normale variabele gebruikt. Maar dat is een lokale variabele die alleen leeft tijdens zijn eigen methode, dus daar zou ik me niet druk om maken.

Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Daarnaast kun je in C# natuurlijk ook nog een property maken met alleen een getter:
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
public class MijnCustomVerzameling<T> : IVerzameling<T>
{
    private T[] _items;

    public MijnCustomVerzameling()
    {
        _items = new T[42];
    }

    public int Count
    {
        get
        {
            int num = 0;
            if(_items != null)
            {
                foreach(T item in _items)
                {
                    num++;
                }
            }
            return num;
        }
    }
}


Ranzige code, dat sowieso, maar het demonstreert prima wat ik wil laten zien. :P

We are shaping the future


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Davio schreef op woensdag 17 november 2010 @ 20:28:
[...]

In C# heb je de readonly modifier, die alleen voor fields gebruikt kan worden, hiermee kan je één keer assignen (hoeft niet gelijk bij de declaration).
Niet geheel correct. Aan fields met de readonly modifier kun je bijvoorbeeld zowel in de declaratie als in de constructor een waarde toekennen. (Als ik me goed herinner in de constructor zelfs meerdere malen, mocht je dat willen.) Pas na dat de constructor klaar is met uitvoeren staat de waarde vast.

Acties:
  • 0 Henk 'm!

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 21:31
Ik wil graag Borland Development Studio nomineren als slecht programmeervoorbeeld. Mag dat ook?

Acties:
  • 0 Henk 'm!

  • yade
  • Registratie: Mei 2002
  • Laatst online: 16-07 13:47
Dat vond Borland zelf ook, daarom hebben ze het afgestoten.

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
yade schreef op woensdag 17 november 2010 @ 21:15:
Dat vond Borland zelf ook, daarom hebben ze het afgestoten.
Ik heb Borland altijd een stoffige naam gevonden, en het daarom maar links laten liggen. :*)

Afbeeldingslocatie: http://www.seriouslyimportantinformation.com/resources/bear%20al%20borland.gif

Acties:
  • 0 Henk 'm!

  • yade
  • Registratie: Mei 2002
  • Laatst online: 16-07 13:47
Ze waren ooit vooruitstrevend met hun RAD tools. Helaas werd het met elke release instabieler en werden ze links en rechts ingehaald door betere oplossingen.

Acties:
  • 0 Henk 'm!

  • yade
  • Registratie: Mei 2002
  • Laatst online: 16-07 13:47
Alex) schreef op woensdag 17 november 2010 @ 20:45:
Daarnaast kun je in C# natuurlijk ook nog een property maken met alleen een getter:
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
public class MijnCustomVerzameling<T> : IVerzameling<T>
{
    private T[] _items;

    public MijnCustomVerzameling()
    {
        _items = new T[42];
    }

    public int Count
    {
        get
        {
            int num = 0;
            if(_items != null)
            {
                foreach(T item in _items)
                {
                    num++;
                }
            }
            return num;
        }
    }
}


Ranzige code, dat sowieso, maar het demonstreert prima wat ik wil laten zien. :P
Waarom zo ranzig als het veel beter kan? De .Length property gebruiken bijvoorbeeld?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het punt wat gedemonstreerd werd is dat een Count property juist potentieel duur kan zijn. Dat het in dit specifieke voorbeeld niet hoeft doet daar niets aan af.

[ Voor 29% gewijzigd door .oisyn op 17-11-2010 23:20 ]

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!

  • yade
  • Registratie: Mei 2002
  • Laatst online: 16-07 13:47
Ja, kan, maar ze zijn het niet. ;)

Alleen de Count method is duur. En zo hoort het ook, een property aanspreken mag geen dure operatie zijn, anders had het een method moeten zijn.

Verwijderd

yade schreef op woensdag 17 november 2010 @ 23:18:
[...]


Waarom zo ranzig als het veel beter kan? De .Length property gebruiken bijvoorbeeld?
Length telt ook de lege geheugen plaatsen ;)

Helaas is Length niet goed te reflecten, het eindigt in een interne call naar get_Length() :p

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

yade schreef op woensdag 17 november 2010 @ 23:28:
Ja, kan, maar ze zijn het niet. ;)
De code van Alex) is het overduidelijk wel. Dat de standaard classes allemaal O(1) Count hebben wil niet zeggen dat dat opgaat voor elke ICollection<T>. Als je een linked list implementatie hebt met O(1) splice operaties dan kun je geen O(1) count hebben. Beetje onzin om dan maar te zeggen dat dat geen ICollection mag zijn, niet? ICollection definieert verder geen running time constraints op een implementatie van Count.

[ Voor 241% gewijzigd door .oisyn op 18-11-2010 10:10 ]

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.


  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
.oisyn schreef op donderdag 18 november 2010 @ 10:00:
[...]

De code van Alex) is het overduidelijk wel. Dat de standaard classes allemaal O(1) Count hebben wil niet zeggen dat dat opgaat voor elke ICollection<T>. Als je een linked list implementatie hebt met O(1) splice operaties dan kun je geen O(1) count hebben. Beetje onzin om dan maar te zeggen dat dat geen ICollection mag zijn, niet? ICollection definieert verder geen running time constraints op een implementatie van Count.
Maar als je een collectie hebt, kun je de implementatie van de collectie op het laagste niveau (tree, linked list) toch scheiden van de property count en die gewoon na elke insert verhogen en na elke delete verlagen?

  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 01-09 13:39

Big Womly

Live forever, or die trying

Zonet op m'n werk volgende code onder m'n neus gekregen
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
declare
  type ttype is record(subject varchar2(8) null,viewkeys varchar2(255) null);
  oldrec ttype;
  newrec ttype;
  occ number:=0;
  wrong boolean:=false;
  cursor cDS is
    select * from TABLENAME DN
    order by DN.idcol,'NA';
begin
  for DN in cDS
   loop
     begin
        newrec.subject:=DN.idcol;
        newrec.viewkeys:='NA';
        if (oldrec.subject=newrec.subject AND oldrec.viewkeys=newrec.viewkeys) then 
            wrong:=true;
        end if;
        if wrong=true then 
            occ:=occ+1;
        end if;
        if ((oldrec.subject!=newrec.subject OR oldrec.viewkeys!=newrec.viewkeys) AND wrong=true)
            then RAISE_APPLICATION_ERROR (-20200,'Duplicate key');
        end if;
...

Order by fixed string?
Maximaal 1 regel per if?
En die laatste IF wordt helemaal nooit uitgevoerd... (Of zie ik iets over het hoofd?)

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 01-09 13:39

Big Womly

Live forever, or die trying

Yup, "Hello world!"

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Davio schreef op donderdag 18 november 2010 @ 10:16:
[...]

Maar als je een collectie hebt, kun je de implementatie van de collectie op het laagste niveau (tree, linked list) toch scheiden van de property count en die gewoon na elke insert verhogen en na elke delete verlagen?
Welk gedeelte van "Als je een linked list implementatie hebt met O(1) splice operaties dan kun je geen O(1) count hebben" snapte je niet? :)

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.


  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
.oisyn schreef op donderdag 18 november 2010 @ 10:39:
[...]

Welk gedeelte van "Als je een linked list implementatie hebt met O(1) splice operaties dan kun je geen O(1) count hebben" snapte je niet? :)
Ik snap het nu, bij een Linked List kun je natuurlijk alleen maar lopen in een bepaalde richting en elk element heeft alleen maar verstand van zijn buurman, soort platte boom dus.

Een Linked List is dan ook niet veel meer dan alleen het eerste element en dan is het juist de kracht dat je niet weet en niet nodig hebt hoeveel elementen er zijn.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nou, nee :). Je beschrijft daar een single linked list, maar die kan net als een double linked list in principe gewoon een count hebben. Het gaat om de splice, een operatie om een range van elementen te replacen met een andere range in de lijst. Zo'n range wordt typisch weergegeven door 2 iterators die naar de eerste en laatste node in de de range wijzen. Als je niet weet hoeveel elementen in de range zitten en je moet de count updaten, dan moet je dus over die range heenlopen, wat de splice dus O(n) maakt. Als je heel veel wilt splicen dan wil je dat mogelijk niet, en kies je dus voor een implementatie waarbij de splice zelf O(1) is, maar waarbij je voor de uiteindelijke count wel over de elementen moet lopen om uit te vinden hoeveel er in de lijst zitten.

Dus óf count is O(1) en splice O(n), óf count is O(n) en splice O(1)

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.


  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Hmm, toch mijn boek "Introductions to Algorithms" van de uni weer een keer uit de kast halen. Daar stond dat ook allemaal in, maar zoals je merkt is het nogal stroef geworden.

Stacks, linked lists, FIFO, LIFO, al die gekke termen. En dan had je nog al die verschillende trees zoals red-black-trees.

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
echo "<input name=\"hiddenmatch\" type=\"hidden\" id=\"hiddenmatch\" value=\"" . $_SESSION['captcha_text'] . "\" />";


|:(

Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 23:06
Dat is een erg fijne zeg

Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 22:20
Verwijderd schreef op vrijdag 19 november 2010 @ 12:01:
PHP:
1
echo "<input name=\"hiddenmatch\" type=\"hidden\" id=\"hiddenmatch\" value=\"" . $_SESSION['captcha_text'] . "\" />";


|:(
Dan nog maar niet om te zeiken over het gebruik van dubbele quotes in plaats van enkele quotes, welke IMHO een betere practice zijn.

Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Bij de echo van PHP? Want voor HTML zie ik zelf liever dubbele quotes.

Overigens vermijd ik eigenlijk het echo'en van HTML ten aller tijde, en al helemaal gevoelige informatie.

PHP:
1
<input type="hidden" name="users_password" value="<?=$password;?>" />


Hiervoor moet wel Short-tags aanstaan.

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

  • Aloys
  • Registratie: Juni 2005
  • Niet online
Dat vind ik juist veel lelijker, imho moet je of alles php houden of volledig html doen en dan verwerken als een template oid. Het starten en eindigen van php-code binnen één document zorgt er ook voor dat ik het overzicht snel kwijt raakt.

[ Voor 14% gewijzigd door Aloys op 19-11-2010 14:21 ]


Acties:
  • 0 Henk 'm!

  • Kwastie
  • Registratie: April 2005
  • Laatst online: 06-10 16:13

Kwastie

Awesomeness

CyCloneNL schreef op vrijdag 19 november 2010 @ 13:33:
Overigens vermijd ik eigenlijk het echo'en van HTML ten aller tijde, en al helemaal gevoelige informatie.

PHP:
1
<input type="hidden" name="users_password" value="<?=$password;?>" />
Short tags zelf zijn ook lelijk, het staat standaard uit. Dus als je website wil draaien op een shared-hosting server heb je (meestal) al een probleem want dan moet je aanpassingen doen.

Zelf probeer ik deze tag altijd te vermijden

@Janoz
Het is persoonlijke voorkeur, maar er waren (ooit) plannen om deze short-tag deprecated te maken maar volgens mij zijn ze daar op terug gekomen.

En zoveel langer is het niet, dus ik vermijd ze heel makkelijk
PHP:
1
<input type="hidden" name="users_password" value="<?php echo($password);?>" />

[ Voor 28% gewijzigd door Kwastie op 19-11-2010 14:37 ]

When I get sad i stop being sad and be awesome instead


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 06-10 10:20

Janoz

Moderator Devschuur®

!litemod

Aloys schreef op vrijdag 19 november 2010 @ 14:20:
Dat vind ik juist veel lelijker, imho moet je of alles php houden of volledig html doen en dan verwerken als een template oid. Het starten en eindigen van php-code binnen één document zorgt er ook voor dat ik het overzicht snel kwijt raakt.
In dat geval ben ik erg benieuwd hoe jij herhalende structuren opneemt. En dan begin ik nog niet over de extra inefficientie die je introduceert door de hele html in een string te zetten om vervolgens (vast ook met reguliere expressies ipv replace) je data er in te plempen.

Nee, doe mij maar CyCloneNL's aanpak.

@Kwastie

Ik vind ze juist erg mooi, speciaal voor dit soort dingen. Je kunt gewoon nietjes voor elke applicatie te begrijpen html blijven kloppen, alleen staat er een php tag of helemaal niks ipv de uiteindelijke waarde.

[ Voor 13% gewijzigd door Janoz op 19-11-2010 14:30 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
CyCloneNL schreef op vrijdag 19 november 2010 @ 13:33:
Bij de echo van PHP? Want voor HTML zie ik zelf liever dubbele quotes.

Overigens vermijd ik eigenlijk het echo'en van HTML ten aller tijde, en al helemaal gevoelige informatie.

PHP:
1
<input type="hidden" name="users_password" value="<?=$password;?>" />


Hiervoor moet wel Short-tags aanstaan.
Htmlentities moet er nog omheen.

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Janoz schreef op vrijdag 19 november 2010 @ 14:28:
In dat geval ben ik erg benieuwd hoe jij herhalende structuren opneemt. En dan begin ik nog niet over de extra inefficientie die je introduceert door de hele html in een string te zetten om vervolgens (vast ook met reguliere expressies ipv replace) je data er in te plempen.

Nee, doe mij maar CyCloneNL's aanpak.

@Kwastie

Ik vind ze juist erg mooi, speciaal voor dit soort dingen. Je kunt gewoon nietjes voor elke applicatie te begrijpen html blijven kloppen, alleen staat er een php tag of helemaal niks ipv de uiteindelijke waarde.
Je kan de template eenmalig inlezen on converteren naar een php file. Bij iedere pageview doe je een controle tussen de modified-time van de 2 files en eventueel maak je daarop de php file opnieuw aan.

Op zich zijn templates op deze manier geen slechte invloed op de performance.

Ik zelf gebruik echter geen templates; ik gebruik een serie php files met veelgebruikte html blokken die ik kan echo'en met een fuctioncall.

Zoiets als:
printTitleSection, printPost, printNewMessageForm, printHtml5VideoPlayer, printYoutubeEmbed, printBbcodeMessage...en dan een stuk 40 van zulke functies.

[ Voor 14% gewijzigd door Gamebuster op 19-11-2010 14:43 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Kwastie
  • Registratie: April 2005
  • Laatst online: 06-10 16:13

Kwastie

Awesomeness

Gamebuster schreef op vrijdag 19 november 2010 @ 14:38:
[...]
Op zich zijn templates op deze manier geen slechte invloed op de performance.
Natuurlijk wel, zo gauw je iets "meer" gaat doen heb je automatisch performance verlies.

Het "grootste probleem" van PHP is dat voor *elke* request een nieuw proces moet worden opgestart en daardoor worden zulke checks snel "zwaar".

When I get sad i stop being sad and be awesome instead


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
Aloys schreef op vrijdag 19 november 2010 @ 14:20:
Dat vind ik juist veel lelijker, imho moet je of alles php houden of volledig html doen en dan verwerken als een template oid. Het starten en eindigen van php-code binnen één document zorgt er ook voor dat ik het overzicht snel kwijt raakt.
euh, php in html /is/ een template, officieel ;). Ik zeg niet dat het een mooie is (en kan begrijpen dat de meeste mensen de voorkeur geven aan de syntax van Smarty), maar toch. En nee, ben niet de eerste die dit zegt, ik dacht ik spring eens op de 'PHP is een template taal'-bandwagon.
quote: Gamebuster
Op zich zijn templates op deze manier geen slechte invloed op de performance.
Dat op zich niet, maar het voegt wel weer een extra niveau complexiteit nodig, evenals een extra 'taal' aan de set talen die je in je applicatie gebruikt, waardoor er weer meer kennis of leertijd nodig is.

Niet dat ik veel recht van spreken heb, op m'n werk moet ik voor de uitvoer van gegevens kennis hebben van zowel JSP / JSTL (JSP Expression Language, lijkt wel wat op smarty-achtig-iets en Java Standard Tag Library, setje XML tags voor binnen JSP's) en XSL / XSLT (XML taal dat XML data omzet naar een XML structuur, :+). Nu is XSL(T) daar overigens de 'schoonste' van, in mijn mening, alhoewel het ook de meest code-intensief is. Iets relatiefs eenvoudigs als een img- tag genereren bijvoorbeeld:

code:
1
2
3
4
5
6
7
8
9
10
<xsl:element name="img">
    <xsl:attribute name="class">author-photo</xsl:attribute>
    <xsl:attribute name="alt">
        <xsl:text>Portret van </xsl:text>
        <xsl:value-of select="authorname" />
    </xsl:attribute>
    <xsl:attribute name="src">
        <xsl:value-of select="authorphoto" />
    </xsl:attribute>
</xsl:element>


Maar vooruit.

Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Ik begrijp niet precies wat er zo `lelijk` aan is? Het is functioneel toch hetzelfde als de lange start tags en een echo statement typen, dan prefereer ik een kortere syntax.

En het argument dat het standaard uit staat heeft IMO weinig te maken of het gangbaar is of niet. Curl en mod_rewrite staat ook standaard uit, zijn deze dan ook slecht? Het zou gewoon mogelijk moeten zijn om een je config aan te passen bij je host.

[ Voor 42% gewijzigd door TJHeuvel op 19-11-2010 15:27 ]

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Nu online
CyCloneNL schreef op vrijdag 19 november 2010 @ 15:22:
Ik begrijp niet precies wat er zo `lelijk` aan is? Het is functioneel toch hetzelfde als de lange start tags en een echo statement typen, dan prefereer ik een kortere syntax.

En het argument dat het standaard uit staat heeft IMO weinig te maken of het gangbaar is of niet. Curl en mod_rewrite staat ook standaard uit, zijn deze dan ook slecht? Het zou gewoon mogelijk moeten zijn om een je config aan te passen bij je host.
De standaardinstelling is overigens dat het aanstaat.

In Django is het {{ var }}, in Ruby on Rails is het <%= var %>, in Smarty {$name}, .en NET MVC <% var %>. Ik vind het allemaal lelijk.

Wil je er echt vanaf dan moet je iets als haml gebruiken, waarin je ook geen HTML meer hoeft te typen.

Acties:
  • 0 Henk 'm!

  • Aloys
  • Registratie: Juni 2005
  • Niet online
Janoz schreef op vrijdag 19 november 2010 @ 14:28:
[...]

In dat geval ben ik erg benieuwd hoe jij herhalende structuren opneemt. En dan begin ik nog niet over de extra inefficientie die je introduceert door de hele html in een string te zetten om vervolgens (vast ook met reguliere expressies ipv replace) je data er in te plempen.

Nee, doe mij maar CyCloneNL's aanpak.

...
Ik heb momenteel gewoon inderdaad een string met de opbouw van de html-code, dat is overigens vrij klein, omdat alle opmaak met css gebeurd. Dit is erg simpel werken als je afhankelijk van je parameters moet kiezen voor een andere layout. Herhalende delen (denk aan het menu met items) worden d.m.v. een functie opgebouwd.

Het grote voordeel is dat ik nu vanaf een willekeurige pagina een functie-call kan doen en de gewenste pagina kan laten opbouwen met meegegeven parameters. Ik gebruik geen regex voor de template hoor, gewoon een str_replace die match een [*id*] fragment :) . Natuurlijk kan het efficiënter, maar voorlopig is de pagina-opbouw nog snel genoeg om geen vorm van lag te kunnen merken. Behalve dat je browser de hele bedoeling opnieuw opbouwt. :)

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Kwastie schreef op vrijdag 19 november 2010 @ 14:45:
[...]


Natuurlijk wel, zo gauw je iets "meer" gaat doen heb je automatisch performance verlies.

Het "grootste probleem" van PHP is dat voor *elke* request een nieuw proces moet worden opgestart en daardoor worden zulke checks snel "zwaar".
De enige controle die er is, is een filemtime. Bovendien wordt het resultaat van die functie gecache't, volgens de documentatie: Note: The results of this function are cached. See clearstatcache() for more details.
> http://php.net/manual/en/function.filemtime.php

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 06-10 22:10
Kwastie schreef op vrijdag 19 november 2010 @ 14:45:
[...]


Natuurlijk wel, zo gauw je iets "meer" gaat doen heb je automatisch performance verlies.

Het "grootste probleem" van PHP is dat voor *elke* request een nieuw proces moet worden opgestart en daardoor worden zulke checks snel "zwaar".
Oh? Ook met Apache mod_php? Volgens mij was dat nou niet bepaald het grootste probleem. Veel websites hebben domweg een probleem met de queries, als je die in C++ zou uitvoeren was dat net zo goed te traag geweest.

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 04-10 09:54

Sebazzz

3dp

rutgerw schreef op vrijdag 19 november 2010 @ 15:45:
[...]

In NET MVC <% var %>. Ik vind het allemaal lelijk.
Dat is maar net welke ViewEngine je gebruikt in ASP.NET MVC, maar de standaard ASP.NET WebForms viewengine accepteert enkel dat ja.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 01:17
MBV schreef op vrijdag 19 november 2010 @ 17:54:
Oh? Ook met Apache mod_php? Volgens mij was dat nou niet bepaald het grootste probleem. Veel websites hebben domweg een probleem met de queries, als je die in C++ zou uitvoeren was dat net zo goed te traag geweest.
- Te complexe queries / queries zonder indexen.
- Teveel queries (vooral bij ORM systemen).
- SOAP calls / andere externe data.
- file-reads (includes, directory iterators).
- implementatietaal.

Grofweg in die volgorde in mijn ervaring.

Laatst nog een systeem aangepakt wat voor een enkele pageview soms op meer dan 500 queries zat - voor basicly een opgehemeld CMS. Dacht eerst dat m'n profiler brak was :X

[ Voor 3% gewijzigd door FragFrog op 19-11-2010 18:26 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 22:20
MBV schreef op vrijdag 19 november 2010 @ 17:54:
[...]

Oh? Ook met Apache mod_php? Volgens mij was dat nou niet bepaald het grootste probleem. Veel websites hebben domweg een probleem met de queries, als je die in C++ zou uitvoeren was dat net zo goed te traag geweest.
Klopt. Vaak zie ik in webapplicaties, waar ik (soms helaas) mee werk dat dezelfde informatie dubbel of vaker wordt opgehaald. Of dat er eerst een INSERT wordt gedaan, waarnaar er zowat direct een UPDATE van dezelfde rij wordt gedaan in SQL. Dat zou je uiteindelijk uit kunnen optimaliseren.

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
MBV schreef op vrijdag 19 november 2010 @ 17:54:
[...]

Oh? Ook met Apache mod_php? Volgens mij was dat nou niet bepaald het grootste probleem. Veel websites hebben domweg een probleem met de queries, als je die in C++ zou uitvoeren was dat net zo goed te traag geweest.
PHP werkt -zover ik weet- standaard binnen CGI. Per request wordt de CGI gestart. Er wordt dus daadwerkelijk iedere request een compleet nieuw proces gestart.

Als alternatief heb je wel PHP voor FastCGI:
http://www.fastcgi.com/drupal/node/5?q=node/10
alex3305 schreef op vrijdag 19 november 2010 @ 18:29:
[...]

Klopt. Vaak zie ik in webapplicaties, waar ik (soms helaas) mee werk dat dezelfde informatie dubbel of vaker wordt opgehaald. Of dat er eerst een INSERT wordt gedaan, waarnaar er zowat direct een UPDATE van dezelfde rij wordt gedaan in SQL. Dat zou je uiteindelijk uit kunnen optimaliseren.
SQL:
1
2
3
4
5
6
7
SELECT id FROM topic WHERE valid = 1 ORDER BY timeModified DESC LIMIT 0, 30
SELECT owner, board, title, valid, UNIX_TIMESTAMP(timeCreated) AS timeCreated, UNIX_TIMESTAMP(timeModified) AS timeModified FROM topic WHERE id = 14 LIMIT 1
SELECT owner, board, title, valid, UNIX_TIMESTAMP(timeCreated) AS timeCreated, UNIX_TIMESTAMP(timeModified) AS timeModified FROM topic WHERE id = 5 LIMIT 1
SELECT owner, board, title, valid, UNIX_TIMESTAMP(timeCreated) AS timeCreated, UNIX_TIMESTAMP(timeModified) AS timeModified FROM topic WHERE id = 11 LIMIT 1
SELECT owner, board, title, valid, UNIX_TIMESTAMP(timeCreated) AS timeCreated, UNIX_TIMESTAMP(timeModified) AS timeModified FROM topic WHERE id = 13 LIMIT 1
SELECT owner, board, title, valid, UNIX_TIMESTAMP(timeCreated) AS timeCreated, UNIX_TIMESTAMP(timeModified) AS timeModified FROM topic WHERE id = 6 LIMIT 1
SELECT owner, board, title, valid, UNIX_TIMESTAMP(timeCreated) AS timeCreated, UNIX_TIMESTAMP(timeModified) AS timeModified FROM topic WHERE id = 8 LIMIT 1

zoiets? :+

[ Voor 55% gewijzigd door Gamebuster op 19-11-2010 18:59 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Standaard via CGI? Sinds wanneer? Mod_php is veel efficiënter en veel meer gebruikt.

[ Voor 39% gewijzigd door Herko_ter_Horst op 19-11-2010 18:46 ]

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 06-10 22:10
Gamebuster schreef op vrijdag 19 november 2010 @ 18:30:
[...]

PHP werkt -zover ik weet- standaard binnen CGI. Per request wordt de CGI gestart. Er wordt dus daadwerkelijk iedere request een compleet nieuw proces gestart.
Vroegah, voor apache mod_php. Ik denk 2001 ofzo, al kan ik zo gauw geen exacte datum vinden*. In windows-serveromgevingen is het inderdaad niet aan te raden: apache op windows werd 3 jaar geleden als nog onveiliger dan IIS beschouwd, en dat was toen nog een prestatie ;)
SQL:
1
2
3
4
5
6
7
SELECT id FROM topic WHERE valid = 1 ORDER BY timeModified DESC LIMIT 0, 30
SELECT owner, board, title, valid, UNIX_TIMESTAMP(timeCreated) AS timeCreated, UNIX_TIMESTAMP(timeModified) AS timeModified FROM topic WHERE id = 14 LIMIT 1
SELECT owner, board, title, valid, UNIX_TIMESTAMP(timeCreated) AS timeCreated, UNIX_TIMESTAMP(timeModified) AS timeModified FROM topic WHERE id = 5 LIMIT 1
SELECT owner, board, title, valid, UNIX_TIMESTAMP(timeCreated) AS timeCreated, UNIX_TIMESTAMP(timeModified) AS timeModified FROM topic WHERE id = 11 LIMIT 1
SELECT owner, board, title, valid, UNIX_TIMESTAMP(timeCreated) AS timeCreated, UNIX_TIMESTAMP(timeModified) AS timeModified FROM topic WHERE id = 13 LIMIT 1
SELECT owner, board, title, valid, UNIX_TIMESTAMP(timeCreated) AS timeCreated, UNIX_TIMESTAMP(timeModified) AS timeModified FROM topic WHERE id = 6 LIMIT 1
SELECT owner, board, title, valid, UNIX_TIMESTAMP(timeCreated) AS timeCreated, UNIX_TIMESTAMP(timeModified) AS timeModified FROM topic WHERE id = 8 LIMIT 1

zoiets? :+
Nee. Stel je een join voor over 25 tabellen, maar dan elke hop van tabel X naar tabel Y in PHP geprogrammeerd ;( Oh sorry, niet elke hop. Sommige queries deden 4 hops :F Stel je vervolgens een CMS voor waarbij (naast die ene 25-tabellen-join) elke pagina bestaat uit meerdere onderdelen, waarbij elk onderdeel apart uit de database wordt gehaald (recursief, ik geloof dat de index-pagina 5 lagen diep was)). Een soort van meta-cms dus. Waarin wel allerlei queries worden uitgevoerd om te cachen, maar door een brakke opzet nooit gebruik wordt gemaakt daarvan... 7(8)7 Gelukkig is het inmiddels allemaal .NET geworden, met een custom-made interface naar Navision, die inmiddels ook weer vervangen is door de standaard-software die ik vanaf het begin aanraadde... :z

Het intranet was trouwens nog leuker: iemand had eens gekeken naar het unix-rechtensysteem en dat vervolgens geprobeerd na te bootsen in een database. Behalve de uitvinder kon werkelijk niemand vertellen hoe het nu echt werkte, of waarom gebruiker X nou wel of niet op pagina Y kon komen 8)7 Gelukkig zaten er eigenlijk geen bugs in, je moest alleen de rechten goed instellen. En vooral niet via phpmyadmin proberen, gaat geheid fout :P

Maar ondanks dat kon het best veel klanten aan, op een redelijk standaard servertje (2x P4 3GHz HT met 4GB ram ofzo, 1 voor webserver en 1 voor database). Tot een of ander licht van systeembeheer verzon dat een veel snellere PC dat ook wel uit VM-ware kon serveren... dat ging heel snel weer uit :+

[edit]
*) PHP3 bracht een apache-module, in 1997.

[ Voor 7% gewijzigd door MBV op 19-11-2010 22:32 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik sta op het punt om een zeer inefficiënte functie te programmeren in php...

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function corrigeerNaam($naam) {

if ($naam == 'Pietje') {
return 'Piet';
}

if ($naam == 'Sjonnie') {
return 'Sjon';
}

if ($naam == 'Peet') {
return 'Peter';
}

if ($naam == 'Hansje') {
return 'Hans';
}

//et cetera

}

Ik weet dat het efficiënter kan, maar ik weet niet hoe :'(

Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 23:21

AW_Bos

Liefhebber van nostalgie... 🕰️

Verwijderd schreef op zaterdag 20 november 2010 @ 18:56:
Ik sta op het punt om een zeer inefficiënte functie te programmeren in php...

PHP:
1
2
3
4
5
6
7
8
function corrigeerNaam($naam) {

if ($naam == 'Pietje') {
return 'Piet';
}
echo "etc....";

}

Ik weet dat het efficiënter kan, maar ik weet niet hoe :'(
Switch :P

Ik zag deze op mijn schijf staan:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
function word2array($word)
{
    $aantal = strlen($word)-1;
    $i = 0 ;
    $return = array();
    while($i <= $aantal)
    {
        $return[] = substr($word,$i,1);
        $i++ ;
    }
    return $return ;
}

print_r(word2array("tweakers")) ;
?> 

nou is het niet slecht, maar ik zou het met een forloop doen, en de iteratie bij 1 laten beginnen. Bespaart weer die -1... ;)

[ Voor 9% gewijzigd door AW_Bos op 20-11-2010 19:06 ]

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:51

Onbekend

...

Syntax klopt niet precies, maar het is het idee:
PHP:
1
2
3
4
5
6
function corrigeerNaam($naam) { 
 if ( Substr($naam, StrLen($naam) - 2, 2) == 'je' )
    return Substr($naam, 0, StrLen($naam) - 2)
else  if ( Substr($naam, StrLen($naam) - 3, 3) == 'nie' )
    return Substr($naam, 0, StrLen($naam) - 3)
}

Voor Peter heb ik geen oplossing.

[ Voor 5% gewijzigd door Onbekend op 20-11-2010 19:09 ]

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 01:17
Verwijderd schreef op zaterdag 20 november 2010 @ 18:56:
Ik sta op het punt om een zeer inefficiënte functie te programmeren in php...
[..]
Ik weet dat het efficiënter kan, maar ik weet niet hoe :'(
Probeer iets als:
PHP:
1
2
3
4
5
6
$replace = array('Pietje'   => 'Piet',
                 'Sjonnie'  => 'Sjon',
                 'Peet'     => 'Peter',
                 'Hansje'   => 'Hans');
if (isset($replace[$naam]))
    return $replace[$naam];

Al is er denk ik iets ergers aan de hand met je datamodel als je dit soort replaces wil gaan doen ;)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

alex3305 schreef op vrijdag 19 november 2010 @ 18:29:
[...]

Of dat er eerst een INSERT wordt gedaan, waarnaar er zowat direct een UPDATE van dezelfde rij wordt gedaan in SQL. Dat zou je uiteindelijk uit kunnen optimaliseren.
Dat gebruik ik ook soms, voor een InsertOrUpdateSomething(ID int null, <rest van parameters>)-procedure. Eerst, als het ID null is, een lege Something-rij inserten en het ID opvragen, en dan de update doorvoeren. Dan hoef je niet tweemaal onderhoud te plegen aan je code of SP's als er eens een kolom verandert of bijkomt.

[ Voor 14% gewijzigd door CodeCaster op 20-11-2010 19:18 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zaterdag 20 november 2010 @ 18:56:
Ik sta op het punt om een zeer inefficiënte functie te programmeren in php...

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function corrigeerNaam($naam) {

if ($naam == 'Pietje') {
return 'Piet';
}

if ($naam == 'Sjonnie') {
return 'Sjon';
}

if ($naam == 'Peet') {
return 'Peter';
}

if ($naam == 'Hansje') {
return 'Hans';
}

//et cetera

}

Ik weet dat het efficiënter kan, maar ik weet niet hoe :'(
Dit is de "nette" manier:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
switch ($naam)
{
case 'Pietje':
break;

case 'Sjonnie':
break;

case 'Hansje':
break;

case 'Peet':
break;

default:
break;

}


Zeer belangrijk zijn de break; keywords na elke case. :)

Acties:
  • 0 Henk 'm!

  • hgp
  • Registratie: Juni 2008
  • Laatst online: 06-10 12:35

hgp

als hij in elke case een return zet zijn de breaks toch niet meer belangrijk?

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zaterdag 20 november 2010 @ 19:47:
[...]


Dit is de "nette" manier:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
switch ($naam)
{
case 'Pietje':
break;

case 'Sjonnie':
break;

case 'Hansje':
break;

case 'Peet':
break;

default:
break;

}


Zeer belangrijk zijn de break; keywords na elke case. :)
Dat is net zo niet netjes! Zulke dingen kun je met polymorfisme netjes oplossen.

[ Voor 6% gewijzigd door Verwijderd op 20-11-2010 20:12 ]


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Verwijderd schreef op zaterdag 20 november 2010 @ 19:47:
[...]


Dit is de "nette" manier:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
switch ($naam)
{
case 'Pietje':
break;

case 'Sjonnie':
break;

case 'Hansje':
break;

case 'Peet':
break;

default:
break;

}


Zeer belangrijk zijn de break; keywords na elke case. :)
Ik vind een lookup (zie FragFrog) eigenlijk netter ... misschien minder performant (misschien niet, geen flauw idee).

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!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 19-09 15:37
hgp schreef op zaterdag 20 november 2010 @ 19:52:
als hij in elke case een return zet zijn de breaks toch niet meer belangrijk?
Hangt van je programmeertaal af, in PHP geloof ik niet. C# klaagt er geloof ik wel over.

Netter vind ik echter om gewoon
PHP:
1
2
3
function corrigeerNaam($naam){
    return preg_replace("#^(.*)je$#Ui", "$1", $naam);
}

oid te doen, aangezien je een naam altijd verkleint met "je". Werkt alleen niet als er een legitieme naam is die eindigt op "je", maar die kan ik niet bedenken. Een enorm switch statement is sowieso niet de way to go. Als vuistregel neem ik altijd dat als je meer dan 5 cases in je switch hebt je echt even heel goed moet gaan nadenken wat je aan het doen bent. (zijn natuurlijk wel genoeg legitieme redenen voor)

Veiligste is natuurlijk om gewoon de gebruiker te vragen om de onverkleinde naam in te voeren als je dat detecteerd, met een checkbox om de naam toch de accepteren. Het is echter de vraag of je dat ook wil vanuit UI oogpunt.

[ Voor 17% gewijzigd door dtech op 20-11-2010 20:17 ]


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
CodeCaster schreef op zaterdag 20 november 2010 @ 19:16:
[...]

Dat gebruik ik ook soms, voor een InsertOrUpdateSomething(ID int null, <rest van parameters>)-procedure. Eerst, als het ID null is, een lege Something-rij inserten en het ID opvragen, en dan de update doorvoeren. Dan hoef je niet tweemaal onderhoud te plegen aan je code of SP's als er eens een kolom verandert of bijkomt.
Je kan als het ID null is toch ook gewoon alles in één Insert-statement gooien ipv loskoppelen?

En bij een Update kun je soms beter eerst een gelimiteerde Select doen, omdat hij anders de hele tabel af gaat zoeken. Dat las ik tenminste.

Acties:
  • 0 Henk 'm!

Verwijderd

dtech schreef op zaterdag 20 november 2010 @ 20:13:
[...]
oid te doen, aangezien je een naam altijd verkleint met "je".
Maar wat als je nou als er 'Jantje' ingevuld wordt?

[ Voor 67% gewijzigd door Verwijderd op 20-11-2010 21:26 ]


Acties:
  • 0 Henk 'm!

  • g4wx3
  • Registratie: April 2007
  • Laatst online: 07-10 14:06
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

$settings = array();
$settings['title'] = 'Welcome';
$settings['description'] = 'blablabla';



// en nog wat andere settings



foreach($settings as $key=>$value)
{
    $VIEW->set($key,$value);
}
unset($settings);


?>


Dit staat nog steeds in eigen code.

Toen ik aan iets groots begon te ontwikkelen had ik niet meteen een plaatsje om settings op te slaan.

Deze is daarna wel gekomen, en $settings werd verbannen. Om de overgang snel te maken, heb ik deze foreach bijgeplakt op meerdere plaatsen.

Ben nu bezig dit monster, wat ik nooit heb afgemaakt helemaal op te kuisen, ben trouwens nog andere creative code tegengekomen.

Vind verder wel dat ik goed geprogrammeerd heb heb die code 2 jaar niet gezien, en ben er vandaag makkelijk mee vertrokken, alles is modulair geschreven. Voor sommige dingen ben ik wel kort door de bocht gegaan, wil ik nu verbeteren.

[ Voor 4% gewijzigd door g4wx3 op 20-11-2010 20:52 ]

http://www.softfocus.be/


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Davio schreef op zaterdag 20 november 2010 @ 20:16:
[...]

Je kan als het ID null is toch ook gewoon alles in één Insert-statement gooien ipv loskoppelen?

En bij een Update kun je soms beter eerst een gelimiteerde Select doen, omdat hij anders de hele tabel af gaat zoeken. Dat las ik tenminste.
Ik bedoel zoiets:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
create procedure InsertOrUpdatePerson
    @ID int null,
    @firstname varchar(20),
    @lastname varchar(30)
as
begin

    if (@ID IS NULL)
    begin 
        insert into Persons (created) values (getdate); -- Default-waarden laten invullen
        select @ID = @@IDENTITY; -- Auto-increment opvragen
    end;
    
    update 
        Persons
    set
        Firstname = @firstname,
        Lastname = @lastname,
        Active = 1 -- Of welke waarden je dan ook standaard wil zetten 
    where
        ID = @ID;
    
end;

[ Voor 4% gewijzigd door CodeCaster op 20-11-2010 21:17 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
CodeCaster schreef op zaterdag 20 november 2010 @ 21:16:
[...]

Ik bedoel zoiets:
SQL:
1
create procedure ***
Dat is aparte SQL syntax. Werkt dat ook in PHP+MySQL?
*pakt Google erbij*

edit:
ah, soort functies voor in SQL. Kende ik nog niet.

[ Voor 61% gewijzigd door Gamebuster op 20-11-2010 21:23 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 07-10 18:24

Dido

heforshe

Verwijderd schreef op zaterdag 20 november 2010 @ 18:56:
Ik sta op het punt om een zeer inefficiënte functie te programmeren in php...
Ik hoop eigenlijk dat je die namen als voorbeeld gebruikt om je echte data te verdoezelen, want als je daadwerkelijk op deze manier namen aan gaat passen is de enige goede manier om dat te doen: niet, never, jamais.
Ik zou als gebruiker zeer verbolgens zijn als een of andere lapzwans van een programmeur mij ging vertellen dat ik geen Jantje, Anneke, Antje of Hansje mag heten. Om te beginnen zou ik concluderen dat de applicatie kennelijk vrouwen discrimineert.

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 20:06
Gamebuster schreef op zaterdag 20 november 2010 @ 21:19:
[...]

Dat is aparte SQL syntax. Werkt dat ook in PHP+MySQL?
*pakt Google erbij*

edit:
ah, soort functies voor in SQL. Kende ik nog niet.
Correct me if I'm wrong, maar procedures werken niet zo goed met MySQL als ik me niet vergis (zelf nooit geprobeerd). Het is wel iets wat je bij Oracle en dergelijken veel tegenkomt :)

Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 07-10 14:41
Avalaxy schreef op zaterdag 20 november 2010 @ 23:46:
[...]


Correct me if I'm wrong, maar procedures werken niet zo goed met MySQL als ik me niet vergis (zelf nooit geprobeerd). Het is wel iets wat je bij Oracle en dergelijken veel tegenkomt :)
Corrected. Mysql doet gewoon stored procedures, en snapt ook gewoon wat triggers zijn. Oh, en het heeft ook gewoon een engine die snapt wat transacties zijn, en als je de juiste mode gebruikt accepteert 't ook geen invalide datums. zo, meeste mysql myths weer gehad >:)

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 01:17
Een van de quirks van MySQL kennelijk: daar heb je de REPLACE INTO syntax wat effectief hetzelfde doet, maar dan in een enkele statement. (Lees net dat het weer eens geen standaard SQL is helaas).

Soms is het nog wel een mooi systeem. Nouja, bijna dan :+

[ Voor 5% gewijzigd door FragFrog op 21-11-2010 02:25 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

dtech schreef op zaterdag 20 november 2010 @ 20:13:
[...]

Werkt alleen niet als er een legitieme naam is die eindigt op "je", maar die kan ik niet bedenken.
Antje
Eefje
Floortje
Froukje
Fije (ahuh, da's niet eens in verklijning die bij de naam hoort)
Joosje

Ik zou door kunnen gaan. Je moet gewoon niet met namen gaan rommelen. Worden mensen boos om.

Jouw voorbeeld werkt trouwens ook niet op Jantje. Dat maakt daar 'Jant' van, terwijl de niet-verkleinde naam gewoon Jan is. Maar bij Antje is dat juist Ant.

[ Voor 15% gewijzigd door CyBeR op 21-11-2010 02:43 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 07-10 14:41
Vroeger werd er vaak achter een jongensnaam 'je' gezet om er een meisjesnaam van te maken. Zo heet mijn oma Gijsje. Lijkt me niet de bedoeling om daar -je van af te halen ;)

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Misschien heeft ie wel een man/vrouw selectie. (zijn we ook meteen van de jongensnaam+verkleining = meisjesnaam posts af)

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 21:05

Haan

dotnetter

johnkeates schreef op zondag 21 november 2010 @ 04:17:
Misschien heeft ie wel een man/vrouw selectie. (zijn we ook meteen van de jongensnaam+verkleining = meisjesnaam posts af)
Onmogelijk, er zijn ook voornamen die bij mannen en vrouwen voorkomen: Anne, Femme ( :+ ) e.a. waar ik nu geen zin in heb om op te zoeken ;)

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 06:50
Ik kwam laatst ook nog een leuke tegen. Is een stukje lotusscript ( binnen een Notes database). Mij ontgaat totaal het nut van de for in deze constructie.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
  if(docCol.count > 1) then
    print "Too many results returned"
 else if
     if(docCol.count > 0) then
       for x = 1 to docCol.count 
             Set doc  = docCol.getNthDocument(x)
             'do stuff with doc
       end for 
     end if
end if

[ Voor 7% gewijzigd door Webgnome op 21-11-2010 10:26 ]

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

Verwijderd

CyBeR schreef op zondag 21 november 2010 @ 02:40:
[...]


Antje
Eefje
Floortje
Froukje
Fije (ahuh, da's niet eens in verklijning die bij de naam hoort)
Joosje

Ik zou door kunnen gaan. Je moet gewoon niet met namen gaan rommelen. Worden mensen boos om.

Jouw voorbeeld werkt trouwens ook niet op Jantje. Dat maakt daar 'Jant' van, terwijl de niet-verkleinde naam gewoon Jan is. Maar bij Antje is dat juist Ant.
Ik kan me haast niet aan de indruk onttrekken dat het een illustratie was van hetgene dat gedaan moest worden (een lelijke berg cases/ifs).

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Haan schreef op zondag 21 november 2010 @ 09:41:
[...]

Onmogelijk, er zijn ook voornamen die bij mannen en vrouwen voorkomen: Anne, Femme ( :+ ) e.a. waar ik nu geen zin in heb om op te zoeken ;)
Er bestaan zoveel onzinnige namen dat je er beter niet op kunt valideren, hier vind je er een stel: http://wiki.name.com/en/10_Weirdest_Names

Acties:
  • 0 Henk 'm!

  • bobo1on1
  • Registratie: Juli 2001
  • Laatst online: 18-05 17:57
Als we het dan toch over namen hebben: http://www.kalzumeus.com/...mers-believe-about-names/

Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 04-10 09:54

Sebazzz

3dp

C#:
1
2
3
if (result.Errors.Any(kv => kv.Value.Any(error => error is WebException))) {
                    this.ShowNetworkError(result.Errors.Where(kv => kv.Value.Any(error => error is WebException)).Select(kv => kv.Value.First(error => error is WebException)).First());
                }

Tijd om te slapen :Y)

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • boe2
  • Registratie: November 2002
  • Niet online

boe2

'-')/

ben zelf groot linq supporter, maar daar ben je me toch helemaal kwijt :p
(al ziet het eruit alsof het veel gemakkelijker had gekund als je gewoon op de standaardmanier een WebException had gegooid en gecatched...denk ik?)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 04-10 09:54

Sebazzz

3dp

Boeboe schreef op zondag 21 november 2010 @ 22:53:
(al ziet het eruit alsof het veel gemakkelijker had gekund als je gewoon op de standaardmanier een WebException had gegooid en gecatched...denk ik?)
Nee, asynchroon programmeren is dit. Deze code zat in een functie die als delegate werd meegegeven om aangeroepen te worden als een bepaalde taak op een andere thread klaar was.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 23:18

RayNbow

Kirika <3

Sebazzz schreef op zondag 21 november 2010 @ 22:29:
C#:
1
2
3
if (result.Errors.Any(kv => kv.Value.Any(error => error is WebException))) {
                    this.ShowNetworkError(result.Errors.Where(kv => kv.Value.Any(error => error is WebException)).Select(kv => kv.Value.First(error => error is WebException)).First());
                }

Tijd om te slapen :Y)
Je wilt zoiets doen? :p
C#:
1
2
3
4
5
6
7
8
9
var firstError = 
    (from kv in results.Errors
     from error in kv.Values
     where error is WebException
     select error).Take(1);
foreach (var theError in firstError)
{
    this.ShowNetworkError(theError);
}

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Waarom nog een foreach doen als je er slechts eentje neemt?

C#:
1
2
3
4
5
var webEx = kv.Value.Where(error => error is WebException).FirstOrDefault();
if(webEx != null)
{
    this.ShowNetworkError(webEx);
}

We are shaping the future


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 23:18

RayNbow

Kirika <3

Alex) schreef op maandag 22 november 2010 @ 08:24:
Waarom nog een foreach doen als je er slechts eentje neemt?
Omdat ik geen fan ben van nulls. ;)


Alternatief:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Required: using Microsoft.FSharp.Core;
public static class FSharpOption
{
    public static FSharpOption<T> Create<T>(T value)
    {
        return new FSharpOption<T>(value);
    }
    public static bool IsSome<T>(this FSharpOption<T> opt)
    {
        return FSharpOption<T>.get_IsSome(opt);
    }
    public static bool IsNone<T>(this FSharpOption<T> opt)
    {
        return FSharpOption<T>.get_IsNone(opt);
    }
}


C#:
1
2
3
4
5
6
7
8
9
10
11
static class EnumerableEx
{
    public static FSharpOption<T> MaybeFirst<T>(this IEnumerable<T> xs)
    {
        foreach (var value in xs.Take(1))
        {
            return FSharpOption.Create(value);
        }
        return FSharpOption<T>.None;
    }
}



C#:
1
2
3
4
5
6
7
8
9
var firstError =
    (from kv in results.Errors
        from error in kv.Values
        where error is WebException
        select error).MaybeFirst();
if (firstError.IsSome())
{
    this.ShowNetworkError(theError);
}


:p

[ Voor 71% gewijzigd door RayNbow op 22-11-2010 09:53 ]

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • !null
  • Registratie: Maart 2008
  • Laatst online: 05-10 20:12
RayNbow schreef op maandag 22 november 2010 @ 09:25:
[...]

Omdat ik geen fan ben van nulls. ;)
:-(

[ Voor 97% gewijzigd door !null op 22-11-2010 09:54 ]

Ampera-e (60kWh) -> (66kWh)


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Haha, maar jij bent !null, dus hij is wel fan van jou. :9

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 23:18

RayNbow

Kirika <3

Davio schreef op maandag 22 november 2010 @ 10:06:
[...]

Haha, maar jij bent !null, dus hij is wel fan van jou. :9
Sinds wanneer is !P(X) <==> P(!X) logisch geldig? :p

Ipsa Scientia Potestas Est
NNID: ShinNoNoir

Pagina: 1 ... 41 ... 103 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. :)