Inlägg

Inlägg som Tazavoo har skrivit i forumet
Av Tazavoo

På Google, är det den cachade versionen du försöker öppna? Om den är tillgänglig så ser du en liten pil nedåt efter adressen, klicka på den och sedan "Cachad".

Av Tazavoo

Det ska nog vara säkert att lagra din jwt-sträng i en cookie.

Du måste ha en bra secret, dock. Annars finns risken att någon kan cracka den, antingen med brute force eller en rainbow table.

Sedan måste du självklart också alltid verifiera den innan du använder den.

Det kan även löna sig att kolla på hur du skydder dig mot XSS och CSRF, men det har inte direkt med jwt att göra.

Av Tazavoo

Den här videon är intressant KotlinConf 2019: What's new in Java 19: The end of Kotlin? by Jake Wharton

Java 19 lär inte bli "the end of Kotlin", men många saker som Kotlin har är på kommande till Java. Jag ser det som mycket möjligt att Java kommer att ta tillbaka andelar främst av andra programmeringsspråk, då det kommer till språkens popularitet.

Angående när man ska använda Kotlin, så gäller det väl att om man gillar att använda det, och har möjlighet att använda det, så använd det! Java 19 är inte här på ett bra tag ännu

Av Tazavoo

Jag tror ditt problem är din "System.out.println(myScan.nextLine());". Jag antar att den skriver ut Borås?

Som du vet, eller borde veta på basis av hur du har skrivit din kod, så flytter det också skannerns pekare till nästa rad. Så när din loop börjar är första raden "0 20 650 400 560 480 1400", som sparas som stadens namn. Nästa rad är "Göteborg", som sparas i din array "row". När den sedan försöker konvertera "Göteborg" till en int så får du förstås ett fel.

Av Tazavoo
Skrivet av heretic16:

Jag får faktiskt null när jag tar Autowired på ett fält i en vaadin klass där fältet är en compinent från en spring klass.

Jag använder Spring Initzilisr

Exempel:

@Getter @Component public class DigitalOutputs { private Grid<GridTable> grid; // Vaadin komponent @Autowired private DigitalsRepository digitalsRepository; // Denna är NULL public DigitalOutputs() { // Create a grid list where we collect our grid rows List<GridTable> gridList = new ArrayList<>(); System.out.println(null == digitalsRepository);

Eller

@Route("") @Viewport("width=device-width, minimum-scale=1, initial-scale=1, user-scalable=yes, viewport-fit=cover") @PWA(name = "My Application", shortName = "My App") public class MainView extends AppLayout { /** * */ private static final long serialVersionUID = 1L; @Autowired private DigitalsRepository digitalsRepository; private DigitalOutputs digitalOutputs = new DigitalOutputs(digitalsRepository); // Denna blir null public MainView() { System.out.println("Denna är null?"); System.out.println(null == digitalsRepository); // Denna är inte null, men hinner inte anropas

Så konstruktören hinner inte anropas.

Skickades från m.sweclockers.com

Den borde vara null i constructorn också. Detta har inte med Vaadin att göra, utan med Springs dependency injection.

De två vanligaste sätten att använda @Autowired är "field injection" och "constructor injection".

Du använder field injection, vilket innebär att Spring kommer att sätta värdet på det fältet efter att constructorn har kallats. Det är alltså inte tillgängligt i constructorn, och inte heller före.

Det andra vanliga alternativet är att Spring skickar värdet till din constructor, och att du själv sparar det i ditt fält. Detta skulle jag rekommendera i ditt fall.

@Component public class DigitalOutputs { ... private DigitalsRepository digitalsRepository; @Autowired public DigitalOutputs(DigitalsRepository digitalsRepository) { this.digitalsRepository = digitalsRepository; } }

Sen i din MainView gäller samma sak, vill du att de ska vara tillgängliga redan i constructorn så bör du använda constructor injection, annars är field injection okej.

Av Tazavoo
Skrivet av heretic16:

Vet du hur man kommunicerar mellan Vaadin klasser och Spring klasser? Vaadin kan ju inte hantera @Autowired från Spring klasser.
Jag har löst detta igenom att ha en gemensam klass som är statisk. Den tolkar jag som en brygga över Spring till Vaadin. Det fungerar, men säkert inte ett standardsätt att lösa problemet på.

Vaadin fungerar bra med Spring och @Autowired. Om du använder Spring Boot bör du lägga till Vaadins Spring Boot Starter dependency för att kunna använda dependency injection i dina rutter.

Lättast är det att börja med ett Spring Boot projekt från vaadin.com/start, annars kan du läsa här hur du lägger till den dependencyn: https://vaadin.com/docs/v14/flow/spring/tutorial-spring-basic...

Av Tazavoo
Skrivet av Bryal:

Fast i denna tråd pratar vi väl just om att kompilera Java till klientkod med Vaadin? För i det sammanhanget stämmer det ju inte att det "generellt gäller att kod som skrivs i Java är säker, medan eventuell JS kod inte är det" som du säger -- i båda fallen är det klientkod!

Det är sant att den del av Java-koden (GWT-kod) som kompileras till JavaScript i tidigare versioner av Vaadin inte är "säker".

Dock är detta generellt en mycket liten del av koden, och många projekt klarar sig bra utan att skriva någon GWT-kod alls. Den Java-kod man vanligtvis skriver då man gör appar med Vaadin kompileras aldrig till JavaScript, utan körs bara som Java på servern.

I nyare versioner av Vaadin (10+) används inte GWT alls*, så där är all Java kod säker.

*En liten del av Vaadins ramverk använder GWT för internt bruk, men denna kod är förkompilerad.

Av Tazavoo
Skrivet av JeanC:

Åter igen ska ALDRIG frontend sidan sköta säkerhet av något slag. Visst den kan hjälpa till vid validering att man fyllt i fält TYP korrekt; men alltid backend sidan som ska bekräfta detta också. Känns som att du läst någon medium blogg och spyr ur dig samma galla om och om igen.

Känns som om du inte har läst någonting, det är ju exakt det jag säger.

Av Tazavoo
Skrivet av JeanC:

En f.d kollega använde det; för att ändra saker eller lägga till enklare funktionalitet var krångligt och bökigt enligt honom.

Slutade med att jag skrev om hela applikationen under en arbetsdag och då hade han suttit flera månader med Vaadin-projektet.

Inte ens demo sidan som Taaz länkade fungerar. 502 och de lade upp posten för tre veckor sedan:

https://labs.vaadin.com/business-hybrid/

Smakar illa i mun enligt mig.

Sedan att Vaadin är rätt långsamt är ju rätt trist.

--
Hade kört på React eller Angular.

MEN!!!

Om du känner dig bekväm och produktiv med Vaadin så självklart ska du använda det. Min poäng är mer att om du ska lära dig något nytt:

Vaadin / React / Angular så hade jag kört på någon av de sistnämnda.

Är också bra att ha lite erfarenhet av fler programmerings-språk.

Dåligt att länken inte fungerar, ska påpeka detta åt de ansvariga.

Skrivet av JeanC:

Vad är det som är så speciellt med Spring Security som Javascript saknar? För det första så ska ingen form av säkerhet ske på klientsidan (javascript); det kommer inte Vaadin hjälpa till med heller då det kompileras till javascript.

Spring Security verkar vara mer en Adapter för olika authentiserings-lösningar (OAuth2, JWT etc.)

Dock är det här på backend sidan och vill du skriva javascript för backend lutar det mer åt NodeJS.. men vi pratar frontend här.

Att visa X-vy för person med rättighet X är inga konstigheter.

Att Javascript skulle vara krångligt får ju vara upp till dig då.

Vaadin 10+ kompileras inte längre till JavaScript, och i tidigare versioner var det endast en liten del av koden (den som körs i browsern) som kompilerades till JS.

Så generellt gäller att kod som skrivs i Java är säker, medan eventuell JS kod inte är det.

Av Tazavoo

Om du vill skriva lite kod, och gärna håller dej till Java, så är Vaadin ett riktigt bra alternativ. Som du skriver så är kärnan i Vaadin helt gratis och öppen källkod, även om du skulle använda det i kommersiellt syfte. Majoriteten av Vaadin-projekt använder dessutom Spring Boot, så integrationen där fungerar bra.

För dej är det största problemet säkert att Vaadin Charts kräver en Pro-licens. Så om du vill göra grafer gratis måste du antingen använda ett gratis JavaScript-bibliotek och skriva en del JS-kod själv, eller använda någon add-on, t.ex. https://vaadin.com/directory/component/apexchartsjs/ verkar vara ett bra alternativ. Log-in och tabeller fungerar bra i Vaadins standardutgåva.

Den annars kanske största nackdelen är att Vaadin är stateful, d.v.s all information om en användarsession sparas på servern. Det har fördelen att servern känner till hela UI:t, vilket ger ökad säkerhet, samt att du kan spara information om en session säkert på servern, så som vilka behörigheter en användare har, eller kanske en kundvagn. Nackdelen är att allt detta förbrukar mera minne än en stateless lösning.

Vill ännu nämna att jag jobbar på Vaadin, men det jag skriver här är mina personliga åsikter.

Av Tazavoo

@mrweb: Det där stämmer inte riktigt. Du behöver inte använda JavaScript för att definiera dina komponenter, det går lika bra med Java som förut.

Den enda gången JavaScript krävs är om du vill köra någon kod i webbläsaren, eller om du behöver modifiera själva webbkomponterna. Båda dessa fall hör till ovanligheterna.

Vad det gäller standarder så är det just dem Vaadin följer, med s.k. webbkomponenter för själva webbläsarimplementationen av komponenterna. Dessa webbkomponenter går också att använda utan Vaadins back-end.

Fördelen med Vaadins kommunikation är att de flesta säkerhetsdetaljer sköts automatiskt. Det är också mycket snabbare att använda än att t.ex. göra REST-endpoints.

Sedan passar Vaadin förstås inte alla applikationer, och det finns många fall då just t.ex. React passar bättre.

Med Vaadin 15 kommer ökade möjligheter att göra client-side views, och att exportera Java services till autogenererad TypeScript. Då har du type safety hela vägen från servern till browsern. Här finns ett exempel https://vaadin.com/labs/client-server-app

Det här möjliggör också att exportera dina Java services till TypeScript och bruka dem med t.ex. React eller Angular.

Av Tazavoo
Skrivet av BlasteRs:

@Tazavoo: Hej! Vi har upptäckt felet och åtgärdat det Det hade med att launchern laddade ner en äldre version än den borde.
Om du startar om Launchern nu så kommer den patcha spelet till senaste versionen, och då kommer du in

Annars, hör av dig !

Edit: Du får gärna skriva även om det funkar, så jag vet

Fungerar, bra jobbat!

Av Tazavoo

Testade spelet, kunde skapa en karaktär, men när jag trycker på i menyn den blir skärmen svart och GPUn går på 100%. Jag hör också något bakgrundsljud. Jag väntade cirka 30 sekunder men ingenting hände.

Av Tazavoo

Det slutliga valet föll på

Ryzen 3700X (stock cooler)
MSI B450M Mortar Max (mATX)
Crucial Ballistix Sport 32GB (2x16GB) 3200MHz DDR4
Silicon Power 1TB NVMe SSD (3000 MB/s read/write)
Sapphire RX 5700XT Pulse
Fractal Design Meshify C Mini
CM Silent Pro Gold 800 W (ägde från förut)

Något högljudd, men prestandan är mycket bra, jämfört med min förra dator får jag nu 23000 poäng i 3DMark Firestrike istället för 3000.

Av Tazavoo

P.S: Du har termerna fel väg, "suit" på engelska betyder färg/svit/land, d.v.s hjärter, ruter, klöver och spader.

Av Tazavoo
Skrivet av dumjohan:

3600 är också riktigt go prestanda för sitt pris. Det beror på lite som sagt, är det många virtuella maskiner du har igång samtidigt? Kommer du göra annat på datorn medans de tuggar?

Jag själv har en 3600 och är sjukt nöjd. Jag sysslar också med programmering men främst spelande. Kan varmt rekommendera den.

En annan kylare kan jag dock rekommendera. Den som följer med kyler helt OK, men blev riktigt varmt och högljutt vid heavy load.

Sällan fler än en. Då jag programmerar så är det typ IntelliJ (1-3 fönster), 10-50 tabbar i Chrome, kanske en virtuell maskin, och några små program typ Notepad++, pgAdmin, VSCode och vad man nu kan tänka sig.

Men har gärna bra prestanda i spel också, programmeringen kommer att vara som hobby trots allt (använder en annan dator för jobb). Just nu lutar det ännu mot 3600 med annan kylare, om inte jag får in en 3700X, då säkert med standardkylare.

Av Tazavoo
Skrivet av dumjohan:

Tjena!

Förra generationens Ryzen 8C/16T kanske är ett alternativ för dig. Presterar lite sämre i spel, men för dina användingsområden kanske det är att föredra. Denna finns som fyndvara på NetOnNet för 2 190 kr. Närmsta pris hos en svensk återförsäljare är 2 589 kr.

Du kan potentiellt spara 540 kr genom att välja den, eftersom det följer med Wraith Prism som ska vara väldigt mycket bättre kylare än den som medföljer 3600.

https://www.netonnet.se/art/fyndvaror/fyndvaror-datorkomponen...

Du kan väl googla hur stor skillnad det är på spel 2700X kontra 3600, har ingen vidare koll där känner jag.

Lycka till

Bra poäng. Man vill ju oftast ha den nyaste generationen, men om man får mera för pengarna med en äldre generation så varför inte? Ska titta lite närmare

Av Tazavoo

Åsikter om ny dator för programming och spel, ~1200€

Ser ni några problem med följande dator?

Primärt för programming (webappar, Java, JS, Node, Docker, VMs o.s.v.), men vill också kunna spela kommande titlar, t.ex. Elder Scrolls VI, på okej inställningar.

Används med en 3440x1440 ultrawide 100Hz VA-panel skärm.

Fick tipset om att det för programming (kompilering t.ex.) kanske är bättre med en 3700X, men har svårt att motivera ~150€ till för den.

Som SSD tänkte jag HP EX920 1TB för 150€, den gick inte att välja på komponentkoll.

Tänker använda mitt gamla nätaggregat, ett CM Silent Pro Gold 800W.

https://komponentkoll.se/bild/EKYcR.png

Av Tazavoo

På vilken rad får du NullPointerException? Det lär sig en hel del om varför du får det..

Edit: Min gissning är att det kommer på raden

label_rad_substance.setText(combobox_radio.getValue().getSubstance().getName());

När du byter värde i combobox_suppliers så kallar du combobox_radio.getItems().clear();. Om du då redan har ett värde i combobox_radio, så antar jag (har inte användt JavaFX på många år) att din listener på combobox_radio anropas (då värdet ändrar från det du hade tidigare till null). Eftersom combobox_radio.getValue() returnerar null, så får du NullPointerException då du försöker anropa getSubstance() på det.

Lösningen är då alltså att i listenern för combobox_radio först säkerställa att värdet inte är null.

Av Tazavoo

Som @Zajin försökte förklara för dig, så körs inte den här koden genast

request.onreadystatechange = function() { }

Utan den är en så kallad "callback", någonting som anropas av

request.send()

då den är färdig (och några gånger före det som @Sebbepojken påpekar). Det att du definierar en funktion gör inte att den körs.

Du kan tänka dej att koden för request.send() är något i den här stilen

function send() { < gör en anslutning > this.readystate = 1; this.onreadystatechange(); // <-- Här anropas den funktion du lagrat < gör något annat > this.readystate = 2; this.onreadystatechange(); // <-- Här anropas din funktion för andra gången < osv. > }