Skapa ENKEL hemsida med en räknare med ett minimum av js.
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
> Vad skriver jag för att anropa hello.cgi som ligger i /usr/lib/cgi.bin?
Vad skriver du *var* ? Den "anropas" ju genom att du har en
URL i browsern som pekar på scriptet. Och omladdningen kör
ju bara om exakt samma URL från browsern. Du behöver
alltså ingen referens till hello.cgi inne i själva sidan.
Själva filen kan väl ligga var som helst, men servern behöver
en "mappning" mellan den URL du vill ha och själva filen. Hur
det görs är web server specifikt. Ofta finns det redan ett default
CGI bibliotek mappat där filen kan läggas, men ibland vill man
mappa upp en egen applikationskatalog istället...
Sen så får så klart hello.cgi köra något (t.ex. en C-snutt) som
i sig skapar *hela* sidan, men det är ju bara ett antal printf...
Vad skriver du *var* ? Den "anropas" ju genom att du har en
URL i browsern som pekar på scriptet. Och omladdningen kör
ju bara om exakt samma URL från browsern. Du behöver
alltså ingen referens till hello.cgi inne i själva sidan.
Själva filen kan väl ligga var som helst, men servern behöver
en "mappning" mellan den URL du vill ha och själva filen. Hur
det görs är web server specifikt. Ofta finns det redan ett default
CGI bibliotek mappat där filen kan läggas, men ibland vill man
mappa upp en egen applikationskatalog istället...
Sen så får så klart hello.cgi köra något (t.ex. en C-snutt) som
i sig skapar *hela* sidan, men det är ju bara ett antal printf...
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Jo jag inser att jag kan explicit peka på vilket script som helst men jag hade hoppats att jag skulle kunna skriva något "Här skriver du ditt egenskapade innehåll" som pekade rätt.lillahuset skrev:Vad skriver jag för att anropa hello.cgi som ligger i /usr/lib/cgi.bin? Ja jag är troligen ganska trögtänkt.Här skriver du ditt egenskapade innehåll
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Jag förstår inte var du vill att det skulle skrivas.
Om du *inte* vill att *hela* sidan skrivs om varje gång, så blir det ju
betydligt mer komplext med mer JS o.s.v.
Om du *inte* vill att *hela* sidan skrivs om varje gång, så blir det ju
betydligt mer komplext med mer JS o.s.v.
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Jo jag inser att jag är en jävla tomte när det kommer till WWW.
Om du tittar lite tidigare i tråden så finns det ett förslag hur jag kan göra som tyvärr inte tränger in i min träiga hjärna.
Allt jag vill är att kunna servera CGI-genererade sidor periodiskt från en IP-adress typ aaa.bbb.ccc.ddd. Jag gissar att det är snudd på trivialt men jag har inte fattat hur man gör.
Edit: Det gör mig inget om hela sidan skrivs om. "Snyggt" och "läckert" får andra pyssla med.
Om du tittar lite tidigare i tråden så finns det ett förslag hur jag kan göra som tyvärr inte tränger in i min träiga hjärna.
Allt jag vill är att kunna servera CGI-genererade sidor periodiskt från en IP-adress typ aaa.bbb.ccc.ddd. Jag gissar att det är snudd på trivialt men jag har inte fattat hur man gör.

