abonnement Unibet Coolblue Bitvavo
  maandag 22 juni 2009 @ 14:12:06 #26
87680 Mirel
Mirel wil een bongophone.
pi_70251975
Nu ik! Nu ik!
When all else fails, you always have delusion.
  maandag 22 juni 2009 @ 15:16:08 #27
58834 Catbert
The evil HR Director.
pi_70254338
quote:
Op maandag 22 juni 2009 11:47 schreef Intrepidity het volgende:
Hoezo? constanten staan altijd in geheugen.. Functieaanroep betekent extra dingen op de stack, geheugenlocatie veranderen, uitvoeren van die functie, terugspringen naar vorige locatie.. Dat is in iedere taal zo..
Al sinds C worden simpele functies geinlined, dit geldt ook voor functies waar hele simpele berekeningen gedaan worden. Je moet de compiler / runtime lekker dat soort optimalisaties laten doen. Moeilijk gaan doen over een functieaanroep is gewoon premature optimization. Helemaal als het ten koste gaat van leesbaarbeid (__CLASS__ is een goed voorbeeld, WTF?) is het gewoon een slecht idee.
"[...] a large number of the teenagers claiming Asperger's are, in fact, merely dicks."
pi_70254410
teeveepee
  maandag 22 juni 2009 @ 15:38:37 #29
187069 slacker_nl
Sicko pur sang
pi_70255169
quote:
Op maandag 22 juni 2009 13:21 schreef Swetsenegger het volgende:

[..]
1
2
3
4
5
6
<?php
function br2nl($string)
{
    return 
preg_replace('/\<br(\s*)?\/?\>/i'"\n"$string);
}
?>
1
2
3
4
5
6
<?php
function br2nl($string)
{
    return 
preg_replace('/\<br\s*\/?\>/i'"\n"$string);
}
?>


Die \s* is al 0 of meer whitespace characters, die ? is overbodig.
In theory there is no difference between theory and practice. In practice there is.
  maandag 22 juni 2009 @ 16:58:35 #30
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_70258217
quote:
Op maandag 22 juni 2009 11:27 schreef Catbert het volgende:

[..]

Het werkt sowieso gewoon niet. In de eerste plaats selecteer je postcodes uit een 'vierkant', en niet binnen een cirkel. Ten tweede is de aarde een bol, en lopen de meridianen niet parallel. Wat je kunt doen is de range vrij groot houden, en dan in een postprocessing stap alle postcodes die je terugkrijgt nog even te checken door de daadwerkelijke afstand uit te rekenen. Hoe je dat doet staat hier:

http://www.movable-type.co.uk/scripts/gis-faq-5.1.html

Oh, en dat je door 0.5 moet delen komt waarschijnlijk doordat uitgegaan wordt van zeemijlen i.p.v. landmijlen. Een zeemijl is 1.85 km ongeveer, en komt dus dicht bij 2km. Je factor zou dus 1/1.85 = 0.54 moeten zijn.
Maar ik selecteer helemaal geen postcodes, maar coordinaten.
Toch werkt het zo goed hoor, waarom zou het niet moeten werken?
pi_70260806
quote:
Op maandag 22 juni 2009 15:16 schreef Catbert het volgende:

[..]

Al sinds C worden simpele functies geinlined, dit geldt ook voor functies waar hele simpele berekeningen gedaan worden. Je moet de compiler / runtime lekker dat soort optimalisaties laten doen. Moeilijk gaan doen over een functieaanroep is gewoon premature optimization. Helemaal als het ten koste gaat van leesbaarbeid (__CLASS__ is een goed voorbeeld, WTF?) is het gewoon een slecht idee.
En toch scheelt het 20-25%:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
// Constante
$timestart microtime();
for(
$i 0$i 10000$i++)
{
   
$pi M_PI;
}
$timeconst = (microtime() - $timestart);
echo 
"Tijd voor 10.000 x constante: " $timeconst "<br />";

// Functieaanroep
$timestart microtime();
for(
$i 0$i 10000$i++)
{
   
$pi pi();
}
$timefunc = (microtime() - $timestart);
echo 
"Tijd voor 10.000 x functieaanroep: " $timefunc "<br />";

echo 
"Factor func. vs const.: " $timefunc $timeconst;
?>


Resultaat:
1
2
3
Tijd voor 10.000 x constante: 0.0012489999999999
Tijd voor 10.000 x functieaanroep: 0.0015500000000001
Factor func. vs const.: 1.2409927942355
  maandag 22 juni 2009 @ 20:43:28 #32
