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 baas Ik 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 het alhoewel kentekens altijd hetzelfde blijven natuurlijk.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.
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 zijn . Ik zou alle 10k records zelf moeten controleren op wijzigingen, en dan pas wel of niet aan mijn database toevoegen.quote: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
Wat is PDO?quote:
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.
http://bit.ly/1uJOkmdquote:
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?
Luiheid ?quote: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.
Maar leveren ze daarmee een bijdrage aan de codebase van PHP?quote:
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.com ?quote: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...
quote:Op donderdag 9 oktober 2014 10:03 schreef Tijn het volgende:
De beste programmeercursus die ik ooit gevolgd heb begon met assembly en richtte zich daarna op C. Ik denk dat dat eigenlijk het beste pad is voor beginners.
Nee. Als je in de praktijk aan de slag wil, kun je toch niet om objecten heen.quote:Op donderdag 9 oktober 2014 10:04 schreef robin007bond het volgende:
[..]
Ben je niet bang dat ze in het procedurele blijven hangen?
Nou ja, helaas wordt er nog altijd vandaag de dag enkel procedureel in PHP geprogrammeerd. Gelukkig lijkt dat steeds minder te worden, maar toch.quote:Op donderdag 9 oktober 2014 10:05 schreef Tijn het volgende:
[..]
Nee. Als je in de praktijk aan de slag wil, kun je toch niet om objecten heen.
Met al die frameworks tegenwoordig zal dat wel meevallen toch?quote:Op donderdag 9 oktober 2014 10:10 schreef robin007bond het volgende:
[..]
Nou ja, helaas wordt er nog altijd vandaag de dag enkel procedureel in PHP geprogrammeerd. Gelukkig lijkt dat steeds minder te worden, maar toch.
als er iets aids is... Ik heb PHP op mijn router geïnstalleerd om niet te hoeven bashen.quote:Op donderdag 9 oktober 2014 09:58 schreef slacker_nl het volgende:
Ik zou juist beginnen met shell scriptjes...
Ik zit nu op het punt dat ik problemen heb met uploaden vanaf mobiel. Selecteren van bestanden gaat perfect tot ik het bestand ga uploaden. Bij iPhone zie ik een preview maar wordt het bestand niet geupload met uiteindelijk een timeout en bij HTC geeft ie een foutmelding wat betreft de extentie (die ontbreekt volgens mij).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 probleem is dat je dan nog steeds vaak dit soort zaken krijgt:quote:Op donderdag 9 oktober 2014 10:11 schreef Tijn het volgende:
[..]
Met al die frameworks tegenwoordig zal dat wel meevallen toch?
Hoe dan ook: liever iemand die goede procedurele code schrijft, dan iemand die maar wat aanrommelt met objecten.
1 2 3 4 5 6 7 8 9 10 11 12 | <?php public class myController { @RequestMapping("/product/@id") public function loadProductPage() { //IK PLEUR GEWOON LEKKER AL M'N CODE HIERNEER, //WANT VAN DESIGN PATTERNS OF OO PRINCIPLES HEB IK NOG NOOIT GEHOORD. } } ?> |
1 | "/^[a-zA-Z\d-]+$/" |
Doe gewoon lekker "/^\w+$/" ben je meteen klaar.quote:Op donderdag 9 oktober 2014 16:27 schreef xaban06 het volgende:
Ik wil met preg_match checken op letters, cijfers en -. Dat doe ik met:
[ code verwijderd ]
Het werkt, maar klopt het ook?
En wat moet het precies matchen?quote:Op donderdag 9 oktober 2014 16:27 schreef xaban06 het volgende:
Ik wil met preg_match checken op letters, cijfers en -. Dat doe ik met:
[ code verwijderd ]
Het werkt, maar klopt het ook?
Het moet altijd letters en cijfers bevatten, niet hoofdlettergevoelig. Er mag een - voorkomen, maar hoeft niet altijd. Buiten dit mag er niks anders in voorkomen.quote:Op donderdag 9 oktober 2014 16:50 schreef Hoplahopla het volgende:
[..]
En wat moet het precies matchen?
ik zou nog wel even een \ voor die laatste - zitten. In principe is het zo geldig, maar bijvoorbeeld iets als /^[abcde-jklmn]+$/ matcht niet op a-, /^[abcde\-jklmn]+$/ wel.quote:Op donderdag 9 oktober 2014 16:27 schreef xaban06 het volgende:
Ik wil met preg_match checken op letters, cijfers en -. Dat doe ik met:
[ code verwijderd ]
Het werkt, maar klopt het ook?
Nee, want dan heb je - niet.quote:Op donderdag 9 oktober 2014 16:50 schreef Hoplahopla het volgende:
[..]
Doe gewoon lekker "/^\w+$/" ben je meteen klaar.
Het klopt, maar ik zou het [\w-]+ doen, of [[:alnum:]-]+ en misschien zelfs: [\p{Alnum}-] (Unicode).quote:Op donderdag 9 oktober 2014 16:27 schreef xaban06 het volgende:
Ik wil met preg_match checken op letters, cijfers en -. Dat doe ik met:
[ code verwijderd ]
Het werkt, maar klopt het ook?
quote:Op donderdag 9 oktober 2014 15:44 schreef Monolith het volgende:
[..]
Het probleem is dat je dan nog steeds vaak dit soort zaken krijgt:
[ code verwijderd ]
Heiden. Shell scriptjes zijn zo geniaal tof vet simpel. Ik zou echt geen PHP willen gebruiken daarvoor. Maar goed, ik schrijf in Perl, dan zit er ook een kronkel in je hoofd.quote:Op donderdag 9 oktober 2014 10:20 schreef KomtTijd... het volgende:
[..]
als er iets aids is... Ik heb PHP op mijn router geïnstalleerd om niet te hoeven bashen.
Maar underscore zit toch ook in \w ?quote:Op donderdag 9 oktober 2014 17:34 schreef slacker_nl het volgende:
[..]
Het klopt, maar ik zou het [\w-]+ doen, of [[:alnum:]-]+ en misschien zelfs: [\p{Alnum}-] (Unicode).
Frameworks zijn handig, echter als je een framework zomaar gebruikt zonder de onderliggende basis te kennen is het vragen om problemen, zie je veel met JQuery, mensen zien vaak niet in dat je onderliggend gewoon DOM transformaties aan het doen bent, vandaar dat performance vaak dramatisch wordquote:Op donderdag 9 oktober 2014 10:11 schreef Tijn het volgende:
[..]
Met al die frameworks tegenwoordig zal dat wel meevallen toch?
Hoe dan ook: liever iemand die goede procedurele code schrijft, dan iemand die maar wat aanrommelt met objecten.
Een bijverschijnsel is dat je het 100x meldt?quote:Op donderdag 9 oktober 2014 17:44 schreef slacker_nl het volgende:
[..]
Heiden. Shell scriptjes zijn zo geniaal tof vet simpel. Ik zou echt geen PHP willen gebruiken daarvoor. Maar goed, ik schrijf in Perl, dan zit er ook een kronkel in je hoofd.
Ja. Maar daarom de POSIX alnum en/of unicode variant.quote:Op donderdag 9 oktober 2014 20:28 schreef xaban06 het volgende:
[..]
Maar underscore zit toch ook in \w ?
Scheer je weg uit het PHP-topic.quote:Op donderdag 9 oktober 2014 17:44 schreef slacker_nl het volgende:
[..]
Heiden. Shell scriptjes zijn zo geniaal tof vet simpel. Ik zou echt geen PHP willen gebruiken daarvoor. Maar goed, ik schrijf in Perl, dan zit er ook een kronkel in je hoofd.
1 | number_format(100/$bar->foo, 1); |
Code die hier staat geeft bij mij gewoon direct 29.4 hoor.quote:Op vrijdag 10 oktober 2014 01:07 schreef xaban06 het volgende:
[ code verwijderd ]
Hij lijkt de decimalen te negeren van $bar->foo.
Als $bar->foo bijvoorbeeld 3.4 is krijg ik als resultaat 33.3, hij rond de 3.4 dus af naar 3 voordat hij rekent.
Hoe komt dat en hoe op te lossen?
/edit
Nevermind, opgelost. Moest er een string van maken
Een van de weinige bedrijven waar nog het een en ander met Perl gedaan wordt, denk ik.quote: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.
Valt mee. Krijg geregeld aanbiedingen van head hunters/recruiters.quote:Op vrijdag 10 oktober 2014 23:11 schreef Light het volgende:
[..]
Een van de weinige bedrijven waar nog het een en ander met Perl gedaan wordt, denk ik.
1 2 3 | <?php date_format(new DateTime($test->datum), 'd F Y'); ?> |
quote:Op zaterdag 11 oktober 2014 07:32 schreef xaban06 het volgende:
[ code verwijderd ]
Wordt weergegeven als: 27 January 2014
Dit wil ik vertalen naar het Nederlands, dus: 27 januari 2014
Volgens mij moet dit met setlocale(LC_TIME, "nl_NL"); + strftime();
Ik kom er echter niet uit om strftime(); te gebruiken zonder een extra regel hoeven te gebruiken. Of ontkom ik daar niet aan?
1 2 3 4 5 6 7 8 9 10 | date_default_timezone_set("Europe/Amsterdam"); # Ik zet alles om naar NL, jij alleen je tijd. Pick any. setlocale(LC_ALL, array( 'nl_NL.utf8', 'nl_NL@euro', 'nl_NL.iso885915@euro', 'nl_NL.iso88591', 'nl_NL', 'POSIX', )); |
1 2 | setlocale(LC_TIME, "de_DE"); //only necessary if the locale isn't already set $formatted_time = strftime("%a %e.%l.%Y", $mytime->getTimestamp()) |
Volgens mij ben ik onduidelijk geweest met mijn vraagquote:
1 2 3 | <?php date_format(new DateTime($test->datum), 'd F Y'); ?> |
Dat zou ik die strtotime weglaten en gelijk $test->datum->getTimestamp doen.quote:
1 2 3 4 5 6 7 8 9 10 11 | <?php function showPage($page) { $inc = "inc/"; include $inc .'header-html.php'; include $inc ."$page"; include $inc .'footer-html.php'; } ?> |
1 2 3 4 5 6 7 8 9 | <?php ob_start(); include 'blog.php'; // Zet ook de meta/title objecten $content = ob_get_clean(); include 'header-html.php'; echo $content; include 'footer-html.php'; ?> |
Als ik het goed begrijp alles wat tussen ob_start(); en ob_get_clean(); staat wordt niet verzonden, maar vastgehouden in een buffer? Tot dat je het zelf echo'd? Maar je kan de data die worden genereerd in je buffer wel gewoon gebruiken zonder te verzenden?quote:Op zondag 12 oktober 2014 13:54 schreef papernote het volgende:
Zie http://php.net/manual/en/function.include.php en http://php.net/manual/en/language.variables.scope.php
Als je include aanroept, dan heb je in het geïncludeerde bestand de beschikking over de variablen die binnen scope vallen op de regel van de include. Dus in jouw geval: alle variabelen die binnen de functie showPage beschikbaar zijn. Daar vallen variabelen uit blog.php/contact.php waarschijnlijk niet onder.
Overigens kun je jouw probleem wellicht beter oplossen middels output buffering. Voorbeeld:
[ code verwijderd ]
Geen ervaring mee. Ik doe het in mijn vrije tijd en helaas te weinig tijd om het allemaal te leren.quote:Op zondag 12 oktober 2014 14:24 schreef slacker_nl het volgende:
Maar om dit soort problemen te voorkomen hebben we toch templating engines?
Juist als je er weinig tijd in wil steken zou ik gebruik maken van bestaande systemen dan zelf iets in elkaar te gaan rommelen.quote:Op zondag 12 oktober 2014 14:30 schreef xaban06 het volgende:
[..]
Geen ervaring mee. Ik doe het in mijn vrije tijd en helaas te weinig tijd om het allemaal te leren.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php foreach($xml->messagebody->order->mobilenumbers as $nummer) { foreach ( $nummer->number as $value ) { echo "Nummer: " . $value . "<br /><br />"; } } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?xml version="1.0" encoding="UTF-8"?> <mobile_orderdetail_ack xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <messageheader> <messagetype>mobile_orderdetail_ack</messagetype> <messageversion>01</messageversion> <timestamp>2014-10-13T15:28:04+02:00</timestamp> <reference>abchenkdetank</reference> <requestid>12345-REQUEST-ID</requestid> </messageheader> <messagebody> <order> <general> <customer>Klantnaam</customer> <orderdate>2014-06-24</orderdate> <msub>msub1337</msub> </general> <mobilenumbers> <number>0612345678</number> </mobilenumbers> </orders> </order> </messagebody> </mobile_orderdetail_ack> |
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 | <?xml version="1.0" encoding="UTF-8"?> <mobile_orderdetail_ack xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <messageheader> <messagetype>mobile_orderdetail_ack</messagetype> <messageversion>01</messageversion> <timestamp>2014-10-13T15:28:04+02:00</timestamp> <reference>abchenkdetank</reference> <requestid>12345-REQUEST-ID</requestid> </messageheader> <messagebody> <order> <general> <customer>Klantnaam</customer> <orderdate>2014-06-24</orderdate> <msub>msub1337</msub> </general> <mobilenumbers> <number>0612345678</number> <number>0612341234</number> <number>0687654321</number> </mobilenumbers> </orders> </order> </messagebody> </mobile_orderdetail_ack> |
Kan dat niet korter?quote:Op maandag 13 oktober 2014 15:42 schreef wobbel het volgende:
Hoe krijg ik van onderstaande XML alle nummers in een array? Soms zijn het 10 nummers, soms is het er maar 1....
Met simplexml_load_string weet ik niet hoe ik hiervan een array moet bakken waar ik vervolgens iets mee kan ik kan dan niet met een foreach loopen door de nummers bijvoorbeeld
Na het laden van simplexml_load_string kan ik er wel een array van printen met print_r ( $xml->messagebody->order->mobilenumbers ); maar dan kan ik er geen foreachje mee doen
[update]
Op de volgende manier is het gelukt. Is dit netjes of is dit om te janken?
[ code verwijderd ]
Voorbeeld met 1 nummer
[ code verwijderd ]
Voorbeeld met 3 nummers
[ code verwijderd ]
1 2 3 4 5 | <?php foreach($xml->messagebody->order->mobilenumbers->number as $value ) { echo "Nummer: " . $value . "<br /><br />"; } ?> |
Dat ligt eraan, als mobilenumbers een scalar value teruggeeft is jouw voorbeeld goed, maar als ie in list-context iets teruggeeft gaat het fout, want dat zit je op een lijst ->number uit te voeren en volgens mij kent een php array geen 'number' method.quote:Op maandag 13 oktober 2014 17:53 schreef papernote het volgende:
[..]
Kan dat niet korter?
[ code verwijderd ]
edit: je voorbeeld XML is invalid (er staat een </orders> die daar niet hoort).
Dat "number" is een onderdeel van de XML, geen PHP aanroep. Zie de voorbeeld XML in de post van wobbel. Mijn code werkt op beide voorbeelden (na de aanpassing van de edit).quote:Op maandag 13 oktober 2014 18:07 schreef slacker_nl het volgende:
[..]
Dat ligt eraan, als mobilenumbers een scalar value teruggeeft is jouw voorbeeld goed, maar als ie in list-context iets teruggeeft gaat het fout, want dat zit je op een lijst ->number uit te voeren en volgens mij kent een php array geen 'number' method.
Mogelijk kan je array_map gebruiken, http://stackoverflow.com/(...)rray-using-array-map
1 2 | REPLACE INTO tabel(naam,stad,leeftijd) VALUES('Jan','Rotterdam','18') |
1 2 | REPLACE INTO tabel(naam,stad,leeftijd) VALUES('Jan','Amsterdam','18') |
1 2 | REPLACE INTO tabel(naam,stad,leeftijd) VALUES('Jan','Rotterdam','20') |
Waar ik over val is niet bestaand zie ik. Ik vond het nogal vreemd dat je $xml->mobilenumbers->number doet en dat ie dan over alle mobile numbers loopt. Daar had ik namelijk een lijst verwacht. Maar kennelijk is dat niet zo zie ik hier.quote:Op maandag 13 oktober 2014 18:42 schreef papernote het volgende:
[..]
Dat "number" is een onderdeel van de XML, geen PHP aanroep. Zie de voorbeeld XML in de post van wobbel. Mijn code werkt op beide voorbeelden (na de aanpassing van de edit).
Of begrijp ik je niet goed?
1 2 3 4 5 6 7 8 9 10 | SELECT * FROM permissions LEFT JOIN user_permissions ON permissions.id = user_permissions.permission_id LEFT JOIN users ON user_permissions.user_id = users.id WHERE permissions.name = 'name.of.permission' AND users.id = 15 |
Een .htaccess in blog maken met:quote:Op woensdag 15 oktober 2014 16:23 schreef wipes66 het volgende:
weet iemand hoe ik een htaccess bestand uit een 'parent' directory kan laten negeren? bv:
public_html/www/index.php
public_html/www/.htaccess
public_html/www/blog/
en als dan public_html/www/blog/index.php wordt opgevraagd dat het bovenliggende .htaccess bestand geheel genegeerd wordt, is dat mogelijk?
1 | RewriteEngine Off |
1 | RewriteConf %{REQUEST_URI} !^/blog/? |
het gaat helaas niet alleen om rewrite rules, maar ook allerlei andere regels (white listing van bestanden etc). het hele htaccess moet dus genegeerd worden.quote:Op woensdag 15 oktober 2014 16:39 schreef Aether het volgende:
[..]
Een .htaccess in blog maken met:
[ code verwijderd ]
óf in de .htaccess toevoegen (uit m'n hoofd):
[ code verwijderd ]
Voor zover ik weet is dat niet mogelijk. Je zou in de bovenliggende htaccess moeten opgeven dat de regels daarin niet gelden voor een specifieke onderliggende map. Voorbeeld: http://stackoverflow.com/(...)ules-in-root-htaccesquote:Op woensdag 15 oktober 2014 16:42 schreef wipes66 het volgende:
[..]
het gaat helaas niet alleen om rewrite rules, maar ook allerlei andere regels (white listing van bestanden etc). het hele htaccess moet dus genegeerd worden.
Ik wil daaruit de tekst tussen <blockquote> en </blockquote> hebben zodat ik tekst tussen tags apart van de rest kan verkrijgen, hiervoor heb ik het volgende bedacht:quote:bla
<blockquote>bla bla bla</blockquote>
bla bla
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | CASE WHEN LOCATE( '<blockquote>', `contents` ) != 0 THEN MID( `contents`, LOCATE( '<blockquote>', `contents` ) + 12, (LOCATE( '</blockquote>', `contents` ) - LOCATE( '<blockquote>', `contents` )) - 12 ) ELSE '' END AS post_quote, CASE WHEN LOCATE( '<blockquote>', `contents` ) != 0 THEN CONCAT_WS( LEFT( `contents` , LOCATE( '<blockquote>', `contents`) - 1), ' ', RIGHT( `contents` , LENGTH(`contents`) - (LOCATE( '</blockquote>', `contents` ) + 12)) ) ELSE `contents` END AS post_contents |
Hier zou het volgende uit moeten komen:quote:<blockquote>quote 1</blockquote>
reactie 1
<blockquote>quote 2</blockquote>
reactie 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | SELECT CASE WHEN LOCATE( '<blockquote>', `contents` ) != 0 THEN MID( `contents`, LOCATE( '<blockquote>', `contents` ) + 12, (LOCATE( '</blockquote>', `contents` ) - LOCATE( '<blockquote>', `contents` )) - 12 ) ELSE '' END AS post_quote, CASE WHEN LOCATE( '<blockquote>', `contents` ) != 0 THEN CONCAT_WS( LEFT( `contents` , LOCATE( '<blockquote>', `contents`) - 1), ' ', RIGHT( `contents` , LENGTH(`contents`) - (LOCATE( '</blockquote>', `contents` ) + 12)) ) ELSE `contents` END AS post_contents FROM ( SELECT 'bla bla bla <blockquote>quote 1</blockquote>reactie 1<blockquote>quote 2</blockquote> reactie 2' AS `contents` ) AS dummy |
Deze query wordt door Sphinx gebruikt om data te indexeren, ik moet deze data in twee velden in de index hebben zodat ze los van elkaar doorzocht kunnen worden. Ik kan in dit geval niets anders doen dan het in de query afhandelen.quote:Op zondag 19 oktober 2014 08:47 schreef KomtTijd... het volgende:
Dat het kan betekent niet dat je het ook moet willen. Dit lijkt me typisch iets wat je in je businesslogic afhandelt ipv in een query.
Eens, maar gaat in dit geval nietquote:Op zondag 19 oktober 2014 09:01 schreef slacker_nl het volgende:
Hij vind het leuk om zich in moeilijke situaties te knopen.
Maar agreed, dit moet je denk ik niet in je SQL stoppen, maar erbuiten.
Nodig niet, of het handig is hangt af van je toepassing.quote:Op zondag 19 oktober 2014 21:19 schreef xaban06 het volgende:
Normaal heb ik bij een database tabel een veld genaamd 'id' met auto increment. Dit keer heb ik een andere veld welke uniek is en nooit dubbel kan zijn. Is het dan nog steeds handig/nodig om een id veld te hebben?
Gebruikelijk is om zowel de ruwe input als de HTML op te slaan. Waarom je ook nog platte tekst op zou willen slaan zou ik niet weten. Je kunt toch ook zoeken op de html/txt velden?quote:Op zondag 19 oktober 2014 21:19 schreef xaban06 het volgende:
Normaal heb ik bij een database tabel een veld genaamd 'id' met auto increment. Dit keer heb ik een andere veld welke uniek is en nooit dubbel kan zijn. Is het dan nog steeds handig/nodig om een id veld te hebben?
ik dacht anders zoekt ie de tags ook gezellig mee. Ok cool dankjequote:Op zondag 19 oktober 2014 21:44 schreef KomtTijd... het volgende:
[..]
Gebruikelijk is om zowel de ruwe input als de HTML op te slaan. Waarom je ook nog platte tekst op zou willen slaan zou ik niet weten. Je kunt toch ook zoeken op de html/txt velden?
Whut?quote:Op zondag 19 oktober 2014 21:44 schreef KomtTijd... het volgende:
[..]
Gebruikelijk is om zowel de ruwe input als de HTML op te slaan. Waarom je ook nog platte tekst op zou willen slaan zou ik niet weten. Je kunt toch ook zoeken op de html/txt velden?
Daar heb je zeker een punt ja. Je zou kunnen overwegen ook de platte tekst op te slaan idd, maar als je echt een fatsoenlijke zoekfunctie wilt maken komt daar nog heel wat meer bij kijken. Ik heb er geen ervaring me maar weet dat er hele studies maar verricht zijn.quote:Op zondag 19 oktober 2014 21:54 schreef n8n het volgende:
[..]
ik dacht anders zoekt ie de tags ook gezellig mee. Ok cool dankje
Als je id hebt buiten je primary doe je wat fout.quote:Op zondag 19 oktober 2014 21:42 schreef KomtTijd... het volgende:
[..]
Nodig niet, of het handig is hangt af van je toepassing.
een id is toch nooit weg?quote:Op maandag 20 oktober 2014 00:00 schreef Boze_Appel het volgende:
[..]
Als je id hebt buiten je primary doe je wat fout.
Hij bedoelt denk ik een extra id buiten je primary key.quote:
ongetwijfeld, denk voor de html-variant dat in veel gevallen ook op hele pagina’s gecached kan worden. Geeft een mooi beeld van wat er nou allemaal onderhouden/aangepast moet worden met een updatequote:Op zondag 19 oktober 2014 22:00 schreef KomtTijd... het volgende:
[..]
Daar heb je zeker een punt ja. Je zou kunnen overwegen ook de platte tekst op te slaan idd, maar als je echt een fatsoenlijke zoekfunctie wilt maken komt daar nog heel wat meer bij kijken. Ik heb er geen ervaring me maar weet dat er hele studies maar verricht zijn.
ik heb op een site een unieke hash die ik als slug gebruik maar daarnaast ook een id, momenteel omdat ik daar nog op sorteer (oud naar nieuw, wordt nog aangepast). Een id veld maakt verder toch geen reet uit, als in een id is 'gratis'?quote:Op maandag 20 oktober 2014 11:11 schreef Tijn het volgende:
[..]
Hij bedoelt denk ik een extra id buiten je primary key.
Het valt heel erg mee, maar ik zou voor een beetje fatsoenlijke zoekfunctie inderdaad gewoon fatsoenlijke search software gebruiken zoals bijvoorbeeld Apache Solr.Standaard relevantie scoring obv TF/IDF, allerhande mogelijkheden voor stopwords filtering, stemming, synoniemen, enzovoort.quote:Op zondag 19 oktober 2014 22:00 schreef KomtTijd... het volgende:
[..]
Daar heb je zeker een punt ja. Je zou kunnen overwegen ook de platte tekst op te slaan idd, maar als je echt een fatsoenlijke zoekfunctie wilt maken komt daar nog heel wat meer bij kijken. Ik heb er geen ervaring me maar weet dat er hele studies maar verricht zijn.
Ik heb zelf vaak ook een public hash voor het exposen van records aan de buitenwereld, zodat ik niet de interne ids hoef te delen. Ik zou ook niet direct weten waarom dat erg is, maar ik kan me voorstellen dat het geen handig databaseontwerp is als je hetzelfde record via allerlei verschillende ids kan terugvinden.quote:Op maandag 20 oktober 2014 11:13 schreef n8n het volgende:
[..]
ik heb op een site een unieke hash die ik als slug gebruik maar daarnaast ook een id, momenteel omdat ik daar nog op sorteer (oud naar nieuw, wordt nog aangepast). Een id veld maakt verder toch geen reet uit, als in een id is 'gratis'?
op die manier, ik heb alleen een hash van 4 karakters, eerste altijd alpha dus 1.213.056 combinaties wat voor dit project ruim voldoende is. Browsers tonen toch steeds vaker naar een versimpelde url, verder is er geen manier om content er uit te persen voor publiekquote:Op maandag 20 oktober 2014 11:17 schreef Tijn het volgende:
[..]
Ik heb zelf vaak ook een public hash voor het exposen van records aan de buitenwereld, zodat ik niet de interne ids hoef te delen. Ik zou ook niet direct weten waarom dat erg is, maar ik kan me voorstellen dat het geen handig databaseontwerp is als je hetzelfde record via allerlei verschillende ids kan terugvinden.
Bij grote hoeveelheden data scheelt het nog veel meer, zeker in de worst case scenario's.quote:Op maandag 20 oktober 2014 18:53 schreef xaban06 het volgende:
Wat is MySQL trouwens snel zeg als je de juiste indexes toepast factor 10 kwa snelheidswinst
Tabel heeft nu 50.000 records, binnen enkele weken wordt dat een paar miljoen en zal vanaf dan dagelijks met ~800 records groeien.quote:Op maandag 20 oktober 2014 19:16 schreef Monolith het volgende:
[..]
Bij grote hoeveelheden data scheelt het nog veel meer, zeker in de worst case scenario's.
Dan ga je dat verschil wel merken. Eigenlijk zou je alle (select)queries een keer met explain moeten bekijken om te zien waar je nog winst kunt behalen.quote:Op maandag 20 oktober 2014 22:15 schreef xaban06 het volgende:
[..]
Tabel heeft nu 50.000 records, binnen enkele weken wordt dat een paar miljoen en zal vanaf dan dagelijks met ~800 records groeien.
De juiste engine toepassen scheelt ook enorm. Veel mensen geilen op InnoDB vanwege contrainsts en dergelijke, maar gebruiken het niet of passen het toe op tabellen die amper inserts/updates krijgen maar enkel selects. Dan gewoon lekker naar MyIsam gaan en het scheelt een factor veel in snelheid.quote:Op maandag 20 oktober 2014 18:53 schreef xaban06 het volgende:
Wat is MySQL trouwens snel zeg als je de juiste indexes toepast factor 10 kwa snelheidswinst
Professionals zullen het fijne er van weten verwacht ik. Ik doe het gewoon als hobby, op werk heb ik er niks mee te maken.quote:Op maandag 20 oktober 2014 22:26 schreef Boze_Appel het volgende:
[..]
De juiste engine toepassen scheelt ook enorm. Veel mensen geilen op InnoDB vanwege contrainsts en dergelijke, maar gebruiken het niet of passen het toe op tabellen die amper inserts/updates krijgen maar enkel selects. Dan gewoon lekker naar MyIsam gaan en het scheelt een factor veel in snelheid.
Degelijke DBA bij grotere hoeveelheden is een kunstje apart.
De vraag is niet zozeer wat de verhouding is tussen selects en inserts / updates. MyISAM kent bijvoorbeeld geen transacties. Die heb je soms gewoon nodig.quote:Op maandag 20 oktober 2014 22:26 schreef Boze_Appel het volgende:
[..]
De juiste engine toepassen scheelt ook enorm. Veel mensen geilen op InnoDB vanwege contrainsts en dergelijke, maar gebruiken het niet of passen het toe op tabellen die amper inserts/updates krijgen maar enkel selects. Dan gewoon lekker naar MyIsam gaan en het scheelt een factor veel in snelheid.
Degelijke DBA bij grotere hoeveelheden is een kunstje apart.
Voor veel dingen dan ook weer niet. Het is uiteraard net de toepassing wat je nodig hebt.quote:Op maandag 20 oktober 2014 22:35 schreef Monolith het volgende:
[..]
De vraag is niet zozeer wat de verhouding is tussen selects en inserts / updates. MyISAM kent bijvoorbeeld geen transacties. Die heb je soms gewoon nodig.
Zeker, of het alternatief voor MySQL, MariaDB.quote:Daarnaast kun je in plaats van MySQL ook gewoon bijvoorbeeld Postgresql gebruiken.
idd, zonder de juiste indexes wordt iedere database onwerkbaar traag met datsoort datasets.quote:Op maandag 20 oktober 2014 22:20 schreef Light het volgende:
[..]
Dan ga je dat verschil wel merken. Eigenlijk zou je alle (select)queries een keer met explain moeten bekijken om te zien waar je nog winst kunt behalen.
En je buffers goed instellen. Van de standaard configs van MySQL of PostgreSQL wordt geen grotere hoeveelheid data vrolijk.quote:Op maandag 20 oktober 2014 22:56 schreef KomtTijd... het volgende:
[..]
idd, zonder de juiste indexes wordt iedere database onwerkbaar traag met datsoort datasets.
Een flinke sloot geheugen in je server helpt ook.
Een kaartenbak heeft nou meestal juist wel een vorm van indexering.quote:Op maandag 20 oktober 2014 23:01 schreef Boze_Appel het volgende:
[..]
En je buffers goed instellen. Van de standaard configs van MySQL of PostgreSQL wordt geen grotere hoeveelheid data vrolijk.
Zonder indexes heb je gewoon een kaartenbak.
Tegen die tijd is het misschien sowieso een idee om een aparte database server te hebben.quote:Op maandag 20 oktober 2014 22:56 schreef KomtTijd... het volgende:
[..]
idd, zonder de juiste indexes wordt iedere database onwerkbaar traag met datsoort datasets.
Een flinke sloot geheugen in je server helpt ook.
Punt, maar je kan niet zoeken op de inhoud van de kaartenbak, alleen wat op het labeltje staat. Dat is an sich een index, maar alleen een primary dan.quote:Op maandag 20 oktober 2014 23:04 schreef Monolith het volgende:
[..]
Een kaartenbak heeft nou meestal juist wel een vorm van indexering.
Een sloot geheugen is alleen zinvol als je ook goede indexes hebt.quote:Op maandag 20 oktober 2014 22:56 schreef KomtTijd... het volgende:
[..]
idd, zonder de juiste indexes wordt iedere database onwerkbaar traag met datsoort datasets.
Een flinke sloot geheugen in je server helpt ook.
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 | <?php header('Content-Type: text/html; charset=utf-8'); function extractData($url, $clientName, $curr) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_REFERER, 'Mozilla/5.0 (compatible; ' . $clientName. ' PHP client; '.php_uname('s').'; PHP/'.phpversion().')'); curl_setopt($ch, CURLOPT_USERAGENT, "CakeScript/0.1"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $json = curl_exec($ch); curl_close($ch); $array = json_decode($json,true); return $array; } $url = 'http://www.bitstamp.net/api/ticker/'; $clientName = 'Bitstamp'; $bitstamp = extractData($url,$clientName); $url = 'https://www.bitstamp.net/api/eur_usd/'; $clientName = 'Blockchain'; $blockchain = extractData($url,$clientName); echo "<pre>"; print_r($bitstamp); print_r($blockchain); echo "</pre>"; ?> |
1 2 3 | <?php $price= $high / $sell; ?> |
$bitstamp en $blockchain zijn beide array. Met $bitstamp['high'] kun je een waarde uitlezen:quote:Op dinsdag 21 oktober 2014 14:55 schreef Drakire het volgende:
Vraagje:
Ik haal via een api bitcoinprijzen in USD op alsmede de exchange rate van USD naar EUR
[ code verwijderd ]
Dit geeft het volgende resultaat:
[ afbeelding ]
Nu wil ik het getal dat al resultaat bij high komt (388.00) delen door het getal dat bij sell staat (1.2771)
Alleen weet ik niet hoe ik deze waardes los terugkrijg in php zodat ik bijvoorbeeld
[ code verwijderd ]
kan doen.
1 | $price = $bitstamp['high'] / $bitchain['sell'] |
Had al gezocht maar kwam er niet uit vanwege de 2 verschillende arrays, achteraf is het toch best simpel .quote:
thx.quote:Op dinsdag 21 oktober 2014 14:59 schreef Aether het volgende:
[..]
$bitstamp en $blockchain zijn beide array. Met $bitstamp['high'] kun je een waarde uitlezen:
[ code verwijderd ]
nee de timestamp moet verschillend zijn want ik gebruik "today 00:00" en geen "today" of "-24 hours". de laatste 2 zijn relatief (in verhouding met de huidige timestamp) en zijn voor alle tijdzones hetzelfde, maar het moment van de eerste seconden van de dag moet per tijdzone verschillend zijn. ik dacht dat het westen dan het laagste moest zijn en meer richting het oosten hoger. je kan het zelf testen met:quote:Op woensdag 22 oktober 2014 20:06 schreef KomtTijd... het volgende:
Wat doe je precies dan?
Als ik het zo bekijk zouden ze allemaal dezelfde timestamp moeten hebben. Maar de timestamps die jij toont komen in de verste verte niet overeen met de daarbij genoemde datum/tijd, ook de minuten en secondes niet.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $timezone = new DateTimeZone('America/New_York'); $date = new DateTime('today 00:00', $timezone); var_dump($date->format('r')); var_dump($date->getTimestamp()); echo "\n\n"; $timezone = new DateTimeZone('Europe/Amsterdam'); $date = new DateTime('today 00:00', $timezone); var_dump($date->format('r')); var_dump($date->getTimestamp()); echo "\n\n"; $timezone = new DateTimeZone('Australia/Sydney'); $date = new DateTime('today 00:00', $timezone); var_dump($date->format('r')); var_dump($date->getTimestamp()); echo "\n\n"; ?> |
maar de volgorde van de timestamp komt niet overeen met de volgorde van oost naar west, dat is wat ik niet snapquote:Op woensdag 22 oktober 2014 20:15 schreef KomtTijd... het volgende:
Laatste keer dat ik checkte kwam de zon in het oosten op en ging deze in het westen onder Dus in het oosten is het eerder middennacht dan in het westen.
Een timestamp kent geen tijdzone, maar als je van een tijd naar een timestamp gaat heb je die tijdzone wel nodig. De timestamp van 2014-10-22 18:00:00+0200 (Amsterdam) is anders dan die van 2014-10-22 18:00:00+0100 (Londen), hoewel het beide keren 18:00 vandaag is.quote:Op woensdag 22 oktober 2014 20:33 schreef Monolith het volgende:
Gezien de tijden in je resultaten wordt 00:00 niet meegenomen.
Afgezien daarvan, wordt de string niet omgezet naar GMT oid en vervolgens omgerekend met de timezone, waarbij vervolgens de timestamp enkel de datum en tijd, maar niet de timezone meerekent?
Een timestamp is altijd UTC.quote:
Nee. Om te beginnen kloppen die strings niet. En het probleem met "today" is dat je niet weet welke dat je krijgt. In Australië is 23 oktober al begonnen, dus krijg je die datum als je "today" gebruikt. In de andere gebieden is dat niet het geval en krijg je 22 oktober.quote:Op woensdag 22 oktober 2014 19:45 schreef wipes66 het volgende:
heeft iemand verstand van timezones? ik probeer "today 00:00" om te zetten in een timestamp, maar wel afhankelijk van een tijdzone (via DateTime). in de unittest vergelijk ik new-york, amsterdam en die van sydney. maar die van amsterdam blijkt lager te zijn dan die van new-york?
dit is de uitkomt:
America/New_York
string(31) "Wed, 22 Oct 2014 13:34:42 -0400"
int(1413950400)
Europe/Amsterdam
string(31) "Wed, 22 Oct 2014 19:34:42 +0200"
int(1413928800)
Australia/Sydney
string(31) "Thu, 23 Oct 2014 04:34:42 +1100"
int(1413982800)
new-york zou toch het laagst moeten zijn omdat daar het "begin van de dag" het meeste achterloopt?
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |