abonnement Unibet Coolblue Bitvavo
  zondag 22 juli 2007 @ 11:53:09 #51
12880 CraZaay
prettig gestoord
pi_51713566
quote:
Op zaterdag 21 juli 2007 01:03 schreef Thomass het volgende:
Ja maar niet iedereen maakt commerciele dingen, ik zou het echt niet trekken . Van die standaard applicaties voor in bedrijven die medewerkers moeten bijhouden ofzo, booooring.
Ik maak wel commerciele dingen, en daar vallen ook jongerencommunities onder met een paar honderdduizend leden bijvoorbeeld. Da's ook weer een ander verhaal natuurlijk dan een boekhouddingetje
pi_51715240
Hoe kan ik het beste goed controleren van welk type een afbeelding is die via een formulier binnen komt?

Het is voor mijn über nuttige Image 2 HTML 'applicatie'

edit-

Met de functie exif_imagetype() dus.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
switch(exif_imagetype($this->filename)) {
    case 
// GIF
        
$image imagecreatefromgif($this->filename);
        break;
    case 
// JPG
        
$image imagecreatefromjpeg($this->filename);
        break;
    case 
// PNG
        
$image imagecreatefrompng($this->filename);
        break;
    case 
// BMP
        
$image imagecreatefromwbmp($this->filename);
        break;
    default :
        
$image false;
}    
?>


[ Bericht 89% gewijzigd door super-muffin op 22-07-2007 13:45:02 ]
pi_51718971
@super-muffin

Je kunt natuurlijk ook de imagecreatefromstring() functie gebruiken om een autodetect te laten uitvoeren
pi_51719440
hm, hoe dan ongeveer? Het word me niet echt helemaal duidelijk als ik naar de documentatie kijk.
pi_51719724
1
2
3
4
5
6
7
8
9
10
<?php
$system
=explode(".",$filename);

if (
preg_match("/jpg|jpeg/",$system[1])){
    
$src_img=imagecreatefromjpeg($filename);
}
if (
preg_match("/png/",$system[1])){
    
$src_img=imagecreatefrompng($filename);
}
?>


:+ :+
  zondag 22 juli 2007 @ 15:45:00 #56
107951 JortK
Immer kwaliteitsposts
  zondag 22 juli 2007 @ 15:53:25 #57
12880 CraZaay
prettig gestoord
pi_51720112
quote:
Op zondag 22 juli 2007 15:39 schreef Geqxon het volgende:

[ code verwijderd ]

pi_51720205
dat kan ook natuurlijk, maar vind ik niet erg netjes.

Trouwens lokaal werkt die exif_imagetype wel, maar op mijn externe host niet.
pi_51720938
@Geqxon

Je kunt beter naar de mimetype kijken, er zijn nogal wat BMP-afbeeldingen in omloop met een JPEG-extensie. :')

@super-muffin

1
2
3
4
5
6
7
8
<?php
$inhoud 
file_get_contents('onbekendplaatje.dat');
$srcimg imagecreatefromstring($inhoud);
if (
$srcimg === false)
{
    
// Onbekend formaat
}
?>
pi_51720998
quote:
Op zondag 22 juli 2007 16:17 schreef JeRa het volgende:
@Geqxon

Je kunt beter naar de mimetype kijken, er zijn nogal wat BMP-afbeeldingen in omloop met een JPEG-extensie.
Bovenstaand geklopt stukje code werkt niet eens met .JPG extensies.
  zondag 22 juli 2007 @ 16:21:02 #61
84926 WyriHaximus
Release the hounds smithers!
pi_51721055
quote:
Op zondag 22 juli 2007 15:45 schreef JortK het volgende:
Ik was dit topic ernstig kwijt
Zie link in me sig .
quote:
Op zondag 22 juli 2007 15:55 schreef super-muffin het volgende:
dat kan ook natuurlijk, maar vind ik niet erg netjes.

Trouwens lokaal werkt die exif_imagetype wel, maar op mijn externe host niet.
Is http://nl3.php.net/manual/en/function.getimagesize.php anders niet een idee?
phluphy for president!
pi_51721884
@JeRa : dat werkt goed inderdaad. maar het is er niet echt heel erg sneller op geworden. Maar dat moet ik nog even goed uitzoeken.

