Eine Datenbank, in der die Daten alle 5 Minuten mit Datum/Zeit gespeichert werden. Die Daten sollen in einem SQL-Ergebnis so dargestellt werden, dass von allen bis jetzt vorhandenen Jahren eine Spalte erzeugt wird um (aufsummierte) Monatswerte vergleichen zu können.
Die Lösung:
SELECT * FROM
(
SELECT
Extract(month from `date`) as monat,
max(`E-Total`) - min(`E-Total`) as diff2009
FROM
archiv
WHERE
Extract(year from `date`) = 2009
GROUP BY monat
ORDER BY monat
) as t2009
NATURAL LEFT JOIN
(
SELECT
Extract(month from `date`) as monat,
max(`E-Total`) - min(`E-Total`) as diff2010
FROM
archiv
WHERE
Extract(year from `date`) = 2010
GROUP BY monat
ORDER BY monat
) as t2010
NATURAL LEFT JOIN
(
SELECT
Extract(month from `date`) as monat,
max(`E-Total`) - min(`E-Total`) as diff2011
FROM
archiv
WHERE
Extract(year from `date`) = 2011
GROUP BY monat
ORDER BY monat
) as t2011
Ich wollte gerne alle Gems, die ich habe, zentral mit Rubygems verwalten. Deswegen hier eine kleine Anleitung wie man Instiki dazu bekommt, diese Gems zu benutzen.
cd /path/to/instiki/vendor/
rm-r rails
cd plugins/
Es können nur die Plugins gelöscht werden, die es auch als Gems gibt.
rm-r abstract_1.0.0/ diff/ maruku/ rails_xss/ syntax/ xhtmldiff/
cd ../../
Jetzt noch die Gemfile mit folgenden Zeilen ergänzen. (Gilt für Instiki 0.19.1)
Hier ist eine Anleitung wie man eine DV-Kamera per Firewire, dvgrab, ffmpeg, ffserver und dem JWPlayer ins Netz streamen kann.
Kompiliere dir auf deinem lokalen Rechner die neueste Version von ffmpeg mit x264. Hier bekommst du ffmpeg. Wie du libx264 Support bekommst, steht (unter Anderem) hier.
Als nächstes solltest du einen Webserver zur Verfügung haben, der genug Kapazitäten (Rechenleistung/RAM/Bandbreite) hat, um dort deinen Streamingserver aufzusetzen.
Dafür muss auch dort ffmpeg kompiliert werden. Bei mir gab es irgendeinen Bug, deswegen musste ich eine bestimmte Revision nutzen. Am besten du versuchst es als erstes mal mit der aktuellen Version und wenn es dort komische Fehler gibt, dann nutze die Revision 25337.
Auf dem Server (bei mir Debian 5.0) also folgendes ausführen:
Als nächstes musst du eine Konfigurationsdatei für ffserver anlegen. Diese gibt an, wie der Server erreicht werden kann und welche Streams mit welchen Eigenschaften angeboten werden.
Inhalt meiner sample.conf
# Port on which the server is listening. You must select a different# port from your standard HTTP web server if it is running on the same# computer.
Port 8090
# Address on which the server is bound. Only useful if you have# several network interfaces.
BindAddress 12.34.56.789
MaxHTTPConnections 200
MaxClients 100
MaxBandwidth 10000
# Access log file (uses standard Apache log file format)# '-' is the standard output.
CustomLog -
# Suppress that if you want to launch ffserver as a daemon.
NoDaemon
<Feed feed1.ffm>
# You must use 'ffmpeg' to send a live feed to ffserver. In this# example, you can type:## ffmpeg http://localhost:8090/feed1.ffm
File /tmp/feed1.ffm
FileMaxSize 200K
</Feed>
<Stream stream.flv>
Feed feed1.ffm
Format flv
VideoCodec libx264
AVPresetVideo default
AVPresetVideo baseline
VideoSize 512x288
VideoFrameRate 12
VideoGopSize 12
VideoBitRate 200
VideoBufferSize 40
AudioBitRate 32
AudioCodec libfaac
AudioSampleRate 22050
AVOptionVideo flags +global_header
AVOptionAudio flags +global_header
</Stream>
# Server status
<Stream stat.html>
Format status
# Only allow local people to get the status
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>
Dann kann der Server mit
ffserver -f sample.conf
gestartet werden.
Jetzt solltest du auf deinem lokalen Rechner mit per Firewire angeschlossener DV-Kamera folgendes starten können. Achte darauf, dass du Zugriff auf /dev/raw1394 hast.
Jetzt sollte dein ffmpeg/ffserver anfangen zu streamen. Du kannst dir den Status des ffservers unter
http://12.34.56.789:8090/stat.html
ansehen.
Jetzt brauchst du einen Player. Ich benutze den JWPlayer von hier.
Downloaden, auf den Server ziehen, entpacken und verfügbar machen. Hier eine Beispiel HTML-Seite, die zu den ffserver Einstellungen von oben passt:
Jetzt solltest du diese HTML per Browser aufrufen und nach einem Klick deinen Stream sehen.
Anhang:
Hier habe ich versucht ein Live-Bild zu streamen und gleichzeitig auf eine Festplatte aufzunehmen. Keine Garantie für Funktion, ist hier nur vollständigkeitshalber! :)
Nach einiger Zeit stürzt eine Sinatra-App von mir mit Fehler 500 ab.
Die Logdateien verraten “ActiveRecord::StatementInvalid - Mysql::Error: MySQL server has gone away”.
Das ist das erste Mal, dass ich ActiveRecord ohne Rails verwende. Habe jetzt mal eine Lösung ((http://www.ruby-forum.com/topic/123472#719835)) versucht bei der ActiveRecord “gepatcht” wird. Mal sehen ob der Server jetzt läuft.