$5 RPI
-
- Admin
- Indlæg: 20878
- Tilmeldt: 15. nov 2009, 15:04
- IRC nickname: AJenbo
- Geografisk sted: Vanløse, København
Re: $5 RPI
ok, men det gør den anden jo også hvor billedet bilver taget af en helt anden service (perl demon) end selve web servicen. og målet var jo også at det kun skulle være 1 billede i minuttet hvis der ikke var aktive besøgende.
-
- Admin
- Indlæg: 3652
- Tilmeldt: 5. mar 2010, 19:58
- IRC nickname: nicky
- Geografisk sted: 192.168.20.42
Re: $5 RPI
Siden er i hvert fald online nu
http://gok.aptget.dk
Dæmonen er jeg ikke rigtig startet på, men jeg tror jeg laver den, så den overfører billedet fra Pi'en til webserverens NFS-mappe. Derfra kan serveren indlæse billedet til de besøgende, og via JS fortælle dæmonen, at der stadig er besøgende. Dette bliver nok nemmest gjort ved at tjekke om en fil findes i NFS-mappen, og hvis ikke, så opretter JS den. Dæmonen unlinker derefter filen hver gang den opdaterer billedet.
Konceptet kan muligvis udvides til, at dæmonen også unlinker billedet når der ikke er nogen besøgende, og at det indledende billede for en ny besøgende, derfor kan være op til 5 sekunder om at blive vist. Det ville løse problemet med at det første billede kan være meget gammelt.
Hvis jeg får tid, eller på et senere tidspunkt, så kan dæmonen udvides med en socket, som webserveren kommunikerer direkte med over TCP imellem serveren og Pi'en. Det kan vist ikke lade sig gøre i "ren" JS, men fx med socket.IO og/eller HTML5's websockets
http://socket.io/
https://developer.mozilla.org/en-US/doc ... ockets_API
Da Pi'en står bag webserveren, og dermed ikke kan nås fra internettet, bliver det nok nødvendigt med en listner på webserveren, som kan videresende imellem klienten og dæmonen på Pi'en. Selvom det er ekstraarbejde, så tror jeg det er en god idé at skærme Pi'en fra internettet.
http://gok.aptget.dk
Dæmonen er jeg ikke rigtig startet på, men jeg tror jeg laver den, så den overfører billedet fra Pi'en til webserverens NFS-mappe. Derfra kan serveren indlæse billedet til de besøgende, og via JS fortælle dæmonen, at der stadig er besøgende. Dette bliver nok nemmest gjort ved at tjekke om en fil findes i NFS-mappen, og hvis ikke, så opretter JS den. Dæmonen unlinker derefter filen hver gang den opdaterer billedet.
Konceptet kan muligvis udvides til, at dæmonen også unlinker billedet når der ikke er nogen besøgende, og at det indledende billede for en ny besøgende, derfor kan være op til 5 sekunder om at blive vist. Det ville løse problemet med at det første billede kan være meget gammelt.
Hvis jeg får tid, eller på et senere tidspunkt, så kan dæmonen udvides med en socket, som webserveren kommunikerer direkte med over TCP imellem serveren og Pi'en. Det kan vist ikke lade sig gøre i "ren" JS, men fx med socket.IO og/eller HTML5's websockets
http://socket.io/
https://developer.mozilla.org/en-US/doc ... ockets_API
Da Pi'en står bag webserveren, og dermed ikke kan nås fra internettet, bliver det nok nødvendigt med en listner på webserveren, som kan videresende imellem klienten og dæmonen på Pi'en. Selvom det er ekstraarbejde, så tror jeg det er en god idé at skærme Pi'en fra internettet.
-
- Admin
- Indlæg: 20878
- Tilmeldt: 15. nov 2009, 15:04
- IRC nickname: AJenbo
- Geografisk sted: Vanløse, København
Re: $5 RPI
Hvis du sletter billedet får brugeren et 404 frem for at den venter på et nyt billede.
Jeg ville også mene at det er en feature at man med det samme får et lidt gammelt billede frem for at man skal vente på at der kommer et friske. Ellers ville der jo heller ikke være grund til at tage billeder kontinuerligt, ved mindre du vil gemme dem i et arkiv
Jeg ville også mene at det er en feature at man med det samme får et lidt gammelt billede frem for at man skal vente på at der kommer et friske. Ellers ville der jo heller ikke være grund til at tage billeder kontinuerligt, ved mindre du vil gemme dem i et arkiv
-
- Admin
- Indlæg: 3652
- Tilmeldt: 5. mar 2010, 19:58
- IRC nickname: nicky
- Geografisk sted: 192.168.20.42
Re: $5 RPI
Dammit, jeg tror jeg laver den depotkasse til aviserne i dag. Så kan hovedet få en pause.
Problemet er, som jeg ser det, at der ikke er nogen god måde som kan fortælle Pi'en at der er besøgende på webserveren.
Konceptet med en fil bliver hurtigt ineffektivt, og giver rig mulighed for race conditions, hvis programmeringen ikke er meget forsigtig.
Sockets er en god men kompliceret løsning, især fordi den besøgende ville skulle forbinde til webserveren, som så skal videresende til Pi'en og vice versa.
Måske en bedre løsning er at bruge databasen på webserveren, både til at holde styr på om der er besøgende, og til at gemme billederne. De fylder cirka 200kb pr. stk. Webserveren har 4gb ram, og selv efter 2 måneders oppetid bruger den kun 1/5.
Problemet er, som jeg ser det, at der ikke er nogen god måde som kan fortælle Pi'en at der er besøgende på webserveren.
Konceptet med en fil bliver hurtigt ineffektivt, og giver rig mulighed for race conditions, hvis programmeringen ikke er meget forsigtig.
Sockets er en god men kompliceret løsning, især fordi den besøgende ville skulle forbinde til webserveren, som så skal videresende til Pi'en og vice versa.
Måske en bedre løsning er at bruge databasen på webserveren, både til at holde styr på om der er besøgende, og til at gemme billederne. De fylder cirka 200kb pr. stk. Webserveren har 4gb ram, og selv efter 2 måneders oppetid bruger den kun 1/5.
-
- Admin
- Indlæg: 20878
- Tilmeldt: 15. nov 2009, 15:04
- IRC nickname: AJenbo
- Geografisk sted: Vanløse, København
Re: $5 RPI
Jeg vil fraråde at gemme filer i en database, det er ikke hvad den er beregnet til og det er ikke praktisk at have med at gøre.
Jeg syndes ideen med at oprette en fil når nogen er aktive på siden lyder som en ok løsning. Det vil fungere omvendt af en lock fil og det er tros alt noget der bliver benyttet en del af andre ellers ganske stabile systemer.
Fil systemet tillader kun en operation af gangen så det er ikke et problem at flere programmer forsøger at tilgå samme fil på den måde.
ajax.php
javascript (forventer du indlæser jQuery):
Din dæmon skal så tjekke om den skal tage et billede hvert 5 sek, hvis filen /nfs/pleaes-take-a-picture ekistere skal den slettes og der skal tages et billede. Hvis den ikke har taget et billede de seneste 11 gange skal den tage et billede.
Jeg syndes ideen med at oprette en fil når nogen er aktive på siden lyder som en ok løsning. Det vil fungere omvendt af en lock fil og det er tros alt noget der bliver benyttet en del af andre ellers ganske stabile systemer.
Fil systemet tillader kun en operation af gangen så det er ikke et problem at flere programmer forsøger at tilgå samme fil på den måde.
ajax.php
Kode: Vælg alt
<?php
touch ('/nfs/pleaes-take-a-picture');
javascript (forventer du indlæser jQuery):
Kode: Vælg alt
setInterval(function(){
// Display the latest image
var image = new Image();
image.onload = function() {
$('#theImgTag').src = this.src;
}
image.src = '/billede/kyllinger.jpg?noCache=' . Math.floor(Date.now());
// Request new images
$.get( "ajax.php" );
}, 5000);
Din dæmon skal så tjekke om den skal tage et billede hvert 5 sek, hvis filen /nfs/pleaes-take-a-picture ekistere skal den slettes og der skal tages et billede. Hvis den ikke har taget et billede de seneste 11 gange skal den tage et billede.
-
- Admin
- Indlæg: 3652
- Tilmeldt: 5. mar 2010, 19:58
- IRC nickname: nicky
- Geografisk sted: 192.168.20.42
Re: $5 RPI
Jeg fik ikke lavet nogen depotkasse i går, men fik derimod opgraderet hønsegården med en træstamme de kan kravle på
Det er rigtigt med blob i en database; tanken var, at hvis lockfile, eller nærmere !lockfile, blev lagt i databasen, så kunne billederne følge med. Jeg kan stadig godt lide ideen om at bruge en database til filen, for det giver mulighed for, at se hvor mange der har siden åben.
Hvis tabellen gok.visitor får en +1 hver gang der bliver hentet et billede, og dæmonen så trækker 1 fra når den tager billedet, så ved man hvor mange der har siden åben. Og så kan der selvfølgelig laves almindelig statistik ved siden af.
Men i første omgang bruger jeg bare en fil. Tak for JS-koden.
Det er rigtigt med blob i en database; tanken var, at hvis lockfile, eller nærmere !lockfile, blev lagt i databasen, så kunne billederne følge med. Jeg kan stadig godt lide ideen om at bruge en database til filen, for det giver mulighed for, at se hvor mange der har siden åben.
Hvis tabellen gok.visitor får en +1 hver gang der bliver hentet et billede, og dæmonen så trækker 1 fra når den tager billedet, så ved man hvor mange der har siden åben. Og så kan der selvfølgelig laves almindelig statistik ved siden af.
Men i første omgang bruger jeg bare en fil. Tak for JS-koden.
-
- Admin
- Indlæg: 3652
- Tilmeldt: 5. mar 2010, 19:58
- IRC nickname: nicky
- Geografisk sted: 192.168.20.42
Re: $5 RPI
Hvilket minder mig om, er der også brug for jQuery til den her kode?
AJenbo skrev:Kode: Vælg alt
var image = new Image();
image.onload = function() {
$('#theImgTag').src = this.src;
}
image.src = '/billede/kyllinger.jpg?noCache=' . Math.floor(Date.now());
-
- Admin
- Indlæg: 20878
- Tilmeldt: 15. nov 2009, 15:04
- IRC nickname: AJenbo
- Geografisk sted: Vanløse, København
Re: $5 RPI
NickyThomassen skrev:Hvis tabellen gok.visitor får en +1 hver gang der bliver hentet et billede, og dæmonen så trækker 1 fra når den tager billedet, så ved man hvor mange der har siden åben. Og så kan der selvfølgelig laves almindelig statistik ved siden af.
Tror ikke jeg er med her, 1 bruger + 1 billede = 0 besøgende?
Desuden sker det ikke på selve billede hentningen men på efterspørge om flere billeder.
NickyThomassen skrev:Hvilket minder mig om, er der også brug for jQuery til den her kode?AJenbo skrev:Kode: Vælg alt
var image = new Image();
image.onload = function() {
$('#theImgTag').src = this.src;
}
image.src = '/billede/kyllinger.jpg?noCache=' . Math.floor(Date.now());
Ja, jeg brugte $() som er jquery. Men jeg har også lagt den sammen med den anden kode. Bemærk at intet af koden er testet.
-
- Indlæg: 5095
- Tilmeldt: 27. apr 2008, 02:16
- IRC nickname: lars_t_h
- Geografisk sted: Fyn
Re: $5 RPI
NickyThomassen skrev:...
Det er rigtigt med blob i en database; tanken var, at hvis lockfile, eller nærmere !lockfile, blev lagt i databasen, ...
Jeg bemærker at kernen understøtter et koncept der hedder "file locking": https://en.wikipedia.org/wiki/File_locking, så hvorfor ikke bruge den abstraktion som kernen tilbyder, i stedet for at lave en selv?
På server-siden kan du bruge PHP flock funktionen: http://php.net/manual/en/function.flock.php
Du både locker og unlocker med flock funktionen - en parameter styrer om der låses eller låses op. Du kan også teste om en fil er låst med flock og en if sætning: F.eks. så fandt jeg: http://stackoverflow.com/questions/3149324/php-check-if-file-locked-with-flock?rq=1 eller http://stackoverflow.com/a/20771883
/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
-
- Admin
- Indlæg: 20878
- Tilmeldt: 15. nov 2009, 15:04
- IRC nickname: AJenbo
- Geografisk sted: Vanløse, København
Re: $5 RPI
Et problem er at det ikke er den samme bruge, end ikke sammen system der skal låse og låse filen op. Desuden ville det kræver en fil som låsen skal ske på. Det ville være en hel del ekstra kompleksitet uden nogen synlige fordel.