@Wyri : Die functie heb ik niet nodig. Of ik begrijp je verkeerd.
pi_51722338
quote:
Op zondag 22 juli 2007 16:46 schreef super-muffin het volgende:
@JeRa : dat werkt goed inderdaad. maar het is er niet echt heel erg sneller op geworden. Maar dat moet ik nog even goed uitzoeken.

@Wyri : Die functie heb ik niet nodig. Of ik begrijp je verkeerd.
De functie imagecreatefromstring() maakt er meteen een afbeelding van, en gebruikt functies zoals imagegetsize() om te bepalen wat het type is dat omzetten van brondata naar afbeelding kan, afhankelijk van de grootte en afmetingen van de afbeelding, lang duren helaas.
pi_51722851
Dat snap ik wel.

Het handigst zou nog zijn als mijn host exif_imagetype() ondersteund. Tenminste, dat zou het snelst zijn.
pi_51723263
quote:
Op zondag 22 juli 2007 16:46 schreef super-muffin het volgende:
@Wyri : Die functie heb ik niet nodig. Of ik begrijp je verkeerd.
getimagesize() kan ook het type teruggeven Ik denk dat die alleen naar de header van de file kijkt, hij laadt in ieder geval niet de hele afbeelding en zal dus veel sneller zijn.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  zondag 22 juli 2007 @ 21:35:32 #66
84926 WyriHaximus
Release the hounds smithers!
pi_51730528
quote:
Op zondag 22 juli 2007 16:46 schreef super-muffin het volgende:
@Wyri : Die functie heb ik niet nodig. Of ik begrijp je verkeerd.
quote:
Op zondag 22 juli 2007 17:23 schreef SuperRembo het volgende:

[..]

getimagesize() kan ook het type teruggeven Ik denk dat die alleen naar de header van de file kijkt, hij laadt in ieder geval niet de hele afbeelding en zal dus veel sneller zijn.
Precies
phluphy for president!
  maandag 23 juli 2007 @ 16:15:37 #67
12221 Tijn
Powered by MS Paint
pi_51751341
M'n XS4ALL-problemen met PHP zijn opgelost Ik had het probleem dat ik niet via .htaccess de instellingen van PHP kon wijzigen, en dus bv register_globals niet uit kon zetten (wat default aan staat). En aangezien je register_globals ook niet via ini_set() kunt wijzigen, wist ik niet hoe ik het dan aan moest pakken. Maar een mailtje naar de helpdesk bood soelaas, het blijkt dat je je eigen php.ini mag hebben Daar even de opties in zetten die je voor jouw website wil hebben en in de CGI-BIN directory zetten en klaar is Tijn
pi_51751572
Vreemd dat je register_globals niet uit kunt zetten, een imho erg onveilige functie.
  maandag 23 juli 2007 @ 16:24:09 #69
12221 Tijn
Powered by MS Paint
pi_51751623
quote:
Op maandag 23 juli 2007 16:22 schreef Geqxon het volgende:
Vreemd dat je register_globals niet uit kunt zetten, een imho erg onveilige functie.
Ja, maar het blijkt dus wel te kunnen, want je mag je eigen php.ini hebben bij XS4ALL

Dus ik dacht, ik zeg het ff, mochten er nog eens mensen die bij XS4ALL gehost zijn langskomen met zo'n soort vraag
pi_51751881
Is dat dan niet gevaarlijk voor de XS4ALL server? Dat je bijvoorbeeld hun CPU even een uurtje lang op 100% laat stressen omdat je de timelimit op 48 uur hebt gezet?
pi_51751984
Heuj. Mijn domeinnaam heeft een week lang op "in aanvraag" gestaan, en is nu weer vrij. Ik dacht dat dat tegenwoordig allemaal digitaal kon daar bij SIDN?
  maandag 23 juli 2007 @ 16:38:15 #72
