Skapa ENKEL hemsida med en räknare med ett minimum av js.

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Skapa ENKEL hemsida med en räknare med ett minimum av js

Inlägg av sodjan »

> 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...
Användarvisningsbild
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

Inlägg av lillahuset »

lillahuset skrev:
Här skriver du ditt egenskapade innehåll
Vad skriver jag för att anropa hello.cgi som ligger i /usr/lib/cgi.bin? Ja jag är troligen ganska trögtänkt. :)
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.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Skapa ENKEL hemsida med en räknare med ett minimum av js

Inlägg av sodjan »

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.
Användarvisningsbild
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

Inlägg av lillahuset »

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.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Skapa ENKEL hemsida med en räknare med ett minimum av js

Inlägg av sodjan »

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... :-)
E Kafeman
Inlägg: 3588
Blev medlem: 29 april 2012, 18:06:22

Re: Skapa ENKEL hemsida med en räknare med ett minimum av js

Inlägg av E Kafeman »

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.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Skapa ENKEL hemsida med en räknare med ett minimum av js

Inlägg av sodjan »

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 (?).
E Kafeman
Inlägg: 3588
Blev medlem: 29 april 2012, 18:06:22

Re: Skapa ENKEL hemsida med en räknare med ett minimum av js

Inlägg av E Kafeman »

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.
Användarvisningsbild
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

Inlägg av Retroperra »

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 ;)
Användarvisningsbild
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

Inlägg av Jan Almqvist »

lillahuset skrev:Nja, det bidde inte så bra...
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.

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...
Användarvisningsbild
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

Inlägg av lillahuset »

Oj, här kom många förslag. :D

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.
Användarvisningsbild
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

Inlägg av Jan Almqvist »

Att explicit ange index.shtml är ju bara för att ringa in problemet.
Användarvisningsbild
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

Inlägg av lillahuset »

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. :D

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 */
Användarvisningsbild
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

Inlägg av lillahuset »

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. :)

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 */
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Skapa ENKEL hemsida med en räknare med ett minimum av js

Inlägg av sodjan »

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...
Skriv svar