quote:Op vrijdag 19 september 2014 21:09 schreef wipes66 het volgende:
http://www.reddit.com/r/P(...)ed_in_php_code_so_i/
1 2 3 4 5 6 7 | class voorbeeld { public function lala(){ echo "Hoi" } } voorbeeld::lala(); |
1 2 3 4 5 6 7 | class voorbeeld { static function lala(){ echo "Hoi" } } $voorbeeld = new voorbeeld; $voorbeeld->lala(); |
Een static-methode is handig als de methode niet iets met de klasse zelf hoeft te doen.quote:Op zaterdag 20 september 2014 23:25 schreef Robuustheid het volgende:
Wat is het nut ervan om iets static te definieren?
Als ik het doe:
[ code verwijderd ]
Waar is die static bij function dan voor nodig
En op een andere manier:
[ code verwijderd ]
Wat voor zin heeft static dan nog?
Het eerste geeft een strict warning in PHP. In de meeste OO talen kan het niet eens.quote:Op zaterdag 20 september 2014 23:25 schreef Robuustheid het volgende:
Wat is het nut ervan om iets static te definieren?
Als ik het doe:
[ code verwijderd ]
Waar is die static bij function dan voor nodig
En op een andere manier:
[ code verwijderd ]
Wat voor zin heeft static dan nog?
Hoe bedoel je? Met andere manieren ben ik niet mee bekend.quote:Op zondag 21 september 2014 00:15 schreef robin007bond het volgende:
Overigens is het discutabel of je classes met enkel static methodes wel in een klasse moet stoppen of gewoon in een namespace.
Maar ja, geen OOP.
Gewoon procedureel.quote:Op zondag 21 september 2014 00:24 schreef Robuustheid het volgende:
[..]
Hoe bedoel je? Met andere manieren ben ik niet mee bekend.
Waarom zou je het dan uberhaupt OO maken?quote:Op zondag 21 september 2014 00:08 schreef robin007bond het volgende:
[..]
Een static-methode is handig als de methode niet iets met de klasse zelf hoeft te doen.
Stel dat je bijvoorbeeld een Math-klasse hebt. Is het niet een beetje vreemd om een object Math te hebben om dan pas methodes te kunnen gebruiken voor abs etc.? Dan kun je beter al die Math-methodes static maken.
Even mezelf quoten:quote:Op zondag 21 september 2014 10:07 schreef slacker_nl het volgende:
[..]
Waarom zou je het dan uberhaupt OO maken?
Wellicht dat consistentie een reden is.quote:Op zondag 21 september 2014 00:15 schreef robin007bond het volgende:
Overigens is het discutabel of je classes met enkel static methodes wel in een klasse moet stoppen of gewoon in een namespace.
Maar ja, geen OOP.
Probeer het hier maar: http://sandbox.onlinephpfunctions.com/quote:Op zondag 21 september 2014 10:43 schreef Robuustheid het volgende:
Bedankt voor jullie bijdragen. Het is dus geen valide code, maar wordt desondanks wel uitgevoerd.
Als ik error_reporting(E_ALL | E_STRICT); doe, verschijnt er nog steeds geen waarschuwing als ik bovenstaand code uitvoer?
1 2 3 4 5 6 7 8 9 10 11 | <?php error_reporting(E_ALL | E_STRICT); class voorbeeld { public function lala() { echo "Hoi"; } } voorbeeld::lala(); ?> |
1 2 3 4 5 6 7 8 9 10 11 | <?php class voorbeeld { private $a = 3; public function lala($b) { echo $this->a*$b; } } voorbeeld::lala(3); ?> |
Dat is allemaal erg marginaal. Natuurlijk, als je elke keer instances moet gaan maken in je code om een of andere utility method aan te roepen, dan is dat niet heel efficiënt, maar dat zijn niet de zaken die doorgaans geheugenproblemen veroorzaken.quote:Op zondag 21 september 2014 11:19 schreef raptorix het volgende:
Static heeft volgens mij ook compile en geheugen technisch voordelen, ik vermoed dat als je iets static definieert deze nooit 2 keer in geheugen zal komen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $mm_type="application/octet-stream"; header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Type: " . $mm_type); header("Content-Length: " .(string)(filesize($path)) ); header('Content-Disposition: attachment; filename="'.basename($path).'"'); header("Content-Transfer-Encoding: binary\n"); readfile($path); // outputs the content of the file exit(); ?> |
Ok manquote:Op maandag 22 september 2014 13:09 schreef xaban06 het volgende:
Ik heb een soort van download server gemaakt. PHP script serveert de bestanden. Bestanden zijn tussen de 2GB en 5GB.
Echter stopt de download automatisch na een paar seconde.
[ code verwijderd ]
Je kunt readfile beter niet voor dit soort situaties gebruiken. De gehele file wordt namelijk ingeladen en daarna pas verzonden. Je zult waarschijnlijk al eerder een ‘out of memory’ krijgen.quote:Op maandag 22 september 2014 13:09 schreef xaban06 het volgende:
Ik heb een soort van download server gemaakt. PHP script serveert de bestanden. Bestanden zijn tussen de 2GB en 5GB.
Echter stopt de download automatisch na een paar seconde.
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $file = fopen( "my-file.raw", "rb" ); while ( !feof($file) ) { $chunk = fread( $file, 1024*16 ); echo $chunk; ob_flush(); flush(); } fclose( $file ); ?> |
http://php.net/manual/en/function.readfile.phpquote:Op maandag 22 september 2014 14:52 schreef Aether het volgende:
[..]
Je kunt readfile beter niet voor dit soort situaties gebruiken. De gehele file wordt namelijk ingeladen en daarna pas verzonden. Je zult waarschijnlijk al eerder een ‘out of memory’ krijgen.
Een betere oplossing is om het bestand in kleinere blokken te lezen en deze te verzenden: (niet getest)
[ code verwijderd ]
Dit is denk ik een betere optie:quote:readfile() will not present any memory issues, even when sending large files, on its own. If you encounter an out of memory error ensure that output buffering is off with ob_get_level().
quote:Op maandag 22 september 2014 19:44 schreef slacker_nl het volgende:
[..]
http://php.net/manual/en/function.readfile.php
[..]
Dit is denk ik een betere optie:
http://stackoverflow.com/(...)rve-a-file-using-php
True, maar het is meestal ook best practice qua onderhoudbaarheid, met name voor collega developers die niet altijd even bekend zijn met een code base.quote:Op zondag 21 september 2014 12:37 schreef Monolith het volgende:
[..]
Dat is allemaal erg marginaal. Natuurlijk, als je elke keer instances moet gaan maken in je code om een of andere utility method aan te roepen, dan is dat niet heel efficiënt, maar dat zijn niet de zaken die doorgaans geheugenproblemen veroorzaken.
Juist om wat ik al eerder aangaf. Als je static calls gaat doen naar non-static methods dan 'mag' dat in PHP. Bizarre implementatiebeslissing, maar daar staan de PHP devs wel bekend om.quote:Op dinsdag 23 september 2014 09:53 schreef raptorix het volgende:
[..]
True, maar het is meestal ook best practice qua onderhoudbaarheid, met name voor collega developers die niet altijd even bekend zijn met een code base.
Die warnings stuurt PHP niet voor niks, he.quote:Op dinsdag 23 september 2014 10:00 schreef Monolith het volgende:
[..]
Juist om wat ik al eerder aangaf. Als je static calls gaat doen naar non-static methods dan 'mag' dat in PHP.
Dat weet ik, maar het zou überhaupt niet toegestaan mogen zijn. Het zou moeten resulteren in een fatal error.quote:Op dinsdag 23 september 2014 11:10 schreef Tijn het volgende:
[..]
Die warnings stuurt PHP niet voor niks, he.
Mja, het probleem is dan (zoals zo vaak met PHP) dat een hoop oude applicaties instortenquote:Op dinsdag 23 september 2014 11:54 schreef Monolith het volgende:
[..]
Dat weet ik, maar het zou überhaupt niet toegestaan mogen zijn. Het zou moeten resulteren in een fatal error.
Pech. Dat is meer werk voor ons.quote:Op dinsdag 23 september 2014 12:00 schreef Tijn het volgende:
[..]
Mja, het probleem is dan (zoals zo vaak met PHP) dat een hoop oude applicaties instorten
Ja ik weet dat backwards compatibility de reden is, maar je moet ook ergens een keer een streep trekken. Het probleem is natuurlijk dat ze het OO aspect van de taal later hebben geïntroduceerd en pas redelijk volledig vanaf PHP 5. PHP 4 is weliswaar 'OO', maar miste nog basale zaken als access modifiers.quote:Op dinsdag 23 september 2014 12:00 schreef Tijn het volgende:
[..]
Mja, het probleem is dan (zoals zo vaak met PHP) dat een hoop oude applicaties instorten
Wat dat betreft was PHP Reboot wel een aardig initiatief. Jammer dat het nooit is doorgezet.quote:Op dinsdag 23 september 2014 13:28 schreef KomtTijd... het volgende:
Het zou wat mij betreft helemaal niet gek zijn als ze eens flink gaan snijden/refactoren in de functienamen. Alles wat je weg wilt gooien gewoon per direct deprecaten en over 1 of 2 versies weggooien. Eventueel de laatste versie vóór de grote schoonmaak LTS maken voor de compatibility.
Op zo'n manier? http://doctrine-orm.readt(...)iltering-collectionsquote:Op woensdag 24 september 2014 14:43 schreef KomtTijd... het volgende:
Symfony2'ers:
Ik heb een entity ("Ticket") met een one-to-many relation naar de entity Comment. Kortom een ticket kan meerdere comments hebben. Als ik een ticket opvraag worden de comments hierbij weergegeven.
Een comment kan 'deleted' zijn, dan wil ik deze niet meer weergeven bij de ticket waar hij aan gekoppeld is. Ik wil 'm echter ook niet removen voor het geval hij weer teruggeplaatst wordt.
Hoe krijg ik dat voor elkaar?Ik had mijn hoop gevestigd op het toevoegen van doctrine criteria aan de getComments() functie van de Ticket entity, maar dat helpt niet.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php #Ticket entity public function getComments() { $criteria = Criteria::create() ->where(Criteria::expr()->eq("deleted", false)); return $this->comments->matching($criteria); } public function getAllComments() { return $this->comments; } ?> |
1 2 3 4 5 | <?php $ticket = $this->getDoctrine() ->getRepository('TicketBundle:Ticket') ->find($id); ?> |
Ik ken Symphony en Doctrine niet genoeg om je daar antwoord op te kunnen geven, maar dit soort dingen kun je vaak het best even debuggen middels een fatsoenlijke IDE en in het geval van PHP iets van Xdebug ofzo.quote:Op woensdag 24 september 2014 15:03 schreef KomtTijd... het volgende:
Had gehoopt zoiets te kunnen doen ja
[ code verwijderd ]
maar als ik in de controller de ticket aanroep, wordt die getComments functie helemaal niet aangeroepen.
[ code verwijderd ]
Vage shit.quote:Op woensdag 24 september 2014 15:48 schreef KomtTijd... het volgende:
Krijg nou tieten, als je HTML aanroept ipv JSON werkt die criteria wel. Af en toe word ik moe van die FOSRestBundle.
1 2 3 4 5 | <?php {% for comment in ticket.comments %} // dingen {% endfor %} ?> |
Dan zou ik gewoon zelf een foreach in getComments doen. Is waarschijnlijk nog sneller dan die Criteria.quote:Op donderdag 25 september 2014 00:09 schreef KomtTijd... het volgende:
Ja de HTML gaat via een twig template. Maar dat boeit me niet, 't gaat om de JSON. En ja, krijg wel comments terug in de JSON maar gewoon allemaal dus.
Zoals ik het zie gebruikt Twig een concept analoog aan JavaBeans. D.w.z. als je ticket.comments gebruikt wordt eigenlijk getComments aangeroepen. Is het bij de JSON dan niet zo dat er rechtstreeks een comments field wordt gepakt ipv dat de getComments methode wordt aangeroepen?quote:Op donderdag 25 september 2014 00:09 schreef KomtTijd... het volgende:
Ja de HTML gaat via een twig template. Maar dat boeit me niet, 't gaat om de JSON. En ja, krijg wel comments terug in de JSON maar gewoon allemaal dus.
Dan zou je kunnen proberen om $comments protected of private te maken, wellicht dat er dan wordt gekeken naar een getter.quote:Op donderdag 25 september 2014 00:19 schreef Monolith het volgende:
[..]
Zoals ik het zie gebruikt Twig een concept analoog aan JavaBeans. D.w.z. als je ticket.comments gebruikt wordt eigenlijk getComments aangeroepen. Is het bij de JSON dan niet zo dat er rechtstreeks een comments field wordt gepakt ipv dat de getComments methode wordt aangeroepen?
1 2 3 4 5 6 7 8 | <?php /** * @ORM\OneToMany(targetEntity="Comment", mappedBy="ticket", cascade={"persist"}) * @serializer\Groups({"ticketDetails"}) * @serializer\Accessor(getter="getComments") <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */ protected $comments; ?> |
Haha, ik wilde nog zeggen, als ze JMS gebruiken, kijk dan even in de docs bij annotations.quote:Op donderdag 25 september 2014 00:25 schreef KomtTijd... het volgende:
Good thinking. $comments is al protected en had ik ook al private gemaakt bij wijze van test, haalde niets uit.
Maar ik denk wel dat ik het in deze hoek moet zoeken. De JSON wordt geproduceerd door de JSMSerializer bundle en die kun je weer beinvloeden door annotations bij, jawel, de variables zelf. Niet de getter/setter functies.morgen maar eens naar kijken ofzo. Ik lijk wel gek, hier om half 1 's nachts nog over nadenken
Dat bedoel ik ook met een debugger. Daarmee loop je stap voor stap door je code.quote:Op donderdag 25 september 2014 00:32 schreef KomtTijd... het volgende:
It's not a bug, it's a feature, mate!
De profiler laat (liet) me keurig zien dat de uitgevoerde queries verschillend zijn, maar waaróm dan, dat mag je meestal zelf uitvinden.
Twig kijkt eerst of het een public property is, dan of het een public method is, daarna of er een public method get... is, vervolgens of er een public method is... bestaat en tenslotte of er een public method has... bestaat. De eerste die werkt, wordt gebruikt (en dan wordt de rest uiteraard niet meer gecontroleerd).quote:Op donderdag 25 september 2014 00:19 schreef Monolith het volgende:
[..]
Zoals ik het zie gebruikt Twig een concept analoog aan JavaBeans. D.w.z. als je ticket.comments gebruikt wordt eigenlijk getComments aangeroepen. Is het bij de JSON dan niet zo dat er rechtstreeks een comments field wordt gepakt ipv dat de getComments methode wordt aangeroepen?
Dat verklaart in dezen dan waarom het daar wel werkte. Het field was namelijk protected.quote:Op donderdag 25 september 2014 00:47 schreef Light het volgende:
[..]
Twig kijkt eerst of het een public property is, dan of het een public method is, daarna of er een public method get... is, vervolgens of er een public method is... bestaat en tenslotte of er een public method has... bestaat. De eerste die werkt, wordt gebruikt (en dan wordt de rest uiteraard niet meer gecontroleerd).
Xdebug werkt inderdaad prima.quote:Op donderdag 25 september 2014 00:29 schreef Monolith het volgende:
Daarom, nogmaals, leer gebruik maken van een debugger. Ik weet dat het in de PHP wereld niet gebruikelijk is, maar het maakt je leven zoveel makkelijker.
Netbeans draait op JAVA, onnodig zwaar/groot. Ik gebruik al jaren PHPDesigner (iets van 23MB) en heeft alles wat je nodig hebt en is lekker licht.quote:Op donderdag 25 september 2014 09:17 schreef robin007bond het volgende:
Sowieso vind ik Netbeans een prima IDE voor PHP. Goede autocompletion, je wordt gewaarschuwd als je code niet aan bepaalde conventies doet, je methoden of classes te groot zijn etc.
Ik hoor wel goeie verhalen over PHPStorm. Van dezelfde makers (en ik geloof zelfs afgeleid van) IntelliJ, wat in mijn ogen veruit de beste Java IDE is.quote:Op donderdag 25 september 2014 09:47 schreef remi1986 het volgende:
[..]
Netbeans draait op JAVA, onnodig zwaar/groot. Ik gebruik al jaren PHPDesigner (iets van 23MB) en heeft alles wat je nodig hebt en is lekker licht.
Die schijnt inderdaad ook erg goed te zijn.quote:Op donderdag 25 september 2014 10:19 schreef Djurres het volgende:
Ik gebruik phpstorm, weliswaar een beetje illegaal maar werkt echt fantastisch
Heeft PHPDesigner FTP mogelijkheden?quote:Op donderdag 25 september 2014 09:47 schreef remi1986 het volgende:
[..]
Netbeans draait op JAVA, onnodig zwaar/groot. Ik gebruik al jaren PHPDesigner (iets van 23MB) en heeft alles wat je nodig hebt en is lekker licht.
uiteraard... ook svn, github en al die zooi ...quote:Op donderdag 25 september 2014 10:50 schreef Pakspul het volgende:
[..]
Heeft PHPDesigner FTP mogelijkheden?
Een personal license is "maar" 90 euro.quote:Op donderdag 25 september 2014 10:16 schreef Monolith het volgende:
[..]
Ik hoor wel goeie verhalen over PHPStorm. Van dezelfde makers (en ik geloof zelfs afgeleid van) IntelliJ, wat in mijn ogen veruit de beste Java IDE is.
Kost je (of bij voorkeur je baas) wel ¤180 euro, maar dan heb je ook wat.
quote:Op donderdag 25 september 2014 09:47 schreef remi1986 het volgende:
[..]
Netbeans draait op JAVA, onnodig zwaar/groot. Ik gebruik al jaren PHPDesigner (iets van 23MB) en heeft alles wat je nodig hebt en is lekker licht.
quote:System Requirements
Windows
naja heel simpel. Ik gebruik alleen Windows. Is wat ik al zei lekker licht en heeft alles wat ik nodig heb.quote:Op donderdag 25 september 2014 13:20 schreef KomtTijd... het volgende:
Ik snap niet wat je met een PHP-IDE moet die alleen op windows draait.
Maar ik snap ook dat dat misschien een beetje persoonlijk is
Voor simpel gebruik kun je inderdaad beter zo'n lichtgewicht ding gebruiken.quote:Op donderdag 25 september 2014 13:31 schreef remi1986 het volgende:
[..]
naja heel simpel. Ik gebruik alleen Windows. Is wat ik al zei lekker licht en heeft alles wat ik nodig heb.
Als ik op een server wat moet aanpassen kan ik prima uit de voeten met VIM
Het verlengen van een personal license is maar iets van 44 euro.quote:Op donderdag 25 september 2014 13:14 schreef KomtTijd... het volgende:
[..]
Een personal license is "maar" 90 euro.
En idd bij voorkeur declareer je die bij je baasIk weet niet meer hoe ik ooit zonder PHPStorm heb gekund.
Dat kan nooit rechtsgeldig zijn. Of anders gezegd: al helemaal niet te enforcen.quote:Op donderdag 25 september 2014 19:11 schreef Light het volgende:
[..]
Het verlengen van een personal license is maar iets van 44 euro.
Overigens mag je volgens de licentievoorwaarden zo'n personal license niet declareren.
Oh dat zal dan bij IntelliJ ook wel niet mogen, maar toch doet iedereen bij ons dat. Daar is het bovendien iets van 500 voor de bedrijfslicentie en 240 voor de persoonlijke licentie.quote:Op donderdag 25 september 2014 19:11 schreef Light het volgende:
[..]
Het verlengen van een personal license is maar iets van 44 euro.
Overigens mag je volgens de licentievoorwaarden zo'n personal license niet declareren.
Pittig prijsverschil.quote:Op donderdag 25 september 2014 19:18 schreef Monolith het volgende:
[..]
Oh dat zal dan bij IntelliJ ook wel niet mogen, maar toch doet iedereen bij ons dat. Daar is het bovendien iets van 500 voor de bedrijfslicentie en 240 voor de persoonlijke licentie.
Ze gaan er toch nooit achter komen natuurlijk.
Het is voor jou altijd gunstiger, want hij is van jou en niet van je werkgever. Als je dus weggaat, dan heb je mooi nog een licentie voor jezelf.quote:Op donderdag 25 september 2014 21:30 schreef KomtTijd... het volgende:
Los van het prijsverschil was voor mij een personal license sowieso praktischer, die kan ik tenminste thuis gebruiken. En mijn werkgever gaat de licentie toch niet overdragen aan collega's ofzo.
quote:Op donderdag 25 september 2014 21:35 schreef Monolith het volgende:
[..]
Het is voor jou altijd gunstiger, want hij is van jou en niet van je werkgever. Als je dus weggaat, dan heb je mooi nog een licentie voor jezelf.
Enforcen is wel lastig, da's waar.quote:Op donderdag 25 september 2014 19:16 schreef slacker_nl het volgende:
[..]
Dat kan nooit rechtsgeldig zijn. Of anders gezegd: al helemaal niet te enforcen.
quote:Op donderdag 25 september 2014 21:35 schreef Monolith het volgende:
[..]
Het is voor jou altijd gunstiger, want hij is van jou en niet van je werkgever. Als je dus weggaat, dan heb je mooi nog een licentie voor jezelf.
Hoe dan ook vind ik het een lastige licentievoorwaarde. Je kan mensen niet verbieden iets niet door de baas te laten aanschaffen. En al helemaal niet via licentievoorwaarden.quote:Op vrijdag 26 september 2014 00:32 schreef Light het volgende:
[..]
Enforcen is wel lastig, da's waar.
Ze hebben natuurlijk wel wat meer dan alleen die voorwaarden. Een personal license koop je als privépersoon, dus kun je geen bedrijfsnaam opgeven en komt de licentie op naam van de persoon. Bij een commercial license moet je wel een bedrijfsnaam opgeven en komt de licentie op naam van het bedrijf. Dan is het aan het bedrijf om te bepalen wie met de licentie mag werken.quote:Op vrijdag 26 september 2014 06:32 schreef slacker_nl het volgende:
[..]
Hoe dan ook vind ik het een lastige licentievoorwaarde. Je kan mensen niet verbieden iets niet door de baas te laten aanschaffen. En al helemaal niet via licentievoorwaarden.
Dat is altijd het geval met een goede IDE natuurlijk. Je weet pas wat je mist, wanneer je er daadwerkelijk mee gewerkt hebt.quote:Op vrijdag 26 september 2014 01:27 schreef Crutch het volgende:
PHPStorm is tot nu toe de beste IDE.
En inderdaad, ik snap niet wat ik zonder PS heb gekund.
Maar als ik iets declareer heb ik het gekocht en leg ik de bon bij de baas neer en krijg dat dan later terug. Ik kan dan alsnog een persoonlijke licentie nemen...quote:Op vrijdag 26 september 2014 10:36 schreef Light het volgende:
[..]
Ze hebben natuurlijk wel wat meer dan alleen die voorwaarden. Een personal license koop je als privépersoon, dus kun je geen bedrijfsnaam opgeven en komt de licentie op naam van de persoon. Bij een commercial license moet je wel een bedrijfsnaam opgeven en komt de licentie op naam van het bedrijf. Dan is het aan het bedrijf om te bepalen wie met de licentie mag werken.
Emmet FTWquote:Op vrijdag 26 september 2014 11:20 schreef Monolith het volgende:
[..]
Dat is altijd het geval met een goede IDE natuurlijk. Je weet pas wat je mist, wanneer je er daadwerkelijk mee gewerkt hebt.
Ik heb ook nog wel met pure text-editors (al dan niet met wat syntax highlighting) gewerkt. Alleen al basale ondersteuning voor zaken als error highlighting, code completion, code generation en refactoring zorgt er al voor dat je productiviteit een veelvoud is van je productiviteit zonder al die hulpmiddelen.
De IDE's van JetBrains hebben die functionaliteit bovendien echt heel goed uitgewerkt, met support voor enorm veel verschillende frameworks, al dan niet via plug-ins.
Daarbij hebben ze dan ook nog eens live templates. Als je daar een beetje handig mee wordt, dan levert dat ook weer eens een flinke snelheidswinst op.
Leuk bedacht en heeft zeker zijn toepassingen, maar het gros van de afkortingen biedt niet echt voordelen te opzichte van code completion in IDEs. De multiplications zijn nog wel aardig efficiënt, maar juist dat soort dingen zijn vaak dynamisch en niet statisch.quote:
Ik type nauwelijks nog volledige (s)css:quote:Op vrijdag 26 september 2014 21:18 schreef Monolith het volgende:
[..]
Leuk bedacht en heeft zeker zijn toepassingen, maar het gros van de afkortingen biedt niet echt voordelen te opzichte van code completion in IDEs. De multiplications zijn nog wel aardig efficiënt, maar juist dat soort dingen zijn vaak dynamisch en niet statisch.
Met name die eerste paar zijn nou precies de voorbeelden die ik bedoel die een IDE al wel voor je afvangt middels intelligente code completion.quote:Op vrijdag 26 september 2014 21:52 schreef Crutch het volgende:
[..]
Ik type nauwelijks nog volledige (s)css:
w100% {tab} -> width: 100%
bgc {tab} -> background-color:
fl {tab} -> float: left
HTML-tags:
type gewoon de tag-naam gevolgd door tab en je hebt bijvoorbeeld:
<div></div> met de cursor in het midden om direct je content in te rammen.
Of div.wrapper {tab} -> <div class="wrapper"></div>
Of een simpele pubsf in PHP en je krijgt public static function()
Het houdt niet op hoor, ik heb mijn ziel verkocht aan Emmet.
quote:Op dinsdag 30 september 2014 08:41 schreef mstx het volgende:
Zo irritant he, als een collega gewoon alles klakkeloos doet wat een klant (die geen verstand van databases heeft) zegt. Nu moet ik dus werken in een project waar tabellen gejoind worden op objectnamen ipv de id's. En index is schijnbaar ook een onbekend woord.
sowieso mensen die overal ja op zeggen zonder ooit na te denken over de implicaties. Na 3 weken komt iedereen er achter dat het toch niet kan en daar sta je dan met je begroting.quote:Op dinsdag 30 september 2014 08:41 schreef mstx het volgende:
Zo irritant he, als een collega gewoon alles klakkeloos doet wat een klant (die geen verstand van databases heeft) zegt. Nu moet ik dus werken in een project waar tabellen gejoind worden op objectnamen ipv de id's. En index is schijnbaar ook een onbekend woord.
Indices kun je gewoon toevoegen natuurlijk.quote:Op dinsdag 30 september 2014 08:41 schreef mstx het volgende:
Zo irritant he, als een collega gewoon alles klakkeloos doet wat een klant (die geen verstand van databases heeft) zegt. Nu moet ik dus werken in een project waar tabellen gejoind worden op objectnamen ipv de id's. En index is schijnbaar ook een onbekend woord.
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 | sub external_mail_track_sending_bcc : Tests { my $params = { to => 'foo@example.net', from => 'bar@example.com', cc => 'baz@example.org', bcc => 'fubar@example.com', subject => "Hide 'n seek", }; my $obj = _mail_track_ok; my $msg = $obj->prepare({ %$params, Body => 'This is some content', }); my $message; my $opts; no warnings qw(redefine once); local *Email::Sender::Simple::send = sub { my $self = shift; my $entity = shift; $opts = shift; $message = $entity->stringify(); }; $msg->send; isa_ok(delete $opts->{transport}, "Email::Sender::Transport::SMTP"); is_deeply($opts, { to => $params->{bcc} }, "BCC'ed"); ok($message, 'Sending e-mail'); } |
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | 2014-10-02 09:13:17 6048 [Note] Plugin 'FEDERATED' is disabled. 2014-10-02 09:13:17 6048 [Note] InnoDB: The InnoDB memory heap is disabled 2014-10-02 09:13:17 6048 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions 2014-10-02 09:13:17 6048 [Note] InnoDB: Compressed tables use zlib 1.2.3 2014-10-02 09:13:17 6048 [Note] InnoDB: Not using CPU crc32 instructions 2014-10-02 09:13:17 6048 [Note] InnoDB: Initializing buffer pool, size = 128.0M 2014-10-02 09:13:17 6048 [Note] InnoDB: Completed initialization of buffer pool 2014-10-02 09:13:17 6048 [Note] InnoDB: Highest supported file format is Barracuda. 2014-10-02 09:13:18 6048 [Note] InnoDB: The log sequence numbers 0 and 0 in ibdata files do not match the log sequence number 49463 in the ib_logfiles! 2014-10-02 09:13:18 6048 [Note] InnoDB: Database was not shutdown normally! 2014-10-02 09:13:18 6048 [Note] InnoDB: Starting crash recovery. 2014-10-02 09:13:18 6048 [Note] InnoDB: Reading tablespace information from the .ibd files... 2014-10-02 09:13:18 6048 [Note] InnoDB: Restoring possible half-written data pages 2014-10-02 09:13:18 6048 [Note] InnoDB: from the doublewrite buffer... 2014-10-02 09:13:18 6048 [Warning] InnoDB: Creating foreign key constraint system tables. 2014-10-02 09:13:18 6048 [ERROR] InnoDB: Creation of SYS_FOREIGN and SYS_FOREIGN_COLS has failed with error 57. Tablespace is full. Dropping incompletely created tables. 2014-10-02 09:13:18 11d4 InnoDB: Error: table "SYS_FOREIGN" does not exist in the InnoDB internal InnoDB: data dictionary though MySQL is trying to drop it. InnoDB: Have you copied the .frm file of the table to the InnoDB: MySQL database directory from another database? InnoDB: You can look for further help from InnoDB: http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html 2014-10-02 09:13:18 11d4 InnoDB: Error: table "SYS_FOREIGN_COLS" does not exist in the InnoDB internal InnoDB: data dictionary though MySQL is trying to drop it. InnoDB: Have you copied the .frm file of the table to the InnoDB: MySQL database directory from another database? InnoDB: You can look for further help from InnoDB: http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html 2014-10-02 09:13:18 11d4 InnoDB: Assertion failure in thread 4564 in file dict0crea.cc line 1445 InnoDB: Failing assertion: sys_foreign_err == DB_SUCCESS InnoDB: We intentionally generate a memory trap. InnoDB: Submit a detailed bug report to http://bugs.mysql.com. InnoDB: If you get repeated assertion failures or crashes, even InnoDB: immediately after the mysqld startup, there may be InnoDB: corruption in the InnoDB tablespace. Please refer to InnoDB: http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html InnoDB: about forcing recovery. 07:13:18 UTC - mysqld got exception 0x80000003 ; This could be because you hit a bug. It is also possible that this binary or one of the libraries it was linked against is corrupt, improperly built, or misconfigured. This error can also be caused by malfunctioning hardware. We will try our best to scrape up some info that will hopefully help diagnose the problem, but since we have already crashed, something is definitely wrong and this may fail. key_buffer_size=8388608 read_buffer_size=131072 max_used_connections=0 max_threads=151 thread_count=0 connection_count=0 It is possible that mysqld could use up to key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 67589 K bytes of memory Hope that's ok; if not, decrease some variables in the equation. Thread pointer: 0x0 Attempting backtrace. You can use the following information to find out where mysqld died. If you see no messages after this, something went terribly wrong... 13657d0 mysqld_usbwv8.exe!my_thread_name() 159dd9d mysqld_usbwv8.exe!my_mb_ctype_mb() 1395a4a mysqld_usbwv8.exe!xor_string() 11197f0 mysqld_usbwv8.exe!?ha_initialize_handlerton@@YAHPAUst_plugin_int@@@Z() 1152e0e mysqld_usbwv8.exe!?plugin_lock_by_name@@YAPAUst_plugin_int@@PAVTHD@@PBUst_mysql_lex_string@@H@Z() 1157454 mysqld_usbwv8.exe!?plugin_init@@YAHPAHPAPADH@Z() 111102d mysqld_usbwv8.exe!?init_common_variables@@YAHXZ() 1111d23 mysqld_usbwv8.exe!?win_main@@YAHHPAPAD@Z() 1112287 mysqld_usbwv8.exe!?mysql_service@@YAHPAX@Z() 15988fa mysqld_usbwv8.exe!my_mb_ctype_mb() 75fb338a kernel32.dll!BaseThreadInitThunk() 77df9f72 ntdll.dll!RtlInitializeExceptionChain() 77df9f45 ntdll.dll!RtlInitializeExceptionChain() The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains information that should help you find out what is causing the crash. |
Als het kenteken je ID is zou je hier een PRIMARY KEY van kunnen maken anders een UNIQUE KEY.quote:
Je kunt inderdaad een insert doen met een on duplicate update erin.quote:Op vrijdag 3 oktober 2014 17:08 schreef qu63 het volgende:
Dummie hier
Ben aan t experimenteren met de API van de RDW om alleen een bepaald type voertuig uit hun database te trekken. Dit lukt allemaal prima en opslaan in mijn eigen database ook. Alleen houdt de RDW niet bij wanneer er een record is aangepast. Iedere dag uploaden ze de complete tabel opnieuw. Hoe kan ik nu de ongeveer 10.000 records uit hun API plukken, checken of het kenteken (het enige unieke record) al bestaat en if so, checken of er wijzigingen zijn, en if so de wijzigingen doorvoeren in mijn tabel. Ik kan dan zelf mijn eigen 'updated on' veld wel aanpassen
Iemand tips/trics? Kan dit bijvoorbeeld ook met ON DUPLICATE KEY UPDATE?
-edit- En dan zijn er natuurlijk ook kentekens die uit de databse van de RDW verdwijnen (export, sloop), dan zou ik moeten kijken welke van mijn kentekens niet meer bij de RDW bekend staan, maar met 10.000 records is dat ook best lastig, lijkt me.. Ik heb wel een veld in mijn db voor sloop (ja/nee) en export (ja/nee), dus alleen dat veld aanpassen is voldoende..
dit moet sowieso welquote:Op vrijdag 3 oktober 2014 17:20 schreef Aether het volgende:
[..]
Als het kenteken je ID is zou je hier een PRIMARY KEY van kunnen maken anders een UNIQUE KEY.
Je zou een datumveld kunnen toevoegen wanneer een record in jouw database is aangepast. Records die ouder zijn komen dan niet meer voor in die van de RDW. Dit is ook als archief te gebruiken.
Hoevaak herlaad jij data per dag dan?quote:Op vrijdag 3 oktober 2014 17:35 schreef Monolith het volgende:
Zoals ik het lees kun je net zo goed de database weer leeg kieperen en de nieuwe data erin zetten.
Of is er specifiek een reden in bestaande database records te behouden?
Normaal gesproken niet natuurlijk, maar je moet altijd kijken naar de specifieke use case.quote:Op vrijdag 3 oktober 2014 17:37 schreef totalvamp het volgende:
[..]
Hoevaak herlaad jij data per dag dan?
De database leeggooien is geen goed idee, gewoon updaten is het beste.
Ja alleen als je voorderest geen koppelingen doet in je database kan hetquote:Op vrijdag 3 oktober 2014 17:43 schreef Monolith het volgende:
[..]
Normaal gesproken niet natuurlijk, maar je moet altijd kijken naar de specifieke use case.
Het punt is dat hij elke dag data voor dezelfde set kentekens uit een API trekt. Daarbij moeten dan de verwijderingen, wijzigingen en toevoegingen in hun geheel worden doorgevoerd. Dan is verwijderen en de gehele set opnieuw toevoegen de meest efficiënte en makkelijke optie.
Als je die data wilt gaan koppelen ligt dat weer iets anders, maar de use case is niet echt duidelijk.
Ik heb er andere velden aan toegevoegd die niet in de RDW database staanquote:Op vrijdag 3 oktober 2014 17:35 schreef Monolith het volgende:
Zoals ik het lees kun je net zo goed de database weer leeg kieperen en de nieuwe data erin zetten.
Of is er specifiek een reden in bestaande database records te behouden?
Ja, dattum. Ik kan kijken naar de laatste tennaamstellingen, maar daarmee mis ik bijvoorbeeld of een voertuig nog een geldige APK heeft, als gestolen geregistreerd staat, etc.quote:Op vrijdag 3 oktober 2014 17:47 schreef Monolith het volgende:
Bij voorkeur trek je alleen de mutaties uit die API. Want daar ligt je bottleneck in dit scenario natuurlijk.
Zelfs dat zou je nog in een aparte tabel kunnen zetten en koppelen op kenteken.quote:Op vrijdag 3 oktober 2014 17:47 schreef qu63 het volgende:
[..]
Ik heb er andere velden aan toegevoegd die niet in de RDW database staan
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 | CREATE TABLE IF NOT EXISTS `voertuigen` ( `Updated` int(11) NOT NULL, `Aantalcilinders` int(16) NOT NULL, `Aantalstaanplaatsen` int(16) NOT NULL, `Aantalzitplaatsen` int(16) NOT NULL, `Cilinderinhoud` int(16) NOT NULL, `Datumaanvangtenaamstelling` int(11) NOT NULL, `Datumeersteafgiftenederland` int(11) NOT NULL, `Datumeerstetoelating` int(11) NOT NULL, `Handelsbenaming` varchar(255) NOT NULL, `Hoofdbrandstof` varchar(255) NOT NULL, `Kenteken` varchar(10) NOT NULL, `Merk` varchar(255) NOT NULL, `Milieuclassificatie` varchar(255) NOT NULL, `Vervaldatumapk` int(11) NOT NULL, `Wachtopkeuren` varchar(255) NOT NULL, `Voertuig_ID` int(11) NOT NULL AUTO_INCREMENT, `Bedrijf_ID` int(11) NOT NULL, `EigenarenP` varchar(255) NOT NULL, `EigenarenZ` varchar(255) NOT NULL, `Klasse` varchar(255) NOT NULL, `Categorie` varchar(255) NOT NULL, `CarrosserieOmschrijving` varchar(255) NOT NULL, `Type` varchar(255) NOT NULL, `Variant` varchar(255) NOT NULL, `Uitvoering` varchar(255) NOT NULL, `Typegoedkeuring` varchar(255) NOT NULL, `VervalDatTachograaf` varchar(255) NOT NULL, `TijdAanvangTenaamstelling` varchar(255) NOT NULL, `Gestolen` varchar(255) NOT NULL, `Geexporteerd` varchar(255) NOT NULL, `BijzonderheidTekst` varchar(255) NOT NULL, `Lengte` varchar(255) NOT NULL, `Breedte` varchar(255) NOT NULL, `AantalAssen` varchar(255) NOT NULL, `AantalWielen` varchar(255) NOT NULL, `Wielbasis` varchar(255) NOT NULL, `AfwijkendeMaxSnelheid` varchar(255) NOT NULL, `AfstandVoorzijdeVrtgTotHartkoppeling` varchar(255) NOT NULL, `WAVerzekerd` varchar(255) NOT NULL, PRIMARY KEY (`Voertuig_ID`), UNIQUE KEY `Kenteken` (`Kenteken`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9740 ; |
Ik zoek niet op kenteken, ik zoek op voertuigtype, dus ik weet nooit vantevoren hoeveel records ik terug ga krijgen. Het kunnen er meer, minder of evenveel zijn als vandaag.quote:Op vrijdag 3 oktober 2014 17:43 schreef Monolith het volgende:
[..]
Normaal gesproken niet natuurlijk, maar je moet altijd kijken naar de specifieke use case.
Het punt is dat hij elke dag data voor dezelfde set kentekens uit een API trekt. Daarbij moeten dan de verwijderingen, wijzigingen en toevoegingen in hun geheel worden doorgevoerd. Dan is verwijderen en de gehele set opnieuw toevoegen de meest efficiënte en makkelijke optie.
Als je die data wilt gaan koppelen ligt dat weer iets anders, maar de use case is niet echt duidelijk.
T nadeel is dus dat ik niet weet wanneer de records van de RDW geupdate zijnquote:Op vrijdag 3 oktober 2014 17:20 schreef Aether het volgende:
[..]
Als het kenteken je ID is zou je hier een PRIMARY KEY van kunnen maken anders een UNIQUE KEY.
Je zou een datumveld kunnen toevoegen wanneer een record in jouw database is aangepast. Records die ouder zijn komen dan niet meer voor in die van de RDW. Dit is ook als archief te gebruiken.
Maakt op zich niet zo heel veel uit. Het relevante aspect is dat je de hele dataset via de API opvraagt, niet enkel mutaties bijvoorbeeld.quote:Op vrijdag 3 oktober 2014 17:54 schreef qu63 het volgende:
[..]
Ik zoek niet op kenteken, ik zoek op voertuigtype, dus ik weet nooit vantevoren hoeveel records ik terug ga krijgen. Het kunnen er meer, minder of evenveel zijn als vandaag.
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 45 46 47 48 | CREATE TABLE IF NOT EXISTS `voertuigen_RDW` ( `Updated` int(11) NOT NULL, `Aantalcilinders` int(16) NOT NULL, `Aantalstaanplaatsen` int(16) NOT NULL, `Aantalzitplaatsen` int(16) NOT NULL, `Cilinderinhoud` int(16) NOT NULL, `Datumaanvangtenaamstelling` int(11) NOT NULL, `Datumeersteafgiftenederland` int(11) NOT NULL, `Datumeerstetoelating` int(11) NOT NULL, `Handelsbenaming` varchar(255) NOT NULL, `Hoofdbrandstof` varchar(255) NOT NULL, `Kenteken` varchar(10) NOT NULL, `Merk` varchar(255) NOT NULL, `Milieuclassificatie` varchar(255) NOT NULL, `Vervaldatumapk` int(11) NOT NULL, `Wachtopkeuren` varchar(255) NOT NULL, PRIMARY KEY (`Kenteken`), ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9740 ; CREATE TABLE IF NOT EXISTS `voertuigen_other` ( `Voertuig_ID` int(11) NOT NULL AUTO_INCREMENT, `Bedrijf_ID` int(11) NOT NULL, `EigenarenP` varchar(255) NOT NULL, `EigenarenZ` varchar(255) NOT NULL, `Klasse` varchar(255) NOT NULL, `Categorie` varchar(255) NOT NULL, `CarrosserieOmschrijving` varchar(255) NOT NULL, `Type` varchar(255) NOT NULL, `Variant` varchar(255) NOT NULL, `Uitvoering` varchar(255) NOT NULL, `Typegoedkeuring` varchar(255) NOT NULL, `VervalDatTachograaf` varchar(255) NOT NULL, `TijdAanvangTenaamstelling` varchar(255) NOT NULL, `Gestolen` varchar(255) NOT NULL, `Geexporteerd` varchar(255) NOT NULL, `BijzonderheidTekst` varchar(255) NOT NULL, `Lengte` varchar(255) NOT NULL, `Breedte` varchar(255) NOT NULL, `AantalAssen` varchar(255) NOT NULL, `AantalWielen` varchar(255) NOT NULL, `Wielbasis` varchar(255) NOT NULL, `AfwijkendeMaxSnelheid` varchar(255) NOT NULL, `AfstandVoorzijdeVrtgTotHartkoppeling` varchar(255) NOT NULL, `WAVerzekerd` varchar(255) NOT NULL, `Kenteken` varchar(10) PRIMARY KEY (`Voertuig_ID`), UNIQUE KEY `Kenteken` (`Kenteken`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9740 ; |
Niet helemaal, ik wil ook de voertuigen die gexporteerd/gesloopt zijn behouden.quote:Op vrijdag 3 oktober 2014 18:04 schreef Monolith het volgende:
[..]
Maakt op zich niet zo heel veel uit. Het relevante aspect is dat je de hele dataset via de API opvraagt, niet enkel mutaties bijvoorbeeld.
Wat je dan vervolgens wil, als ik het goed begrijp, is het volgende:
• Voeg rijen toe aan de eigen database voor alle kentekens in de dataset die nog niet in de eigen database stonden
• Verwijder alle rijen uit de eigen database waarbij het kenteken niet voorkomt in de nieuwe dataset
• Update alle informatie voor al bestaande kentekens
Klopt dat?
Zo ja, dan is deze opzet ook een optie:
[ code verwijderd ]
Daarbij kieper je dan bij elke nieuwe dataset uit de API de tabel voertuigen_RDW weer leeg en insert je de gehele dataset.
Als dat de use case is, dan zou ik gewoon voor de insert met on duplicate key update gaan.quote:Op vrijdag 3 oktober 2014 18:06 schreef qu63 het volgende:
[..]
Niet helemaal, ik wil ook de voertuigen die gexporteerd/gesloopt zijn behouden.
Maar dat maakt verder niet uit voor de tabellen geloof ik.
Hoe zou ik de SQL-code dan moeten maken?
INSERT INTO voertuigen (columns) VALUES (values) ON DUPLICATE KEY UPDATE c1=v1, c2=v2, etcquote:Op vrijdag 3 oktober 2014 18:09 schreef Monolith het volgende:
[..]
Als dat de use case is, dan zou ik gewoon voor de insert met on duplicate key update gaan.
Maar dan dus wel mijn tabel splitsen zoals hier Monolith zei? DIG / [PHP/(My)SQL] voor dummies #118quote:Op vrijdag 3 oktober 2014 18:09 schreef slacker_nl het volgende:
Ik zou het volgende doen. reken de md5sum uit van elk dataset. Vergelijk die md5sum (digest) van je eigen DB tegen die van het RDW: Verschil, record updaten/inserten (incl de digest). Geen verschil, volgend record. En dan kan je via on update ook nog een last_modified oid hebben, dan ben je klaar. En date_created, voila. Dan kan je denk ik redelijk snel door je records heen gaan zonder overal afzonderlijk complete sets te vergelijken.
Waarom zou je dat zo vreselijk omslachtig doen?quote:Op vrijdag 3 oktober 2014 18:09 schreef slacker_nl het volgende:
Ik zou het volgende doen. reken de md5sum uit van elk dataset. Vergelijk die md5sum (digest) van je eigen DB tegen die van het RDW: Verschil, record updaten/inserten (incl de digest). Geen verschil, volgend record. En dan kan je via on update ook nog een last_modified oid hebben, dan ben je klaar. En date_created, voila. Dan kan je denk ik redelijk snel door je records heen gaan zonder overal afzonderlijk complete sets te vergelijken.
Nee, dat was meer in de veronderstelling dat je ook wilde verwijderen. Negeer dat maar.quote:Op vrijdag 3 oktober 2014 18:15 schreef qu63 het volgende:
[..]
Maar dan dus wel mijn tabel splitsen zoals hier Monolith zei? DIG / [PHP/(My)SQL] voor dummies #118
Hoezo omslachtig? Je kan anders namelijk niet zien wanneer de laatste wijziging heeft plaatsgevonden.quote:Op vrijdag 3 oktober 2014 18:15 schreef Monolith het volgende:
[..]
Waarom zou je dat zo vreselijk omslachtig doen?
Je kunt in je insert en on update gewoon de curdate() meegeven.quote:Op vrijdag 3 oktober 2014 18:19 schreef slacker_nl het volgende:
[..]
Hoezo omslachtig? Je kan anders namelijk niet zien wanneer de laatste wijziging heeft plaatsgevonden.
Maar als je gewoon klakkeloos importeert zijn de gegevens zonder te checken of de data veranderd is staat curdate altijd op het import-moment.quote:Op vrijdag 3 oktober 2014 18:22 schreef Monolith het volgende:
[..]
Je kunt in je insert en on update gewoon de curdate() meegeven.
Die geeft de API van de RDW zelf al mee, maar dat is het moment van opvragen van de gegevens, niet van de laatste actualisatiequote:Op vrijdag 3 oktober 2014 18:22 schreef Monolith het volgende:
[..]
Je kunt in je insert en on update gewoon de curdate() meegeven.
Ah je bedoelt daadwerkelijke wijzigingen ipv een update met dezelfde data. Ik weet niet of dat vereist is.quote:Op vrijdag 3 oktober 2014 18:25 schreef slacker_nl het volgende:
[..]
Maar als je gewoon klakkeloos importeert zijn de gegevens zonder te checken of de data veranderd is staat curdate altijd op het import-moment.
Dat is wel hoe ik de vraag interpreteerde.quote:Op vrijdag 3 oktober 2014 18:27 schreef Monolith het volgende:
[..]
Ah je bedoelt daadwerkelijke wijzigingen ipv een update met dezelfde data. Ik weet niet of dat vereist is.
quote:Hoe kan ik nu de ongeveer 10.000 records uit hun API plukken, checken of het kenteken (het enige unieke record) al bestaat en if so, checken of er wijzigingen zijn, en if so de wijzigingen doorvoeren in mijn tabel. Ik kan dan zelf mijn eigen 'updated on' veld wel aanpassen
Een update wordt niet uitgevoerd als de data die in de tabel staat hetzelfde is.quote:Op vrijdag 3 oktober 2014 18:25 schreef slacker_nl het volgende:
[..]
Maar als je gewoon klakkeloos importeert zijn de gegevens zonder te checken of de data veranderd is staat curdate altijd op het import-moment.
Bij MySQL wel, ik weet niet hoe andere databases hiermee omgaan.quote:Op vrijdag 3 oktober 2014 18:51 schreef totalvamp het volgende:
[..]
Een update wordt niet uitgevoerd als de data die in de tabel staat hetzelfde is.
Dan heb je daar dus geen last van.
Bovendien geef je de curdate mee bij de update dus dan is ie altijd anders.quote:Op vrijdag 3 oktober 2014 19:00 schreef slacker_nl het volgende:
[..]
Bij MySQL wel, ik weet niet hoe andere databases hiermee omgaan.
Nee bij MySQL niet, letterlijk net getest.quote:Op vrijdag 3 oktober 2014 19:00 schreef slacker_nl het volgende:
[..]
Bij MySQL wel, ik weet niet hoe andere databases hiermee omgaan.
Hij update de values niet, maar hij triggert mogelijk wel de iets als je die update doet.. Wij doen bijv dit: last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP, waardoor de last_modified aanpast na een update. Of de waardes daadwerkelijk zijn aangepast is niet van belang, de call werd gedaan en wordt zo zichtbaar. Dus..
1 2 3 4 5 6 7 8 9 | Veranderd de update tijd niet: INSERT INTO test (name, username) VALUES ('b', 'b') ON DUPLICATE KEY UPDATE name = 'b', username='b' Veranderd hem wel: INSERT INTO test (name, username) VALUES ('b', 'a') ON DUPLICATE KEY UPDATE name = 'b', username='a' |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | CREATE TABLE IF NOT EXISTS `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `username` varchar(255) NOT NULL, `last_update` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; -- -- Gegevens worden uitgevoerd voor tabel `test` -- INSERT INTO `test` (`id`, `name`, `username`, `last_update`) VALUES (1, 'a', 'a', '0000-00-00 00:00:00'), (2, 'b', 'a', '0000-00-00 00:00:00'); |
1 2 3 4 5 6 7 8 9 10 11 | Deze zal niks doen: INSERT INTO test (name, username) VALUES ('a', 'a') ON DUPLICATE KEY UPDATE name = 'a', username='a' Deze wel: INSERT INTO test (name, username) VALUES ('b', 'a') ON DUPLICATE KEY UPDATE name = 'b', username='a' |
Niet alleen DEFAULT, ook ON UPDATE CURRENT_TIMESTAMP.quote:Op vrijdag 3 oktober 2014 19:00 schreef slacker_nl het volgende:
[..]
Bij MySQL wel, ik weet niet hoe andere databases hiermee omgaan.
Hij update de values niet, maar hij triggert mogelijk wel de iets als je die update doet.. Wij doen bijv dit: last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP, waardoor de last_modified aanpast na een update. Of de waardes daadwerkelijk zijn aangepast is niet van belang, de call werd gedaan en wordt zo zichtbaar. Dus..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $columns = implode(", ",array_keys($code)); $escaped_values = array_map(NULL, array_values($code)); $values = implode(", ", $escaped_values); $sql = "SELECT kenteken FROM voertuigen WHERE kenteken='".$item["M:PROPERTIES"]["D:KENTEKEN"]."1'"; $result = mysqli_query($con, $sql); if(mysqli_num_rows($result)>0) { $sql = "UPDATE voertuigen SET Updated='".$item['UPDATED']."', Datumaanvangtenaamstelling='".strtotime($item["M:PROPERTIES"]["D:DATUMAANVANGTENAAMSTELLING"])."', VervaldatumAPK='".strtotime($item["M:PROPERTIES"]["D:VERVALDATUMAPK"])."', Wachtopkeuren='".$item["M:PROPERTIES"]["D:WACHTOPKEUREN"]."' WHERE kenteken='".$item["M:PROPERTIES"]["D:KENTEKEN"]."'"; $query = mysqli_query($con,$sql); } else { $sql = "INSERT INTO `voertuigen` ($columns) VALUES ($values)"; $query = mysqli_query($con,$sql); list($klasse, $category, $EigenarenP, $EigenarenZ, $CarrosserieOmschrijving, $Type, $Variant, $Uitvoering, $Typegoedkeuring, $VervalDatTachograaf, $TijdAanvangTenaamstelling, $Gestolen, $Geexporteerd, $WAVerzekerd, $BijzonderheidTekst, $Lengte, $Breedte, $AantalAssen, $AantalWielen, $Wielbasis, $AfwijkendeMaxSnelheid, $AfstandVoorzijdeVrtgTotHartkoppeling) = get_ovi($item["M:PROPERTIES"]["D:KENTEKEN"]); $sql = "Update voertuigen SET klasse='".$klasse."', Categorie='".$category."', EigenarenP='".$EigenarenP."', EigenarenZ='".$EigenarenZ."', CarrosserieOmschrijving='".$CarrosserieOmschrijving."', Type='".$Type."', Variant='".$Variant."', Uitvoering='".$Uitvoering."', Typegoedkeuring='".$Typegoedkeuring."', VervalDatTachograaf='".strtotime($VervalDatTachograaf)."', TijdAanvangTenaamstelling='".$TijdAanvangTenaamstelling."', Gestolen='".$Gestolen."', Geexporteerd='".$Geexporteerd."', WAVerzekerd='".$WAVerzekerd."', BijzonderheidTekst='".$BijzonderheidTekst."', Lengte='".$Lengte."', Breedte='".$Breedte."', AantalAssen='".$AantalAssen."', AantalWielen='".$AantalWielen."', Wielbasis='".$Wielbasis."', AfwijkendeMaxSnelheid='".$AfwijkendeMaxSnelheid."', AfstandVoorzijdeVrtgTotHartkoppeling='".$AfstandVoorzijdeVrtgTotHartkoppeling."' WHERE Kenteken = '".$item["M:PROPERTIES"]["D:KENTEKEN"]."'"; $query = mysqli_query($con,$sql); ?> |
Tip: gebruik PDO.quote:Op zaterdag 4 oktober 2014 01:26 schreef qu63 het volgende:
Dit lijkt mij nu wel een redelijke oplossing:
[ code verwijderd ]
$con en $code worden eerder al gedefineerd
Waarom?quote:
Als je wilt switchen van database is het veel makkelijker.quote:
Of je gebruikt gewoon de INSERT en dan ON DUPLICATE KEY UPDATEquote:Op zaterdag 4 oktober 2014 01:26 schreef qu63 het volgende:
Dit lijkt mij nu wel een redelijke oplossing:
[ code verwijderd ]
$con en $code worden eerder al gedefineerd
Optimalisatie was de volgende stap jaquote:Op zaterdag 4 oktober 2014 13:36 schreef Monolith het volgende:
Je kunt ook een Stored procedure schrijven en zo zijn er nog 101 opties. Kies gewoon iets dat werkt, aangezien het voor zover ik kan zien toch niet een of ander enorm project is waarbij de architectuur enorm belangrijk is. Hooguit moet je op een gegeven moment naar performance gaan kijken, maar zolang je nog hele datasets uit een API trekt ligt de bottleneck niet bij wat database interacties.
Volgens mij kun je dat allemaal in je .htaccess regelen.quote:Op zaterdag 4 oktober 2014 14:08 schreef pascal08 het volgende:
Ik zit met een vaag probleem. Ik heb een production server waarop ik een website live wil gooien. Ik heb de bestanden in de root van de webserver geüpload.
De folder structure ziet er ongeveer zo uit:
/ root
- application
- system
- public
---- assets
---- index.php
---- .htaccess
Als ik nu naar het domein ga krijg ik de melding dat er geen content geüpload is. Ik snap dat er geen index.php in de root staat en dat dat wel nodig is, maar hoe hou ik dan de private en public content gescheiden? Ik gebruik CodeIgniter trouwens.
Er moet dus ook een .htaccess in de root komen?quote:Op zaterdag 4 oktober 2014 14:10 schreef robin007bond het volgende:
[..]
Volgens mij kun je dat allemaal in je .htaccess regelen.
1 2 3 4 | [..] RewriteEngine On RewriteBase /public/ [..] |
Dat bedacht ik me gisteravond ook, maar toen vond ik een reden om dat niet te doen.quote:Op zaterdag 4 oktober 2014 13:30 schreef totalvamp het volgende:
[..]
Of je gebruikt gewoon de INSERT en dan ON DUPLICATE KEY UPDATE
waarom zou je daar omheen werken met een constructie die alleen maar meer queries oplevert...
De melding is nu weg. Ik heb enkel nog een lege witte pagina nu. Ik heb de bestanden gewoon 1:1 gekopieerd vanuit m'n local environment. Ik snap niet wat er nou fout gaat.quote:Op zaterdag 4 oktober 2014 14:13 schreef pascal08 het volgende:
[..]
Er moet dus ook een .htaccess in de root komen?
[ code verwijderd ]
Zoiets?
Luiheidquote:Op zaterdag 4 oktober 2014 14:30 schreef qu63 het volgende:
[..]
Dat bedacht ik me gisteravond ook, maar toen vond ik een reden om dat niet te doen.
Geen idee meer wat die reden was![]()
Nee, want ik dacht juist eerst aan INSERT ON DUPLICATE UPDATEquote:
Ah, ik weet t al!quote:
Met mysqli kun je ook gewoon parameters binden, en wie switcht er in de praktijk nou echt van database?quote:Op zaterdag 4 oktober 2014 12:29 schreef robin007bond het volgende:
[..]
Als je wilt switchen van database is het veel makkelijker.
Plus er zitten handige dingen in injecties te voorkomen. BindParam etc.
Bij mijn vorige werkgever gebruikte we sqlite voor de testsuite en postgres voor het echte werk. Of je hebt apps waarbij je een db nodig hebt en die moeten werken of je nu mysql, berkely, postgres of Oracle hebt... shit must work yo.quote:Op zaterdag 4 oktober 2014 17:46 schreef mstx het volgende:
[..]
Met mysqli kun je ook gewoon parameters binden, en wie switcht er in de praktijk nou echt van database?
Ik heb het al degelijk wel eens meegemaakt. Switchen van database (van MySQL naar Postgres) en helaas was er geen gebruik gemaakt van PDOquote:Op zaterdag 4 oktober 2014 17:46 schreef mstx het volgende:
[..]
Met mysqli kun je ook gewoon parameters binden, en wie switcht er in de praktijk nou echt van database?
Ja ok, maar hoe zit dat dan met de queries zelf? Moet je dan niet alsnog bepaalde syntax zoals LIMIT...OFFSET aanpassen voor postgres?quote:Op zaterdag 4 oktober 2014 20:04 schreef Rockfire het volgende:
[..]
Ik heb het al degelijk wel eens meegemaakt. Switchen van database (van MySQL naar Postgres) en helaas was er geen gebruik gemaakt van PDO
Jawel, maar als dat alles is is het veel minder werk dan ook nog de code ombouwen naar PDO-gebruikquote:Op zaterdag 4 oktober 2014 20:08 schreef mstx het volgende:
[..]
Ja ok, maar hoe zit dat dan met de queries zelf? Moet je dan niet alsnog bepaalde syntax zoals LIMIT...OFFSET aanpassen voor postgres?
In principe heb je gelijk, maar het ligt er ook aan hoe de applicatie is opgebouwd. Ik maak nu zelf gebruik van mysqli maar ik zou het in een paar minuten kunnen ombouwen naar PDO of iets anders omdat ik het gewoon in een database-classje heb zitten dus ik hoef maar een paar functies aan te passen.quote:Op zaterdag 4 oktober 2014 20:09 schreef Rockfire het volgende:
[..]
Jawel, maar als dat alles is is het veel minder werk dan ook nog de code ombouwen naar PDO-gebruik
Dat regelt de ORM voor ons. Whieeee.quote:Op zaterdag 4 oktober 2014 20:08 schreef mstx het volgende:
[..]
Ja ok, maar hoe zit dat dan met de queries zelf? Moet je dan niet alsnog bepaalde syntax zoals LIMIT...OFFSET aanpassen voor postgres?
Tot op heden geen probleem, maar die kunnen nog komen hoorquote:Op donderdag 2 oktober 2014 21:55 schreef KomtTijd... het volgende:
InnoDB tabellen zou je als het goed is niet moeten kunnen kopiëren door de bestanden in het filesystem te kopiëren. Althans, misschien kan het goed gaan maar het wordt uitdrukkelijk afgeraden en niet ondersteund.
Zoals gezegd, kijk eerst waar de bottleneck precies ligt. Alles in MySql proppen is ook niet ideaal, zeker niet als je later besluit om nog eens van Database technologie te wisselen. Het zou bijvoorbeeld ook best kunnen zijn dat het handiger is om hier een back-end service voor in te richten. PHP is niet bepaald optimaal voor zware berekeningen en daarbij kun je met een dergelijke oplossing gebruik maken van caching. Bovendien is het non-blocking, oftewel, de gebruiker hoeft er niet op te wachten. Een andere oplossingsrichting is bijvoorbeeld het gebruik maken van web workers om in de browser asynchroon iets te laten uitvoeren.quote:Op maandag 6 oktober 2014 23:22 schreef TwenteFC het volgende:
Gewoon even omdat ik graag van input van anderen hou,
Hoe zouden jullie de volgende situatie aanpakken;
Een groothandel met een ~10,000 klanten die regelmatig wat bestellen uit een assortiment van 60,000 producten die zijn onderverdeeld in ongeveer 150 categorieën.
Waarbij er per klant/inkoopgroep korting gegeven kan worden complete groepen, individuele producten, staffelkorting, uitzonderingen binnen groepen waarop geen korting gegeven mag worden, actie periodes waarvoor een andere prijs geldt, kortingen vanaf een bepaald bedrag en kortingen die zowel als een prijsafspraak of als een percentage kunnen worden gegeven en combinaties hiertussen.
Dit werkt op dit moment allemaal nog "on the fly" maar ik merk zelf dat de performance wanneer bijvoorbeeld gechecked moet worden op staffelkortingen die gegeven worden op een combinatie van een merk en een groep niet is wat het zou moeten zijn.
Is het een gek idee om kortingen voor een klant op het moment van het aanmaken van een regel,en bij het wijzigen / aanmaken van een product wordt gecontroleerd of er klanten zijn die in aanmerkingen komen voor korting. op te slaan in een database, zodat deze berekeningen niet constant in de winkelwagen, bij wijze van hoeven plaats te vinden?
Als eerste zou ik uitzoeken waarom die berekeningen zo lang duren en of er niet wat te optimaliseren valt.quote:Op maandag 6 oktober 2014 23:22 schreef TwenteFC het volgende:
Gewoon even omdat ik graag van input van anderen hou,
Hoe zouden jullie de volgende situatie aanpakken;
Een groothandel met een ~10,000 klanten die regelmatig wat bestellen uit een assortiment van 60,000 producten die zijn onderverdeeld in ongeveer 150 categorieën.
Waarbij er per klant/inkoopgroep korting gegeven kan worden complete groepen, individuele producten, staffelkorting, uitzonderingen binnen groepen waarop geen korting gegeven mag worden, actie periodes waarvoor een andere prijs geldt, kortingen vanaf een bepaald bedrag en kortingen die zowel als een prijsafspraak of als een percentage kunnen worden gegeven en combinaties hiertussen.
Dit werkt op dit moment allemaal nog "on the fly" maar ik merk zelf dat de performance wanneer bijvoorbeeld gechecked moet worden op staffelkortingen die gegeven worden op een combinatie van een merk en een groep niet is wat het zou moeten zijn.
Is het een gek idee om kortingen voor een klant op het moment van het aanmaken van een regel,en bij het wijzigen / aanmaken van een product wordt gecontroleerd of er klanten zijn die in aanmerkingen komen voor korting. op te slaan in een database, zodat deze berekeningen niet constant in de winkelwagen, bij wijze van hoeven plaats te vinden?
Das wel balen, anders had het in principe alleen een nieuwe handler gekost.quote:Op zaterdag 4 oktober 2014 20:04 schreef Rockfire het volgende:
[..]
Ik heb het al degelijk wel eens meegemaakt. Switchen van database (van MySQL naar Postgres) en helaas was er geen gebruik gemaakt van PDO
1 | <p>{$prompt_destname} <input type="text" name="{$actionid}input_destname" value="" size="40" maxlength="255"/></p> |
1 | {current_date format="%y%m%d%T"} |
Misschien is de engelse helppage wat duidelijker, mocht je er niet uit komen.quote:(optional) prefix="0" - Een boolean die aangeeft of bestandsnamen een prefix moeten hebben
(optional) prefix_feu="0" - Een boolean parameter die aangeeft dat de prefix van de huidige auteur gebruikt moet worden of, als deze niet opgegeven is, de prefix van de huidige tijd (in dechex formaat)
Noem het dan gewoon has_prefix, prefix_author, dan is het in een keer duidelijk. Naamgeving van dingen.. blergh.quote:Op woensdag 8 oktober 2014 13:12 schreef KomtTijd... het volgende:
uit de documentatie van de uploads module:
[..]
Misschien is de engelse helppage wat duidelijker, mocht je er niet uit komen.
Het is ook niet naar jou toe hoor. Ik zie het in onze eigen code base ook. Ding krijgt een naam ala: user_id terwijl we het over een haar_kleur_id hebben. Argh! Dan heb ik liever dat ze het foo noemen.quote:Op woensdag 8 oktober 2014 13:36 schreef KomtTijd... het volgende:
Ik denk eerder dat de omschrijvingen gewoon brak vertaald zijn, geen zin om het weer te checken gezien dat met 10 seconden trial-and-error ook wel vast te stellen valt.
Van myVar1 t/m myVar392 en myTemporaryVar1 t/m myTemporaryVar921 word ik meestal ook niet echt vrolijk. Eén van de redenen dat ik blij ben dat ik nauwelijks meer met PHP developers te maken heb.quote:Op woensdag 8 oktober 2014 14:00 schreef slacker_nl het volgende:
[..]
Het is ook niet naar jou toe hoor. Ik zie het in onze eigen code base ook. Ding krijgt een naam ala: user_id terwijl we het over een haar_kleur_id hebben. Argh! Dan heb ik liever dat ze het foo noemen.
Dit speelt natuurlijk niet alleen onder PHP-developers, hequote:Op woensdag 8 oktober 2014 15:04 schreef Monolith het volgende:
[..]
Van myVar1 t/m myVar392 en myTemporaryVar1 t/m myTemporaryVar921 word ik meestal ook niet echt vrolijk. Eén van de redenen dat ik blij ben dat ik nauwelijks meer met PHP developers te maken heb.
Nee, maar de kracht van PHP is echter dat het simpel en laagdrempelig. Dat is ook gelijk het probleem. Bijna iedere debiel kan er mee werken en helaas doen ook veel te veel debielen dat.quote:Op woensdag 8 oktober 2014 15:24 schreef Tijn het volgende:
[..]
Dit speelt natuurlijk niet alleen onder PHP-developers, he
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Ik zal je mijn code verder besparen danquote:Op woensdag 8 oktober 2014 15:35 schreef Tijn het volgende:
Ik heb wel het idee dat het mede dankzij de toolset van vandaag de dag (Composer, Symphony etc.) en de ontwikkelingen in de taal (deprecaten van mysql_ functies enzo) de laatste tijd wat beter gesteld is.
Maar om eerlijk te zijn zie ik eigenlijk niet zoveel PHP-code van anderen om echt een idee te hebben van wat mensen over het algemeen doen
Of van die mensen die constant bestaande variabelen OPNIEUW in een andere zetten en dan er uiteindelijk niks mee doenquote:Op woensdag 8 oktober 2014 15:04 schreef Monolith het volgende:
[..]
Van myVar1 t/m myVar392 en myTemporaryVar1 t/m myTemporaryVar921 word ik meestal ook niet echt vrolijk. Eén van de redenen dat ik blij ben dat ik nauwelijks meer met PHP developers te maken heb.
1 2 3 4 | <?php $name = $_POST['name']; echo $name; //WAAAAAAAAAAAAAAAAAAAAAAAAAAAAROM!!!!! |
Voor de wat grotere projecten wel ja, maar het neemt niet weg dat PHP in de basis nog steeds heel beroerd ontworpen is. Zie bijvoorbeeld deze vermakelijke klaagzang.quote:Op woensdag 8 oktober 2014 15:35 schreef Tijn het volgende:
Ik heb wel het idee dat het mede dankzij de toolset van vandaag de dag (Composer, Symphony etc.) en de ontwikkelingen in de taal (deprecaten van mysql_ functies enzo) de laatste tijd wat beter gesteld is.
Maar om eerlijk te zijn zie ik eigenlijk niet zoveel PHP-code van anderen om echt een idee te hebben van wat mensen over het algemeen doen
Het is helemaal niet ontworpen. Het is samengesteld uit ingestuurde patches vanuit de community. Dat is de reden dat het zo inconsistent is, maar dat is ook de reden dat het bijvoorbeeld een van de eerste talen buiten Javascript was die JSON ondersteunde. PHP's makke is ook z'n kracht, namelijk dat het kan zijn wat de mensen willen dat het is.quote:Op woensdag 8 oktober 2014 16:33 schreef Monolith het volgende:
[..]
het neemt niet weg dat PHP in de basis nog steeds heel beroerd ontworpen is
Dat is geen excuus natuurlijk. Legio projecten werken met community contributions. Dat betekent echter niet dat elke wijziging blind geaccepteerd wordt of dat er geen hele heldere eisen kunnen worden gesteld waar de bijdragen aan moeten voldoen.quote:Op woensdag 8 oktober 2014 16:38 schreef Tijn het volgende:
[..]
Het is helemaal niet ontworpen. Het is samengesteld uit ingestuurde patches vanuit de community. Dat is de reden dat het zo inconsistent is, maar dat is ook de reden dat het bijvoorbeeld een van de eerste talen buiten Javascript was die JSON ondersteunde.
Zoals ik al zei. Iedere debiel kan het in principe gebruiken, dat is zowel een voordeel als een nadeel. Voor mij als developer toch voornamelijk een nadeel.quote:PHP's makke is ook z'n kracht, namelijk dat het kan zijn wat de mensen willen dat het is.
Klopt. Op mijn werk is het Perl en JS (angular) wat de klok slaat.quote:Op woensdag 8 oktober 2014 15:24 schreef Tijn het volgende:
[..]
Dit speelt natuurlijk niet alleen onder PHP-developers, he
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Maar meestal hebben die projecten wel iemand aan het hoofd die de baas is en een visie heeft. Dat is er bij PHP niet. Niemand is de baas en er is geen plan over wat PHP moet zijn. Het is gewoon wat het is.quote:Op woensdag 8 oktober 2014 16:46 schreef Monolith het volgende:
[..]
Dat is geen excuus natuurlijk. Legio projecten werken met community contributions. Dat betekent echter niet dat elke wijziging blind geaccepteerd wordt of dat er geen hele heldere eisen kunnen worden gesteld waar de bijdragen aan moeten voldoen.
Misschien, hoewel je je met kwaliteit wel kunt onderscheiden van de meute. Ik denk dat het voor de wereld als geheel positief is dat er een populaire laagdrempelige programmeertaal bestaat die makkelijk is in te zetten voor het web.quote:Zoals ik al zei. Iedere debiel kan het in principe gebruiken, dat is zowel een voordeel als een nadeel. Voor mij als developer toch voornamelijk een nadeel.
Je hoeft geen echte centrale leider met een visie te hebben hoor. En er is wel degelijk een PHP team. Releases zijn natuurlijk centraal geregeld. Ik heb op PHP conferenties ook vaak genoeg smeekbedes van ze gehoord om ook wat bij te dragen. Op de vraag waarom de grotere partijen als facebook dat niet doen hadden ze dan niet echt een bevredigend antwoord.quote:Op woensdag 8 oktober 2014 18:36 schreef Tijn het volgende:
[..]
Maar meestal hebben die projecten wel iemand aan het hoofd die de baas is en een visie heeft. Dat is er bij PHP niet. Niemand is de baas en er is geen plan over wat PHP moet zijn. Het is gewoon wat het is.
Oh het voldoet prima voor simpele webtoepassingen. Wil je meer performance dan moet je toch zoals facebook wel je eigen compilers gaan schrijven.quote:Misschien, hoewel je je met kwaliteit wel kunt onderscheiden van de meute. Ik denk dat het voor de wereld als geheel positief is dat er een populaire laagdrempelige programmeertaal bestaat die makkelijk is in te zetten voor het web.
Wat is eigenlijk jouw mening over Python + Django?quote:Op woensdag 8 oktober 2014 18:47 schreef Monolith het volgende:
[..]
Je hoeft geen echte centrale leider met een visie te hebben hoor. En er is wel degelijk een PHP team. Releases zijn natuurlijk centraal geregeld. Ik heb op PHP conferenties ook vaak genoeg smeekbedes van ze gehoord om ook wat bij te dragen. Op de vraag waarom de grotere partijen als facebook dat niet doen hadden ze dan niet echt een bevredigend antwoord.
[..]
Oh het voldoet prima voor simpele webtoepassingen. Wil je meer performance dan moet je toch zoals facebook wel je eigen compilers gaan schrijven.
En als je niet zoals facebook groeit vanuit een hobby project dan begin je voor Enterprise level applicaties gewoon gelijk met bijvoorbeeld Java.
Dat is wel interessant, ja. Je zou zeggen dat grote partijen als Facebook, Wikimedia, Wordpress etc. er veel baat bij hebben om aan PHP mee te bouwen.quote:Op woensdag 8 oktober 2014 18:47 schreef Monolith het volgende:
[..]
Ik heb op PHP conferenties ook vaak genoeg smeekbedes van ze gehoord om ook wat bij te dragen. Op de vraag waarom de grotere partijen als facebook dat niet doen hadden ze dan niet echt een bevredigend antwoord.
nee maar wel aan de toepassing. Het is íetsquote:Op woensdag 8 oktober 2014 19:20 schreef Tijn het volgende:
[..]
Maar leveren ze daarmee een bijdrage aan de codebase van PHP?
Misschien werkt het al prima en zat het probleem vooral bij performance wat Facebook dus met hiphop heeft opgelost.quote:Op woensdag 8 oktober 2014 19:06 schreef Tijn het volgende:
[..]
Dat is wel interessant, ja. Je zou zeggen dat grote partijen als Facebook, Wikimedia, Wordpress etc. er veel baat bij hebben om aan PHP mee te bouwen.
Dit soort dingen kom ik inderdaad ook wel eens tegen, godsgruwelijk irritant. Wat ook erg vervelend is wanneer mensen vreselijk inconsistente namen verzinnen.quote:Op woensdag 8 oktober 2014 14:00 schreef slacker_nl het volgende:
[..]
Het is ook niet naar jou toe hoor. Ik zie het in onze eigen code base ook. Ding krijgt een naam ala: user_id terwijl we het over een haar_kleur_id hebben. Argh! Dan heb ik liever dat ze het foo noemen.
Is daar geen fatsoenlijke tooling voor? Ik develop met name in c# en voor visual studio gebruiken we resharper, als ik daar een variable definieer die niet gebruikt word begint die gelijk te bokken, net zoals als een Variabele mogelijk niet aan confentions voldoet.quote:Op woensdag 8 oktober 2014 16:23 schreef totalvamp het volgende:
[..]
Of van die mensen die constant bestaande variabelen OPNIEUW in een andere zetten en dan er uiteindelijk niks mee doen
[ code verwijderd ]
In elke taal kun je prima programmeren, echter als je taal de basis al niet afdwingt dan is de kans op brokken groot, daarom snap ik niet waarom mensen altijd maar worden aangezet om te beginnen met PHP en of Javascript, terwijl dat wel de slechtste talen zijn om te leren developen.quote:Op woensdag 8 oktober 2014 15:27 schreef Monolith het volgende:
[..]
Nee, maar de kracht van PHP is echter dat het simpel en laagdrempelig. Dat is ook gelijk het probleem. Bijna iedere debiel kan er mee werken en helaas doen ook veel te veel debielen dat.
Je kunt prima programmeren in PHP, hoewel de taal zelf al wel enorm slordig en chaotisch is, maar het gebeurt veel te weinig.
Werk je toevallig voor booking.comquote:Op woensdag 8 oktober 2014 17:04 schreef slacker_nl het volgende:
[..]
Klopt. Op mijn werk is het Perl en JS (angular) wat de klok slaat.
van die mensen die onzinnige comments maken waar je niks aan hebt zijn ook irritantquote:Op woensdag 8 oktober 2014 16:23 schreef totalvamp het volgende:
[..]
Of van die mensen die constant bestaande variabelen OPNIEUW in een andere zetten en dan er uiteindelijk niks mee doen
[ code verwijderd ]
Nee, maar wel in Amsterdam. Perlhoofdstad van Nederlandquote:Op donderdag 9 oktober 2014 01:58 schreef raptorix het volgende:
[..]
Werk je toevallig voor booking.com?
Edit: Ik ben dement, had je dit al eerder gevraagt
Juist vanwege de laagdrempeligheid en als je in de praktijk wilt leren dan is dat lekke makkelijk.quote:Op donderdag 9 oktober 2014 01:57 schreef raptorix het volgende:
[..]
In elke taal kun je prima programmeren, echter als je taal de basis al niet afdwingt dan is de kans op brokken groot, daarom snap ik niet waarom mensen altijd maar worden aangezet om te beginnen met PHP en of Javascript, terwijl dat wel de slechtste talen zijn om te leren developen.
javascript is fucking baas. Prima instapper juist.quote:Op donderdag 9 oktober 2014 01:57 schreef raptorix het volgende:
[..]
In elke taal kun je prima programmeren, echter als je taal de basis al niet afdwingt dan is de kans op brokken groot, daarom snap ik niet waarom mensen altijd maar worden aangezet om te beginnen met PHP en of Javascript, terwijl dat wel de slechtste talen zijn om te leren developen.
Het probleem met Javascript is dat je echt heel goed moet weten hoe de taal werkt voordat je er goed mee aan de slag kunt. Er zijn heel veel dingen die stilzwijgend gebeuren en niet altijd even logisch zijn. Ik denk dat een beginner zich vooral moet concentreren op hoe programmeren überhaupt werkt en dan zijn de quirks van JS eigenlijk onnodige ballast.quote:Op donderdag 9 oktober 2014 09:00 schreef n8n het volgende:
[..]
javascript is fucking baas. Prima instapper juist.
quote:Op donderdag 9 oktober 2014 09:00 schreef n8n het volgende:
[..]
javascript is fucking baas. Prima instapper juist.
1 2 | console.log(0.4 + 0.3); console.log(0.4 + 0.2); |
Dat floats niet precies zijn ligt niet aan Javascript, dat komt door je CPU. Elke programmeertaal heeft hier last van.quote:Op donderdag 9 oktober 2014 09:15 schreef Monolith het volgende:
[..]
[ code verwijderd ]
Wat zie je in de console als je dit uitvoert?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | int main (int argv, char* argc[]) { if(0.4 + 0.3 == 0.7) { printf("0.4 + 0.3 = 0.7\r\n"); } else { printf("wut?\r\n"); } if(0.4 + 0.2 == 0.6) { printf("0.4 + 0.2 = 0.6\r\n"); } else { printf("wut?\r\n"); } return EXIT_SUCCESS; } |
1 2 | 0.4 + 0.3 = 0.7 wut? |
Lekker BASH coden!quote:Op donderdag 9 oktober 2014 09:58 schreef slacker_nl het volgende:
Ik zou juist beginnen met shell scriptjes...
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |