abonnement Unibet Coolblue Bitvavo
  donderdag 10 februari 2011 @ 15:22:29 #176
75592 GlowMouse
l'état, c'est moi
pi_92590288
Een miljoen verschillende dagen is erg veel, dan heb je het over minimaal 2739 jaar tussen de eerste en de laatste vliegdag. Wanneer het over vliegtuigen gaat en niet over diertjes, zul je op zijn vroegst in 1903 beginnen met tellen. De kans is klein dat je software in 4642 nog gebruikt wordt.

Bij 1000 dagen zul je de optimalisatie al zeker merken.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92590911
quote:
Op donderdag 10 februari 2011 15:22 schreef GlowMouse het volgende:
Een miljoen verschillende dagen is erg veel, dan heb je het over minimaal 2739 jaar tussen de eerste en de laatste vliegdag. Wanneer het over vliegtuigen gaat en niet over diertjes, zul je op zijn vroegst in 1903 beginnen met tellen. De kans is klein dat je software in 4642 nog gebruikt wordt.

Bij 1000 dagen zul je de optimalisatie al zeker merken.
Dat bedoel ik, als het pas vanaf een miljoen aan gaat tikken zou het in dit geval een zinloze micro-optimalisatie zijn. 't Hoeft sowieso geen high-performance applicatie te worden maar als de pageload tijden wat omlaag kunnen is natuurlijk altijd leuk...
pi_92590930
Wat je natuurlijk wel kan hebben is meerdere vliegdata op één dag. Als je dan kijkt naar de where date= max(date) (met die subquery) heb je wel meer records
  donderdag 10 februari 2011 @ 19:00:07 #179
75592 GlowMouse
l'état, c'est moi
pi_92600087
Het aantal reacties valt tegen. Dan zal ik het maar verklappen. Pak dit stukje code:
1
2
3
4
5
6
<?php
$filename 
'hoi.php' chr(0) . '.txt';
$filename trim($filename);
if(
substr($filename, -4) != '.txt') die();
touch($filename);
?>
De check op regel4 wordt zonder problemen doorlopen: de laatste vier karakters zijn '.txt'. Bij touch wordt er een stukje C-code uitgevoerd, en in C houden strings op na een nul-byte.
Op http://mysql-apache-php.com/fileupload-security.htm staat dit stukje:
1
2
3
4
5
6
7
8
<?php
//check if its image file