12221 Tijn
Powered by MS Paint
pi_51752091
quote:
Op maandag 23 juli 2007 16:32 schreef Geqxon het volgende:
Is dat dan niet gevaarlijk voor de XS4ALL server? Dat je bijvoorbeeld hun CPU even een uurtje lang op 100% laat stressen omdat je de timelimit op 48 uur hebt gezet?
Ja hoor eens, dat weet ik ook allemaal niet hoor
pi_51752114
quote:
Op maandag 23 juli 2007 16:38 schreef Tijn het volgende:

[..]

Ja hoor eens, dat weet ik ook allemaal niet hoor
Zeg, mijn XS4All abbotje is vandaag opeens wel erg traag geworden. Tijn?
  maandag 23 juli 2007 @ 22:18:24 #74
12880 CraZaay
prettig gestoord
pi_51764740
quote:
Op maandag 23 juli 2007 16:35 schreef Geqxon het volgende:
Heuj. Mijn domeinnaam heeft een week lang op "in aanvraag" gestaan, en is nu weer vrij. Ik dacht dat dat tegenwoordig allemaal digitaal kon daar bij SIDN?
Een goede aanvraag zou sowieso niet langer dan een paar minuten moeten duren en daarna op 'actief' moeten staan.
pi_51764831
Goed, ik heb een kut-provider wat dat betreft. Mijn hostings-provider werkt nog met papier, terwijl ik weet dat het digitaal kan.

Zometeen dat noodnummer van ze maar even bellen.
  maandag 23 juli 2007 @ 23:11:37 #76
84926 WyriHaximus
Release the hounds smithers!
pi_51767252
quote:
Op maandag 23 juli 2007 16:32 schreef Geqxon het volgende:
Is dat dan niet gevaarlijk voor de XS4ALL server? Dat je bijvoorbeeld hun CPU even een uurtje lang op 100% laat stressen omdat je de timelimit op 48 uur hebt gezet?
Daar heb je php.ini niet perse voor nodig kan ook tijdens runtime http://php.net/set_time_limit
quote:
Op maandag 23 juli 2007 22:19 schreef Geqxon het volgende:
Goed, ik heb een kut-provider wat dat betreft. Mijn hostings-provider werkt nog met papier, terwijl ik weet dat het digitaal kan.

Zometeen dat noodnummer van ze maar even bellen.
En dan zeggen of nu reggen of ik ga verhuizen .
phluphy for president!
pi_51767400
quote:
Op maandag 23 juli 2007 23:11 schreef WyriHaximus het volgende:

[..]

Daar heb je php.ini niet perse voor nodig kan ook tijdens runtime http://php.net/set_time_limit
[..]
True, maar als je register_globals niet eens uit kan zetten gok ik dat dit ook niet werken gaat.
pi_51767992
quote:
Op maandag 23 juli 2007 23:11 schreef WyriHaximus het volgende:
En dan zeggen of nu reggen of ik ga verhuizen .
En vervolgens aan hen de keuze: ofwel een klant behouden voor een paar euro's, ofwel een lastige klant kwijt die geheel conform de algemene voorwaarden een leuke boete gaat betalen voor het onrechtmatig bellen van het noodnummer.
  maandag 23 juli 2007 @ 23:34:03 #79
84926 WyriHaximus
Release the hounds smithers!
pi_51768167
quote:
Op maandag 23 juli 2007 23:14 schreef Geqxon het volgende:

[..]

True, maar als je register_globals niet eens uit kan zetten gok ik dat dit ook niet werken gaat.
Beetje nutteloos lijkt mij, register_globals tijdens runtime uitzetten .
quote:
Op maandag 23 juli 2007 23:29 schreef JeRa het volgende:

[..]

En vervolgens aan hen de keuze: ofwel een klant behouden voor een paar euro's, ofwel een lastige klant kwijt die geheel conform de algemene voorwaarden een leuke boete gaat betalen voor het onrechtmatig bellen van het noodnummer.
Moet je natuurlijk wel het normale nummer eerst bellen . Daarnaast als ze niet binnen 7 dagen een domain kunnen reggen dan betwijfel ik ergens ook dat ze opnemen . Maar je hebt wel gelijk . Hij kan veel beter gewoon gelijk verhuizen, scheelt hem een boete en heeft dan toch ze domain .
phluphy for president!
pi_51768485
quote:
Op maandag 23 juli 2007 23:29 schreef JeRa het volgende:

[..]

En vervolgens aan hen de keuze: ofwel een klant behouden voor een paar euro's, ofwel een lastige klant kwijt die geheel conform de algemene voorwaarden een leuke boete gaat betalen voor het onrechtmatig bellen van het noodnummer.
"Noodnummer". Om drie uur in de middag krijg ik voice-mail.
pi_51768671
Anyhow, iemand een goed adresje? 100 megabyte webspace, 3 gigabyte dataverkeer de maand, unlimited mail-adressen (catch-all), minimaal 5 MySQL databases en PHP ondersteuning inclusief een domeinnaam, voor ongeveer 30-40 euro per jaar?

Uptime is niet interresant, het is slechts voor hobbyprojecten.
  maandag 23 juli 2007 @ 23:51:18 #82
84926 WyriHaximus
Release the hounds smithers!
pi_51768997
quote:
Op maandag 23 juli 2007 23:40 schreef Geqxon het volgende:

[..]

"Noodnummer". Om drie uur in de middag krijg ik voice-mail.
quote:
Op maandag 23 juli 2007 23:43 schreef Geqxon het volgende:
Anyhow, iemand een goed adresje? 100 megabyte webspace, 3 gigabyte dataverkeer de maand, unlimited mail-adressen (catch-all), minimaal 5 MySQL databases en PHP ondersteuning inclusief een domeinnaam, voor ongeveer 30-40 euro per jaar?

Uptime is niet interresant, het is slechts voor hobbyprojecten.
Zelf zit ik hier: http://www.sensson.net/producten/web-hosting/ of je kijkt ff in het grote betaalde webhostingstopic-deel 5 .
phluphy for president!
pi_51769345
Bedankt voor de links, ik denk dat het neostrada.nl gaat worden.

Ik kan natuurlijk mijn huidige hostingsprovider "pwnen" door het domeinnaam onder een valse naam te registreren, en dan geflipt te bellen waarom ze er een week over deden, en dat hij nu door iemand anders ingepikt is.
  dinsdag 24 juli 2007 @ 00:24:27 #84
84926 WyriHaximus
Release the hounds smithers!
pi_51770034
Haha idd ! Eingelijk wel een strakke actie .
phluphy for president!
  dinsdag 24 juli 2007 @ 04:26:41 #85
71919 wonderer
Hung like a My Little Pony
pi_51773146
ik weet dat je bij een update kan doen "veld=veld+1" enzo, maar kan dat ook met strings? Dat je een stuk tekst plakt achter wat er al instaat? Of moet je dan eerst kijken wat er staat en dan als hele nieuwe data invoeren/updaten?
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
  dinsdag 24 juli 2007 @ 07:53:51 #86
84926 WyriHaximus
Release the hounds smithers!
pi_51773816
quote:
Op dinsdag 24 juli 2007 04:26 schreef wonderer het volgende:
ik weet dat je bij een update kan doen "veld=veld+1" enzo, maar kan dat ook met strings? Dat je een stuk tekst plakt achter wat er al instaat? Of moet je dan eerst kijken wat er staat en dan als hele nieuwe data invoeren/updaten?
1veld = veld + 'string'
Moet wel werken gok ik zo :).
phluphy for president!
pi_51773921
quote:
Op dinsdag 24 juli 2007 07:53 schreef WyriHaximus het volgende:

[..]
[ code verwijderd ]

