Op WP7 kun je niet eens eigen mp3s als ringtone instellen, how smart is that??
Reg. datum: 26 november 2008
Een uint (System.Uint32) en sbyte (System.SByte) zijn toch ook gewoon (niet CLS-compliant) structs, net als System.Int32. Aangezien alle intrinsics van value type erven.quote:darkmage schreef op maandag 05 januari 2009 @ 16:23:
[...]
True.
Ik was even confuus met de integral types (sbyte, uint) enz
Sintax wijzigde dit bericht 05-01-2009 18:09 (10%)
"Gravitation is not responsible for people falling in love." Albert Einstein
Reg. datum: 17 september 2008
Als je functies zo groot worden dat die brackets het onleesbaar maken (omdat je enorm veel moet gaans scrollen omdat het zoveel ruimte inneemt) is de functie waarschijnlijk ook gewoon te groot.quote:_Erikje_ schreef op vrijdag 26 december 2008 @ 13:14:
[...]
Het gaat om leesbaarheid van de code, en nu vindt niet iedereen hetzelfde leesbaar. Ook speelt het 1337-heidsgehalte van compacte code een rol, I think.
C#:
1 | public void ServerLoop()
|
Ik dacht toch echt dat goto ondertussen al lang en breed verdwenen was. Hoewel het in dit geval niet echt fout of super lelijk is, had ik er zelf toch gewoon een while(true) of while(running) loop van gemaakt
Zoekt kamer in Utrecht! ~ Mijn progblog! ~ @royTries
Kater? Eerst water, de rest komt later
Last.fm profiel
Staat open voor nieuwe uitdaging in omgeving Haarlem (ASP.NET)
In Java en JavaScript niet helaas, ik had het pas nl. nodig. Goto en labels zijn erg handig wanneer je automatisch code laat genererenquote:Haan schreef op zaterdag 10 januari 2009 @ 11:12:
goto's zijn in C# en Java nog steeds mogelijk, en waarschijnlijk in andere talen ook wel, alleen gebruikt bijna niemand ze meer
JanDM wijzigde dit bericht 10-01-2009 11:52 (6%)
Ik kom net wel deze constructie tegen, die wel schijnt te werken, maar alleen terug kan springen en niet vooruit (halve goto dus)
Java:
1 | search:
|
Kater? Eerst water, de rest komt later
Last.fm profiel
Staat open voor nieuwe uitdaging in omgeving Haarlem (ASP.NET)
In dit voorbeeld spring je niet terug maar break je de outer loop, waardoor je programma door gaat, lijkt dus absoluut niet op een gotoquote:Haan schreef op zaterdag 10 januari 2009 @ 12:30:
Vreemd, ik dacht echt dat Java het ook nog ondersteunde. Ik zal wel in de war zijn met break en continue statements.
Ik kom net wel deze constructie tegen, die wel schijnt te werken, maar alleen terug kan springen en niet vooruit (halve goto dus)
Java:
1
2
3
4
5
6
7
8
9
10
11
12search:
for (i = 0; i < arrayOfInts.length; i++)
{
for (j = 0; j < arrayOfInts[i].length; j++)
{
if (arrayOfInts[i][j] == searchfor)
{
foundIt = true;
break search;
}
}
}
Blog || Probeer eens een echte db, probeer eens PostgreSQL!
Klik hier voor ultieme ranzigheid! - PSN : Kettrick
Bytecode ondersteunt het ook gewoon.quote:Haan schreef op zaterdag 10 januari 2009 @ 12:30:
Vreemd, ik dacht echt dat Java het ook nog ondersteunde.
Talkin.nl daily photoblog
Day 2307: Spaarnwoude Resort
Foto specs: Canon 50D, Sigma 8-16 HSM, 1/40s, f/9.0, ISO 100
Wat is het nut van Java-code genereren, als die toch onleesbaar wordt? Maak er dan bytecode van ofzoquote:JanDM schreef op zaterdag 10 januari 2009 @ 11:52:
[...]
In Java en JavaScript niet helaas, ik had het pas nl. nodig. Goto en labels zijn erg handig wanneer je automatisch code laat genereren
C:
1 | for (i = 0; i < 128; i++)
|
En nog een bugje
C:
1 | for (i = 0; i < 128; i++)
|
Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.
Waarom zou je je helemaal moeten gaan verdiepen in Java bytecode generation als je ook gewoon Java code kunt genereren? Al helemaal als je al backends hebt voor talen als C++ en C#, die met minimale aanpassingen ook voor Java code kunnen gaan genereren.quote:MBV schreef op zaterdag 10 januari 2009 @ 16:10:
[...]
Wat is het nut van Java-code genereren, als die toch onleesbaar wordt? Maak er dan bytecode van ofzo
[GoT topic extension for Chrome - nu met Quote-to-Quickreply feature!] - [T.net karma monitor]
[Deus Ex: HR] - [Lara Croft and the Guardian Of Light]
Ik lees het prima, maar ik vind het een onzinnige constructie. Ik wil helemaal niet blind alle kolommen ophalen, ik wil bepalen wat ik ophaal. Als ik ALLE kolommen wil, dan geef ik wel een lijstje met alle kolomnamen, ipv die rottige *. Kan best zijn dat het een vreemde karaktertrek van mij is, maar ik vind het niet netjes om een * te gebruiken.quote:Raging_Trancer schreef op maandag 05 januari 2009 @ 12:43:
[...]
Volgens mij lees je het verkeerd. Wat de query in dit geval doet is alle waarden ophalen van de user met id = "$_COOKIE[id]" uit de tabel "gebruikers".
-4 uur cup-a-soup modus-: Ik zie het al, ik schreef 'tabellen', maar ik bedoelde 'kolommen'
IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;
Ligt niet aan jou hoor, altijd lui * selecteren scoort bij praktisch elke bad practice sql lijst vrij goed.quote:link0007 schreef op zondag 11 januari 2009 @ 16:24:
Kan best zijn dat het een vreemde karaktertrek van mij is, maar ik vind het niet netjes om een * te gebruiken.
Talkin.nl daily photoblog
Day 2307: Spaarnwoude Resort
Foto specs: Canon 50D, Sigma 8-16 HSM, 1/40s, f/9.0, ISO 100
Reg. datum: 15 oktober 2008
Visual Basic:
1 | Dim int x
|
De oplossing met mod was natuurlijk wel een stuk sneller
It was when I was happiest that I longed most. It was on happy days when we were up there on the hills, the three of us, with the wind and the sunshine ...
Visual Basic:
1 | If (x And 1) = 0 Then
|
Vind ik vrij basic hoor.
More than meets the eye
There is no I in TEAM... but there is ME
Stanzinist | Vroeger IceManX | system specs
En ja, dat is een slechte zaak
It was when I was happiest that I longed most. It was on happy days when we were up there on the hills, the three of us, with the wind and the sunshine ...
Lichtpuntje: Ze leveren dit soort dingen minder af dan vroeger. Maar oude rotzooi refactoren vinden ze vooralsnog niet nodig bij Sugar.
Config wijzigde dit bericht 11-01-2009 23:41 (7%)
Zit wat in. Een nadeeltje: o.a. JavaCC liep tegen de beperkingen van verschillende IDE's aan omdat de bestanden toch iets te groot werdenquote:.oisyn schreef op zondag 11 januari 2009 @ 14:53:
[...]
Waarom zou je je helemaal moeten gaan verdiepen in Java bytecode generation als je ook gewoon Java code kunt genereren? Al helemaal als je al backends hebt voor talen als C++ en C#, die met minimale aanpassingen ook voor Java code kunnen gaan genereren.
Slikte VB dat? Wow.quote:IceManX schreef op zondag 11 januari 2009 @ 18:56:
Obscuur?
Visual Basic:
1
2
3
4
5If (x And 1) = 0 Then
even
Else
odd
End If
Vind ik vrij basic hoor.
Ik moet zeggen, in de tijd dat ik er mee werkte wist ik daar ook niks vanaf. Nu wel uiteraard. (en nu wens ik VB nooit meer te gebruiken)
Op reis: www.lovetheworld.nl
Ik heb het ook ooit via-via geleerd, en ik ben het ook met je eens wat betreft VBquote:GreenSky schreef op maandag 12 januari 2009 @ 10:36:
[...]
Slikte VB dat? Wow.
Ik moet zeggen, in de tijd dat ik er mee werkte wist ik daar ook niks vanaf. Nu wel uiteraard. (en nu wens ik VB nooit meer te gebruiken)
More than meets the eye
There is no I in TEAM... but there is ME
Stanzinist | Vroeger IceManX | system specs
Daar ben ik het niet helemaal mee eens. De omvang van de functie heeft niets te maken met de complexiteit (en leesbaarheid) van een stuk code.quote:flijten schreef op dinsdag 06 januari 2009 @ 11:58:
[...]
Als je functies zo groot worden dat die brackets het onleesbaar maken (omdat je enorm veel moet gaans scrollen omdat het zoveel ruimte inneemt) is de functie waarschijnlijk ook gewoon te groot.
In sommige gevallen is het juist een verademing als om een functie van een paar pagina's te laten te staan. Decomposeren van functies kan juist de leesbaarheid verslechteren omdat je dan veel nutteloze functies moet definiëren die een bepaald onderdeel van het algoritme uitvoert (die nergens anders hergebruikt).
Ik ben zelf groot voorstander van compacte code, mits het goed gedocumenteerd is. Ik schaam me niet voor statements met meer dan 4 regels commentaar om het uit te leggen wat er precies gebeurt.
on-topic:
Nu zal ik je vertellen dat ik absoluut geen engel ben. Laats nog een stuk über ranzige code gemaakt voor een schoolopdracht. Echt een voorbeeldje van quick and dirty, and it works, so don't touch it
ruby:
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
| #arbitrary constructor for rushcheck
#this enables rushcheck to autogenerate a object of this type
def self.arbitrary
interest = ["klantklossen", "motorrijden", "fietsen", "wandelen", "fappen", "rimmen", "paupers_slaan"]
## DISCLAIMER ##
## BLAME THIS ON ERIK SLAGTER ##
String.arbitrary.bind do |firstName|
String.arbitrary.bind do |lastName|
RushCheck::Gen.choose(0, 1).bind do |genderItr|
RushCheck::Gen.choose(0, 1).bind do |sexPrefItr|
RushCheck::Gen.choose(1990, 2000).bind do |birthYear|
RushCheck::Gen.choose(0, interest.size - 1).bind do |interestItr1|
RushCheck::Gen.choose(0, interest.size - 1).bind do |interestItr2|
RushCheck::Gen.choose(0, interest.size - 1).bind do |interestItr3|
RushCheck::Gen.choose(0, 2).bind do |eduItr|
gender = @@genders[genderItr]
sexPref = @@sexualPreferences[sexPrefItr]
edu = @@educationLevels[eduItr]
nonSexPref = interest[interestItr1].to_s + "+" +
interest[interestItr2].to_s + "+" +
interest[interestItr3].to_s
RushCheck::Gen.unit(new(firstName, lastName, gender, sexPref, birthYear, edu, nonSexPref))
end
end
end
end
end
end
end
end
end
end |
Disclaimertje erbij omdat het een groepsopdracht was
Wat het doet: automatisch variabelen genereren gebruikmakend van RushCheck generators.
Reg. datum: 11 maart 2008
* Drukt op enterquote:_Erikje_ schreef op maandag 12 januari 2009 @ 22:30:
Echt een voorbeeldje van quick and dirty, and it works, so don't touch it
king_charles wijzigde dit bericht 12-01-2009 22:50 (74%)
Och, ik heb soms momenten dat ik tussen de 20 en 80 regels commentaar schrijf als ik het nodig acht :-)quote:_Erikje_ schreef op maandag 12 januari 2009 @ 22:30:
[...]
Ik ben zelf groot voorstander van compacte code, mits het goed gedocumenteerd is. Ik schaam me niet voor statements met meer dan 4 regels commentaar om het uit te leggen wat er precies gebeurt.
Recent voorbeeldje uit een software rasterizer. Het doel is om het juiste mip-map level te selecteren voor de huidige scanline. (De functie word dus een keer per scanline per triangle uitgevoerd). Door de optimalisatie is de functie uitvoer tussen de 20 en 30 keer sneller geworden, echter is 'ie ineens een stuk minder triviaal en komt er redelijk wat wiskunde bij kijken. Kortom, dat moeten we uitleggen aan de (toekomstige) lezer.
C++:
1 | // First off a simple explanation about how floating points numbers are
|
Previous titles worked on: Battlefield 3 (Frostbite team), Deus Ex: Human Revolution
[GoT topic extension for Chrome - nu met Quote-to-Quickreply feature!] - [T.net karma monitor]
[Deus Ex: HR] - [Lara Croft and the Guardian Of Light]
Persoonlijk lees ik in dit geval liever die ~80 regels commentaar dan dat ik over een half jaar zit te peinzen over wat ik heb zitten doen destijds. Daarbij zijn dit soort optimalizaties voor mij ook niet allerdaags en heb ik een deel van de kennis terplekke op moeten doen. Terwijl ik inmiddels toch een jaar met deze materie bezig ben geweest.quote:.oisyn schreef op maandag 12 januari 2009 @ 23:41:
Tja, ik vind het eerlijk gezegd een beetje overdreven. De leek snapt wellicht niet wat shifts en bitscans doen, maar iemand geïnteresseerd in software rasterization zeker wel.
Overigens legt het grooste deel van het commentaar de wiskunde achter de optimalizatie uit; iets wat wellicht niet iedereen meteen door heeft. Kortom, voor mezelf kan ik het in ieder geval rechtvaardigen, wat een ander er uiteindelijk mee doet is niet aan mij. Ik heb m'n best gedaan ;-)
Previous titles worked on: Battlefield 3 (Frostbite team), Deus Ex: Human Revolution
Reg. datum: 05 juni 2005
PHP:
| <?php
|
Ik vind met name het begin stukje heel erg kinderlijk uitgelegd. Dit soort uitleg is an sich goed, maar mag toch wel gecondenseerd worden naar 20 regels.quote:
Hanlon's Razor: "Never attribute to malice that which can be adequately explained by stupidity."
20 Regels gaat mij denk ik niet lukken maar het is waarschijnlijk wel een goed idee om het commentaar iets meer to-the-point te schrijven :-)quote:Grijze Vos schreef op dinsdag 13 januari 2009 @ 15:21:
[...]
Ik vind met name het begin stukje heel erg kinderlijk uitgelegd. Dit soort uitleg is an sich goed, maar mag toch wel gecondenseerd worden naar 20 regels.
Previous titles worked on: Battlefield 3 (Frostbite team), Deus Ex: Human Revolution
De grootste WTF is trouwens een andere. In je commentaar staat alleen de 'hoe'. Niet de 'waarom'. Nergens staat dat een aanroep naar mip_map het mip_map level terug geeft en wat die level nu eigenlijk inhoud. Wat nu eigenlijk de a_Area inhoud en wat de extremen van de in- en output parameters zijn.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Dat is dan weer zo'n gevaarlijke aanname waar iedereen het altijd over heeftquote:.oisyn schreef op maandag 12 januari 2009 @ 23:41:
Tja, ik vind het eerlijk gezegd een beetje overdreven. De leek snapt wellicht niet wat shifts en bitscans doen, maar iemand geïnteresseerd in software rasterization zeker wel.
Dit is toch niet enorm vreemdquote:Tedkees schreef op dinsdag 13 januari 2009 @ 15:01:
Kwam een mooie tegen in het opensource pakket vTiger 5.0.4 (wat overigens een grote WTF is, maar dat terzijde):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<?php
function is_admin($user) {
global $log;
$log->debug("Entering is_admin(".$user->user_name.") method ...");
if ($user->is_admin == 'on')
{
$log->debug("Exiting is_admin method ...");
return true;
}
else
{
$log->debug("Exiting is_admin method ...");
return false;
}
}
?>
Blog || Probeer eens een echte db, probeer eens PostgreSQL!
Klik hier voor ultieme ranzigheid! - PSN : Kettrick
Een boolean geimplementeerd met een string "on"...quote:RoeLz schreef op dinsdag 13 januari 2009 @ 15:43:
[...]
Dat is dan weer zo'n gevaarlijke aanname waar iedereen het altijd over heeft![]()
[...]
Dit is toch niet enorm vreemd
Hanlon's Razor: "Never attribute to malice that which can be adequately explained by stupidity."
Reg. datum: 05 juni 2005
Ik vind 't toch een vrij omslachtige manier om te checken of een boolean waarde (of iets wat eigenlijk een boolean hoort te zijn) te checken, en die logging is ook nog eens enorm overbodig in mijn ogen. Daarbij lijkt 't me sowieso handiger om deze methode op het object te hebben in plaats van een losse functie.quote:RoeLz schreef op dinsdag 13 januari 2009 @ 15:43:
[...]
Dat is dan weer zo'n gevaarlijke aanname waar iedereen het altijd over heeft![]()
[...]
Dit is toch niet enorm vreemd
Reg. datum: 01 juni 2006
En zowel bij true als false wordt het volgende uitgevoerd:quote:
$log->debug("Exiting is_admin method ...");
Dat had dus ook net zo goed voor de if gekund. Als daarnaast de boolean gewoon als boolean geïmplementeerd was, kon je ook nog meteen die waarde returnen en niet eerst door een if halen.
edit: met hierboven dus
Guldan wijzigde dit bericht 13-01-2009 15:58 (18%)
You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?
En het lijkt mij ook handig om te weten of $user wel een instance is van de (neem ik aan) User classquote:Tedkees schreef op dinsdag 13 januari 2009 @ 15:55:
[...]
Ik vind 't toch een vrij omslachtige manier om te checken of een boolean waarde (of iets wat eigenlijk een boolean hoort te zijn) te checken, en die logging is ook nog eens enorm overbodig in mijn ogen. Daarbij lijkt 't me sowieso handiger om deze methode op het object te hebben in plaats van een losse functie.
PHP:
| <?php
|
Zolang je geen idee hebt waar die boolean vandaan komt kan je weinig over dit stuk code zeggenquote:Grijze Vos schreef op dinsdag 13 januari 2009 @ 15:49:
[...]
Een boolean geimplementeerd met een string "on"...
Of je het dan in een class of functie zet hangt weer helemaal af van het gebruik/context.
Blog || Probeer eens een echte db, probeer eens PostgreSQL!
Klik hier voor ultieme ranzigheid! - PSN : Kettrick
Ehm, ik weet nog een betere:quote:daniëlpunt schreef op dinsdag 13 januari 2009 @ 16:11:
[...]
En het lijkt mij ook handig om te weten of $user wel een instance is van de (neem ik aan) User classIs niet zo heel erg veel moeite in PHP :
PHP:
1<?php
function is_admin(User $user) { /* */ }
?>
PHP:
| <?php
|
Dan weet je zeker dat het een User is, anders had de functie niet bestaan
Anders was het er niet makkelijker op geworden hoor, je zal in PHP altijd met variabele types zittenquote:Grijze Vos schreef op dinsdag 13 januari 2009 @ 15:49:
[...]
Een boolean geimplementeerd met een string "on"...
Nou, dat valt ook wel weer mee. bitwise operaties zijn gewoon standaard taalconstructies en zeker in dergelijke hoog efficiente code zijn deze behoorlijk triviaal. Dat in een dergelijke context moeten documenteren is hetzelfde als in commentaar zetten dat je met de + twee waarden bij elkaar optelt.quote:RoeLz schreef op dinsdag 13 januari 2009 @ 15:43:
[...]
Dat is dan weer zo'n gevaarlijke aanname waar iedereen het altijd over heeft
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Klopt, maar ik denk dat ik wel in de positie ben om die aanname te kunnen maken. Van mensen die bezig zijn met het optimizen van software rasterization kun je weldegelijk aannemen dat ze hun bitfiddle-kennis op orde hebben. Zo niet dan moeten ze ander werk zoeken.quote:RoeLz schreef op dinsdag 13 januari 2009 @ 15:43:
[...]
Dat is dan weer zo'n gevaarlijke aanname waar iedereen het altijd over heeft
.oisyn wijzigde dit bericht 13-01-2009 16:40 (25%)
[GoT topic extension for Chrome - nu met Quote-to-Quickreply feature!] - [T.net karma monitor]
[Deus Ex: HR] - [Lara Croft and the Guardian Of Light]
1. Het is langzamer, een bool vergelijken gaat sneller dan een tekenreeks.
2. Je moet een goede standaard voor 'true' en 'false' afspreken.
2b. Het zit mij dwars dat een gegeven dat true of false moet zijn een andere waarde kan hebben waardoor je dus onvoorspelbare dingen krijgt.
Das een doorontwikkelde fork van SugarCRM 1.0...holy moly wat je daar al niet tegenkomt..quote:Tedkees schreef op dinsdag 13 januari 2009 @ 15:01:
Kwam een mooie tegen in het opensource pakket vTiger 5.0.4 (wat overigens een grote WTF is, maar dat terzijde):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<?php
function is_admin($user) {
global $log;
$log->debug("Entering is_admin(".$user->user_name.") method ...");
if ($user->is_admin == 'on')
{
$log->debug("Exiting is_admin method ...");
return true;
}
else
{
$log->debug("Exiting is_admin method ...");
return false;
}
}
?>
Het was PHP remember? Ik ben wel benieuwd naar een testje waarbij in PHP er een significant verschil is tussen de 2 constructies. PHP moet toch typecasten enzovoort, dus ik denk dat een vergelijking met TRUE ook niet al te snel is.quote:Sebazzz schreef op dinsdag 13 januari 2009 @ 18:00:
Ik snap nooit dat mensen zulke string booleans gebruiken.
1. Het is langzamer, een bool vergelijken gaat sneller dan een tekenreeks.
Inderdaad, maar bij legacy (en PHP is al heel snel legacy geloof ikquote:2. Je moet een goede standaard voor 'true' en 'false' afspreken.
Hier is 'on' gelijk aan true, en verder niks. Bij if($var) is emptystring, null, de string false en false zelf false. Ik kan me voorstellen dat mensen dat overzichtelijker vinden.quote:2b. Het zit mij dwars dat een gegeven dat true of false moet zijn een andere waarde kan hebben waardoor je dus onvoorspelbare dingen krijgt.
Echt WTF-code wordt het pas zodra je het gaat uitbreiden: "superadmin" zou je ook een functie kunnen geven
Bovendien is die "global $log" erg onhandig, en maakt het concat-ten van strings het niet leesbaarder. Een static Log::debug met sprintf-like interface is imho veel mooier:
PHP:
| <?php
|
En zet in die "Exiting is_admin method" op z'n minst welke waarde je teruggeeft... Of nog beter, voeg ze samen in 1 bericht.
JanDM wijzigde dit bericht 13-01-2009 23:11 (28%)
PHP:
| <?php
|
Voor elk object (en ik realiseer me dat in die CMS van jullie geen sprake is van een object) dien je deze indien je Logger functionaliteit wil gewoon te passen aan LogProxy, e.g.:
PHP:
| <?php
|
Natuurlijk rekening meehouden dat $obj instanceof LogProxy is indien DEBUG true is, iets waar je rekening mee moet houden als je $obj in typehinted code gebruikt. Je zult dan even je type goed moeten kiezen mbt covariantheid, maar daar kun je wel creatief in zijn
Kan je niet gewoon de instanceof operator overriden in PHPquote:MBV schreef op woensdag 14 januari 2009 @ 10:20:
Wat nou als je alles van je eigen Object laat afstammen, met de member functie getType()? Dan kan je idd geen instanceof gebruiken, maar daar zijn trucs omheen.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Je kunt gewoon direct $result returnen. Wat je nu doet is iig fout, omdat een functie die false, 0, 0.f of een lege string returnt dan genegeerd wordt (en niets returnen is hetzelfde als null returnen)quote:prototype schreef op woensdag 14 januari 2009 @ 03:04:
PHP:
1
2
3<?php
if($result) { // Weet niet precies of dit afdoende is, aan jullie de opdracht om dat uit te zoeken ;-)
return $result;
}
?>
[GoT topic extension for Chrome - nu met Quote-to-Quickreply feature!] - [T.net karma monitor]
[Deus Ex: HR] - [Lara Croft and the Guardian Of Light]
Alles kan!* Gewoon even de PHP-source hacken, was toch GPL?quote:rwb schreef op woensdag 14 januari 2009 @ 10:28:
[...]
Kan je niet gewoon de instanceof operator overriden in PHP
*) thee-kan, koffie-kan, water-kan, wim kan niet meer
euhm, if($bla) t.o.v. if($bla == <iets>) kost je op zn minst een evaluatie meer natuurlijk.quote:MBV schreef op dinsdag 13 januari 2009 @ 21:53:
[...]
Het was PHP remember? Ik ben wel benieuwd naar een testje waarbij in PHP er een significant verschil is tussen de 2 constructies. PHP moet toch typecasten enzovoort, dus ik denk dat een vergelijking met TRUE ook niet al te snel is.
Hanlon's Razor: "Never attribute to malice that which can be adequately explained by stupidity."
Maar de vraag is of dat in PHP een significant performance verschil oplevert. en als <iets> een constante is dan hoeft het niet perse langzamer te zijn, aangezien er zowiezo een comparison moet plaatsvinden. Al zullen numerieke compares natuurlijk sneller zijn dan een string comparequote:Grijze Vos schreef op woensdag 14 januari 2009 @ 14:38:
[...]
euhm, if($bla) t.o.v. if($bla == <iets>) kost je op zn minst een evaluatie meer natuurlijk.
Woy wijzigde dit bericht 14-01-2009 14:50 (8%)
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Of dat verschil significant is hangt af van het aantal expressies waarin dat gebeurd uiteraard.
Hanlon's Razor: "Never attribute to malice that which can be adequately explained by stupidity."
Maar een significant verschil is er daardoor nog niet..quote:Grijze Vos schreef op woensdag 14 januari 2009 @ 14:38:
[...]
euhm, if($bla) t.o.v. if($bla == <iets>) kost je op zn minst een evaluatie meer natuurlijk.
Deze Tweaker zet geen actuele feitjes meer in zijn sig, die vergeet hij toch te verwijderen.
of je leest de laatste regel van mijn post?quote:Patriot schreef op woensdag 14 januari 2009 @ 14:53:
[...]
Maar een significant verschil is er daardoor nog niet..
Hanlon's Razor: "Never attribute to malice that which can be adequately explained by stupidity."
Hoe kom je aan die aanname? Je moet een vergelijking doen. Of die vergelijking met een impliciete true gedaan wordt of een expliciete waarde die je opgeeft, het blijft een vergelijking tussen twee waarden. Als je vergelijkt met een constante (true), dan is het resultaat zelfs exact identiek en is er dus ook geen enkele reden waarom dat op een andere manier gecompileerd zou moeten worden.quote:Grijze Vos schreef op woensdag 14 januari 2009 @ 14:53:
Een expressie met een vergelijking tussen twee variabelen (of een var en een constant) is per definitie duurder, aangezien dan die variabelen beiden in de registers moeten worden geplaatst, terwijl dat bij een expressie met maar een variabele natuurlijk niet hoeft.
C++:
1 | #include <iostream>
|
asm:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| int main()
{
004124E0 push ebp
004124E1 mov ebp,esp
004124E3 and esp,0FFFFFFF8h
if (a)
004124E6 cmp byte ptr [a (41A081h)],0
004124ED je main+1Ch (4124FCh)
std::cout << "hoi\n";
004124EF push 415488h
004124F4 call std::operator<<<std::char_traits<char> > (401C00h)
004124F9 add esp,4
if (b != false)
004124FC cmp byte ptr [b (41A080h)],0
00412503 je main+32h (412512h)
std::cout << "doei\n";
00412505 push 415490h
0041250A call std::operator<<<std::char_traits<char> > (401C00h)
0041250F add esp,4
}
00412512 xor eax,eax
00412514 mov esp,ebp
00412516 pop ebp
00412517 ret |
.oisyn wijzigde dit bericht 14-01-2009 15:11 (40%)
[GoT topic extension for Chrome - nu met Quote-to-Quickreply feature!] - [T.net karma monitor]
[Deus Ex: HR] - [Lara Croft and the Guardian Of Light]
PHP:
1 | <?php
|
after if($var):1.16601610184
after if($var == true):1.66237401962
after if($var == "on"):2.00581383705
nog een keer:
after if($var):1.39411306381
after if($var == true):1.55902409554
after if($var == "on"):1.9059009552
En met een willekeurige string, " std::operator<<<std::char_traits<char> > (401C00h) " op alle plekken:
after if($var):1.12949800491
after if($var == true):2.12889409065
after if($var == "on"):1.52041006088
Nog een keer:
after if($var):1.18337392807
after if($var == true):1.73573708534
after if($var == "on"):1.65470600128
$var = '':
after if($var):1.12168693542
after if($var == true):1.69349598885
after if($var == "on"):1.93431901932
Conclusie? PHP is echt vaag
Met een goede compiler zullen de drie lussen hier identiek zijn, omdat $var invariant is voor de loop en het derhalve op voorhand bekend is wat het resultaat van de evaluatie zal zijn
Overigens performt $var===true iets sneller dan $var==true en iets langzamer dan $var bij mij.
.oisyn wijzigde dit bericht 14-01-2009 16:23 (44%)
[GoT topic extension for Chrome - nu met Quote-to-Quickreply feature!] - [T.net karma monitor]
[Deus Ex: HR] - [Lara Croft and the Guardian Of Light]
Ah, als we het over te grote source files hebben, weet ik ook nog wel een mooi staaltje.
Een aantal universiteiten werken aan een XML database met XQuery support; genaamd MonetDB. Het ding werkt heel aardig (mits je genoeg geheugen hebt) en is modulair opgezet: de basis is een relationele in-memory database server (MonetDB) die alleen binaire tabellen ondersteunt en zorgt voor transacties, persistence, et cetera. De voor gebruikers bedoelde functionaliteit wordt in modules geïmplementeerd die code uitvoeren op de database, waarvoor een low-level (interpreted) taal bestaat (MIL).
Zo is er bijvoorbeeld een module die SQL queries kan vertalen naar MIL code en tabellen omzet in een formaat dat MonetDB efficient kan opslaan. Met die module als front-end en MonetDB als back-end hebben ze dus een efficiënte SQL server gebouwd.
Maar er is dus ook een XML module, genaamd Pathfinder. Die is behoorlijk geavanceerd, vooral waar het optimalisatie van XQuery queries betreft. Voor het verwerken van zo'n query wordt de query eerst geparst in een concrete syntax tree, dan worden er een aantal optimaliserende transformaties overheen gehaald, en tenslotte wordt MIL code gegenereerd om de query daadwerkelijk uit te voeren, en terug te transformeren naar XML.
Ik moet er bij vertellen dat het hele gebeuren geschreven is in C. Er wordt intensief gebruik gemaakt van lex en yacc om allerlei talen (MIL, XQuery, XML, SQL, et cetera) te parsen. Verder wordt er nogal veel gebruik gemaakt van een wat obscure tool genaamd BURG om transformaties op een boomstructuur uit te voeren, wat dus wordt gebruikt om een concrete syntax tree om te zetten in een abstract syntax tree en om alle optimalisaties uit te voeren. Ik had er voor ik dit project tegenkwam ook nooit van gehoord.
Anyway, dit alles om een beetje context te geven. Waar ik naar toe wilde, was de grootte van de broncode. Als ik de handgeschreven broncode van alleen de Pathfinder compiler (nog niet eens de runtime) bekijk, zonder Makefiles of gegenereerde source files, dan tel ik 137603 regels; dat is voor een groot project niet zo schrikbarend, ware het niet dat deze regels verspreid zijn over 103 bestanden. Nu zou je zenuwachtig moeten worden, want dit betekent dat een gemiddelde source file al 1336 regels bevat (bijna 1337
Neem de top 10 grootste bestanden:
11792 ./MonetDB4-XQuery/pathfinder/compiler/mil/milprint_summer.c 9631 ./MonetDB4-XQuery/pathfinder/compiler/mil/milgen.brg 6008 ./MonetDB4-XQuery/pathfinder/compiler/sql/lalg2sql.brg 5832 ./MonetDB4-XQuery/pathfinder/compiler/algebra/builtins.c 4551 ./MonetDB4-XQuery/pathfinder/compiler/algebra/logical.c 4082 ./MonetDB4-XQuery/pathfinder/compiler/core/fs.brg 3623 ./MonetDB4-XQuery/pathfinder/compiler/algebra/physical.c 3536 ./MonetDB4-XQuery/pathfinder/compiler/algebra/planner.c 3466 ./MonetDB4-XQuery/pathfinder/compiler/algebra/core2alg.brg 3152 ./MonetDB4-XQuery/pathfinder/compiler/algebra/map/intro_proxy.c
Holy shit! Duizenden regels broncode per bestand! milprint_summer.c heet zo omdat gebaseerd is op code die een student in een zomerproject geschreven heeft. Bijna twaalfduizend regels! Ik moet er niet aan denken al die code te moeten lezen, laat staan schrijven!
Het is overigens behoorlijk nette code. Er staat ook regelmatig zinnig commentaar in (maar minder dan de helft van de tekst; d.w.z. het merendeel is wel echt code) en er zijn geen TheDailyWTF-waardige constructies waarbij een stukje tekst duizend keer gecopypaste wordt omdat de auteur niet bekend is met het fenomeen for-loop.
Overigens zijn dit alleen handgeschreven source files; tools als lex, yacc en BURG genereren hiervan weer C source files die nog véél groter zijn; zo erg zelfs dat ik de boel met GCC niet mét optimalisaties kan compileren omdat de tussentijdse datastructuren niet in mijn 1 GB geheugen passen. (GCC houdt dan alle functies in het geheugen om inter-functie optimalisaties als inlining te kunnen toepassen.)
De moraal van dit verhaal: ik weet niet precies wanneer een source file té groot wordt, maar ik vermoed dat rond een regel of 5000 de grens van het betaambare wel overschreden is.
Reg. datum: 26 november 2008
Dan nodig ik je van harte uit enkele van de Progress source-files te komen bekijken, alles ongedocumenteerd, ongestructureerd, redundant en voorzien van een behoorlijk hoog WTF niveau op een niet gering aantal plekken.quote:Soultaker schreef op woensdag 14 januari 2009 @ 16:55:
De moraal van dit verhaal: ik weet niet precies wanneer een source file té groot wordt, maar ik vermoed dat rond een regel of 5000 de grens van het betaambare wel overschreden is.
De grootste, die ik tot nu toe gezien heb, is ruimschoots over de 8000 regels, waarvan, naar schatting, 5% (slecht, nietszeggend) commentaar is.
De erfenis van een pakket met roots van +25 jaar oud wat we aan het overbouwen zijn naar .NET, de aspirines liggen altijd binnen handbereik zal ik maar zeggen
"Gravitation is not responsible for people falling in love." Albert Einstein
Ik heb geen idee hoeveel daarvan gegenereerd is, bovenaan staat 'generation result of MAESTRO II', maar wat ik heb gehoord deed dat ding heel weinig.
Ik heb nog steeds geen NDA getekend, dus geen idee of dit al teveel informatie is...
MBV wijzigde dit bericht 14-01-2009 17:10 (18%)
Ja, ik vind dat erg ja.quote:MBV schreef op woensdag 14 januari 2009 @ 17:09:
En dat vind je erg? Wat dacht je van 1 bestand met 33642 regels COBOL-code?
Ik denk dat je het niet erg vind als ik dit aanbod afsla.quote:Sintax schreef op woensdag 14 januari 2009 @ 17:02:
Dan nodig ik je van harte uit enkele van de Progress source-files te komen bekijken, alles ongedocumenteerd, ongestructureerd, redundant en voorzien van een behoorlijk hoog WTF niveau op een niet gering aantal plekken.
Het verbaast me overigens niet dat dit blijkbaar wel vaker voorkomt, maar toch...
Yeah ik zat even te twijfelen ook wat er gebeurde in de situatie dat call_user_func een void functie zou aanroepen, maar volgens mij kan je gewoon meteen returnen idd.quote:.oisyn schreef op woensdag 14 januari 2009 @ 11:02:
[...]
Je kunt gewoon direct $result returnen. Wat je nu doet is iig fout, omdat een functie die false, 0, 0.f of een lege string returnt dan genegeerd wordt (en niets returnen is hetzelfde als null returnen)
Wat dacht je van het magic word 'COBOL'? Ook software moet je af en toe afschrijven, na 40 jaar trouwe dienst is dat niet onverstandigquote:Soultaker schreef op woensdag 14 januari 2009 @ 17:23:
[...]
Ja, ik vind dat erg ja.Als source files van duizenden regels de norm zijn, is je project toch een beetje ontspoort. (Ik zou die code niet willen onderhouden!)
Meestal legacy waarbij het voorkomt, niemand begint met 10.000 regels. Soms zou opsplitsen de code alleen maar onoverzichtelijker maken, maar meestal wordt er aan een bestand van 1000 regels 100 regels toegevoegd, en nog eens, en nog eens... Het zou wel leuk zijn om eens naar te kijken, maar ik heb geen geschiedenis van de COBOL-code waar ik het over had. Had ik bij mijn HBO-stage wel kunnen bekijken, maar daar kom ik niet meer in. Shell had de beveiliging best goed opgezetquote:[...]
Ik denk dat je het niet erg vind als ik dit aanbod afsla.
Het verbaast me overigens niet dat dit blijkbaar wel vaker voorkomt, maar toch...
http://www.lagzero.net/
en dan de source code even bekijken.
хочет знать все?
| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett
De persoon die dit in de source heeft verwerkt heeft een erg zieke geest.quote:Blonde Tux schreef op woensdag 14 januari 2009 @ 20:26:
Niet slecht als in bad, maar slecht als in evil(No worries, geen virussen of malware oid):
http://www.lagzero.net/
en dan de source code even bekijken.
http://hawvie.deviantart.com/
Kater? Eerst water, de rest komt later
Last.fm profiel
Staat open voor nieuwe uitdaging in omgeving Haarlem (ASP.NET)
PHP:
| <?php
|
Natuurlijk keert dit steeds fout terug, ook bij een array volledig bezet met hetzelfde teken
Natuurlijk krijg ik nu geen rij terug.
' Knowledge Beats Power.
Pak je ook wel een goede versie mee, 5.2.8 is alweer een paar weken uit... PHP4 is al jaren depricated.quote:MBV schreef op woensdag 14 januari 2009 @ 16:41:
Geen optimizer, Debian etch met PHP 4.4.4-8+etch6.
edit: wat voor slome server test je dat op? Op mijn niet-belachelijk-snelle server:
code:
1
2
3
4
| starting: after if($var):0.0337429046631 after if($var == true):0.0222730636597 after if($var == "on"):0.0260539054871 |
Cartman! wijzigde dit bericht 15-01-2009 23:11 (30%)
De minimumtemperatuur ligt vannacht tussen de 2 en 5°C. De wind is matig, kracht 3 uit Z.
prototype wijzigde dit bericht 16-01-2009 00:11 (5%)
Eigenlijk zou ik mijn server naar mijn kamer met UPC moeten halen, maar dan moet ik het DNS weer aanpassen enzo. Gezien een paar plannen ga ik denk ik voor een hoster die ¤5 vraagt voor een server met 10GB schijfruimte
@Prototype: Ja doei, installeer maar XAMPP of pak een livecd van Ubuntu
Dit is niet het 'hoe baggertraag is PHP'-topic (heel traag: debian shootout), maar slechte programmeervoorbeelden-topic.
MBV wijzigde dit bericht 16-01-2009 00:17 (31%)
Hey, ik begon er niet mee he?quote:MBV schreef op vrijdag 16 januari 2009 @ 00:12:
@Prototype: Ja doei, installeer maar XAMPP of pak een livecd van Ubuntu![]()
Dit is niet het 'hoe baggertraag is PHP'-topic (heel traag: debian shootout), maar slechte programmeervoorbeelden-topic.
after if($var):0.0260169506073 after if($var == true):0.0304319858551 after if($var == "on"):0.0354740619659 after if($var == "Dit is een heel erg lange string!!!1111pppp"):0.0444598197937 after if($var == "Dit is een heel erg lange string!!!1111pppp" (x10)):0.122269153595
Het mooie is, de code in de laatste loop doet een if ($var == $var2) omdat ik geen zin had de string 10x achter elkaar in de code te zetten. Dus om je vraag te beantwoorden: nee, hij doet niet aan string interning.
PHP 5.6.2 mét Zend optimizer. Prutswerk dus.
.oisyn wijzigde dit bericht 16-01-2009 02:06 (32%)
[GoT topic extension for Chrome - nu met Quote-to-Quickreply feature!] - [T.net karma monitor]
[Deus Ex: HR] - [Lara Croft and the Guardian Of Light]
Ik wist niet dat de compiler dat zo zou implementeren. Met het beetje kennis van Z80 assembly weet ik dat je equality to 0 met een goedkopere processor instructie checken. Bovendien kun je dat ook implementeren als een conditionele jump instructie a.d.h.v. een register value die al dan niet 0 is. Dan hoef je dus helemaal geen compare uit te voeren.quote:.oisyn schreef op woensdag 14 januari 2009 @ 15:06:
[...]
Hoe kom je aan die aanname? Je moet een vergelijking doen. Of die vergelijking met een impliciete true gedaan wordt of een expliciete waarde die je opgeeft, het blijft een vergelijking tussen twee waarden. Als je vergelijkt met een constante (true), dan is het resultaat zelfs exact identiek en is er dus ook geen enkele reden waarom dat op een andere manier gecompileerd zou moeten worden.
Grijze Vos wijzigde dit bericht 16-01-2009 11:16 (3%)
Hanlon's Razor: "Never attribute to malice that which can be adequately explained by stupidity."
Volgens mij jump je altijd conditioneel op een status vlag/bit, vnl SF (sign flag) en ZF (zero flag). Een aantal berekeningen zetten die flags, en compares doen dat zonder verdere side-effects. Als je doet "cmp eax,4" dan doet hij intern "eax - 4" en zet dan SF en ZF. Een "jne" is dan "jump if not ZF", een "jg" wordt "jump if SF". Een conditional jump doet dus zelf geen daadwerkelijke berekeningen, maar checked gewoon altijd een of twee vlaggen. In een loop hoef je ook geen compare te doen, want als ik een counter decrease "dec ecx", dan kan ik meteen kijken of het resultaat 0 is door de ZF te inspecteren. Een volgende "jnz" werkt dan gewoon.quote:Grijze Vos schreef op vrijdag 16 januari 2009 @ 11:13:
Ik wist niet dat de compiler dat zo zou implementeren. Met het beetje kennis van Z80 assembly weet ik dat je equality to 0 met een goedkopere processor instructie checken. Bovendien kun je dat ook implementeren als een conditionele jump instructie a.d.h.v. een register value die al dan niet 0 is. Dan hoef je dus helemaal geen compare uit te voeren.
( http://books.google.com/b...p;ct=result#PRA1-PA292,M1 )
Zoijar wijzigde dit bericht 16-01-2009 12:03 (10%)
[GoT topic extension for Chrome - nu met Quote-to-Quickreply feature!] - [T.net karma monitor]
[Deus Ex: HR] - [Lara Croft and the Guardian Of Light]
Of ik ben scheel, of ik zie echt niet wat hier nu fout gaat, behalve dat je na de 1e rij ($o) FALSE terug geeft omdat de return in de $o loop staat.quote:GuShe schreef op donderdag 15 januari 2009 @ 22:45:
Hier heb ik zonet meer dan een half uur op zitten kijken, testen en editen. Mijn pc vloog bijna het raam uit.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14<?php
Function searchRow($playField, $width, $heigth) {
// Horizontal
for ($o = 1; $o <= $heigth; $o++) {
for ($i = 1; $i <= ($width - 3); $i++) {
if (($playField[$i][$o] != '')
&& ($playField[$i][$o] == $playfield[$i + 1][$o])
&& ($playField[$i][$o] == $playfield[$i + 2][$o])
&& ($playField[$i][$o] == $playfield[$i + 3][$o])) {
return ($playfield[$i][$o] . '-Horizontal');
}
}
return FALSE;
}
}
?>
Natuurlijk keert dit steeds fout terug, ook bij een array volledig bezet met hetzelfde teken![]()
Natuurlijk krijg ik nu geen rij terug.
Edit: Nevermind.Ik was vergeten dat PHP case sensitive is met variablen
ShadowLord wijzigde dit bericht 16-01-2009 13:45 (3%)
Reizen rules! || Syteem specs
You see things; and you say, "Why?" But I dream things that never were; and I say, "Why not?"
Nouja ik vind het sowieso een heel aparte manier ..trouwens, hij kijkt verticaal niet horizontaalquote:ShadowLord schreef op vrijdag 16 januari 2009 @ 13:40:
[...]
Of ik ben scheel, of ik zie echt niet wat hier nu fout gaat, behalve dat je na de 1e rij ($o) FALSE terug geeft omdat de return in de $o loop staat.
Daar was ik nog niet met lezen, ik had immers ook een andere post gequote. Ik had niet gekeken of jij het die tweede keer ook was.quote:Grijze Vos schreef op woensdag 14 januari 2009 @ 15:01:
[...]
of je leest de laatste regel van mijn post?
Deze Tweaker zet geen actuele feitjes meer in zijn sig, die vergeet hij toch te verwijderen.
ik vermoedt het het in de schrijfwijze van $playField zit die niet altijd hetzelfde isquote:GuShe schreef op donderdag 15 januari 2009 @ 22:45:
Hier heb ik zonet meer dan een half uur op zitten kijken, testen en editen. Mijn pc vloog bijna het raam uit.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14<?php
Function searchRow($playField, $width, $heigth) {
// Horizontal
for ($o = 1; $o <= $heigth; $o++) {
for ($i = 1; $i <= ($width - 3); $i++) {
if (($playField[$i][$o] != '')
&& ($playField[$i][$o] == $playfield[$i + 1][$o])
&& ($playField[$i][$o] == $playfield[$i + 2][$o])
&& ($playField[$i][$o] == $playfield[$i + 3][$o])) {
return ($playfield[$i][$o] . '-Horizontal');
}
}
return FALSE;
}
}
?>
Natuurlijk keert dit steeds fout terug, ook bij een array volledig bezet met hetzelfde teken![]()
Natuurlijk krijg ik nu geen rij terug.
Assumption is the mother of all fuck ups
[GoT topic extension for Chrome - nu met Quote-to-Quickreply feature!] - [T.net karma monitor]
[Deus Ex: HR] - [Lara Croft and the Guardian Of Light]
Da's WTF nummer 2quote:Michali schreef op vrijdag 16 januari 2009 @ 15:51:
De return FALSE; staat binnen de eerste for loop, dat klopt toch niet?
Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ 5850 1GB
[GoT topic extension for Chrome - nu met Quote-to-Quickreply feature!] - [T.net karma monitor]
[Deus Ex: HR] - [Lara Croft and the Guardian Of Light]
En kijk, dit verbaast me nou helemaal niks dus he. Zelfs met een "optimizer" kon deze string literal niet even ge-interned worden om tot een constant time == te komen... De code laat het iig harstikke hard toe... tijdens compiletime was alles bekend zeg maar, immers krijgt $var niet in de tussentijd nog even een andere variabele toegekend die pas tijdens runtime ofzo bekend zou zijn. Dat doen andere talen toch net even iets beter door gewoon in dergelijke situaties de strings te internen en de vergelijking op "object id's/hashcodes" te laten plaatsvinden. Huilie huilie dus...quote:.oisyn schreef op vrijdag 16 januari 2009 @ 02:02:
after if($var):0.0260169506073 after if($var == true):0.0304319858551 after if($var == "on"):0.0354740619659 after if($var == "Dit is een heel erg lange string!!!1111pppp"):0.0444598197937 after if($var == "Dit is een heel erg lange string!!!1111pppp" (x10)):0.122269153595
Het mooie is, de code in de laatste loop doet een if ($var == $var2) omdat ik geen zin had de string 10x achter elkaar in de code te zetten. Dus om je vraag te beantwoorden: nee, hij doet niet aan string interning.
PHP 5.6.2 mét Zend optimizer. Prutswerk dus.
Je bedoelt PHP.NET?quote:
Kent iemand trouwens een PHP applicatie van meer dan 3 jaar oud, dat nog niet wordt gezien als Legacy-code?
Oh ja, ook minstens 50 KLOC, anders telt het niet als grote applicatie
MBV wijzigde dit bericht 16-01-2009 20:04 (12%)
Reg. datum: 26 november 2008
Op de site:
Amazing, Mike!quote:VS.Php is a Php IDE (integrated development environment) based on Visual Studio IDE. With VS.Php you can design, develop, debug and deploy Php applications within the Visual Studio IDE. VS.Php key features are around providing rich Php editor as well as Smarty editing capabilities. Also is the ability to debug Php scripts locally as well as remotely.
Sintax wijzigde dit bericht 16-01-2009 20:20 (81%)
"Gravitation is not responsible for people falling in love." Albert Einstein
PHP:
| <?php
|
US = the promised land. One day... One day!
.oisyn: [..] Ik kan me geen slechtere zoekterm voorstellen dan "C++ panel". Afgezien van "naveltruitje" oid. [...]
Omines - Snel en gratis juridisch advies
Standeman: Ik wil mijn ballen ook wel doneren hoor, ik doe er toch ook niets meer mee.
Bekendquote:Config schreef op zondag 18 januari 2009 @ 03:16:
*auw auw auw*
PHP:
1
2
3
4
5
6
7
8
9
10
11<?php
Index: 5.1/SugarCE-Full-5.1.0/modules/InboundEmail/InboundEmail.php
===================================================================
--- a/5.1/SugarCE-Full-5.1.0/modules/InboundEmail/InboundEmail.php
+++ b/5.1/SugarCE-Full-5.1.0/modules/InboundEmail/InboundEmail.php
@@ -232,5 +232,5 @@
function mark_deleted($id) {
parent::mark_deleted($id);
- $q = "update inbound_email set groupfolder_id = null";
+ $q = "update inbound_email set groupfolder_id = null WHERE id = $id";
$r = $this->db->query($q);
$this->deleteCache();
?>
Leve PIT-recovery
It was when I was happiest that I longed most. It was on happy days when we were up there on the hills, the three of us, with the wind and the sunshine ...
Kater? Eerst water, de rest komt later
Last.fm profiel
Staat open voor nieuwe uitdaging in omgeving Haarlem (ASP.NET)
De eerste declaratie van $q is toch overschreven door de tweede?
ik ga er even van uit dat voor het aanroepen van deze methode al is gecontrolleerd of de ID geldig is etc..
Het is een diff. Deze patch haalt de regel met een - ervoor weg en plaatst een regel met de + ervoor. Oftewel, de query wordt aangepast want hij was niet zoals bedoeldquote:Webgnome schreef op zondag 18 januari 2009 @ 11:09:
mmm, misschien lees ik er overheen maar er wordt toch alleen maar een entity verwijderd waarvan de groupfolder null is en het ID klopt met datgene wat er is opgegeven. Dat de parent wordt verwijdert is de echte fout (maar dat kan ik niet bepalen aan de hand van de opgegeven code ,ken de context niet ).
De eerste declaratie van $q is toch overschreven door de tweede?
ik ga er even van uit dat voor het aanroepen van deze methode al is gecontrolleerd of de ID geldig is etc..
From Twitter: "For #zf2 you don't need my module for Gedmo Doctrine Extensions integration anymore, you can use Composer for that: http://t.co/RTltxwpR"
Pagina: 1 2 3 4 5 6 7 8 9 10 11 12 ... 84 85 86 87 last