if (!getimagesize($_FILES['imagefile']['tmp_name']))
{ echo 
"Invalid Image File...";
exit();
}
?>
Deze check voorkomt niet dat er php-code op de server komt. Een plaatje is een file, en een file is gewoon opgebouwd uit bytes. Ergens tussen die bytes kunnen best de volgende zitten: <?php echo 'hoi'; ?>. Een plaatje met die code kun je makkelijk zelf maken door met een hex-editor een plaatje te editten en wat bytes te overschrijven. Het resulterende plaatje ziet er niet uit, maar dat ziet de software niet :) Net als bij een html-file, wordt alles tussen <?php en ?> uitgevoerd als PHP-code (en de rest van de file wordt gewoon doorgegeven).
Dit kun je maar op één manier voorkomen. Je kunt het plaatje resizen, maar ondanks dat het een stuk lastiger om een plaatje te vinden dat na resizen de code <?php echo 'hoi'; ?> bevat, is het niet onmogelijk. De manier is daarom om plaatjes waar <?php in voorkomt gewoon te blokkeren. Als plaatjes 1MB zijn, kun je de kans p berekenen dat je een plaatje ten onrechte afkeurt (onder de aanname dat de 0/1'en willekeurig, onafhankelijk en identiek zijn verdeeld):
<?php is vijf bytes. De kans dat vijf willekeurige bytes niet overeenkomen met <?php, is 1-(1/256)5. Je wilt dat in de file van 1MB alle vijf opvolgende bytes verschillend zijn. Er zijn ongeveer een miljoen opeenvolgende series van vijf bytes in een bestand van 1MB. De kans dat er geen <?php in je file zit, is ongeveer 1-p = (1-(1/256)5)1.000.000. Dit is lastig om nauwkeurig te berekenen, daarom pakken we de logaritme: log(1-p) = 1.000.000 log(1-(1/256)5) ~= -10-6. Omdat voor kleine p geldt dat log(1-p) = -p, weten we dat p = 10-6. Je keurt dus één op de miljoen files ten onrechte af.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92601229
quote:
9s.gif Op donderdag 10 februari 2011 19:00 schreef GlowMouse het volgende:
Het aantal reacties valt tegen. Dan zal ik het maar verklappen. Pak dit stukje code:

[ code verwijderd ]

De check op regel4 wordt zonder problemen doorlopen: de laatste vier karakters zijn '.txt'. Bij touch wordt er een stukje C-code uitgevoerd, en in C houden strings op na een nul-byte.
Op http://mysql-apache-php.com/fileupload-security.htm staat dit stukje:

[ code verwijderd ]

Deze check voorkomt niet dat er php-code op de server komt. Een plaatje is een file, en een file is gewoon opgebouwd uit bytes. Ergens tussen die bytes kunnen best de volgende zitten: <?php echo 'hoi'; ?>. Een plaatje met die code kun je makkelijk zelf maken door met een hex-editor een plaatje te editten en wat bytes te overschrijven. Het resulterende plaatje ziet er niet uit, maar dat ziet de software niet :) Net als bij een html-file, wordt alles tussen <?php en ?> uitgevoerd als PHP-code (en de rest van de file wordt gewoon doorgegeven).
Dit kun je maar op één manier voorkomen. Je kunt het plaatje resizen, maar ondanks dat het een stuk lastiger om een plaatje te vinden dat na resizen de code <?php echo 'hoi'; ?> bevat, is het niet onmogelijk. De manier is daarom om plaatjes waar <?php in voorkomt gewoon te blokkeren. Als plaatjes 1MB zijn, kun je de kans p berekenen dat je een plaatje ten onrechte afkeurt (onder de aanname dat de 0/1'en willekeurig, onafhankelijk en identiek zijn verdeeld):
<?php is vijf bytes. De kans dat vijf willekeurige bytes niet overeenkomen met <?php, is 1-(1/256)5. Je wilt dat in de file van 1MB alle vijf opvolgende bytes verschillend zijn. Er zijn ongeveer een miljoen opeenvolgende series van vijf bytes in een bestand van 1MB. De kans dat er geen <?php in je file zit, is ongeveer 1-p = (1-(1/256)5)1.000.000. Dit is lastig om nauwkeurig te berekenen, daarom pakken we de logaritme: log(1-p) = 1.000.000 log(1-(1/256)5) ~= -10-6. Omdat voor kleine p geldt dat log(1-p) = -p, weten we dat p = 10-6. Je keurt dus één op de miljoen files ten onrechte af.
Hier raakte je me kwijt. Maar het is ook niet echt belangrijk dat je sommige files ten onrechte afkeurt, als je maar zeker weet dat er geen .php-bestanden op je server terecht komen :) .
  donderdag 10 februari 2011 @ 19:23:00 #181
75592 GlowMouse
l'état, c'est moi
pi_92601405
Ik gebruik log(ab) = b*log(a) en log(1+x)=x (voor kleine x).
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92621537
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 (isset($params['submit']) )
{
    
$filter='';
    
$test false;
    if (isset(
$params['select_date']) && $params['select_date'] != '')
    {
        if (
$test) {$filter .=' AND ';}
        
$filter .= '(DATE(starttime) = \''.$params['select_date'].'\')';
        
$test true;
    }
    if (isset(
$params['select_pilot']) && $params['select_pilot'] != '')
    {
        if (
$test) {$filter .=' AND ';}
        
$filter .= '(firstpilot_id = '.$params['select_pilot'].' or secondpilot_id = '.$params['select_pilot'].')';
        
$test true;
    }
    if (isset(
$params['select_airplane']) && $params['select_airplane'] != '')
    {
        if (
$test) {$filter .=' AND ';}
        
$filter .= '(airplane = \''.$params['select_airplane'].'\')';
        
$test true;
    }
}
?>

