WN

WN (https://www.wn.se/forum/index.php)
-   Nyheter (https://www.wn.se/forum/forumdisplay.php?f=3)
-   -   Gratis SSL-certifikat från let's encrypt (https://www.wn.se/forum/showthread.php?t=1066017)

jayzee 2016-08-22 10:21

Citat:

Ursprungligen postat av webtigerteam (Inlägg 20519402)
Kan du rekommendera några verktyg som hittar buggar i JavaScript?

Lycka till att hitta sånt till ett otypat och direkt tolkat programmeringsspråk.
Lint/hint är bara ämnade för kodkvalité.

Nerix 2016-08-22 17:44

Citat:

Ursprungligen postat av webtigerteam (Inlägg 20519400)
En linter kan vara bra om man arbetar i ett team, och kommit överens om att koden ska se ut på ett speciellt sätt.

Nej, de primära syftet är att hitta kod som rent semantiskt är rätt, alltså där kompilatorn säger ok, men där chansen är stor att du och interpretatorn har delade meningar. Te.x semikolon och den icke-determinism som avsaknaden kan innebära.

Citat:

Ursprungligen postat av webtigerteam (Inlägg 20519400)
Jag tycker dock det läggs allt för mycket tid på meta-programmering, till exempel omstrukturering av koden för att hålla raderna under 80 tecken, vilket ibland kan kräva kluriga lösningar som gör koden svårare att förstå.

Meta-programmering har inget med struktur att göra.

Förstår du de statistiska sambandet mellan buggar och kodkomplexitet?

Citat:

Ursprungligen postat av webtigerteam (Inlägg 20519400)
importering i headern uppmanar till att använda globala variabler! Jag försöker undvika globala variabler så långt som möjligt.

Nej. Importering av extern kod i de flesta Javascript-JIT är blockerande. Gör du en import mitt i koden så blockar detta hela eventloopen och då även gränssnittet.

För att inte nämna de optimeringsproblem din JIT utsätts för när kod med sidoeffekter laddas in under körning. Har du te.x koll på hur icke-deterministisk kod påverkar din prestanda?

Citat:

Ursprungligen postat av webtigerteam (Inlägg 20519400)
En unik grej med modul-systemet common-js är att man kan importera moduler lokalt!! Koden blir så mycket lättare att förstå då.

Så vitt jag vet så tillåter alla importeringssystem detta.

Citat:

Ursprungligen postat av webtigerteam (Inlägg 20519400)
'==' istället för '===' ... Om jag skulle skriva if(foo===undefined) skulle jag även behöva lägga till if(foo===null). Så det är lite av en bekvämlighet, jag fångar två flugor i en smäll.

I de fallet är `if(foo)` att rekommendera. Att du försöker jämföra med undefined och null tyder på att du har andra, mer fundamentala problem, i din implementering. Fråga dig själv varför dessa världen introducerades från första början- Odefinderade världen representerar ett odefinerat tillstånd, alltså en bugg.

Citat:

Ursprungligen postat av webtigerteam (Inlägg 20519400)
Man bör dock undvika att jämföra olika typer. Ex: if("42"==42) . Men vad hjälper det om det blir false i stället för true !? Eventuella buggar kvarstår ändå. Man bör i stället konvertera alla nummer till den typ man vill ha. Ex: var age=parseInt(request.form.age) för att vara på den säkra sidan.

Tvetydlig kod är vad som skapar buggar (och i de här fallet även prestandaproblem). På samma vis som `==` operatorn inte ska användas så ska `++` inte användas.

Om vi bortsätt från koden du postade så är de största misstaget du gör att tro att du är smartare än miljön du befinner dig i. För att kunna avgöra huruvida felen lintern påpekade är värt att fixa eller ej så behöver du grundläggande kunskap inom bl.a beräkningsmodeller, kompilatorer, typsystem, matematisk statistik och miljön koden ska köras i, te.x Googles V8-motor.

Varför inte bygga upp nödvändig kunskap parallellt och förlita dig på de verktyg som finns?

Citat:

Ursprungligen postat av jayzee (Inlägg 20519403)
Lycka till att hitta sånt till ett otypat och direkt tolkat programmeringsspråk.
Lint/hint är bara ämnade för kodkvalité.

FlowType (https://flowtype.org/) hjälper till med de här. Den kan, utan annoteringar, härleda typer och fel i din kod. Te.x `function(x) {x.length}(null) // => Error: null is not a string;

Lindalicious 2016-08-22 18:10

Vet inte om gratis är bra och går att lita på i längden. Själv köpte jag en certifikat från Namecheap https://www.namecheap.com/security/s...tificates.aspx finns för $10 dollar per år och dyrare beroende på vad man behöver.

webtigerteam 2016-08-23 10:02

Citat:

Nej. Importering av extern kod i de flesta Javascript-JIT är blockerande. Gör du en import mitt i koden så blockar detta hela eventloopen och då även gränssnittet.

För att inte nämna de optimeringsproblem din JIT utsätts för när kod med sidoeffekter laddas in under körning. Har du te.x koll på hur icke-deterministisk kod påverkar din prestanda?
Moduler cachas i NodeJS. Och lokala variabler går ofta lite fortare att hämta! Men även om det gjorde koden segare så är det onödigt att optimera utan att mäta först!


Citat:

I de fallet är `if(foo)` att rekommendera. Att du försöker jämföra med undefined och null tyder på att du har andra, mer fundamentala problem, i din implementering.
Fråga dig själv varför dessa världen introducerades från första början- Odefinderade världen representerar ett odefinerat tillstånd, alltså en bugg.
Det bästa är if(foo === undefined || foo === null)

Det näst bästa är if(foo == undefined)

Men det sämsta är if(!foo) för att det finns för många "false-positive", det skulle även trigga false, noll, strängen noll, tom sträng, tom array, eller array med noll, vilket ibland är ett godtagbart värde.

Du har rätt i att undefined ofta tyder på en bugg ...

Ta följande kod som exempel:

Kod:

function test(a, b) {
        console.log(a + b);
}
test(1);

Lintern klagar på följande:

1:1 - Expected a function expression.
1:1 - Missing JSDoc comment.
1:1 - Use the global form of 'use strict'.
1:14 - Missing space before function parentheses.
1:15 - Identifier name 'a' is too short (< 2).
1:18 - Identifier name 'b' is too short (< 2).
1:21 - Block must be padded by blank lines.
2:2 - Expected indentation of 4 space characters but found 0.
2:2 - Unexpected console statement.
3:1 - Block must be padded by blank lines.
4:2 - Newline required at end of file but not found.
4:6 - No magic number: 1. (no-magic-numbers)


OMG! 12 fel!! Bäst att fixa dem ...


Kod:

"use strict";

var ett = 1;

/**
 * Plussa två tal
 * @param {number} tal1 - Första talet.
 * @param {number} tal2 - Andra talet.
 * @returns {number} Summan av de två talen
 */
var test = function test (tal1, tal2) {

    return tal1 + tal2;
       
};

test(ett);


Men ända felet med första koden är att vi hade glömt andra argumentet (b), vilket är en ganska vanlig orsak till buggar. Felet kvarstår dock efter att vi fixat alla "fel" som Lintern hittade.

Här har du ett exempel på varför jag jämför med undefined:

Kod:

if(arg1 == undefined) throw new Error("arg1=" + arg1 + " saknas!")

Jag rekommenderar denna video: https://www.youtube.com/watch?v=wf-BqAjZb8M (Raymond Hettinger - Beyond PEP 8 -- Best practices for beautiful intelligible code - PyCon 2015)

jayzee 2016-08-23 12:58

Kanske dags att starta egen tråd om ECMAscript best practices?

Nerix 2016-08-23 20:20

Citat:

Ursprungligen postat av webtigerteam (Inlägg 20519428)
Moduler cachas i NodeJS. Och lokala variabler går ofta lite fortare att hämta! Men även om det gjorde koden segare så är det onödigt att optimera utan att mäta först!




Det bästa är if(foo === undefined || foo === null)

Det näst bästa är if(foo == undefined)

Men det sämsta är if(!foo) för att det finns för många "false-positive", det skulle även trigga false, noll, strängen noll, tom sträng, tom array, eller array med noll, vilket ibland är ett godtagbart värde.

Du har rätt i att undefined ofta tyder på en bugg ...

Ta följande kod som exempel:

Kod:

function test(a, b) {
        console.log(a + b);
}
test(1);

Lintern klagar på följande:

1:1 - Expected a function expression.
1:1 - Missing JSDoc comment.
1:1 - Use the global form of 'use strict'.
1:14 - Missing space before function parentheses.
1:15 - Identifier name 'a' is too short (< 2).
1:18 - Identifier name 'b' is too short (< 2).
1:21 - Block must be padded by blank lines.
2:2 - Expected indentation of 4 space characters but found 0.
2:2 - Unexpected console statement.
3:1 - Block must be padded by blank lines.
4:2 - Newline required at end of file but not found.
4:6 - No magic number: 1. (no-magic-numbers)


OMG! 12 fel!! Bäst att fixa dem ...


Kod:

"use strict";

var ett = 1;

/**
 * Plussa två tal
 * @param {number} tal1 - Första talet.
 * @param {number} tal2 - Andra talet.
 * @returns {number} Summan av de två talen
 */
var test = function test (tal1, tal2) {

    return tal1 + tal2;
       
};

test(ett);


Men ända felet med första koden är att vi hade glömt andra argumentet (b), vilket är en ganska vanlig orsak till buggar. Felet kvarstår dock efter att vi fixat alla "fel" som Lintern hittade.

Här har du ett exempel på varför jag jämför med undefined:

Kod:

if(arg1 == undefined) throw new Error("arg1=" + arg1 + " saknas!")

Jag rekommenderar denna video: https://www.youtube.com/watch?v=wf-BqAjZb8M (Raymond Hettinger - Beyond PEP 8 -- Best practices for beautiful intelligible code - PyCon 2015)

Så vilken slutsats drar du från ovanstående inlägg och varför?

Citat:

Ursprungligen postat av jayzee (Inlägg 20519431)
Kanske dags att starta egen tråd om ECMAscript best practices?

De hade varit bra. Om någon moderator vill bryta ut våra inlägg så vore de toppen. Är dock osäker på titeln då ämnet är ganska brett.

Nerix 2016-08-23 21:07

Citat:

Ursprungligen postat av webtigerteam (Inlägg 20519428)
Kod:

function test(a, b) {
        console.log(a + b);
}
test(1);

Lintern klagar på följande:

1:1 - Expected a function expression.
1:1 - Missing JSDoc comment.
1:1 - Use the global form of 'use strict'.
1:14 - Missing space before function parentheses.
1:15 - Identifier name 'a' is too short (< 2).
1:18 - Identifier name 'b' is too short (< 2).
1:21 - Block must be padded by blank lines.
2:2 - Expected indentation of 4 space characters but found 0.
2:2 - Unexpected console statement.
3:1 - Block must be padded by blank lines.
4:2 - Newline required at end of file but not found.
4:6 - No magic number: 1. (no-magic-numbers)


OMG! 12 fel!! Bäst att fixa dem ...


Kod:

"use strict";

var ett = 1;

/**
 * Plussa två tal
 * @param {number} tal1 - Första talet.
 * @param {number} tal2 - Andra talet.
 * @returns {number} Summan av de två talen
 */
var test = function test (tal1, tal2) {

    return tal1 + tal2;
       
};

test(ett);



Glömde posta vad min linter säger.

Fick ett fel; indenteringen. Har kopplat cmd-ä till --fix i eslint så den fixar automatiskt till en majoritet av alla fel direkt i editorn. Använder Googles regler med 2 undantag och några extra regler. Har bl.a stängt av jsdoc.

elitasson 2016-08-29 08:35

Citat:

Ursprungligen postat av Lindalicious (Inlägg 20519416)
Vet inte om gratis är bra och går att lita på i längden. Själv köpte jag en certifikat från Namecheap https://www.namecheap.com/security/s...tificates.aspx finns för $10 dollar per år och dyrare beroende på vad man behöver.

Har du kollat vilka sponsorer Lets encrypt har?

eliasson 2016-08-29 14:18

Citat:

Ursprungligen postat av Lindalicious (Inlägg 20519416)
Vet inte om gratis är bra och går att lita på i längden. Själv köpte jag en certifikat från Namecheap https://www.namecheap.com/security/s...tificates.aspx finns för $10 dollar per år och dyrare beroende på vad man behöver.

För att få lite "peace of mind" så kan du titta närmare på deras sponsorer och deras senaste inlägg om Mozilla Root Certificate. Jag tror att Let's Encrypt kan bli en betydande spelare inom säkerhet när deras egna Root CA finns i de större webbläsarna osv.

webtigerteam 2016-09-16 12:06

Letsencrypt verkar rätt stabilt och kommer förhoppningsvis existera i flera år framöver.

Funderar dock på eventuella problem om man hårdlänkat adresser med httpS:// (S på slutet som i SSL/TSL) och Letsencrypt skulle stänga ner eller börja ta ordentligt betalt.


Alla tider är GMT +2. Klockan är nu 22:17.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson