Inlägg

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

Besserwisser 1

Vad fick jag poäng för?

Av Teknocide
Skrivet av pannkaksmonstret:

@Teknocide:

ser detta rimligt ut möjligtvis?

import java.util.ArrayList; public class BearCollection { private ArrayList<Bear> bears; private int totalPoints; public BearCollection() { bears = new ArrayList(); totalPoints = 0; } public void add(Bear b) { for (Bear inCollection : bears) { if (b.getName().equals(inCollection.getName())) { b.getHalfPoints(); } } bears.add(b); totalPoints += b.getPoints(); } public String toString(){ String lista = ""; for (int i = 0 ; i < bears.size(); i++ ){ lista += "Björntyp: " + bears.get(i).getName() + " Poäng för denna björn: " + bears.get(i).getPoints() + " Totalt antal sparade poäng: " + totalPoints + "\n"; } return lista; } }

public class Bear { private String name; private int points; public Bear(String name, int points) { this.name = name; this.points = points; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getHalfPoints() { points /= 2; return points; } public int getPoints() { return points; } }

Tycker du kan byta namn på metoden getHalfPoints till något i stil med setPointsToHalf() och låta den returnera void då du inte är intresserad av utdatan.

Du kan även använda samma for … in … -loop i toString() som du använder i add(), det ser snyggare ut och du använder inte indexet i utskriften ändå.

Av Teknocide
Skrivet av pannkaksmonstret:

Tack för bra input, fungerar rätt bra, har listat ut nu att jag behöver använda b.setPoints(b.getPoints()); i "for each loopen" för att ange nya värdet i points för den nya björnen. Nu återstår dock att klura på hur man adderar totalsumman till varje björn, anser ni att den variabeln "int totalSavedPoints" bör vara definierad i BearCollection klassen eller i enbart Bear? Objektorienterat sett borde den ju vara i Bear om jag inte är helt ute och cyklar?

Det finns väl ingen setPoints på Bear? Oavsett låter det poänglöst (ha!) då operationen bokstavligen säger "sätt min poäng till min poäng".

Totalsumman hör inte hemma på Bear. Möjligtvis skulle den passa på BearCollection men den kan lika gärna ligga utanför. Hellre faktiskt, på grund av hur oerhört knäpp getPoints på Bear är. Det är riktigt konstigt att den halverar poängen vid varje anrop: sideffekter som dessa brukar ses som extremt dålig praxis på en getX-metod..

Av Teknocide
Skrivet av ProgrammeringElev:

Tack för snälla svar! Jag har löst problem med att lägga till arrays length när man skapar array. Nu det visar bra

Det är fint att du löst ditt problem men array.length har ingenting med lösningen att göra.

Problemet var att du hade fått in ett osynligt tecken i din textfil mellan orden var ​stader på rad nio. Du har förmodligen skrivit om den raden nu och då fungerar det.

Av Teknocide
Skrivet av AzII:

Nej men jag kan skapa ett HTML dokument som ligger som index.html och därigenom skapa en länk för att ladda hem index.php , utan att scriptet blivit kört på servern. Blir det lättare så?

Skrivet av Hieronymus Bosch:

Ja,

i betydelsen "jag kan komma på en lösning som ordagrant gör det du försöker beskriva".
Däremot är jag inte listig nog att komma på nyttan med det du vill göra.

Fast nä, det går ju inte att göra. Klick på en länk resulterar i ett GET-request mot den länkade resursen och då ska servern köra PHP-filen på server-sidan.

Möjligtvis skulle man kunna få ner PHP-filen om index.html körs direkt från datorn eller en nätverksresurs och PHP-filen ligger bredvid och refereras till med samma protokoll, men det är ju aldrig ett scenario som förekommer när man kör på en server.

Av Teknocide
Skrivet av ProgrammeringElev:

Tack för ditt svar! Men jag har en fråga. Hur kan programmet komma ihåg ordet om man inte lägger det till någon array eller lista? Jag vill att program ska komma ihåg alla order som jag har mattat in och jämföra..

Det stämmer att du behöver spara undan använda ord i någon sorts lista om ett ord ska vara tillåtet en gång som mest.

Av Teknocide
Skrivet av Tunnelsork:

@Andi2k11: Som @Poptart och @Teknocide redan har svarat så beror det på vad du använder för IDE och vad det har stöd för, men om du använder PHP 7.x (void return type är 7.1) så kan du förtydliga exemplet redan i signaturen och göra koden robustare på samma gång. Många funktioner bör gå att förstå helt utifrån sammanhang, namn, parametrar och deras typer, samt returtyp, om dessa är väl valda.

function Test(Country $country, int $score) : void { // ... }

På tal om, se till att annotera argumentet med rätt typ, annars får man så här roliga fel..

function Test(integer $score) {} Test(1); > Fatal error: Uncaught TypeError: Argument 1 passed to Test() must be an instance of integer, integer given

Av Teknocide
Skrivet av Andi2k11:

Kunde inte komma på en bättre rubrik. Men jag är ute efter hur man lägger till information till en funktion som visar vilka parmaterar den tar emot och hur det ska vara formaterat.

Te.x. om jag skapar denna funktionen

function Test($country, $score){ echo $country . " scored " . $score . " points. Well done!"; }

Det jag vill nu är att när jag är jag längre ner i koden använder mig av funktionen genom att skriva in Test(); så vill jag få upp den där hjälprutan som blandannat finns i Dreamweaver som visar hur parametrarna $country och $score ska formateras.

Vill minnas att i något programmeringsspråk
skrev man något
@$county är vilket land funktionen ska använda sig av.
@$score är ett heltalsvärde som ska användas av funktionen

Får står ni hur jag menar?

https://www.phpdoc.org/docs/latest/references/phpdoc/basic-sy...

Sedan hänger det på ditt IDE att plocka upp kommentaren. Exempelvis IntelliJ kan göra detta.

PS: om du använder dubbelcitationstecken kan du lika gärna skriva "$country scored $score points. Well done!"

Av Teknocide
Skrivet av ProgrammeringElev:

package Kapitel9; import java.util.*; import java.io.*; public class Uppgift1_Kap9 { public static void main (String[] args) throws IOException{ Scanner sc = new Scanner(System.in); System.out.print("Infilens namn?"); System.out.flush(); String namn = sc.next(); BufferedReader inFil = new BufferedReader(new FileReader(namn)); int i; while((i = inFil.read())!=-1){ char c = (char)i; if(Character.isUpperCase(c)) Character.toLowerCase(c); BufferedWriter bw = new BufferedWriter(new FileWriter ("Hello2.txt")); bw.write(c); } } }

Det är min kod. Java skapar programmet Hello2.txt men textfil skapas tomt. Jag tror det finns fel i While satsen men har ingen aning hur ska jag byta det
Man ska inte ha någon system.out.print för att skriva ut texter från textfil.

Med Java 8 går detta att beskriva på ett enklare sätt:

public void convertToLowerCase(Path in, Path out) { // Finess #1 från Java8: try-with-resources, stänger automatiskt resursen om ett fel uppstår // Finess #2: Streams. Data går direkt från infilen till utfilen utan att allting mellanlagras i datorns minne. try (Stream<String> lines = Files.lines(in)) { // Finess #3: Method references. lines.map(String::toLowerCase) kan även skrivas lines.map(line -> line.toLowerCase()) Iterable<String> lowercased = lines.map(String::toLowerCase)::iterator; Files.write(out, lowercased); } catch (IOException e) { e.printStackTrace(); } }

Av Teknocide
Skrivet av ProgrammeringElev:

Konsol? Menar du cmd eller??

Ja, det är ett vanligt alternativ i Windows. Fungerar förmodligen i powershell också

Av Teknocide
Skrivet av ProgrammeringElev:

Jag har provat med CtrL D men det fungerar inte också. Programmet slutas inte.

Du behöver förmodligen köra programmet från konsolen för att det ska fungera, gissar på att Netbeans inte tar emot interrupt-signaler.

Av Teknocide
Skrivet av zonar:

Vilken mottagare körde du istället? Vad jag har läst så kunde man genom att komplettera med en antenn (17.3cm) få anständig räckvidd. Vad är dina erfarenheter då mina fortfarande sitter på samma breadboard?

En ny fråga:

Jag försöker köra VirtualWire och OneWire samtidigt och råkar ut för ett kompileringsproblem:

När jag kör:
Variant 1:

#include <OneWire.h> #include <VirtualWire.h> void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: }

Kompileringsfel 1:

Arduino: 1.6.13 (Windows 10), Board: "Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)" libraries\VirtualWire\VirtualWire.cpp.o (symbol from plugin): In function `crc16_update(unsigned int, unsigned char)': (.text+0x0): multiple definition of `crc16_update(unsigned int, unsigned char)' sketch\sketch_dec21b.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here libraries\VirtualWire\VirtualWire.cpp.o (symbol from plugin): In function `crc16_update(unsigned int, unsigned char)': (.text+0x0): multiple definition of `crc_xmodem_update(unsigned int, unsigned char)' sketch\sketch_dec21b.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here libraries\VirtualWire\VirtualWire.cpp.o (symbol from plugin): In function `crc16_update(unsigned int, unsigned char)': (.text+0x0): multiple definition of `_crc_ccitt_update(unsigned int, unsigned char)' sketch\sketch_dec21b.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here libraries\VirtualWire\VirtualWire.cpp.o (symbol from plugin): In function `crc16_update(unsigned int, unsigned char)': (.text+0x0): multiple definition of `_crc_ibutton_update(unsigned char, unsigned char)' sketch\sketch_dec21b.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here collect2.exe: error: ld returned 1 exit status exit status 1 Error compiling for board Arduino Pro or Pro Mini.

Efter en hel del funderande så har jag ringat in att i bägge biblioteken anropar körs följande include:

#include <util/crc16.h>

och den tycks vara problemet. Om jag kommenterar bort denna så får jag istället problem med att det fattas moduler i respektive scope.

Hur löser man denna typer av problem?

Edit: fixade taggar och tackar för tagg:hjälp
Mvh
z

Testa att byta plats på dina includes, dvs

#include <VirtualWire.h> #include <OneWire.h>

Av Teknocide
Skrivet av zonar:

Tack för ett utförligt svar!

Nu tror jag att jag börjar se sammanhanget. Nu försöker jag på mig en hypotes som ni gärna får komma med synpunkter på.

När jag definierar

char msg[12] = {'T','R','A','N','S','M','I','T',':','-','#','-'};

så kommer de som fnuttarna ' ' att hjälpa till vid omvandlingen.

Men när jag själv ersätter '#'

msg[10] = 1

tolkas det som att jag sätter 0x1 HEX form till ett "start of heading" tecken. För att få rätt representation behöver jag därför addera 0x30 HEX och får då 0X31 på HEX form vilket betyder en vanlig 1 i char.

Då återkommer jag till '#'. Vilken innebörd har då dessa fnuttar när jag programmerar Arduino?

Mvh
z

Precis. Alla tecken som innesluts av enkelcitationstecken är så kallade character literals: '1' betyder "ASCII-värdet av tecknet 1". Under huven representeras alla värden som binära tal, och kompilatorn omvandlar '1' till värdet 0x31. Det är därför '0' + 1 ger värdet 0x31.

Jag gissar att '#' inte har någon specifik innebörd för Arduinon; den symboliserar bara platsen där du som programmerare förväntas sätta in en siffra i den specifika strängen.

Av Teknocide
Skrivet av zonar:

@Mazzza
Detta verkar fungera!

Nu måste jag bara förstå varför det börjar fungera....

Det som tas emot blir nu på formen:

___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ HEX : 54 52 41 4E 53 4D 49 54 3A 2D 35 2D ASCII: T R A N S M I T : - 5 - ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___

Vilket stämmer med det som jag hade tänkt mig att ta emot.

Ett litet steg framåt som kan blir sort när jag även förstår innebörden!

Toppen tack!
/z

Ett heltal som siffran 5 har värdet 5, 0101 binärt. När du omvandlar det till en char med (char)value får du det tecken som motsvarar position '5' i ASCII-tabellen (förenklat, beror på stöd för encoding etc, men det är vad som händer här). ASCII-tecken 5 är enligt http://www.asciitable.com/ en "enquiry"-symbol, vad nu det är. Hur som helst verkar ditt system inte kunna representera det som text.

För att värdet 5 ska bli ett siffertecken att skriva ut behöver du på något sätt omvandla det. I tabellen ser vi att tecknet '5' har värde 53 decimalt, eller 0x35 hexadecimalt. Vi noterar även att tecknet '0' har värde 48 (0x30 hex), och att tecknena 0 till 9 ligger i rak obruten följd. Detta innebär att vi kan ta godtyckligt värde mellan 0 och 9 och lägga till 0x30 för att få motsvarande tecken.

Av Teknocide
Skrivet av kallepårymmen:

Jahaaa är det därför jag sett folk som söker Java utväcklare som ska skriva Java kod till hemsidor, tänkte bara "är de fortfarande något folk gör!?"

Skickades från m.sweclockers.com

Skrivet av Kebabhyvlarn:

Iof så används Java faktiskt en del för webben. Finns flera frameworks, t.ex. Spring som är rätt trevligt.

Yup, det används massvis. Ett annat ramverk som växer snabbt är Play Framework

Av Teknocide
Skrivet av UMJ:

Det är ju som sagt skicka iväg email när dem registerar och du genererar ett lösenord endast klar text i själva emailet och kryptera lösenord uppdateras, eller genererar du ett lösenord när du acceptera dem som members.

Men glöm inte att salta lösenord med salt1 och salt2 för skydda folk som kör typ lätta lösenord som 12345

Att ett lösenord skulle se ut typ så här.

!8%gIf5A12345Y4p@91?N

för även med MD5 så kan man bygga databaser med MD5 harshtagar för hacka MD5 krypterade lösenord och simpla lösenord är aldrig säker.

Bäst genera lösenord är så klart med en generator som slumpar A-Ö 1-9 så dem kan få typ lösenord 3gfdG5r312R

Sedan salta också dem flesta sidor bruka oftast bara kryptera i MD5 men glömmer bort salta och inte skyddar svaga lösenord.

Skrivet av Christley:

använder inte ens md5 utan använder en kombination av flera möjliga lösningar. så någolunda koll gällande hur säkra lösenorden ska vara kan jag iaf

Använd aldrig MD5 för lösenord, det är sedan länge bevisat osäkert. PHP har sedan en tid tillbaka funktionen password_hash som använder en starkare hashfunktion och lägger på salt automatiskt. Använder man PHP är det mer eller mindre undantagslöst den funktionen som ska användas.

Av Teknocide
Skrivet av pellle87:

Jo det fungerar att öppna, men klickar man igen så stängs den ej som det är tänkt... :/ samt om jag har meny 1 öppen och klickar på meny 2 ska meny 1 stängas... jösses den där förklaringen blev tjorvig.

function toggleDropdown(ddName) { var drop = document.getElementsByClassName('dropmenu'); for(i=0; i<drop.length; i++) { if(drop[i].style.display ='none'){ document.getElementById(ddName).style.display='block'; } else { document.getElementById(ddName).style.display='none'; } }

nu när jag har en meny öppen så stängs den när jag öppnar en annan iaf... men nu är det bara att få till så man kan stänga en meny också. Tänker jag rätt här?!

Ännu ett funktionellt exempel, denna gång mer rakt på sak: http://codepen.io/anon/pen/ZBMwVz

De allra flesta rekommenderar iterativa for(var x=0; x<y.length; x++) { blah bleh } loopar vilket jag tycker är synd. Funktionella angreppssätt är subjektivt snyggare och lämnar mindre chans till fel, och uppmuntrar till bättre kod.

I koden jag länkar till är själva huvuduppgiften beskriven i stycket

elems.forEach(function (elem) { elem.addEventListener('click', function () { elems.filter(function (e) { return e !== elem }).forEach(close) toggle(elem) }) })

Detta stycke säger, rad för rad:
1. Gå igenom alla elems (element vi har valt ut);
2. Lägg till en klick-lyssnare som...
3. .. stänger alla element förutom det som just blev klickat på och
4. .. därefter "togglar" det element som klickades.

Funktionerna som sköter stängande (close) och togglande (toggle) är definierade högre upp i koden. Vill du att element inte ska stängas automatiskt är det bara att ta kommentera ut eller ta bort rad #3 så är du klar.

När nästa version av JavaScript — som baseras på Ecmascript 6 — kommer ut på bred front kommer man skriva det stycket ännu mer koncist (och, återigen subjektivt, snyggare) och många av de andra funktionerna också:

elems.forEach( elem => elem.addEventListener('click', () => { elems.filter( e => e !== elem ).forEach(close) toggle(elem) }) )

Det kan se konstigare ut till en början men när det satt sig är det svårt att gå tillbaka.

Av Teknocide
Skrivet av pellle87:

haha GW!

Sitter själv och pillrar på men har kört fast: http://codepen.io/anon/pen/pNOxbx
Betydligt kortare kod nu men just nu kan jag bara öppna menyerna, får inte till stängningen

I din for-loop jämför du värdet med 'none' istället för att sätta det.

Av Teknocide

Blev sugen på att labba lite med funktionell JavaScript. Här är en variant som använder klassnamn för att toggla menyer! http://codepen.io/anon/pen/QGVmBj

edit: Det råkade bli ett spel.. http://codepen.io/anon/pen/LbJJYg

Av Teknocide
Skrivet av Christley:

jag står inför ett dilemma jag inte vet hur jag ska lösa det.
jag ska kunna läsa in en lista på X antal personer med namn, email etc. samtidigt vill jag att det skapas lösenord till de kontonen. lösenorden ska inte skickas ut direkt till användarna utan det ska skickas ut när gruppen jag laddar upp ska få tillgång.
eftersom jag krypterar lösenorden med en 1-way encryption så vet jag omöjligt vad lösenorden är i klartext.

har ni några tips på hur jag kan skicka ut lösenorden till personerna i efterhand utan att äventyra säkerheten?

Skrivet av Raphaei:

I efterhand, nej.

Är lösenorden krypterade är det inte praktiskt möjligt, och alla sidor som erbjuder möjligheten att skicka ut glömt lösenord sparar lösenorden i klartext och du bör byta lösenord på dessa sidor innan du omedelbart avslutar ditt medlemskap.

Som inquam nämnde kan du skicka ut användarnamn och lösenord när kontot skapas, innan du krypterar och sparar informationen. Efter detta rekommenderar jag att glömt lösenord fixas genom att generera ett nytt temporärt lösenord och maila ut den, och sedan spara det nya lösenordet krypterat.

En smidig variant av detta är att du skickar ut en engångsnyckel som tillåter en användare att ändra sitt lösenord. Generera en unik länk som skickas till användarens epostadress. Länken leder till en sida där användaren anger sitt önskade lösenord, som sedan sparas direkt i databasen. Samma tjänst kan användas för att låta användare återställa sitt lösenord.