67978 HenryHill
Fake it 'till you make it
pi_70267206
quote:
Op maandag 22 juni 2009 11:05 schreef Intrepidity het volgende:
Iemand ervaring met UTF-16 in combinatie met SimpleXML/DOM? Ik wil een XML-bestand openen in SimpleXML of DOM, maar krijg de volgende error: SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 1: parser error : Start tag expected, '<' not found
Dit teken staat er wel degelijk, en er staat geen witregel of spatie voor. Zodra ik de inhoud van dit bestand in een string stop in PHP en de string probeer te laden gaat het wel goed..
Waarschijnlijk is je encoding nog gewoon ASCII of UTF-8 (ook al zegt je instruction dat het om UTF-16 gaat). Om dit te controleren, open het betreffende XML-bestand met een teksteditor die ook ondersteuning biedt om in verschillende encodings op te slaan (i.e. niet notepad), of open je document in een hex-editor en verifieer dat elk karakter uit 2 bytes bestaat (en niet 1).

Wellicht dat het volgende verhaal verhelderend voor je is:
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets.
So this is how liberty dies... with thunderous applause.
Truth? What's so great about the truth? Try lying for a change, it's the currency of the world
  maandag 22 juni 2009 @ 20:44:47 #33
75592 GlowMouse
l'état, c'est moi
pi_70267260
quote:
Op maandag 22 juni 2009 11:05 schreef Intrepidity het volgende:
Iemand ervaring met UTF-16 in combinatie met SimpleXML/DOM? Ik wil een XML-bestand openen in SimpleXML of DOM, maar krijg de volgende error: SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 1: parser error : Start tag expected, '<' not found
Dit teken staat er wel degelijk, en er staat geen witregel of spatie voor. Zodra ik de inhoud van dit bestand in een string stop in PHP en de string probeer te laden gaat het wel goed..
Betreffende eerste regel:
[ code verwijderd ]
BOM?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  FOK!-Schrikkelbaas maandag 22 juni 2009 @ 23:10:27 #34
1972 Swetsenegger
Egocentrische Narcist
pi_70273891
Ik heb mezelf weer in een lastige mysql hoek gemanoeuvreerd....

1
2
3
4
5
6
id    artid    kleur           maat  
1     1        10              s
2     1        10              m
3     1        10              l
4     1        12567431        l
5     1        10678096        m


Nu moet ik als de artID en kleur gelijk is dit behandelen als 1 product in verschillende maten. Dus bovenstaand moet als volgt geparsed worden

1
2
3
<tr><td>Kleur:</td><td>10</td><td>maat</td>s, m, l</td></tr>
<tr><td>Kleur:</td><td>12567431</td><td>maat</td>l</td></tr>
<tr><td>Kleur:</td><td>10678096</td><td>maat</td>m</td></tr>


Hoe ga ik dit het handigst aanpakken. Ik zat er zelf aan te denken om in de while lus te controleren of de kleur gelijk is aan het vorige rondje, maar.... hoe pas ik dan de cel 'maat' aan in de regel ervoor....

Iemand een briljant idee?
  maandag 22 juni 2009 @ 23:12:16 #35
136730 PiRANiA
All thinking men are atheists.
pi_70273955
quote:
Op maandag 22 juni 2009 23:10 schreef Swetsenegger het volgende:
Ik heb mezelf weer in een lastige mysql hoek gemanoeuvreerd....
[ code verwijderd ]

Nu moet ik als de artID en kleur gelijk is dit behandelen als 1 product in verschillende maten. Dus bovenstaand moet als volgt geparsed worden
[ code verwijderd ]

Hoe ga ik dit het handigst aanpakken. Ik zat er zelf aan te denken om in de while lus te controleren of de kleur gelijk is aan het vorige rondje, maar.... hoe pas ik dan de cel 'maat' aan in de regel ervoor....

Iemand een briljant idee?
apart tabelletje voor maten, en die linken aan het id?
  maandag 22 juni 2009 @ 23:13:02 #36
75592 GlowMouse
l'état, c'est moi
pi_70273996
Niet je output eruit gooien middenin je code. Eerst een arraytje opbouwen $data[$artid][$kleur][] = $row.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_70275708
quote:
Op maandag 22 juni 2009 23:13 schreef GlowMouse het volgende:
Niet je output eruit gooien middenin je code. Eerst een arraytje opbouwen $data[$artid][$kleur][] = $row.
Dat lijkt me idd de beste optie
  maandag 22 juni 2009 @ 23:55:56 #38