Moet wel werken gok ik zo .
Als je + gebruikt bij tekst, dan levert dat in MySql 0 op (vreemd ja, 't blijft MySQL). Met Concat() kun te tekst aan elkaar plakken.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_51773962
Niet eens zo heel vreemd, string + string = 0.
  dinsdag 24 juli 2007 @ 08:28:35 #89
84926 WyriHaximus
Release the hounds smithers!
pi_51774015
quote:
Op dinsdag 24 juli 2007 08:14 schreef SuperRembo het volgende:

[..]

Als je + gebruikt bij tekst, dan levert dat in MySql 0 op (vreemd ja, 't blijft MySQL). Met Concat() kun te tekst aan elkaar plakken.
Ok tof weer wat geleerd, was ook een grote gok .
quote:
Op dinsdag 24 juli 2007 08:21 schreef Geqxon het volgende:
Niet eens zo heel vreemd, string + string = 0.
Nee eingelijk niet, javascript pikt dat dan weer wel, in PHP weer . en VB(6 iig) gebruikt ook weer + als ik heel diep ga spitten .
phluphy for president!
pi_51774653
quote:
Op dinsdag 24 juli 2007 08:21 schreef Geqxon het volgende:
Niet eens zo heel vreemd, string + string = 0.
Het zou logischer zijn als het een error gaf, of anders NULL.
Op deze manier is het net zo vaag als php. 'a'+'b' geeft 0, 'a' + '1' geeft 1, 'a' + 0x1 geeft 1, maar 'a' + '0x1' geeft dan weer 0 Aan de warnings te zien probeert ie er een double van te maken.

Als ik het goed heb kan je MySQL wel zo instellen dat dit soort dingen wel een fout geven.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  dinsdag 24 juli 2007 @ 14:56:48 #91
12221 Tijn
Powered by MS Paint
pi_51783968
quote:
Op maandag 23 juli 2007 23:43 schreef Geqxon het volgende:
Anyhow, iemand een goed adresje? 100 megabyte webspace, 3 gigabyte dataverkeer de maand, unlimited mail-adressen (catch-all), minimaal 5 MySQL databases en PHP ondersteuning inclusief een domeinnaam, voor ongeveer 30-40 euro per jaar?
Ik ben zelf wel tevreden met Webreus

Trouwens, ik kwam er net achter dat magic_quotes_gpc ook default aanstaat bij XS4ALL Gelukkig weet ik nu dus dat ik het via m'n eigen php.ini kan aanpassen, maar serieus, waarom hebben providers van die waardeloze default settings?
  dinsdag 24 juli 2007 @ 16:34:20 #92
71919 wonderer
Hung like a My Little Pony
pi_51787032
quote:
Op dinsdag 24 juli 2007 07:53 schreef WyriHaximus het volgende:

[..]


[ code verwijderd ]
Moet wel werken gok ik zo .
Ja, die had ik al geprobeerd Even dat concat onderzoeken.
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
pi_51789542
quote:
Op dinsdag 24 juli 2007 09:22 schreef SuperRembo het volgende:

[..]

Het zou logischer zijn als het een error gaf, of anders NULL.
Op deze manier is het net zo vaag als php. 'a'+'b' geeft 0, 'a' + '1' geeft 1, 'a' + 0x1 geeft 1, maar 'a' + '0x1' geeft dan weer 0 Aan de warnings te zien probeert ie er een double van te maken.

Als ik het goed heb kan je MySQL wel zo instellen dat dit soort dingen wel een fout geven.
Goed, wat dat betreft is het stricte van Java dan ook wel weer fijn. Non compatible!
pi_51790950
quote:
Op dinsdag 24 juli 2007 09:22 schreef SuperRembo het volgende:

[..]

Het zou logischer zijn als het een error gaf, of anders NULL.
Op deze manier is het net zo vaag als php. 'a'+'b' geeft 0, 'a' + '1' geeft 1, 'a' + 0x1 geeft 1, maar 'a' + '0x1' geeft dan weer 0 Aan de warnings te zien probeert ie er een double van te maken.

Als ik het goed heb kan je MySQL wel zo instellen dat dit soort dingen wel een fout geven.
1
2
3
4
5
6
<?php
'a' 'b' = (int)'a' + (int)'b' 0
'a' '1' = (int)'a' + (int)'1' 1
'a' 0x1 = (int)'a' 1
'a' '0x1' = (int)'a' + (int)'0x1' 1  //  en niet 0 zoals jij beweert
?>

och het is zo logisch mensen

(gave site heb je trouwens )
pi_51791043
tvp
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_51792077
quote:
Op dinsdag 24 juli 2007 18:43 schreef Thomass het volgende:

[..]
[ code verwijderd ]

och het is zo logisch mensen
Ja, ik snap ook wel wat er gebeurt. Handig vind ik het niet. Ik heb in zo'n geval liever dikke vette foutmelding.
quote:
(gave site heb je trouwens )
Thx!
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_51799478
Weer een performance vraag, maar deze keer eentje met een groter effect. Alsin: 0.2 seconden versus 8 seconden.

Een simpele query, met een LEFT JOIN op een bookmarktabel. Nu wil ik dus graag alle nieuwsartikelen zien die de user gebookmarked heeft. Dus hop, de LEFT JOIN, en dan op de koppelende ID van de bookmarktabel een IS NOT NULL. Gaat zelfs over duizenden nieuwsartikelen prima, supersnel dus.

Nu wil ik zien welke nieuwsartikelen de user niet gebookmarked heeft. (For the record: Dit zijn er minder dan de wel gebookmarkte nieuwsartikelen). Dit doe ik door een IS NULL op het koppelend ID van de bookmark tabel te zetten. Probleem dus: Dit gaat vreselijk traag...

Zou dit misschien sneller op te lossen zijn? Ik weet dat JOINS traag kunnen zijn, en hiermee is dat duidelijk te zien.
  dinsdag 24 juli 2007 @ 22:58:25 #98
84926 WyriHaximus
Release the hounds smithers!
pi_51801342
quote:
Op dinsdag 24 juli 2007 22:19 schreef Geqxon het volgende:
Weer een performance vraag, maar deze keer eentje met een groter effect. Alsin: 0.2 seconden versus 8 seconden.

Een simpele query, met een LEFT JOIN op een bookmarktabel. Nu wil ik dus graag alle nieuwsartikelen zien die de user gebookmarked heeft. Dus hop, de LEFT JOIN, en dan op de koppelende ID van de bookmarktabel een IS NOT NULL. Gaat zelfs over duizenden nieuwsartikelen prima, supersnel dus.

Nu wil ik zien welke nieuwsartikelen de user niet gebookmarked heeft. (For the record: Dit zijn er minder dan de wel gebookmarkte nieuwsartikelen). Dit doe ik door een IS NULL op het koppelend ID van de bookmark tabel te zetten. Probleem dus: Dit gaat vreselijk traag...

Zou dit misschien sneller op te lossen zijn? Ik weet dat JOINS traag kunnen zijn, en hiermee is dat duidelijk te zien.
Wat zijn je queries nu dan?
phluphy for president!
pi_51801480
In een simpele vorm:

1
2
3
4
SELECT Titel
FROM Artikel AS a
LEFT JOIN Bookmark AS bm ON bm.ArtikelID = a.ID
WHERE bm.ArtikelID IS NOT NULL


Dit is dus voor alles dat wel een bookmark heeft, en goed snel is.

In een simpele vorm:

1
2
3
4
SELECT Titel
FROM Artikel AS a
LEFT JOIN Bookmark AS bm ON bm.ArtikelID = a.ID
WHERE bm.ArtikelID IS NULL


Voor alle artikelen zonder bookmark, goed traag. Ik kan begrijpen dat hij dus elke keer naar een bookmark moet zoeken die niet bestaat, maar hoe krijg ik zoiets geoptimaliseerd?
  dinsdag 24 juli 2007 @ 23:19:10 #100
84926 WyriHaximus
Release the hounds smithers!
pi_51802104
Is dit niet sneller?
1
2
3
4
SELECT field1 
FROM table1
 WHERE id1 IN
 (SELECT id2 FROM table2 WHERE condition1);


1
2
3
4
SELECT field1 
FROM table1 
WHERE id1 NOT IN 
(SELECT id2 FROM table2 WHERE condition1);

Werkt dat NOT? Of was het !? De ene keer lijkt het wel te werken en de andere weer niet .

EDIT: Of iig de 2e aangezien de eerste bij jouw al lekker rap is .
phluphy for president!
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')