Inlägg

Inlägg som Teknocide har skrivit i forumet
Av Teknocide
Skrivet av atman:

Du är helt klart på rätt spår!
Det enda är att jag inte vill ha med artikelnr med i bilden. Vill bara ha hylla, fack och antalet.
För om jag gör som ovan kommer jag få med tusentals artikelnr som är 0 till antalet i och med att de ligger kvar som historik.

Saldo är alltså inte saldot som det ser ut i tabellen, det är egentligen bara en flagga som visar att artikeln finns i lagret. Ett artikelnr är unikt för just den artikeln. Finns det flera poster av ett nummer är det samma artikel som visar historik. Saldo-flaggan kan bara vara 0 eller 1.

SELECT hylla, fack, COUNT(artikelnr) AS antal FROM Storeage WHERE (saldo = 1) GROUP BY hylla, fack ORDER BY hylla, fack

Denna koden ovan visar helt rätt, förutom att jag inte ser alla lagerplatser med count(artikelnr) 0st saldo=1 så att säga..
Vill kombinera ovan med att visa lagerplatser som är tomma så listan blir komplett.

Det är kanske är ganska unikt upplagd databas, kanske därför det är svårt att förstå hur den är uppbyggd. Anledningen är att kunna följa en artikel historiskt är en central del i hanteringen.

Har du testat SQL-satsen jag skrev ovanför?

Av Teknocide
Skrivet av atman:

Dessa SQL frågor..

Jag har en tabell som innehåller massor av artiklar. När den har saldo=1 i saldo-kolumnen finns den i lagret. När den är satt till 0 har den således levererats men det finns alltså en "logg" kvar.

Jag vill ta fram alla fack och hyllor som och antalet artiklar per fack-hylla.

SELECT fack, hylla, COUNT(saldo) AS antalet FROM Storeage WHERE (saldo = 1) GROUP BY fack,hylla ORDER BY fack,hylla

Har kommit så här långt, men som ni märket visas bara lagerplatser för alla fack och hyllor som innehåller artiklar, vilket jag vill ha.
Men jag vill också visa alla fack och hyllor som är tomma. (dvs ingen artikel har saldo=1)

Hur gör jag, har testat med having, men jag listar bara allt (inkl loggen) med det.

Har nån någon bra idé?

Om jag förstår dig rätt..

SELECT fack, hylla, SUM(saldo) AS antalet FROM Storeage GROUP BY fack,hylla ORDER BY fack,hylla

Av Teknocide
Skrivet av Alling:

Det är väldigt sant. Jag gjorde bedömningen att det var viktigare att undvika att scriptet kraschar än att kunna hitta buggar. Kan ha gjort en mindre bra bedömning.

Tycker du att man ska strunta helt i null-/typcheck eller göra något särskilt om en sådan bugg skulle uppstå (typ printa ett felmeddelande i konsolen)?

I just detta fall hade jag skippat nullcheck. Det kan se skrämmande ut att få röd text i konsolen istället för en snäll console-log, men felmeddelandet har i moderna webbläsare intressant information som kan underlätta felsökning.

Användarinmatad data är däremot bra att validera. Om ett formulärfält måste innehålla ett primtal mellan 3 och 99, men användaren av någon anledning missat att mata in detta, är det god sed att rapportera problemet till användaren. Att fastställa att fältet innehåller ett numeriskt värde kan innebära att man gör en nullcheck och andra jämförelser för att undvika att koden kraschar.

Försök att separera på kod som validerar data och kod som utför beräkningar. I exemplet ovan skulle det innebära att en funktion isPrime(n) INTE kollar om värdet n är null eller en texten "hej", utan antar att den har blivit skickad ett faktiskt siffervärde. Valideringen görs i ett tidigare skede (förslagsvis en annan funktion) där man väljer att antingen omvandla det inmatade värdet till ett tal och testa det med isPrime, eller rapportera tillbaka ett fel till användaren.

Av Teknocide
Skrivet av Alling:

Jag har aldrig använt jQuery, men det finns andra som har det.

För att man arbetar med ett objekt som kanske är null eller av en annan typ än man förväntar sig.

Prova att köra följande kodsnuttar (var för sig):

document.getElementById("sahluoghulsahgbulawe").innerHTML = "Hello world!";

$("#sahluoghulsahgbulawe")[0].reset();

document.body.reset();

I just detta fall skulle jag avråda från att göra en nullcheck. Skriptets funktion är att rensa ett specifikt formulär. Om det inte går pga avsaknat id är det fel i sidans funktionalitet. En nullcheck resulterar i att felet tystas ned.

Av Teknocide
Skrivet av drwlz:

Jo, jag förstår att det är problemet (fattade bara inte hur jag skulle komma runt det), men jag hittade en lösning (det verkar rassla till i skallen när man skapar en tråd på sweclockers).

setTimeout(clearInput, 1000);

Fördröjer bara rensningen utav inputen helt enkelt

Det är bättre att rensa formuläret när du vet att det gått iväg. Om användaren har seg lina eller tillfälligt tappar kopplingen med sin router eller liknande kan du komma att rensa formuläret innan det hunnit skickas ändå. En bättre lösning är att lägga på en callback på ditt AJAX-request.

Av Teknocide
Skrivet av iXam:

Vilka problem kan man stöta på? Har använt det friskt och aldrig stött på några problem som jag inte kan fixa genom att manuellt flusha utifall jag skulle behöva spotta ut extremt mycket data.

För användaren blir det extra latens då svaret inte kan strömmas. För utvecklaren blir det en extra grej att tänka på då man explicit måste spola buffern som du säger, och det blir fortfarande fel om man gör det innan man satt headers som behöver finnas.

Att använda output buffering för att komma runt problemet med att data har skickats innan headrar satts är att medicinera mot symptomen istället för att fixa rotorsaken till problemet. Ofta är det bara ett osynligt tecken, som ett UTF8-byte-order-mark, som triggar PHP till att börja strömma datan till klienten.

Jag kan tänka mig att man i andra fall har byggt sin webapp på så vis att man medvetet väljer att skicka data innan man beslutat om man vill skicka headrar. Detta kan vara ett resultat av dålig kodarkitektur och bör avhjälpas istället för att slätas över.

Av Teknocide
Skrivet av furbel:

Det enda jag är kritisk emot är hur Google i princip numera ensamt styr över vilka standarder som ska införas och vilka som ska blockeras.

Nästa år ska ju alla tvingas köra över SSL/TLS också, blir skoj för alla personliga domäner som nu måste köpa certs.

Tycker det börjar bli dags att bryta Googles totala dominans på något sätt.

Det finns ett par certifikatauktoriteter som tillhandahåller gratis certifiering, exempelvis https://letsencrypt.org/
Säkerhet är viktigt och detta är ett stort steg i rätt riktning! Det är oförlåtligt att det tagit så lång tid för någon att ta initiativ.

Av Teknocide
Skrivet av Dunder:

Ja, det är ju hela poängen med konstruktorn, men somliga värden är omöjliga att veta i början av livscykeln.

Nu var det ett tag sen jag satt med Scala men vad jag minns så genereras getters/setters till och med automatiskt där?
Visst, det går att lägga till private, men huruvida man arbetar med omuterbara instanser eller inte verkar skilja från person till person (och från tutorial till tutorial).

Jag skulle säga att man inte kan dra allt över en kam; vissa klasser vill man ha omuterbara, andra inte.

Om de är omöjliga att veta i början av livscykeln går det ofta att flytta dem till en annan klass som kapslar in de värdena när de är kända.

Det mesta är omuterbart som standard i Scala. Du kan använda var när du deklarerar en instansvariabel för att säga att den ska vara muterbar — Scala genererar mycket riktigt en setter i detta fall — men det görs som sagt i princip aldrig. På en höft skulle jag säga att omuterbart används i upp till 98% av all kod.

Muterbara variabler används främst inuti metoder för att optimera tighta loopar, men utifrån sett kommer anroparen aldrig i direkt kontakt med dessa variabler. En uppsjö buggar elimineras på detta vis.

Av Teknocide

Output buffering är en klassisk PHP-krycka som potentiellt kan orsaka mer problem än den löser. Bättre då att fixa problemet som sänder ut data på strömmen innan headrarna sätts.

Av Teknocide
Skrivet av Dunder:

Fast det där känns snarare som att man försöker visa att något är dåligt genom att använda ett dåligt exempel

Självklart ska man lägga all logik i den klass den hör till, detta är en av anledningarna till att ha getters/setters. Att hämta värden och lagra i lokala variabler fyller ju ingen funktion.

Alla klassvariabler behöver inte ha getters/setters, men tänk om din Point har ett namn/ID/färg/whatever, ska man inte kunna hämta det då?

Klassinstanser bör initialiseras genom konstruktorn. Med setters är det mycket svårare att kontrollera att klassen inte har dåligt state eftersom det när som helst kan bytas. Detta komplicerar bland annat flertrådad programmering. Därtill blir det lättare att se om en klass håller på att bli för stor när alla dependencies måste sättas genom konstruktorn.

I Scala arbetar man nästan uteslutande med så kallade omuterbara instanser, det vill säga när en klassinstans väl skapats går det inte att ändra variablerna i den. Detta låter kanske som en begränsning men är inte lika konstigt som man kan tro.

Av Teknocide

Testa att klicka på det lilla pluset i högerkanten som syns på första bilden

Av Teknocide

Argumentet till grep är ett regex — ett reguljärt uttryck. *.txt tolkas som "noll eller flera gånger, följt av vilket tecken som helst en gång, följt av sekvensen 'txt'". Det misslyckas i och med att uttrycket börjar med en kvantifiering utan någon antydan om vad som förväntas komma noll eller flera gånger.

grep \\.txt$ gör det du vill: grepa efter rader där sekvensen .txt, följt av slut av rad ($) förekommer. Dollartecknet gör att vi inte råkar ta med saker som .txt.zip, och \ behövs för att få grep att tolka punkt som ett punkttecken snarare än ett godtyckligt tecken.

För att bash inte ska tolka \ som en escape character använder vi dubbla bakåtslash (escape escape). Vi kan även innesluta argumentet till grep i single-quotes för samma ändamål: '\.txt$'

Av Teknocide
Skrivet av McZ:

Data ska formateras till HTML som med hjälp av CSS skapar A4 sidor i webläsaren. Resultatet behöver inte vara validerad XHTML kod, endast se bra ut i webläsaren för att kunna skriva ut.

Javascript skickar en fråga till en webserver och får estetiskt oformaterad data tillbaka i form av XML (eller Json eller nått annat).
XML data formateras (med hjälp av XSL transforms) och sedan placeras detta på websidan utan att den laddas om.

Tänkt användning

  1. Öppna min dokumentmall (dubbelklicka på HTML filen)

  2. Skriv in informationen för sidhuvud och tabellfälten i webläsaren (lika som i Excelmallen, men man kan inte "förstöra" mallen)

  3. Generera A4 sidor med sidhuvud/sidfot osv på rätt plats

Så för att slippa göra om hela processen ovan, ifall man råkar missa en rad (vilket ställer till det för alla lata som inte orkar fixa fusk-sidhuvud/sidfot i excelmallen och tar bort den) tänkte jag spara data i en XML fil. Som laddas in och formateras till HTML med hjälp av javascript och XSL transforms, till skillnad från AJAX så laddas filen lokalt från datorn.

Då skulle det bli:

  1. Öppna min dokumentmall (dubbelklicka på HTML filen)

  2. Välj Nytt dokument eller Öppna befintligt

  3. Skriv in/ändra informationen för sidhuvud och tabellfälten i webläsaren (lika som i Excelmallen, men man kan inte "förstöra" mallen)

  4. Generera A4 sidor med sidhuvud/sidfot osv på rätt plats

Mallen måste bestå av endast EN fil (XML data är undantag för närvarande), det är lättare att flytta runt på en mall som endast består av en fil. Dessutom så kan inte websidor öppna lokala filer (med vissa undantag).

Förutsatt att klientwebbläsaren kan köra XSLT så borde det bästa vara att skriva samman det hela i ett XHTML-dokument. Då XHTML är valid XML med stöd för namespaces borde det fungera.

Kanske är det något sånt här du är ute efter? http://stackoverflow.com/questions/30321702/transforming-inli...

Av Teknocide
Skrivet av McZ:

Jag har googlat massor efter HTML fil med XSL inbakat i den så som man kan göra med CSS/JS. Men jag hittar inget, bara tvärtom inline i XML eller XSL.

Den ska vara enkel att använda och det går inte att länka till lokala filer utan webserver (eller utan att göra andra "fulhack" i webläsare)

HTML filen är en mall/template för A4 dokument som kan innehålla okänd mängd sidor. Just nu har vi några excel filer som mall där olika personer fyller i. Men excel tål inte tabeller i sidhuvud/sidfot därför har någon bakat in det i excel. Problemet är att många är för lat för att fixa till sidhuvud/sidfot när man skjuter in en rad på en full sida, vilket resulterar i att många har tagit bort den informationen samt förändrat utseende på andra sätt.

Så min tanke var att skapa EN enkel fristående HTML fil som med hjälp av CSS och JS genererar A4 sidor med korrekt sidhuvud/sidfot m.m. Sedan med lite mer JS trixande kan man klicka på sidhuvud och datatabellen för att få fram redigeringsmöjligheter där man enkelt kan lägga till/ta bort och flytta om rader.
Så för att inte behöva göra om alltihopa varje gång man bara ska ändra en rad, så tänkte jag att man kan spara data i en XML fil som man då kan konvertera till HTML på samma sätt som man gör vid AJAX anrop.

tldr: Jag vill ha EN HTML fil som innehåller html, css, js och xsl. som kan öppna och processa XML (eller txt)

Kanske XHTML + XSL + XSL Transforms?

Förstår inte om du vill omvandla XML-data till (X)HTML genom XSLT, eller om du är ute efter en webbsida som själv kan omvandla välformaterad XML till ett nytt XHTML-dokument.

Är inte heller helt säker på vad du menar med exempelvis "konvertera till HTML på samma sätt som man gör vid AJAX anrop".

Av Teknocide

Jag jobbar med Scala och använder bland annat https://scalafiddle.io för att testa enkla grejer eller bara dela med mig av kodsnippets till kollegor.

Så här t ex: https://scalafiddle.io/sf/L4OxL4x/1

Av Teknocide

Du kan räkna fram turn inuti dina loopar genom ekvationen i * 5 + j. En annan möjlighet är att bara ha en ensam loop från 0 till turns och räkna fram i och j som i = t / 5 samt j = t % 5.

Ett tips är att namnge dina variabler bättre: "turn" kan heta "deckIndex" och "j" kan bli "playerIndex".

Rekommenderar även att namnge värdet 5 så det blir mer tydligt vad det avser.

Av Teknocide
Skrivet av hjarterkung:

Någon som kan rekommendera en bra guide för hur man använder MS Access?

Jag vill skapa en databas för anställd personal och all tillhörande information som tillhör varje person, allt ifrån kontakt information, anställning, utkvitterade nycklar etc.

Detta vill jag sedan presentera i någon form av vy... typ ett anställningskort med all samlad information.

Går detta att göra i MS access och finns det några vettiga guider för en nybörjare?
gärna svenska youtube genomgångar....

eller finns det bättre program än MS Access?

Du kan göra det du vill i MS Access, Open-/LibreOffice. Fördelen med en sådan lösning är att det med rätt enkla medel går att bygga gränssnitt och rapporter på data.

För enklare fall kan du även lösa det i Google Sheets vilket har fördelen att vara ett webbaserat gränssnitt, så du behöver inte se till att alla datorer har en (rätt) version av MS Access. Här är det en klassisk "Excel"-struktur som gäller, dvs inmatningsgränssnittet är en enkel tabell. Det går att ställa ganska sofistikerade frågor mot tabelldatan med query(), men det är mer manuellt att utforma sådana frågor än klicka-dra-släpp-approachen som MS Access och dylikt erbjuder.

Google har även en experimentell drive-app, Fusion Tables, som vad jag kan förstå ska vara mer databasorienterad än exempelvis Sheets. Jag har ingen erfarenhet av Fusion Tables så det är svårt att rekommendera något.

Av Teknocide

Tycker definitivt det blir renare kod om man har en event handler för varje kontroll. En kontroll ska ofta bara reagera på ett event och att lägga alla event i en handler gör det otydligt om man har implementerat en handler för en viss kontroll.

I Java 8 är det dessutom superenkelt att implementera anonyma eventhandlers med lambdas.

Java 7-: component.addEventHandler(<eventtyp>, new EventHandler<eventtyp>() { public void handle(<eventtyp>) { … } }) Java 8+: component.addEventHandler(<eventtyp>, (event) -> <gör något>);

Otestad kod men något väldigt likt ska vara möjligt

Av Teknocide
Skrivet av JesperA:

Hur klienten skickar har både andra & jag redan förklarat?

Jadu, för att hitta logiken/koden för client side ur en kompilerad app så får personen vara en jävel på att reversera maskinkod eller hitta något redan befintligt verktyg som ändå bara tar personen halva vägen. Personer som har kunskap & ork för detta, seriöst, det är ganska drygt att fixa, så ja, jag tvivlar starkt på att någon som har energi till detta slösar energin till att slutligen efter en jävla massa jobb posta highscore från en sketen app

Ja exempelvis du skrev att den kunde ha en map på 10-miljoner element från poäng till hash.

Hur ska en klient skapa en sådan map om den bara får en lista av hashar skickad till sig? Det behöver finnas en koppling mellan poäng och hash och när den kopplingen skickas från servern — som rimligen är den enda som kan veta om den — så kan man intercepta den rätt lätt.

Visst, servern kan skicka en krypterad poäng->hash map som dekrypteras av klienten innan den används men i det läget är det ju lika bra att skita i mapen helt och låta klienten kryptera sina poäng med en nyckel som bara servern kan dekryptera.

Du behöver inte bli sur i tonen, jag tycker bara det låter som ett jävla krångel för något som är omöjligt att göra perfekt och enkelt att lösa tillräckligt bra.

Av Teknocide
Skrivet av JesperA:

Hur har du tänkt hitta en giltig nyckel som du tänkt fusk-skicka till servern som motsvarar högsta värdet? Tror du någon kan hitta det högsta värdet, isåfall, vilket av följande är högst score i systemet?

mAVWm44sxipL
hHKYtp976mxF
GwQniv1P69pL
iz2FXqfo9lOu
9aBZPEfT4HeJ
nt5W7ifqhFdD
LiWI3IVg2UGG
486AeoizNl46

Högsta scoren i detta fiktiva spel är 5'000'000 så vilken av ovanstående nyckel är 5'000'000 som skickas till servern från klienten? Enda sättet att då hitta högsta scoren är genom brute force men som jag nämnde, implementerar man en rate-limit mot sin server så är det närapå omöjligt att hitta dels en giltig score & ha tur nog att hitta en hög score innan klienten blir bannad från systemet

Hur ska klienten veta vad den ska skicka för värde till servern då? Om den inte har nån logik för att slå upp rätt värde ur tabellen så kan den ju inte rapportera poäng, och om den har den logiken så ligger den på client side och då kan man använda den för att skicka valfritt värde.