Edit: Det gör mig inget om hela sidan skrivs om. "Snyggt" och "läckert" får andra pyssla med.
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Om du vill att URL'en "http://aaa.bbb.ccc.ddd/" direkt ska köra ditt applikations skript,
så behöver du högst sannolikt ändra sidan för "root", "home" eller vad det kallas i din webb server.
*Eller* så har du ingen webb server alls utan låter ditt skript lyssna direkt på port 80 (om du kör default).
> Om du tittar lite tidigare i tråden så finns det ett förslag hur jag kan göra som tyvärr inte tränger in i min träiga hjärna.
Du menar "exec" prylarna? Ja det kräver att din webb server har stöd för "Server Side Includes".
Sen kanske det inte är påslaget som default utan det kan kräva en liten "tweek" i webb serverns konfig.
> Allt jag vill är att kunna servera CGI-genererade sidor periodiskt...
Din webb server anropar ditt skript. Detta kan kräva att du har "mappat" i serverns konfig
så att det finns en koppling mellan URL'en och skriptet. Det kan vara OK default, det kan kräva något...
Sedan använder C-programmet de CGI funktioner som finns för att skriva ett svar tillbaka.
Ibland startas skriptet så att sysin och sysout pekar på CGI interfacet, d.v.s att det bara
är att köra vanliga printf() till sysout for att skriva tillbaka till browsern...
Svårt att veta på vilken "nivå" som du kör fast, så att säga...
så behöver du högst sannolikt ändra sidan för "root", "home" eller vad det kallas i din webb server.
*Eller* så har du ingen webb server alls utan låter ditt skript lyssna direkt på port 80 (om du kör default).
> Om du tittar lite tidigare i tråden så finns det ett förslag hur jag kan göra som tyvärr inte tränger in i min träiga hjärna.
Du menar "exec" prylarna? Ja det kräver att din webb server har stöd för "Server Side Includes".
Sen kanske det inte är påslaget som default utan det kan kräva en liten "tweek" i webb serverns konfig.
> Allt jag vill är att kunna servera CGI-genererade sidor periodiskt...
Din webb server anropar ditt skript. Detta kan kräva att du har "mappat" i serverns konfig
så att det finns en koppling mellan URL'en och skriptet. Det kan vara OK default, det kan kräva något...
Sedan använder C-programmet de CGI funktioner som finns för att skriva ett svar tillbaka.
Ibland startas skriptet så att sysin och sysout pekar på CGI interfacet, d.v.s att det bara
är att köra vanliga printf() till sysout for att skriva tillbaka till browsern...
Svårt att veta på vilken "nivå" som du kör fast, så att säga...

Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Ett mindre snyggt sätt, och som riskerar slita ut SD-kortet när samma fil skrivits om många ggr är att du via C ständigt skriver evt nytt innehåll direkt till filen index.html.
Det är ful-lösning men kanske enklare för att komma igång.
Innehållet som bygger upp filen index.html har då tre variabler, de tre delarna är kopierade från föregående sida:
VAR1 = '<html><script type="text/javascript">function nysida()...........<body onLoad="setTimeout(nysida, 1000);">';//Initiering
VAR2 = 'Mitt uppdaterade innehåll';
VAR3 = '</body></html>'; //Avslut
I din C-kod uppdateras VAR2 med önskat innehåll och därefter skrivs VAR1+VAR2+VAR3 i en klump till filen index.html.
Webbläsaren läser sedan varje sekund in innehållet från index.html
Det kan tillkomma detaljer, såsom att när webbläsaren märker att innehållet inte ändras mellan varje inläsning så läser den istället från sin egen cache.
Ett sätt är då att lägga till "?"+random tecken efter filnamnet som anropas, såsom tidigare visats, vilket gör att cachning förhindras.
Det går i filen index.html deklarera META-taggar, som då skrivs i VAR1, som ska förhindra cachning, men det fungerar inte alltid.
Det är ful-lösning men kanske enklare för att komma igång.
Innehållet som bygger upp filen index.html har då tre variabler, de tre delarna är kopierade från föregående sida:
VAR1 = '<html><script type="text/javascript">function nysida()...........<body onLoad="setTimeout(nysida, 1000);">';//Initiering
VAR2 = 'Mitt uppdaterade innehåll';
VAR3 = '</body></html>'; //Avslut
I din C-kod uppdateras VAR2 med önskat innehåll och därefter skrivs VAR1+VAR2+VAR3 i en klump till filen index.html.
Webbläsaren läser sedan varje sekund in innehållet från index.html
Det kan tillkomma detaljer, såsom att när webbläsaren märker att innehållet inte ändras mellan varje inläsning så läser den istället från sin egen cache.
Ett sätt är då att lägga till "?"+random tecken efter filnamnet som anropas, såsom tidigare visats, vilket gör att cachning förhindras.
Det går i filen index.html deklarera META-taggar, som då skrivs i VAR1, som ska förhindra cachning, men det fungerar inte alltid.
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Ja, det är ju riktigt quick-n-dirty... 
En optimering kan ju vara att C-programmet inte skriver om HTML filen ifall det inte finns nya värden.
Men å andra sidan så kan C-programmet (nästan) lika enkelt skriva dina VAR1-VAR3
direkt tillbaka till browsern via CGI gränssnittet istället för till en fil...
> såsom att när webbläsaren märker att innehållet inte ändras mellan varje inläsning så läser den istället från sin egen cache.
Inte helt med här... För att märka det så måste ju innehållet läsas från servern (?).