136730 PiRANiA
All thinking men are atheists.
pi_70275752
quote:
Op maandag 22 juni 2009 23:54 schreef Light het volgende:

[..]

Dat lijkt me idd de beste optie
Ondanks alle redundante data die op deze manier blijft bestaan?
  maandag 22 juni 2009 @ 23:59:22 #39
75592 GlowMouse
l'état, c'est moi
pi_70275852
quote:
Op maandag 22 juni 2009 23:55 schreef PiRANiA het volgende:

[..]

Ondanks alle redundante data die op deze manier blijft bestaan?
Als je het in een andere tabel zet zoals jij voorstelt, dan zul je alsnog wat met mijn post moeten doen.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  FOK!-Schrikkelbaas dinsdag 23 juni 2009 @ 08:23:30 #40
1972 Swetsenegger
Egocentrische Narcist
pi_70279393
quote:
Op maandag 22 juni 2009 23:12 schreef PiRANiA het volgende:

[..]

apart tabelletje voor maten, en die linken aan het id?
Het is nu al in 3 tabellen opgebroken ivm de schaalbaarheid. Hoofdeigenschappen (die voor elke kleur en maat gelden) dan de eigenschappen zoals kleur, maat, etc. en een tabel foto's.
quote:
Op maandag 22 juni 2009 23:13 schreef GlowMouse het volgende:
Niet je output eruit gooien middenin je code. Eerst een arraytje opbouwen $data[$artid][$kleur][] = $row.
Hmz, help me even op weg, hoe krijg ik in mijn while lus de info bij gelijke kleur in desbetreffende array entry erbij geschoven? Als ik als key gewoon de kleur pak kan ik natuurlijk de value manipuleren.... toch?
pi_70280178
ik vraag me af ik heb een array gegevens a 2 a 3 arrays bvb een verkooplijstje
en die wil ik in een verkoop order - verkooporder regels
dan doe ik de array weer in een

creer verkoop regel
foreach $array as $id
{
haal de laatste verkooporder op * query * voor het ID nummer
insert into verkoopregel het verkooporderid en alle andere informatie
}

als ik dit uitvoer krijg ik dan geen problemen als 2 klanten precies op het zelfde moment het script uitvoeren?
Redacted
  FOK!-Schrikkelbaas dinsdag 23 juni 2009 @ 09:14:41 #42
1972 Swetsenegger
Egocentrische Narcist
pi_70280256
quote:
Op dinsdag 23 juni 2009 08:23 schreef Swetsenegger het volgende:

[..]

Het is nu al in 3 tabellen opgebroken ivm de schaalbaarheid. Hoofdeigenschappen (die voor elke kleur en maat gelden) dan de eigenschappen zoals kleur, maat, etc. en een tabel foto's.
[..]

Hmz, help me even op weg, hoe krijg ik in mijn while lus de info bij gelijke kleur in desbetreffende array entry erbij geschoven? Als ik als key gewoon de kleur pak kan ik natuurlijk de value manipuleren.... toch?
proberen en falen als het in de database staat kun je een variabele where kleur = ' ".$kleur" ' doen en dat foreach $array as $id en daarna het weer outputten
Redacted
pi_70280264
quote:
Op dinsdag 23 juni 2009 09:14 schreef Swetsenegger het volgende:
table lock
dus als hij het uitvoert lockt hij de tabel?
kan ik geen row lock doen? en voor 1x de variabele ophalen en dan in de foreach het eruithalen en daar een variabele gebruiken ?
Redacted
  FOK!-Schrikkelbaas dinsdag 23 juni 2009 @ 09:18:51 #45
1972 Swetsenegger
Egocentrische Narcist
pi_70280322
quote:
Op dinsdag 23 juni 2009 09:16 schreef cablegunmaster het volgende:

[..]

dus als hij het uitvoert lockt hij de tabel?
kan ik geen row lock doen? en voor 1x de variabele ophalen en dan in de foreach het eruithalen en daar een variabele gebruiken ?
Je wil toch de insert_id gebruiken van table 1 om in table 2 te gebruiken of begrijp ik je nu verkeerd?
  FOK!-Schrikkelbaas dinsdag 23 juni 2009 @ 09:19:37 #46
1972 Swetsenegger
Egocentrische Narcist
pi_70280337
quote:
Op dinsdag 23 juni 2009 09:15 schreef cablegunmaster het volgende:

[..]

proberen en falen als het in de database staat kun je een variabele where kleur = ' ".$kleur" ' doen en dat foreach $array as $id en daarna het weer outputten
Ja ik begrijp hoe een lusje werkt. Het ging me om de array manipulatie
pi_70280476
quote:
Op dinsdag 23 juni 2009 09:18 schreef Swetsenegger het volgende:

[..]

Je wil toch de insert_id gebruiken van table 1 om in table 2 te gebruiken of begrijp ik je nu verkeerd?
jup. dat wil ik doen voor die 0.00005 sec lockt hij de tabel?
Redacted
  FOK!-Schrikkelbaas dinsdag 23 juni 2009 @ 09:55:20 #48
1972 Swetsenegger
Egocentrische Narcist
pi_70281151
quote:
Op dinsdag 23 juni 2009 09:26 schreef cablegunmaster het volgende:

[..]

jup. dat wil ik doen voor die 0.00005 sec lockt hij de tabel?
Hij locked de table tot jij hem unlocked.

Wat ik doe in een webshop is bv in de table 'order' een order regel toevoegen, en vervolgens de insert id gebruiken om de produkten die bij die order horen in een content table te inserten. Na die laatste query unlock ik de table.

Op die manier voorkom ik het risico dat er twee mensen exact tegelijk submitten en de content van order A bij order B terecht komt en andersom.
  dinsdag 23 juni 2009 @ 10:47:50 #49
58834 Catbert
The evil HR Director.
pi_70282630
quote:
Op maandag 22 juni 2009 16:58 schreef Likkende_Lassie het volgende:
Maar ik selecteer helemaal geen postcodes, maar coordinaten.
Toch werkt het zo goed hoor, waarom zou het niet moeten werken?
Dat heb ik net uitgelegd. Je selecteert alle coordinaten in een vierkant, niet in een cirkel. Daarnaast lopen de meridianen niet parellel. Daarom kun je beter nafilteren door naderhand nauwkeuriger de exacte afstanden uit te rekenen zodat daadwerkelijk alles binnen een straal krijgt.
quote:
Op maandag 22 juni 2009 18:18 schreef Intrepidity het volgende:
En toch scheelt het 20-25%:
[ code verwijderd ]

Resultaat:
[ code verwijderd ]
Je bewijst hier vooral mee hoe brak PHP is. Een fatsoenlijke VM zou die loop uberhaupt niet 10000 keer uitvoeren. Check dit:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
    public static void main(String[] args)
    {
        LoopTest test;
        test = new LoopTest();
        
        test.test1();
        test.test2();
        test.test1();
        test.test2();
        test.test1();
        test.test2();    
        test.test1();
        test.test2();         

    }
    
    public void test1()
    {
        long ms = System.currentTimeMillis();
        for(int i = 0;i < 1000000000;i++)
        {
            double pi = Math.PI;
        }
        ms = System.currentTimeMillis() - ms;
        System.out.println("Test 1 took " + ms + "ms.");
    }
    
    public void test2()
    {
        long ms = System.currentTimeMillis();
        for(int i = 0;i < 1000000000;i++)
        {
            doStuff();
        }
        ms = System.currentTimeMillis() - ms;
        System.out.println("Test 2 took " + ms + "ms.");
    }
    
    private void doStuff()
    {
        double pi = Math.PI;
    }

}


Test 1 took 673ms.
Test 2 took 943ms.
Test 1 took 645ms.
Test 2 took 931ms.
Test 1 took 616ms.
Test 2 took 610ms.
Test 1 took 619ms.
Test 2 took 633ms.

Je ziet na de 2e test2 run dat de VM 'ziet' wat test 2 doet en het voor je gaat optimaliseren. Ik hoop van harte dat PHP dergelijke zaken ook doet, anders is het te brak voor woorden.

BTW: als je testjes maakt, gebruik dan alsjeblieft meer iteraties dan 10000, dat zegt echt niks.
"[...] a large number of the teenagers claiming Asperger's are, in fact, merely dicks."
pi_70282825
quote:
Op dinsdag 23 juni 2009 10:47 schreef Catbert het volgende:

Je bewijst hier vooral mee hoe brak PHP is. Een fatsoenlijke VM zou die loop uberhaupt niet 10000 keer uitvoeren. Check dit:
[ code verwijderd ]
Klopt, en omdat PHP geen perfecte taal is heeft het wel degelijk zin om constanten in plaats van functieaanroepen te gebruiken, dat was m'n punt..
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')