Kan dit efficienter?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
if (isset($params['submit']) )
{
    
$filter='1=1';
    
$test false;
    if (isset(
$params['select_date']) && $params['select_date'] != '')
    {
        
$filter .= ' AND (DATE(starttime) = \''.$params['select_date'].'\')';
    }
    if (isset(
$params['select_pilot']) && $params['select_pilot'] != '')
    {
        
$filter .= ' AND (firstpilot_id = '.$params['select_pilot'].' or secondpilot_id = '.$params['select_pilot'].')';
    }
    if (isset(
$params['select_airplane']) && $params['select_airplane'] != '')
    {
        
$filter .= ' AND (airplane = \''.$params['select_airplane'].'\')';
    }
}
?>
Dit leek me al makkelijker maar die 1=1 is natuurlijk wel soort van ranzig :')
  vrijdag 11 februari 2011 @ 01:17:19 #183
75592 GlowMouse
l'état, c'est moi
pi_92621594
iets met imploden op AND?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92621745
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if (isset($params['submit']) )
{
    
$filterarr=Array();
    if (isset(
$params['select_date']) && $params['select_date'] != '')
        
$filterarr[1] = '(DATE(starttime) = \''.$params['select_date'].'\')';
    if (isset(
$params['select_pilot']) && $params['select_pilot'] != '')
        
$filterarr[2] = '(firstpilot_id = '.$params['select_pilot'].' or secondpilot_id = '.$params['select_pilot'].')';
    if (isset(
$params['select_airplane']) && $params['select_airplane'] != '')
        
$filterarr[3] = '(airplane = \''.$params['select_airplane'].'\')';
    
$filter=implode(' AND ',$filterarr);
}
?>

Thnx!
  vrijdag 11 februari 2011 @ 01:25:23 #185
75592 GlowMouse
l'état, c'est moi
pi_92621782
waarom keys gebruiken als [] volstaat?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92621905
Omdat het laat is!
  vrijdag 11 februari 2011 @ 01:32:24 #187
63192 ursel
"Het Is Hier Fantastisch!
pi_92621932
quote:
9s.gif Op donderdag 10 februari 2011 19:00 schreef GlowMouse het volgende:
Het aantal reacties valt tegen. Dan zal ik het maar verklappen. Pak dit stukje code:

[ code verwijderd ]

De check op regel4 wordt zonder problemen doorlopen: de laatste vier karakters zijn '.txt'. Bij touch wordt er een stukje C-code uitgevoerd, en in C houden strings op na een nul-byte.
Op http://mysql-apache-php.com/fileupload-security.htm staat dit stukje:

[ code verwijderd ]

Deze check voorkomt niet dat er php-code op de server komt. Een plaatje is een file, en een file is gewoon opgebouwd uit bytes. Ergens tussen die bytes kunnen best de volgende zitten: <?php echo 'hoi'; ?>. Een plaatje met die code kun je makkelijk zelf maken door met een hex-editor een plaatje te editten en wat bytes te overschrijven. Het resulterende plaatje ziet er niet uit, maar dat ziet de software niet :) Net als bij een html-file, wordt alles tussen <?php en ?> uitgevoerd als PHP-code (en de rest van de file wordt gewoon doorgegeven).
Dit kun je maar op één manier voorkomen. Je kunt het plaatje resizen, maar ondanks dat het een stuk lastiger om een plaatje te vinden dat na resizen de code <?php echo 'hoi'; ?> bevat, is het niet onmogelijk. De manier is daarom om plaatjes waar <?php in voorkomt gewoon te blokkeren. Als plaatjes 1MB zijn, kun je de kans p berekenen dat je een plaatje ten onrechte afkeurt (onder de aanname dat de 0/1'en willekeurig, onafhankelijk en identiek zijn verdeeld):
<?php is vijf bytes. De kans dat vijf willekeurige bytes niet overeenkomen met <?php, is 1-(1/256)5. Je wilt dat in de file van 1MB alle vijf opvolgende bytes verschillend zijn. Er zijn ongeveer een miljoen opeenvolgende series van vijf bytes in een bestand van 1MB. De kans dat er geen <?php in je file zit, is ongeveer 1-p = (1-(1/256)5)1.000.000. Dit is lastig om nauwkeurig te berekenen, daarom pakken we de logaritme: log(1-p) = 1.000.000 log(1-(1/256)5) ~= -10-6. Omdat voor kleine p geldt dat log(1-p) = -p, weten we dat p = 10-6. Je keurt dus één op de miljoen files ten onrechte af.
_O_ held.
Mooi stukje les in dit topic zeg. :Y
pi_92621985
1
2
3
<?php
if (count($filterarr) >> )
?>
is ook veel accurater dan
1
2
3
<?php
if (isset($params['submit']) )
?>

(dat het formulier verstuurd is betekent niet dat er ook wat ingevuld is)
pi_92622588
1
2
3
<?php
SELECT TIME_FORMAT
(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(landingtime,starttime)))),"%k:%i") AS totaltime
?>

Hiervan heb ik ook het idee dat het efficienter kan :@
Doel: de totale vlieguren van alle vluchten in een bepaalde selectie
pi_92626120
quote:
10s.gif Op vrijdag 11 februari 2011 02:10 schreef KomtTijd... het volgende:

[ code verwijderd ]

Hiervan heb ik ook het idee dat het efficienter kan :@
Doel: de totale vlieguren van alle vluchten in een bepaalde selectie
Just a thought, maar neem aan dat het veldtype DATETIME is ? Kan je dan niet met SUM en TIMEDIFF het verschil berekenen (of een totaal aantal uren) en met PHP de datum/tijd formatten met date() of mktime() ?
pi_92626341
quote:
1s.gif Op donderdag 10 februari 2011 15:00 schreef GlowMouse het volgende:
Als je tabel heel veel vliegdagen gaat bevatten, zal het sneller zijn om met een index op starttime te doen starttime >= (SELECT F(MAX(DATE(starttime))) FROM ...)
waarbij je even moet zoeken wat je voor F moet gebruiken om een datetime te krijgen met die datum en als tijdstip 00:00:00.
Je kunt beter DATE(MAX(starttime)) gebruiken. En voor zover ik weet wordt de tijdcomponent van een date-field op 0 gesteld als je gaat vergelijken met een datetime, dus daar heb je geen extra functie F voor nodig.
pi_92626466
SUM(TIMEDIFF(tijd,tijd) ging fout. Dan telt hij niet goed op (blijkbaar kan SUM niet echt tijden optellen. Vandaar eerst de conversie naar seconden en daarna weer terug naar time. En ja ergens moet je de tijd formatten, helaas kan ik dat in dit geval niet aan de template overlaten want dan moet het weer een geldig datetime object worden, terwijl een totale tijd van 48 uur nu gewoon als 48:00 wordt weergegeven.
  vrijdag 11 februari 2011 @ 10:06:10 #193
75592 GlowMouse
l'état, c'est moi
pi_92626748
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92626814
quote:
Die had ik gevonden, maar die doet twee variables optellen, niet een hele kolom...
pi_92627064
Kan je ze niet in de database opslaan als timestamp. En dan alleen het verschil berekenen. Die kan je ook zo omzetten naar de datetime als je dat wil.

[/newb]
  vrijdag 11 februari 2011 @ 10:18:32 #196
75592 GlowMouse
l'état, c'est moi
pi_92627130
Als je met timestamps wilt rekenen, is er nog unix_timestamp(col1)
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92627295
Heb ook even gepuzzeld (kan niet te lang, ben op werk), maar krijg met timediff de tijd terug in miliseconden denk ik. Nog iets geprobeerd daar een date_format omheen te gooien, maar zonder resultaat.

Met timestamps zal het wel makkelijker worden inderdaad
pi_92670703
open sollicitatie voor anonymous hier ofzo :)

-nee-

[ Bericht 47% gewijzigd door smegmanus op 13-02-2011 18:34:10 ]
pi_92671424
quote:
1s.gif Op vrijdag 11 februari 2011 09:54 schreef KomtTijd... het volgende:
SUM(TIMEDIFF(tijd,tijd) ging fout.
Je kunt het ook anders proberen: TIMEDIFF(SUM(eindtijd), SUM(begintijd))
  zaterdag 12 februari 2011 @ 13:12:01 #200
302853 themole
graaft totaal door.
pi_92676300
quote:
1s.gif Op zaterdag 12 februari 2011 09:52 schreef MrNiles het volgende:
open sollicitatie voor anonymous hier ofzo :)

-nee-
[knip]reactie op edit [/knip]

[ Bericht 39% gewijzigd door smegmanus op 13-02-2011 18:34:49 ]
Niet altijd serieus
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')