En optimering kan ju vara att C-programmet inte skriver om HTML filen ifall det inte finns nya värden.
Men å andra sidan så kan C-programmet (nästan) lika enkelt skriva dina VAR1-VAR3
direkt tillbaka till browsern via CGI gränssnittet istället för till en fil...
> såsom att när webbläsaren märker att innehållet inte ändras mellan varje inläsning så läser den istället från sin egen cache.
Inte helt med här... För att märka det så måste ju innehållet läsas från servern (?).
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Normalt så hämtar webbläsaren in filen ett antal gånger externt innan den väljer att läsa från egen cache, om filen inte ändrat sej på ett antal inläsningar.
Att META-deklarera no-cache eller bäst-före datum 1972 tycks somliga webbläsare ignorera om filen är samma varje gång den läses.
När man ska pilla med något nytt, så är det en bra morot, att man ser någon konkret form av resultat, typ "Hello World", för att få motivationen att djupare sätta sej in i detaljerna.
Därför ful-lösningen att läsa via mellanlagrad fil. Det gör det kanske också mer lättförståeligt hur C-genererad html-kod kan nå webbläsaren, som ett första "hello world"-steg att få se föränderlig data i webbläsaren.
Nästa steg är mest att få cgi-filen adresserbar från servern och peka print-funktionen till rätt utgång. Innehållet VAR1-3 kommer hanteras på samma sätt.
Att META-deklarera no-cache eller bäst-före datum 1972 tycks somliga webbläsare ignorera om filen är samma varje gång den läses.
När man ska pilla med något nytt, så är det en bra morot, att man ser någon konkret form av resultat, typ "Hello World", för att få motivationen att djupare sätta sej in i detaljerna.
Därför ful-lösningen att läsa via mellanlagrad fil. Det gör det kanske också mer lättförståeligt hur C-genererad html-kod kan nå webbläsaren, som ett första "hello world"-steg att få se föränderlig data i webbläsaren.
Nästa steg är mest att få cgi-filen adresserbar från servern och peka print-funktionen till rätt utgång. Innehållet VAR1-3 kommer hanteras på samma sätt.
- Retroperra
- Inlägg: 728
- Blev medlem: 8 juli 2012, 14:34:12
- Ort: Sundsvall
- Kontakt:
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Om du kör linux så är en php-lösning mycket enkel att göra.
Installera php och apache.
Skriv en sida enl tidigare modell.
Exekvera c-programmet via shellexec och låt det lämna variablerna i retur.
Visa dom med sidan.
Alt. låt c-programmet skriva en text-fil med $a=1 osv och inkludera filen.
Shell exec är läskigt men eftersom ni har bra säkerhet i övrigt kan inget hända
Alt. modell "krångel" är att låta c-programmet skriva till en sql-databas och visa det i html.
Det tar lite mer cpu men då kan du lagra annat och räkna och ha dig
Installera php och apache.
Skriv en sida enl tidigare modell.
Exekvera c-programmet via shellexec och låt det lämna variablerna i retur.
Visa dom med sidan.
Alt. låt c-programmet skriva en text-fil med $a=1 osv och inkludera filen.
Shell exec är läskigt men eftersom ni har bra säkerhet i övrigt kan inget hända

Alt. modell "krångel" är att låta c-programmet skriva till en sql-databas och visa det i html.
Det tar lite mer cpu men då kan du lagra annat och räkna och ha dig

- Jan Almqvist
- Inlägg: 1652
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Jag tror att det finns en lista i konfigurationen för web-servern för vilka filer den ska leta efter och där saknas nog index.shtml.lillahuset skrev:Nja, det bidde inte så bra...
Kanske kan det fungera om du skriver http://192.168.0.101/index.shtml
Det här med exec, SSI och shtml kanske är helt föråldrat idag. Jag har använt det. På 90-talet...
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Oj, här kom många förslag.
sodjan: Att skippa webservern var ett radikalt förslag. Men kanske bästa lösningen i mitt fall.
E Kafeman: Man kan ju alltid använda en RAM-disk. Det vore ju ett sätt att slippa CGI.
Retroperra: Jag är inte så sugen på PHP även om det kanske är enkelt.
Jan Almqvist: Att skriva http://192.168.0.101/index.shtml är nog inget alternativ för den kunden.
Nu ska jag experimentera lite och återkommer med resultat alternativt mer förvirring. Tack för visat intresse.

sodjan: Att skippa webservern var ett radikalt förslag. Men kanske bästa lösningen i mitt fall.

E Kafeman: Man kan ju alltid använda en RAM-disk. Det vore ju ett sätt att slippa CGI.
Retroperra: Jag är inte så sugen på PHP även om det kanske är enkelt.
Jan Almqvist: Att skriva http://192.168.0.101/index.shtml är nog inget alternativ för den kunden.
Nu ska jag experimentera lite och återkommer med resultat alternativt mer förvirring. Tack för visat intresse.
- Jan Almqvist
- Inlägg: 1652
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Att explicit ange index.shtml är ju bara för att ringa in problemet.
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Första prototyp får bli att skriva om index.html på en ramdisk. Ingen autorefresh men det får väl vara tills vidare. Det uppfyller iallafall med råge önskemålet att en simpel C-programmerare ska förstå vad som händer.

Kod: Markera allt
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define COPY "cp /tmp/ramdisk/index.txt /tmp/ramdisk/index.html"
#define FNAME "/tmp/ramdisk/index.txt"
int main(int argc, char **argv)
{
int counter;
FILE *fp;
counter = 0;
for (;;) {
fp = fopen(FNAME, "w");
if (fp) {
fprintf(fp, "<html> %d </html>", counter++);
} else {
fprintf(stderr, "failed to create %s\n", FNAME);
}
fclose(fp);
system(COPY);
sleep(1);
}
return 0;
} /* main */
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Nu har jag en yxig men fungerande implementering på mindre än hundra rader C som levererar simulerade data på http://parvus.duckdns.org/
Manuell uppdatering.
Manuell uppdatering.

Kod: Markera allt
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define COPY "cp /tmp/ramdisk/index.txt /tmp/ramdisk/index.html"
#define FNAME "/tmp/ramdisk/index.txt"
float vibration(int ch);
float temperature(int ch);
float tacho(void);
float VibLimit[2][2] = {{10.5, 10.8}, {20.5, 20.8}};
FILE *fp;
int main(int argc, char **argv)
{
char plant[] = "Surbullestaden maskin 1";
for (;;) {
fp = fopen(FNAME, "w");
if (fp) {
fprintf(fp, "<!DOCTYPE html><html><body text=\"black\" bgcolor=\"silver\">");
fprintf(fp, "<h1>%s</h1>", plant);
fprintf(fp, "<font color=\"black\"><h3>tacho: %.1f RPM</h3></font>", tacho());
vibration(0);
vibration(1);
fprintf(fp, "<h3>temp ch 1: %.1f C</h3>", temperature(0));
fprintf(fp, "<h3>temp ch 2: %.1f C</h3>", temperature(1));
fprintf(fp, "</body></html>");
} else {
fprintf(stderr, "failed to create %s\n", FNAME);
}
fclose(fp);
system(COPY);
sleep(1);
}
return 0;
} /* main */
float vibration(int ch)
{
float ret;
ret = rand();
ret /= RAND_MAX;
ret += ((ch + 1) * 10.0);
if (ret < VibLimit[ch][0]) {
fprintf(fp, "<font color=\"lime\">");
} else if (ret < VibLimit[ch][1]) {
fprintf(fp, "<font color=\"yellow\">");
} else {
fprintf(fp, "<font color=\"red\">");
}
fprintf(fp, "<h3>vib ch %d: %.1f mm/s</h3></font>", ch + 1, ret);
return ret;
} /* vibration */
float temperature(int ch)
{
float ret;
ret = rand();
ret /= RAND_MAX;
ret += ((ch + 4) * 10.0);
return ret;
} /* temperature */
float tacho(void)
{
float ret;
ret = rand();
ret /= RAND_MAX;
ret += 30.0;
ret *= 100.0;
return ret;
} /* tacho */
/* EOF */
Re: Skapa ENKEL hemsida med en räknare med ett minimum av js
Om du lägger till en:
<META HTTP-EQUIV="refresh" CONTENT="2">
så får du automatisk uppdatering också.
En annan rent kosmetiks sak bara...
Jag skulle lägga till "\n" i slutet av varje HTML-rad också, då ser
det betydligt trevliga ut när man gör "Visa källkod" i browsern och
enklare att felsöka. D.v.s. så att allt inte hela sidan blir en enda lång rad...
<META HTTP-EQUIV="refresh" CONTENT="2">
så får du automatisk uppdatering också.
En annan rent kosmetiks sak bara...
Jag skulle lägga till "\n" i slutet av varje HTML-rad också, då ser
det betydligt trevliga ut när man gör "Visa källkod" i browsern och
enklare att felsöka. D.v.s. så att allt inte hela sidan blir en enda lång rad...