31 Januari
2020-01-31 19:01:34
Detta börjar bli lite överdrivet, vad ska man med all statistik till? Troligen ingenting men ändå är det lite intressant att se ens träningsstatistik, jag hade ju redan lite statistik på #cykling (distans per cykel & totaldistans) men tydligen ville jag ha mer så jag fixade en dedikerad sida för cykling Har inte lagt in så mycket än, skall fixa in mycket mer så man får en överblick likt Stravas profilsida med genomsnittlig distans per vecka, tid per vecka + massa annat men detta får räcka sålänge: har lagt in så jag kan se dom 3 längsta turerna, dom 3 "högsta" turerna, fixade in ett stapeldiagram också där jag kan filtrera träningen efter vecka osv, skall utöka det också så man kan filtrera per år, per månad, per cykel, per allt... Sedan GPX Parser inlägget har jag fortsatt laddat upp min backlog av cykelturer men det tar ju en evighet men har åtminstone kommit fram till mitten av 2019 nu så det är ju inte SÅ långt kvar till dagens datum, får försöka få tummen ur & fixa det en kväll så statistiken blir komplett 👍
832 visningar #Cykling · #Hälsa · #Motion · #PHP · #Programmering · #Träning
23 Aug 2019
2019-08-23 22:10:05
Har spenderat några timmar senaste dagarna med att utveckla en GPX/GPS parser, har ju börjat cykla en hel del & använder endel träningsrelaterade hemsidor för att logga min träning men vore ju roligare att ha allt samlat på min hemsida också, hade inget bättre för mig just nu heller så tänkte att detta kunde vara ett kul projekt När man använder träningsappar eller cykeldatorer som loggar GPS så kan man hämta ut en GPX fil som loggar 3 datapunkter (4:a om man är petig); latitud/longitud, m.ö.h & tidpunkt & utifrån detta kan man räkna ut nuvarande hastighet, medelhastighet, maxhastighet, distans, lutning, klättring osv osv. Min cykeldator loggar även endel extra metadata om dom är tillgängliga på rundan; temperatur, kadens, puls osv Så, detta var egentligen inget svårt projekt, "bara" att parsa alla datapunkter & spara resultatet & beräkna mellan varje datapunkt MEN problemet är att GPS data är inte så exakt som man tror, eller jo, i 99% av fallen så är det ganska exakt men ibland görs det ganska ordentliga felmätningar som sparas så använder man bara rådatan i sin parser så kan det snabbt bli ganska fel, tex så dyker det ibland upp GPS jitter eller drift som gör att 2 mätpunkter som har 1 sekunds mellanrum kan fluktuera i distans ganska rejält, speciellt när det är dålig GPS täckning, så om GPS:en tappar täckning helt så kanske mätpunkten är 100 meter bort & är då mätningarna med 1 sekunds mellanrum så motsvarar det en hastighet på 360km/h (mitt rekord är 28'700km/h) & riktigt så snabbt cyklar jag ju inte så dessa mätvärden måste identifieras & därefter kasseras Så efter man implementerat en parser som använder all rådata från GPS:en så måste man börja filtrera eller helt enkelt kasta bort datapunkter som har absurda värden, vissa scenarion är väldigt enkelt att identifiera men ibland dyker ett absurt scenario upp som ens filter för tillfället inte kan identifiera & så får man implementera det scenariot också & varje gång man tror man täckt in allt så laddar man upp en till GPX fil som man testar emot & så visar det sig att även den har ett absurt scenario som inte täckts Just nu gör jag bara jämförelse mellan nuvarande datapunkt & föregående datapunkt (eller upp till 5 punkter bakåt om algoritmen börjar identifiera en "klättring"), vilket är så man får fram distans, hastighet, lutning, höjdskillnad osv & oftast är detta tillräckligt för att hitta felmätningar & absurda scenarion MEN det finns utrymme att förbättra i framtiden när jag har lust, tex att göra beräkningarna på hela block, tex om man gör ett block som är 10 mätningar långt så är det lättare att hitta avvikande datapunkter. Vill man ta det ett steg längre så kan man expandera detta till överliggande block, kör man separata block så hittar man inte felmätningar mellan sista mätningarna i första blocket & första mätningarna i andra blocket så implementerar man överliggande block så kan man även hitta dessa fel. Men det är får bli ett projekt i framtiden, att jämföra 2 (5) mätpunkter är tillräckligt exakt för tillfället Så, algoritmen blir bara mer & mer avancerad för att kunna filtrera bort det mesta & bara spara dom datapunkterna som algoritmen anser vara korrekt. Så mer jobb än vad man först tror, att beräkna på rådatan var enkelt men väldigt missvisande så ja, det tog lite tid att hitta alla "fel", jämförde med Wahoos egna beräkningar, jämförde med Strava & kollade även på Lantmäteriets kartor för att se så att min algoritm stämmer så bra som möjligt & efter typ 20 iterationer så är Wahoo, Strava, Lantmäteriet & min parser inom några få % gentemot varandra, oftast under 1% när det gäller alla mätvärden (distans, klättring, tid, snitthastighet osv osv), eftersom jag såklart inte har tillgång till deras algoritmer så är det ju svårt att veta vad som skiljer oss emellan men våra värden är väldigt lika, skillnaden kan vara något så enkelt som avrundande värden, tex mina datapunkters beräkningar har en precision på float(6) medan dom andra kanske har en precision på 2 decimaler eller kanske bara beräknar på ints, vem vet, spelar inte så stor roll egentligen, allas värden är "fel" ändå I början testade jag bara GPX filer som producerats av min Wahoo Elemnt Bolt & fick mätvärden inom 1% av ovanstående men sen när jag laddade upp GPX filer som skapats av en iPhone så fick jag helt absurda mätvärden, GPS:er i telefoner är tydligen extremt värdelösa, antagligen för att vara så energisnåla som möjligt & dessutom har dom ganska dåliga antenner så GPS mottagningen är relativt dålig. Så när jag upptäckte det fick jag anpassa algoritmen för iPhone datan också så som sagt, algoritmen blir bara mer & mer avancerad för att täcka in alla scenarion. En GPS enhet är sjukt mycket mer exakt & har striktare uppdaterings tidpunkter, min cykeldator har även barometer för att mäta höjdmeter så ofta har en dedikerad GPS enhet fler sensorer för att få pålitligare data, speciellt i jämförelse med en smartphone Sen har tex Strava endel konstiga egenheter, min Bolt har också endel av dessa egenheter; tex så är deras threshold vid lutning/klättring ofta satt alldeles för låg så ofta när man cyklar på väldigt små lutningar så registreras det inte att man "klättar", det är ofta jag är ute & cyklar & det är uppenbart att jag cyklar uppför i en lutning på kanske 0.5% men dessa kastas bort av dom, ganska frustrerande, ibland kan man cykla jämte en väg, sen upp på en "påfart" & upp på en bro som är över den vägen man precis cyklade på, så säkerligen minst +6 höjdmeter men eftersom påfartens lutning var så låg så kastas dessa mätningar bort. Jag har dock valt att sätta min threshold lite lägre än vad Strava & Wahoo gör då jag anser att även om det lutar ganska lite så är det markant tyngre när man är ute & cyklar & därför tycker jag att den typen av klättring skall ingå i den totala klättringen. Det är ju inte så att min parser resulterar i mer klättring ändå då detta bara handlar om några få meter men ja...Ibland visar min totala klättring även mindre än dom andra, det beror helt på scenariot & vad man anser är "klättring": Så vad innebär "klättring" egentligen, använder man bara rådatan från GPS:en & lägger till höjdskillnaden i sin klättrings-"pool" så kommer man få alldeles för höga siffror, tex kan GPS:en mäta ett litet gupp som har en höjdskillnad på 0.2 meter, såpass exakt är den ibland, skall man ta med ett gupp? Visst, det är en höjdskillnad MEN man har ju egentligen inte använt någon energi för att ta sig över guppet, kommer man i 30km/h så kan man säkert rulla över en 4 meter hög kulle utan att använt någon nämnvärd extra energi så i min algoritm (troligen i Stravas & Wahoos också då dessa ger snarlika resultat) måste vissa kriterier uppnås för att anses som "klättring", så små gupp & små kullar sållas bort & istället tar jag bara med backar som man faktiskt måste trampa för att kunna ta sig uppför, först då läggs höjdmetrarna i klättrings-"poolen" Finns mycket mer att säga om detta projektet & hur alla våra plattformar hanterar GPS datan men redan nu är detta inlägget alldeles för långt så får ta en mer djupdykning om ämnet i framtiden På #cykling går det att se resultatet av projektet. Lade till "cykel" också som utrustning för träningen så jag kan se hur långt jag cyklat på respektive cykel. Har inte hunnit lägga in så många än, när detta skrivs har jag bara hunnit fram till mitten av 2017, ett år då jag inte cyklade så mycket, 2018 cyklade jag ännu mer så det är sjukt mycket som måste laddas upp, över 250 totalt så det kommer ta ett tag, aja, har lite att göra framöver
1979 visningar #Programmering
21 Nov 2018
2018-11-21 10:55:11
Nu fick jag ju lite press på mig att faktiskt visa upp något, så här kommer den hemliga funktion 3 (det kommer att bli ett antiklimax för dom flesta tror jag) Skrev att funktion 3 var påväg i mitt förra inlägg: Att utveckla en fönsterhanterare till Linux & nu har jag suttit & knåpat lite på den Så funktion 3 är en inbakad version av HTCondor, eller ja, snarlikt koncept, dock kör jag utan schemaläggare eller kö, allt körs "live", ej distribuerat/klustrat (än), en dator åt gången per process nöjer jag mig med just nu. Man kan också beskriva den som "x11vnc" fast utan vnc delen & bara input injection delen, jag är en flitig användare av x11vnc MEN mitt stora problem är att ifall jag använder lösningar baserad på frambuffer så funkar det skitdåligt då jag ofta sitter på 4g & 3g uppkoppling med väldigt tvivelaktig uppkoppling & begränsad bandbredd, då är det inte så roligt att hålla på & polla från en framebuffer & slösa bort den lilla bandbredden man har & eftersom x11vnc ändå implementerar en injection lösning för input så varför skicka framebuffer när man lika gärna kan köra hela fönstret lokalt & bara skicka kommandona till remote datorn som kör den relevanta processen ändå? Det blir mycket "billigare" bandbreddmässigt att bara dela input + data (return från remote process) istället för framebuffer Funktion #3 hör ihop med funktion #2, all data är delad mellan alla datorer (om inte data-policyn säger annat men då får man hålla koll på att den processen man kör inte använder osyncad data, rörigt förklarat, går in mer på policy i framtiden), detta gör att alla "remote" processer körs lokalt men kan flyttas mellan vilken dator som helst, det spelar egentligen ingen roll på vilken dator en process körs på, processen går att nå från vilken dator som helst (hade ju underlättat om man kunde använda samma PID på alla datorer så man slipper mappa olika PID som är "samma" process mellan dom olika datorerna, har någon en lösning på att tvinga fram en PID så säg till) Så kör jag ett program lokalt, tex "Writer" så fungerar allt precis som det gör på alla datorsystem, programmet öppnas & startar diverse processer. Medan programmet körs kan jag välja att programmet skall köras på en annan dator i nätverket, all data från processen sparas i ett "middleware", sen spawnas (eller använder en befintlig process om den finns tillgänglig & "tom") en likvärdig process på remote host:en (en annan dator i nätverket alltså), den nya processen mappas till den processen som sparades (middleware agerar som en translator mellan olika men samma process (hur illa förklarar jag egentligen? )) & därefter kopieras all process data till denna nya processen på remote host:en. X öppnar inget fönster på remote host:en utan endast en dolt process då ett fönster inte behövs, detta är som sagt ingen VNC lösning Förväxla inte detta med X över nätverk heller, inte samma sak Därefter skickas all interaktion med det lokala fönstret till remote processen (fönstret körs fortfarande lokalt till skillnad från VNC lösningar men skickar viss userinput (ej musrörelser & endast interaktion med GUI:t som resulterar i ny data) till den externa datorns process & därmed kan den externa datorns processorkraft användas istället) (Liten demonstrations-film, filmen är rätt suddig, körde skräpet i en VM på macOS där jag kör en skalad upplösning, glömde av att ändra, så macOS skapar någon obskyr upplösning för att visa 1920xXXXX, så när jag spelade in skärmen via macOS så blev filmen i upplösningen 3686x2304 såååååå, jag, det blev som blev, hoppas det är okej, spelade in typ 10ggr innan skiten slutade krascha så vill inte göra om) Edit igen: I filmen nämnde jag (tror det var denna jag nämnde det i) att webbläsaren också går att köra remote, det stämmer inte riktigt, det GÅR men det är för tillfället inte användbart, kör man remote så går det inte klicka på länkar, har inget sätt att få tillgång till länkarna & skicka data emellan processerna, i mina egna program skickas datan till remote-processer vid UI:event, men skit samma, man kör inte webbläsare remote ändå, eller jag har inte kommit på någon vettig anledning att göra det iaf Varför? Enkla svaret är lätt tillgång till andra datorer i nätverket, istället för VNC, SSH eller andra lösningar, förenklad delning av data. Tex jag jobbar ofta på min bärbara som går på knäna när jag kompilerar stora projekt, här är det superenkelt att flytta över kompileringen till en annan dator i nätverket så jag kan jobba vidare lokalt utan att störas av resurserna kompileringen kräver Encoding är ett annat svar, eftersom all lagring är syncad (med den policyn jag kör nu) så är det lätt att dela upp jobb mellan dom datorerna man har tillgänglig om man vill, finns ju andra (bättre) lösningar som är klustrade, tex Compressor & jag tror Adobe också har något liknande, men licenskostnad & ibland krånglig setup osv, man kan komma undan med att bara skicka iväg lite ffmpeg jobb istället Andra saker när den lokala datorn inte har resurser nog (få CPU kärnor & för lite ram), kör det remote på en biffigare dator istället Till skillnad från VNC lösningar såsom x11vnc så kopplar man inte upp sig till ett remote fönster utan man kan flytta en process mellan alla datorer man har tillgängliga, programmen är alltså INTE låst till en dator på sättet som VNC lösningar används till Tusen andra användningsområden (visar lite andra exempel såfort jag knåpat ihop lite relevantare program). Många (alla) användningsområden finns det redan lösningar på men har alltid viljat ha det inbakat direkt i OS:et Känns som jag behöver gå igenom systemet mer genomgående framöver, tror inte jag förmedlade dess styrkor tillräckligt bra i detta inlägget
18 Oct 2018
2018-10-18 14:45:23
Har kört Linux lite av & till dom senate 15 åren, lite hat-kärlek, senaste åren har jag dock börjat köra det lite mer & framförallt börjat gilla tiled-WM såsom i3 & bspwm & är numera inte jättelångt från att köra dom som main, kör mestadels Ubuntu + i3 nuförtiden (utöver macOS då) Jag har 3 funktioner som jag ända från det att jag upptäckte Linux första gången till dagens datum hela tiden har hoppats på att någon skulle implementera men verkar inte som om någon kommer göra det, så dags att kavla upp armarna & utveckla dessa på egen hand istället Kommer bara utveckla fönsterhanteraren i Debian & kommer bara se till Debian distros stöds då det i princip bara är dessa jag använder men bör vara kompatibelt med det mesta, får se Funktion 1: En slags "Viewport scroll" så ens arbetsyta består av en virtuell yta som är bredare än skärmen man använder, så, när man sitter på en liten skärm, tex på en bärbar så kan man placera sina program/fönster sida vid sida på samma sätt som med en ultrawide skärm, sen antingen använda tangentbords-genvägar eller trackpad för att scrolla i sidled. Man kan också placera dessa strategiskt så man, hmm, ser mer än vad man ser när man glor på en statisk skärm, går inte förklara, kanske syns på videorna, eller får nog göra en separat film för att förklara, men går öka sin produktivitet om man lägger upp sina fönster med lite tanke bakom...aja Jag är medveten om att detta inte är något som många är ute efter, kanske t.om ser krångligt ut & saknar funktion, men när jag arbetat med det så tycker jag det fungerat smidigt, tex när man har flera dokumentationer öppna & flera IDE fönster öppna samtidigt, slipper man öppna massa tabbar å skit, bara att hoppa mellan fönstrena istället & slipper man ha flera fönster stackade ovanpå varandra också Tiled med gaps (trasig margin dock, skall fixas) "Exposé" liknande funktion där man ser en överblick över hela sitt virtuella område, virtuella ytan är 10ggr bredare än skärmens fysiska upplösning, finns "Spaces"/"Workspaces" också så 10ggr bredare per "workspace", så ganska mycket yta att placera sitt skräp på, får att få plats med dessa fönster som demonstreras här med ett mer traditionellt upplägg så skulle man behöva lägga alla fönster ovanpå varandra, mycket lättare (när jag testat iaf) att komma åt det man vill komma åt när inte allt skräpa är staplat på varandra...svårt att göra det rättvisa på bild & video men sidoscrollen är faktiskt ganska smidigt. (nej, trackpad är inte ett krav, bara att tabba fram till sitt fönster, klicka på app ikonerna i "menubar":en längst upp i mitten eller scrolla med tangentbordet) Funktion 2: Kommer inte beskriva den i text här, gjorde en video tidigare idag (skitdåligt filmat, hatar min röst, tror min röst hörs, satte ljudet på mute när jag redigerade filmen då jag hatar att höra min röst men antar att filmen har ljud, låter skitlöjlig & hatar att vara med på film så själva demonstrationen är inte direkt imponerande men tror det framgår rätt tydligt vad funktionen är ändå) Detta är en funktion som jag sett fram emot VÄLDIGT länge, jag skiftar dator flera gånger per dag & hatar att synka GIT, positionera fönster & skit, jag vill bara sätta mig framför datorn & börja precis där jag slutade, oavsett vilken dator jag för tillfället använder Hatar att höra min röst :S Funktion 3: Lite hemlig just nu, håller på & utvecklar den nu men hoppas kunna visa upp ett demo om ett par veckor Framtiden & mini FAQ: Beror lite på, om någon här ens är intresserad av denna projektloggen, tänkte att folk som är intresserade också kunde komma på någon idé eller förslag; något ni saknar i operativsystemet/skrivbordsmiljön/fönsterhanteraren ni använder nu så säg gärna till så får vi se om den går att implementera Ni kanske också tänker att "Fan, *suck*, ännu en fönsterhanterare", & ja, jag håller med, för tillfället kommer jag fortsätta utveckla denna skrivbordsmiljön/fönsterhanteraren men det är bara för att testa lite olika idéer, se om det fungerar som det är tänkt så till en början kommer det vara en egen fönsterhanterare, dock hoppas jag, när denna börjar bli klar kunna implementera åtminstone funktion 1 & 2 i i3 istället, har kollat i i3 dokumentationen & det kan vara svårt att implementera dessa funktioner, speciellt funktion 2 då det inte är helt uppenbart hur man skall plocka ut datan från programmen men förhoppningsvis går det att lösa på något sätt, vi får se! Kommer inte lägga upp detta projektet på github (eller liknande) eller dela med mig av koden nu till en början (har gjort det på tidigare projekt & trots att jag säger till personer upprepade gånger att koden inte ens har alfa-status & jag inte kommer agera support så dyker det upp massa folk ändå & tjatar om support & annat skräp, sen klagar på när det inte fungerar & hur instabilt det är (no shit, det är ju inte ens avsett att användas annat än som experiment), har inte tid med det). Kanske om några månader när jag fixat en lättare installations-process kan jag nog dela med mig koden & lägga upp på GIT, men då krävs det att personen förstår vad detta projektet är, kommer aldrig vara avsett att köras på sin main & kommer inte ha någon support överhuvudtaget, detta är mest ett experiment & hobby För tillfället är detta tiling + float. Tanken är att aldrig behöva använda mus men självklart går det om man vill Varför? Kul grej bara, skönt att ha ett avbrott mellan dom mer seriösare grejerna man utvecklar, har börjat störa mig på hur tungrodda många operativsystem/fönsterhanterare är nuförtiden, känns bara ivägen & skapar frustration, kommer fokusera mest på att underlätta för oss programmerare så detta kommer bli en fönsterhanterare för programmerare & folk som skriver mycket Tidsplan? Ett evighetsprojekt antagligen, detta handlar om år. Detta kommer inte vara något jag jobbar fulltid med så kommer fokusera mest på dom projektet som ger mig tak över huvudet & mat för dagen, vilket detta projektet inte göra. Men kommer åtminstone försöka få till synbara uppdaterar minst 1 ggr i veckan
22 Dec 2015
2015-12-22 14:18:20
Så, börjar snart bli klar med "Flappy Andersson", fattas bara lite roliga bilder på spelarna & lite andra bilder till "poängstjärnor", tänkte det vore roligt att kasta in massa roliga bilder i spelet mellan pelarna, lite slumpmässigt & om spelaren träffar en av dessa stjärnor med dom roliga bilderna så får dom 5 extra poäng. Men iaf, först, fixa in morsans, Mias, farsans & mitt huvud i spelet istället för fågeln
Ser lite skumt ut men vafan, detta är ju inte tänkt att vara det absolut i särklass bästa spelet ever utan bara en rolig grej som jag kan ge bort på julafton :P Har fixat ihop lite statistik osv på servern, PHP & Redis, passar riktigt bra till just statistik & highscores. Problemet är att Swift, återigen, har sina egenheter som gör saker svårare än vad det skall vara. Tex så får jag ju JSON från servern som sen skall behandlas i Swift, men vanilla Swift hatar JSON, speciellt när man stackar JSON "arrayer", då får man hålla på & unwrappa hur många gånger som helst i Swift & råkar man unwrappa en NIL så krashar spelet, tack för det. Gör man samma sak i PHP så ignoreras bara "felet", eller ja, kanske inte ignoreras men värdet blir då NULL istället & man kan fortsätta köra vidare i sitt program. Helt idiotiskt att Swift krashar spelet, den borde bara skicka ett felmeddelande istället. Men nepp, man måste på egen hand programmera in error handling, det blir ganska snabbt överdrivet stort när man bara vill hämta lite highscores från en server. Så, att behandla JSON i PHP tar bara ett par rader jättekort kod, i Swift tar det 19203920 miljarder rader & lika mycket kod som i bibeln, till ingen nytta. Så SwiftyJSON till räddningen, SwiftyJSON är PRECIS så som Swift borde varit från första början, sköter felhanteringen helt på egen hand utan att man behöver oroa sig allt för mycket.
520 visningar #Programmering · #Swift
21 Dec 2015
2015-12-21 22:32:03
Ok, dags för lite mer Flappy Andersson, inte långt kvar till julafton & är en jäkla massa mer att göra, eller ja, det är ju spelbart just nu men vill åtminstone ha en scoreboard så att vi alla kan tävla mot varandra, sen kanske någon medalj för 1:a, 2:a & 3:e plats. Finns lite småbuggar med som jag måste räta ut. Lade till lite rök när man dör
Röken var väldigt lätt att lägga till, Xcode har ju ett inbyggt stöd för att skapa egna emitter nodes, finns ju en hel uppsjö av variabler man kan skräddarsy för att få saker att se ut precis så som man vill. Röken passar egentligen inte in i det övriga utseendet av spelet men tänkte det var lite skoj ändå. Problemet med röken var ju att istället för att ha animerade texturer (kommer inte använda fågel bilden ändå) så valde jag att rotera spelaren istället, roterar ganska sakta i början & ju fler pelare man passerar ju snabbare snurrar gubben, precis samma som att spelet går snabbare ju fler pelare man passerar. MEN, eftersom rök emittern är en child av player spriten så får den samma egenskaper som player spriten, alltså roterar emitter noden i samma takt som player spriten, så om man dör medans man är uppochner så ryker röken neråt, rakt ner i backen, det passar lixom inte ihop med fysiken & ser sjukt konstigt ut. Finns 1'000 sätt att lösa detta på, jag valde det enkla & lade till en rotations animation på min emitter node, fast åt motsats håll som player spriten. Inte det mest eleganta men det fungerar ju. Nästa sak att tackla var ju scoreboarden & jösses, Apple måste hata text i SpriteKit, man sliter ur sig håren för jösses, jösses, shiet, komigen Apple, varför skall det vara så svårt att använda sig av text i SpriteKit? Det är idiotiskt svårt. Testade allt möjligt, SKLabelNode, UITextField, UILabel osv osv men alla hade för & nackdelar. UITextField är ju det jag är ute efter, åtminstone när det gäller själva layouten & positioneringen MEN trots att det går att stänga av mycket av user interaction för text fältet så går det inte stänga av HELT & hållet, går fortfarande markera & kopiera text, detta lagret ligger överst i spelet, så jag använder ju en tap för att starta om spelet, tappar man då inom scoreboarden så startar inte spelet om utan istället får man upp UI:n för att markera texten. Sjukt störande.
GAH!!!!!!!!!11111ettettett Men nepp, får göra en SKLabelNode för varje användare & lägga till i scenen, men ja, jo, detta fungerar ju som det är tänkt men ibland kanske man vill ha mer än en rad, vilket SKLabelNode inte tillåter så fick nöja mig med en rad för varje score. Hade egentligen viljat ha själva poängen i en annan storlek & position men nepp, går ju inte då, visst, går lägga till fler, i mitt fall hade jag då behövt tre st SKLabelNodes per rad & det orkar jag inte fixa till. Jag är ju lite bortskämd eftersom jag kommer från PHP, HTML & CSS där samma sak är SJUKT enkelt, tar mindre än en minut att fixa till, med olika fonter, olika text storlekar, olika textfärger osv osv osv osv men i Swift & SpriteKit, glöm det, det är ett evighetsprojekt. Fixade poängräkningen också så nu får man inte massa extrapoäng om man kraschar in i en pelare på samma ställe som poängräknar grejer är
522 visningar #Programmering · #Swift
18 Dec 2015
2015-12-18 23:45:00
Så ett av mina nyårslöften förra året, eller ja, för detta året var ju att lära mig ett nytt programmeringsspråk, nämligen Swift, men det har lixom inte riktigt blivit av, på gott & ont, det "gotta" var ju att Swift 2 lanserades vilket förenklade väldigt mycket saker, nu är Swift sjukt långt ifrån Objective-C, Swift "1" hade ju endel skumma grejer kvar från Obj-C, eller ja, åtminstone grejer som påminde & som inte kändes så modernt. Men iaf, nu börjar ju året ta slut så kanske är dags att bita i det sura äpplet & köra igång. Japp, så i dom flesta andra programmeringsspråken så har det blivit rätt poppis att det första man gör är en kalkylator, när det gäller Swift så har det lixom blivit standard att göra en remake av Flappy Bird. Finns ju en hel drös med tutorials för just Flappy Bird, innehåller mycket nyttiga grundläggande saker som man behöver lära sig. Så ja, jag börjar det med, men gör det lite personligare, varför inte göra en Flappy Bird & ge familjen var sitt personligt anpassat spel som julklapp? Flappy Andersson :D Var relativt enkelt att knåpa ihop något som åtminstone påminner om Flappy Bird
I den guiden jag använda mig av hade ingen poäng räkning så fick mecka ihop det själv, detta introducerade en jäkla massa buggar, tex om man passerade det röda sträcket helt rent så räknades bara ett poäng, precis som det skulle göra, men ibland så om man kraschar in mot pelaren när man är halvvägs igenom det röda sträcket så kunde det ibland göra så att man av någon anledning fick typ 12 poäng extra, samma poäng räknades alltså en massa gånger, det är ju inte så bra, så det är något jag får lösa imorgon. Måste även fixa kollision för "taket" & marken
325 visningar #Programmering · #Swift
16 Aug 2013
2013-08-16 14:04:23
Ok, så för att dämpa rastlösheten lite så började jag slänga ihop något som jag alltid viljat knåpa ihop men som inte har blivit av, en bildhosting sida. Skapade en tråd på Sweclockers för att se om det fanns något intresse för typ en projektlogg, ungefär så som Sweclockers har för byggloggar för datorer. Tanken var mest att öka mina chanser på att göra klart hela projektet, brukar ju alltid bli att jag gör 80-90% av ett projekt men sen tappar jag lusten och börjar på något annat, men med en projektlogg, när man har ögonen på sig så är det ju lite mer motivation att få skiten gjord. Iaf, började på den ändå och har kommit ganska långt, det blev ju ingen projektlogg så ja, jag sammanfattar väl lite av projektet, steg för steg, inte mycket att se egentligen men skit samma. Designen påminner väldigt mycket om mitt CMS också, speciellt galleridelen i CMS:et för att hitta bilder i bildgalleriet för att lägga till i inläggen. Aja, iaf, första steget är ju att slänga ihop någon form av användarstystem, slängde ihop ett sådant för något år sedan som inkluderar registrering/login, användarkonton med tillhörande information osv osv, så tog inte många minuter att bara slänga in det (hade jag gjort en riktig projektlogg hade jag ju gjort allt från grunden men blev några genvägar nu när det inte blev någon projektlogg) och sen styra upp grundläggande layouten med HTML/CSS, med användarsystemet blir ju första steget inte direkt så mycket visuellt, det mesta är ju bakom kulisserna :P Användarsystemet inkluderar även en inställningsdel, även här är det ju väldigt sparsmakat när man precis har lagt in det och inte börjat med dom sidospecifika inställningarna Då var det dags för att börja på själva bildupplanningsskiten, inte så mycket visuellt här heller men extremt mycket bakom kulisserna, just bildbehandling/bearbetning är det jag hatar mest inom webbutveckling så det blir mest att man skriver en rad kod, sen lugnar man ner sig i något spel, sen kodar man en rad till osv osv så håller man på så tills det är klart, måste fixa någon vettig class känner jag så jag slipper göra om skiten hela tiden. Petade in drag-and-drop upload också, det går att dra bilder till vilken sida som helst på hemsidan och så laddas bilderna upp, just jQuery delen av drag-and-drop funktionen är det inte jag som har kodat ihop, hittade någon på nätet för ett antal år sedan som har fungerat rätt bra, men det är en del som jag kommer att göra en egen version någongång i framtiden, den jag använder nu har lite brister, ganska tung också och svår att skicka med $_POST och $_GET värden om man nu vill det. Men japp, det är ett framtida projekt Bildgalleriet, inget märkvärdigt direkt, bara lista bilderna som användaren har laddat upp, trycker man på bilden så laddas den in direkt, så slipper man hållla på och hoppa fram och tillbaka i webbläsaren. Albumssidan, inget konstigt där heller, just vid detta tillfället så var det bara frontend som var gjort, allt backend gjordes senare, var faktiskt ganska drygt, men mer om det senare. Inget konstigt på bilden egentligen, bara att klicka på "Skapa album" så får man fram en liten ruta att döpa sitt album till något. Efter att man har skapat sitt första album så ändras sidan lite, knappen för att skapa nytt album är längst upp till höger på albumsidan, tror inte folk missar den, var ju i mitten första gången man skapade sitt första album men ja, den lyser ju grönt så det bör ingen missa. Bilden visar 4 album och 2 olika typer av album, eller ja, det är egentligen 1 typ av album men 2 olika backend funktioner, ett album har en stor bild på 210x210px, den bilden skapas när en användare lägger till en bild i albumet för första gången, den stora bilden är kvar där tills användaren laddar upp sin 10:e bild, då tar en annan funktion vid och hämtar 9 bilder från albumet, bygger ihop bildlänkarna till en kommaseparerad sträng i Album tabellen och pekar mot 9st 70x70 bilder istället. Lite småbökigt att fixa, eller ja, tar ju inte lång tid men lite småbuggar är ju förväntade :P Såhär ser det ut i ett album, precis som i själva fotogalleriet osv, albumen är ju bara ett sätt att sortera in bilderna Hur lägger man till bilder i galleriet då? Jo, ganska simpelt, man bara går in i ett av sina album, trycker på "Lägg till bilder" och så får man fram alla sina bilder man laddat upp och dessutom en liten sökruta så man kan söka efter sina bilder, sökningen är givetvis instant search så såfort man trycker på en tangent så sorterar dom fram bilderna som passar in på sökningen, sen klickar man bara på valfri bild och så läggs den till i albumet, själva sökrutan är lite väl anonym kanske, finns ingen text som säger att det är en sökruta men aja, skit samma :P Och så bildvyn då, bara att klicka på valfri bild så ploppar den fram i full storlek Har endel kvar att göra, men det är ganska små saker så det fixas nog snart :P Bildvyn: Den visar bara bilden nu, skall givetvis lägga till så man får fram bbCode och andra delningsmöjligheter och information om bilden, dessutom vilka storlekar bilden finns i, i framtiden kanske även så man kan spara en egen bildstorlek. Taggar: Det finns inga taggar än men det skall jag lägga till, kommer nog sno funktionen som jag gjorde för mitt CMS, den fungerar helt ok nu, så blir taggar för bilder åtminstonde, kanske album med, får se Sökning: Just nu kan man bara söka efter bilder när man vill lägga till dom i sitt album, men skall givetvis gå att bara göra en helt vanlig sökning sen med Ändra namn: Japp, detta gäller både bilder och album Diverse grejer: Kunna ta bort bilder/album och ta bort bilder från album, anledningen till att jag inte lagt till det än är för att det är lite drygt, ganska mycket som måste hända när man tar bort en bild, tex, ta bort bilden (duh), ta bort databasraden för bildens album tillhörighet, ta bort all metadata om bilden (storlek, taggar, dimensioner, osv), minska användarens bildcount med -1, ändra användarens använt utrymme (jag sparar för tillfället hur många MB utrymme en användare har använt, jag räknar dock bara orginalbildens storlek, alla andra storlekar som görs får användaren "på köpet"), albumen som bilden var inlaggd i måste också minska sin AlbumPhotoCount-1. Så japp, lite småpyssel, inget svårt men ja; det är inget jag ser fram emot att göra :P Detta projektet var ju mest för skojs skull, kommer inte göra en riktig tjänst av det då det finns alldeles för mycket bildhosting-sidor, men ja, som sagt, något för att dämpa rastlösheten och något som jag länge velat göra, sidan är uppe och fungerar precis som bilderna visar, men jao, vetifan, tänkte släppa in lite alfa-testare snart för skojs skull, är ju vissa designelement som jag tänkt använda på en annan kommersiell sida så vore kul med input från några och se om det fungerar.
165 visningar #PHP · #Programmering · #Webbutveckling
11 Aug 2013
2013-08-11 12:40:34
Det var ju inte överdrivet längesen jag byggde ihop det första adminsystemet för min nya sida efter det att jag gick ifrån WordPress, men det systemet kändes som ett riktigt hastverk, det var så oerhört grötigt och massa annan skit i det, mest under ytan, men det slängdes ju bara ihop för att kunna posta lite inlägg och ladda upp lite bilder, inte mer än så. Men nu när jag har migrerat sidan från WordPress, med alla inlägg och bilder så tänkte jag att det var dags att göra ett riktigt adminsystem, eller CMS, eller whatever. Det gamla såg ut såhär: (och baserades på Squarespace design, eller ja, snudd på stulen :S) Och nya ser ut såhär: Skall försöka ta det bästa från dom existerande CMS:en och lite eget lullull. Lagt in stöd för taggning av inläggen, den funktionen är krångligare än vad man tror, kanske skall göra ett separat inlägg för det så jag kommer ihåg det till nästa gång, för visst, att bara lägga in taggar i databasen är ju inga problem, men att matcha redan existerande OCH hålla koll så inga dubletter läggs till för versaler/gemener i olika blandningar men samma "slug", dessutom databasen tycker det är en jättebra idé att Apple och Äpple är samma ord, fastän det inte är det, så det måste man kolla upp och hålla på och krångla med så databasen inte gör något dumt osv. Har även lagt till ett smidigare bildgalleri, med instant search så det är enkelt att hitta bilder som man lagt till i inlägget, eller hitta andra bilder från det globala bildbiblioteket om man nu vill lägga in samma bild i flera inlägg osv. Detta är ju givetvis inte klart på långa vägar men det är en liten början iaf :P
198 visningar #CMS · #PHP · #Programmering · #Webbutveckling
6 Nov 2012
2012-11-06 14:47:55
Japp, blev lite kodningssugen häromdagen så började koda på ett forum från scratch, första gången jag kodar på ett forum helt från scratch, tog inte så lång tid som jag först trodde att det skulle göra. Är dock lite kvar på forumet, eller ja, den mest dryga funktionen att koda på: en läst/olästa trådar funktion, alltså det är ju inte överdrivet svårt att koda själva funktionen men det är en sjukt tung funktion för databasen, det går att göra en funktion som sparar allt i $_SESSION eller i $_COOKIE men jag vill att funktionen skall fungera oavsett vilken dator personen loggar in på. Finns 100 olika sätt att göra det på också, just nu har jag valt en ganska basic version, den är inte så jätteresurskrävande för servrarna och hyffsat stabil. En sådanhär funktion kommer alltid använda en jäkla massa rader i databasen, speciellt om det är massa användare, jag kommer att använda en MEMORY databas då datan som lagras är extremt tillfällig och inte speciellt mycket data per rad. När någon besöker en tråd så skapas det en rad i databasen som sparar “user_id” och “thread_id” värdena, sen när man besöker ett forum så hämtas alla rader i databasen som stämmer överens med användarens “user_id” och slänger in dessa i en array, för att sen visa om en tråd är oläst eller inte så är det bara att använda i PHP:s in_array() funktion. När någon sen postar i en tråd så tas alla rader i databasen bort som innehåller det “thread_id” som användaren postade sitt inlägg i. Då blir tråden oläst igen för alla. Ett alternativ är ju att slänga in alla besökare i en egen kolumn i trådens rad, när någon då besöker tråden så lägger man till vilka “user_id” som har besökt tråden, efter några besök ser kolumnen ut ungefär såhär: “3,5,7,33,7733,5454,835,345,44″, då är det ju bara att göra en explode på den kolumnen, matchar då något av värdena användarens “user_id” så markeras tråden som läst. Problemet med detta är att det kan bli väldigt många som besöker en tråd och då kanske inte alla “user_id” får plats i kolumnen, så för att kompensera för detta får man kanske använda en LONGTEXT eller något annan storage i MySQL som kan rymma väldigt många tecken. Att göra en “Markera alla forumtrådar som lästa”-funktion är väldigt enkelt, när någon trycker på den knappen så läggs datumet in i en kolumn, så trådar vars senaste inlägg är äldre än denna tidpunkten kommer att markeras som lästa. Gjorde en enkel liten chatt också, går ju att expandera denna i framtiden också, kanske med en privatchatt del osv. Har även börjat lite på användarprofilerna. Skall göra Community koden så heltäckande som möjligt men ändå så “ren” som möjligt utan en massa lullull, detta för att man skall kunna återanvända koden för en rad olika Communities som man kanske kan lansera i framtiden, så är det ju bara att lägga ett par dagar på att customizera koden för just den sidan.
165 visningar #PHP · #Programmering · #Webbutveckling