Laravel REST en dan is het verder weinig boeiend wat voor frontend er tegenaan babbelt. Zou zelf voor React gaan. Veel mooier in de zin hoe het omgaat met verschillende statussen waar je applicatie zich bevindt,quote:Op zondag 16 juli 2017 17:29 schreef Monolith het volgende:
[..]
Er is geloof ik ook een .Net Core variant van SignalR, dus die is dan cross platform en niet afhankelijk van een Windows server.
Als je toch met SignalR aan de slag gaat zou ik eerlijk gezegd PHP er toch echt wel tussenuit knikkeren. Als je in PHP fatsoenlijke applicaties bouwt met bijvoorbeeld een MVC structuur, dan is dat in C# niet heel anders. Bouw je front-end in iets als Angular en bouw back-end services gewoon als REST.
Ja, maar het gaat hier om het gebruik maken van SignalR. Dan moet je toch is C# gaan ontwikkelen en is een PHP laagje voor andere zaken eigenlijk loze ballast.quote:Op zondag 16 juli 2017 17:56 schreef Boze_Appel het volgende:
[..]
Laravel REST en dan is het verder weinig boeiend wat voor frontend er tegenaan babbelt. Zou zelf voor React gaan. Veel mooier in de zin hoe het omgaat met verschillende statussen waar je applicatie zich bevindt,
Oh, sorry, my bad, ik dacht dat ik in het PHP/MySQL-topic zat.quote:Op zondag 16 juli 2017 18:00 schreef Monolith het volgende:
[..]
Ja, maar het gaat hier om het gebruik maken van SignalR. Dan moet je toch is C# gaan ontwikkelen en is een PHP laagje voor andere zaken eigenlijk loze ballast.
Ik zou eens kijken naar zoiets:
https://docs.microsoft.co(...)cations-with-signalr
Het afraden van PHP past ook prima in zo'n topic.quote:Op zondag 16 juli 2017 18:01 schreef Boze_Appel het volgende:
[..]
Oh, sorry, my bad, ik dacht dat ik in het PHP/MySQL-topic zat.
Jaja, Bart.quote:Op zondag 16 juli 2017 18:03 schreef Monolith het volgende:
[..]
Het afraden van PHP past ook prima in zo'n topic.
Omtrent React speelt overigens wat gedoe met licensing.quote:Op zondag 16 juli 2017 17:56 schreef Boze_Appel het volgende:
[..]
Laravel REST en dan is het verder weinig boeiend wat voor frontend er tegenaan babbelt. Zou zelf voor React gaan. Veel mooier in de zin hoe het omgaat met verschillende statussen waar je applicatie zich bevindt,
Ja, ze zijn aan het zijkwijven, dat weet ik. Denk niet dat het ergens heen gaat. Het is spierballen laten zien.quote:Op maandag 17 juli 2017 18:09 schreef Monolith het volgende:
[..]
Omtrent React speelt overigens wat gedoe met licensing.
Ik heb voor het up-to-date houden van m'n master niks nodig, ik fetch gewoon 1x per dag m'n upstream en dan ben ik "bij", voordat ik m'n code aanbied rebase ik en dan is het klaar.quote:Op vrijdag 14 juli 2017 14:31 schreef BrainOverfloW het volgende:
[..]
Wat ik, inmiddels succesvol, wou bereiken is dat ik zonder nadenken commando's af kan vuren in mijn terminal om dingen van/naar git te sturen.
Die upstream melding onderbrak dat steeds omdat Git dan zeurt dat de stream niet bestaat. Dan moet ik met de cursor de suggestie selecteren en plakken om door te kunnen.
Nu met de suggestie van KomtTijd... kan ik voor iedere branch de zelfde serie commando's door blijven typen tot het gepushed is.
Wat ik nu doe, met zelfgemaakte shortcodes, is
[ code verwijderd ]
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | nr FOO-XXXXX Dit is mijn vet kekke feature of bug branch # vim vim vim git gui # dit werkt zoveel fijner dan git add -p # Dit kan je automaten, maar .. meh. git co sprint git reset --hard upstream/sprint git merge - git push upstream sprint:sprint # Rinse repeat nr FOO-XXXXX Nog meer dingen |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | nr=alias new_repo upstream/master new_repo () { if [ $# -lt 3 ] then echo "Empty branch, ticket or name" >&2 return 1 fi local branch=$1 local ticket=$2 shift shift local name=$(echo $@ | sed -e 's/ \+/_/g') ticket=$(echo $ticket | sed -e 's/^FOO\-\?//i') local br="FOO-$ticket-$name" git co -t $branch -b "$br" if [ $? -eq 0 ] then git push origin "$br:$br" fi } |
Het klinkt alsof je een query uitvoert waar je geen goede indexes voor hebt. Dan moet MySQL een full table scan doen, en met 120 miljoen rijen duurt dat even. Ik zou beginnen met een EXPLAIN SELECT voor die zware query om te zien waar de verbeteringen kunnen worden gedaan.quote:Op zaterdag 2 september 2017 10:28 schreef bondage het volgende:
Iemand hier een idee of een MyISAM tabel gebruik kan maken van meerdere threads? Ik kan er bijzonder weinig over vinden en het meeste is oude meuk. Wat ik wel kan vinden is dat het beter is over stappen op InnoDB, deze engine zou dat wel moeten kunnen.
Ik vraag dit omdat mij opvalt dat MySQL maar een enkele core gebruikt als ik een zware query uitvoer, het doorzoeken van een DB met 120.000.000 records duurt dan ook onnodig lang.
[ afbeelding ]
Voordat ik de tabel om ga zetten (tijdrovende klus) wil ik echter zeker weten of het gaat helpen of dat het eventueel toch mogelijk is met MyISAM.
De serverversie die ik gebruik is: 5.7.19-0ubuntu0.16.04.1
Er zit een index op het veld waar ik op query. Ik heb een hele simpele uitgevoerd, dit duurt ongeveer een halve minuut om weer te geven...quote:Op zondag 3 september 2017 09:50 schreef Light het volgende:
[..]
Het klinkt alsof je een query uitvoert waar je geen goede indexes voor hebt. Dan moet MySQL een full table scan doen, en met 120 miljoen rijen duurt dat even. Ik zou beginnen met een EXPLAIN SELECT voor die zware query om te zien waar de verbeteringen kunnen worden gedaan.
| 1 2 | id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE fok_post NULL ref year year 2 const 12029801 100.00 NULL |
Gewoon, zo: SELECT * FROM `fok_post` WHERE `year` = 2012quote:Op zondag 3 september 2017 10:23 schreef zoem het volgende:
In de EXPLAIN kun je zien dat MySQL 12M rows moet doorzoeken, dus dat is niet efficient. Hoe ziet de query eruit? Overigens kan een index op jaartal relatief inefficiënt zijn door de lage selectiviteit.
| 1 | SELECT * FROM fok_post WHERE year = 2012 |
| 1 | SELECT * FROM fok_post WHERE id < 12000000 |
Als hij een full scan doet lijkt me het nog redelijk snel... Op zich maakt het niet zoveel uit dat het 30 sec. duurt voordat Sphinx de resultaten heeft, het viel me gewoon op dat ik weinig verschil merk ten opzichte van mijn vorige server en dat er slechts één core wordt gebruikt als ik de query uitvoer.quote:Op zondag 3 september 2017 10:52 schreef zoem het volgende:
Id's zijn uniek, dus logisch dat je vrijwel instant resultaat hebt. Bij de jaartallen zijn er waarschijnlijk ~20 unieke waardes, dus het kan zijn dat de optimizer kiest voor een full table scan. Gezien filtered op 100% staat lijkt dat ook het geval te zijn.
quote:Op zondag 3 september 2017 10:57 schreef Light het volgende:
Sowieso zou ik de snelheden van queries als
[ code verwijderd ]
[ code verwijderd ]
Dan neem ik aan dat je in beide gevallen ongeveer evenveel records terugkrijgt. (Dat kun je nog vergelijken met een SELECT COUNT(*))
Data transfer bij zulke aantallen rijen is ook een belangrijke factor.
| 1 | SELECT * FROM fok_post WHERE id < 12000000 |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | root@thuisserver:~# hdparm -Tt /dev/sda /dev/sda: Timing cached reads: 16568 MB in 2.00 seconds = 8291.40 MB/sec Timing buffered disk reads: 594 MB in 3.00 seconds = 197.76 MB/sec root@thuisserver:~# time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k && sync" 1024+0 records in 1024+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 0.0728517 s, 1.4 GB/s real 0m0.774s user 0m0.008s sys 0m0.072s |
Ik ga een kopie van de tabel maken en hem omzetten, kan ik eea testen. Het omzetten gaat een middagje duren denk ik...quote:Op zondag 3 september 2017 11:31 schreef zoem het volgende:
Naar InnoDB converteren zou ik zelf wel gedaan hebben. MyISAM wordt niet echt meer doorontwikkeld en in MySQL 5.6+ kent MyISAM amper nog voordelen boven InnoDB.
Ik vrees dat je deze query met de huidige dataset niet kan versnellen. Wellicht valt de data anders op te vragen (in batches met year=A and id BETWEEN x AND y) of kijken of partitioning iets kan betekenen.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | object(InstagramAPI\Response\DirectInboxResponse)#637 (3) { ["httpResponse"]=> object(GuzzleHttp\Psr7\Response)#645 (6) {*knip*} ["_compiledPropertyMapLink":"LazyJsonMapper\LazyJsonMapper":private]=> &array(9) {*knip*} ["_objectData":"LazyJsonMapper\LazyJsonMapper":private]=> array(5) { ["inbox"]=> array(5) { ["threads"]=> array(20) { array(27) { ["thread_id"]=> string(39) "340282366841710300949128162281775301401" ["users"]=> array(1) { [0]=> array(9) { ["pk"]=> int(12345678) *knip* } } } |
Als ik moet gokken $test->getInbox()->getThreads()quote:Op dinsdag 20 februari 2018 22:47 schreef qu63 het volgende:
Topic is al wat langer stil, maar ik hoop toch dat jullie me kunnen helpen..
Uit een var_dump($test) komt het volgende naar voren:
[ code verwijderd ]
Hoe kan ik die 20 arrays in 'threads' nu benaderen?
print_r($test->inbox->threads) geeft geen resultaat..
Ik vermoed zelf dat het het te maken heeft met die ':private', maar hoe ik daar omheen kan werken.....
Na de threads array komen nog 4 arrays, deze weggelaten omdat deze niet relevant zijn. De code hier is dus niet volledig, maar dat maakt niet uit voor hoe ik die array wil benaderen.
Ja, dat dacht ik dus ook.....quote:Op dinsdag 20 februari 2018 22:58 schreef WyriHaximus het volgende:
[..]
Als ik moet gokken $test->getInbox()->getThreads()
https://github.com/mgp25/(...)nboxResponse.php#L10
https://github.com/mgp25/(...)/DirectInbox.php#L12
| 1 | AH01071: Got error 'PHP message: PHP Fatal error: Uncaught LazyJsonMapper\\Exception\\LazyJsonMapperException: Unknown function "getThreads". in *bla*/LazyJsonMapper.php:2099\nStack trace:\n#0 *bla*.php(134): LazyJsonMapper\\LazyJsonMapper->__call('getThreads', Array)\n#1 {main}\n thrown in*bla*LazyJsonMapper.php on line 2099\n' |
Ok maar wat geeft var_dump($test->getInbox()); dan als class terug?quote:Op dinsdag 20 februari 2018 23:01 schreef qu63 het volgende:
[..]
Ja, dat dacht ik dus ook.....
[ code verwijderd ]
var_dump($test->getInbox()->getThreads()); geeft:quote:Op dinsdag 20 februari 2018 23:03 schreef WyriHaximus het volgende:
[..]
Ok maar wat geeft var_dump($test->getInbox()); dan als class terug?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | array(20) { [0]=> object(InstagramAPI\Response\Model\DirectThread)#637 (2) { ["_compiledPropertyMapLink":"LazyJsonMapper\LazyJsonMapper":private]=> &array(29) { *blablabullshit* } ["_objectData":"LazyJsonMapper\LazyJsonMapper":private]=> array(27) { ["thread_id"]=> string(39) "123456789123456789123456789123456789123456" ["users"]=> array(1) {} *etc etc etc* } } } En dan nog 19 andere arrays met dezelfde opmaak... |
Je hebt 20 instances van DirectThread in je array zitten. Dus foreach (test->getInbox()->getThreads() as $thread) {$thread->method()} en je kunt $thread aanspreken.quote:Op dinsdag 20 februari 2018 23:14 schreef qu63 het volgende:
[..]
var_dump($test->getInbox()->getThreads()); geeft:
[ code verwijderd ]
quote:Op dinsdag 20 februari 2018 23:18 schreef WyriHaximus het volgende:
[..]
Je hebt 20 instances van DirectThread in je array zitten. Dus foreach (test->getInbox()->getThreads() as $thread) {$thread->method()} en je kunt $thread aanspreken.
| 1 2 3 4 | foreach ($test->getInbox()->getThreads() as $thread123) { $thread123->method(); } |
| 1 | AH01071: Got error 'PHP message: PHP Fatal error: Uncaught LazyJsonMapper\\Exception\\LazyJsonMapperException: Unknown function "method". in blabla.php |
Hij bedoelde de method die je wil gebruiken. Nu heb ik de voorgeschiedenis niet gelezen,maar ik denk dat je de inhoud wil zien?quote:Op dinsdag 20 februari 2018 23:34 schreef qu63 het volgende:
[..]
[ code verwijderd ]
[ code verwijderd ]
T irritante is dat ik wéét dat ik dichtbij zit, maar het werkt dus net niet.. In een var_dump komt alle info voorbij die ik wil hebben, ik kan deze alleen neit direct benaderen omdat ze dus in een "["_objectData":"LazyJsonMapper\LazyJsonMapper":private]" array zitten..
| 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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | /** * DirectThreadItem. * * @method ActionLog getActionLog() * @method string getClientContext() * @method DirectExpiringSummary getExpiringMediaActionSummary() * @method mixed getHideInThread() * @method string getItemId() * @method mixed getItemType() * @method mixed getLike() * @method DirectLink getLink() * @method mixed getLiveVideoShare() * @method Location getLocation() * @method DirectThreadItemMedia getMedia() * @method Item getMediaShare() * @method Placeholder getPlaceholder() * @method Item[] getPreviewMedias() * @method User getProfile() * @method Item getRavenMedia() * @method DirectReactions getReactions() * @method ReelShare getReelShare() * @method string[] getSeenUserIds() * @method StoryShare getStoryShare() * @method string getText() * @method mixed getTimestamp() * @method string getUserId() * @method bool isActionLog() * @method bool isClientContext() * @method bool isExpiringMediaActionSummary() * @method bool isHideInThread() * @method bool isItemId() * @method bool isItemType() * @method bool isLike() * @method bool isLink() * @method bool isLiveVideoShare() * @method bool isLocation() * @method bool isMedia() * @method bool isMediaShare() * @method bool isPlaceholder() * @method bool isPreviewMedias() * @method bool isProfile() * @method bool isRavenMedia() * @method bool isReactions() * @method bool isReelShare() * @method bool isSeenUserIds() * @method bool isStoryShare() * @method bool isText() * @method bool isTimestamp() * @method bool isUserId() * @method $this setActionLog(ActionLog $value) * @method $this setClientContext(string $value) * @method $this setExpiringMediaActionSummary(DirectExpiringSummary $value) * @method $this setHideInThread(mixed $value) * @method $this setItemId(string $value) * @method $this setItemType(mixed $value) * @method $this setLike(mixed $value) * @method $this setLink(DirectLink $value) * @method $this setLiveVideoShare(mixed $value) * @method $this setLocation(Location $value) * @method $this setMedia(DirectThreadItemMedia $value) * @method $this setMediaShare(Item $value) * @method $this setPlaceholder(Placeholder $value) * @method $this setPreviewMedias(Item[] $value) * @method $this setProfile(User $value) * @method $this setRavenMedia(Item $value) * @method $this setReactions(DirectReactions $value) * @method $this setReelShare(ReelShare $value) * @method $this setSeenUserIds(string[] $value) * @method $this setStoryShare(StoryShare $value) * @method $this setText(string $value) * @method $this setTimestamp(mixed $value) * @method $this setUserId(string $value) * @method $this unsetActionLog() * @method $this unsetClientContext() * @method $this unsetExpiringMediaActionSummary() * @method $this unsetHideInThread() * @method $this unsetItemId() * @method $this unsetItemType() * @method $this unsetLike() * @method $this unsetLink() * @method $this unsetLiveVideoShare() * @method $this unsetLocation() * @method $this unsetMedia() * @method $this unsetMediaShare() * @method $this unsetPlaceholder() * @method $this unsetPreviewMedias() * @method $this unsetProfile() * @method $this unsetRavenMedia() * @method $this unsetReactions() * @method $this unsetReelShare() * @method $this unsetSeenUserIds() * @method $this unsetStoryShare() * @method $this unsetText() * @method $this unsetTimestamp() * @method $this unsetUserId() |
Ah, natuurlijk.quote:Op woensdag 21 februari 2018 00:00 schreef ViPeRII het volgende:
[..]
Hij bedoelde de method die je wil gebruiken. Nu heb ik de voorgeschiedenis niet gelezen,maar ik denk dat je de inhoud wil zien?
Dan kan je een van de volgende methods gebruiken:
[ code verwijderd ]
In jouw geval $thread123->getText(); ?
Een Thread bevat ThreadItems, die zul je eerst moeten ophalen voordat je ze kunt gebruiken. Dan wordt het zoiets:quote:Op woensdag 21 februari 2018 08:09 schreef qu63 het volgende:
[..]
Ah, natuurlijk.
Helaas krijg ik dan een "Unknown function "getText"" terug.
Vanavond maar weer verder klooien..
| 1 2 3 4 5 6 7 8 9 | <?php foreach ($test->getInbox()->getThreads() as $thread123) { $items = $thread123->getItems(); foreach($items as $item) { echo $item->getText(); } } ?> |
Die echo was alleen om wat output te zienquote:Op woensdag 21 februari 2018 22:51 schreef Light het volgende:
[..]
Een Thread bevat ThreadItems, die zul je eerst moeten ophalen voordat je ze kunt gebruiken. Dan wordt het zoiets:
[ code verwijderd ]
En natuurlijk kun je ook andere dingen doen in plaats van echo.
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |