mit c++ web applikationen erstellen. es ist keine apache module oder aehnliches.
der content wird grundsaetzlich mit templates erstellt (ecpp)
c++ klassen und bibs uneingeschraenkt nutzbar
standalone webengine
multithreaded also skalierbar
persistente app
automatische http komprimierung was oft vergessen wird also http komprimierung nicht genutzt. interessant fuer embedded apps.
ssl unterstuetzung (gnutls, openssl)
optimierter c++ code
tests mit apache bench zeigen sehr gute performance
automatisches sessionmanagement
session request application und threadscope fuer beliebige c++ objekte mit automaatischen locking
request parameter werden geparst
file upload cookies, i18n (bestimmte worter werden durch tags eingepackt und so internationalisiert)
grafiken und andere binaer daten koennen mit compiliert werden.
compiler oder interpreter auf dem server nicht notwendig
fehler behandlung durch exceptions
portabel durch die verwendung von standard c++ (linux,unix)
logging
automatisches html-encoding: steuerung falls tags enthalten sind ob diese ausgegeben werden oder nicht.
savepoint: nehme ausgabe im fehlerfall bis zu einem sicheren punkt zurueck
linux distribution fuer embedded system http://www.freewrt.org/
paketmanagement ueber ipkg
systeme mit 8mb flash
konfiguration ueber kommandozeile
cross compile
anwendungsgebiete
router
vpn endpoint
musikserver
telefonanalage
... (alles was linux hergibt)
start am linux tag in chemnitz 4.03.2007
uClibc++
tnt laeuft portierung ist noch nicht endgueltig abgeschlossen
tntnet schnell auch mit schwacher cpu bis zu 300 request pro sec
plaene fuer konfigurationsoberflaeche:modular,einfach erweiterbar durch definition von konfigurationsvariablen oder plugins
tntnet bekommt http-request und switcht das zu urlmapper nach MapUrl ^ /blah$ comp@lib und landet bei konponente
ecpp komponente also template compiler
vi mycomp.ecpp make scp mylib.so admin@myrouter ssh admin @myrouter
webconfig.ecpp
html code mit c++ code
linuxtag.ecpp
<%args>
die tags
<$ ...$> ausgabe c++ ausdrucks <{...}> c++ verarbeitungsblock <%args>...</%args> formular parameter <%pre>...</%pre> <& component > <#...#> kommentar
www.tntnet.org www.freewrt.org tommi@tntnet.org irc:freenode #tntnet, #freewrt
dienst von amazon fuer 15 cent pro gigabyte pro traffic.
bspl rails plugin
def publi... AWS::S3::S3Object.url_for(...) upload file_upload = FileUpload.new(prams[..]) file_upload.save
download
file_upload = FileUpload.find(prams..)
file_upload.public_s3_url ....
file_upload.value ...
zeitgesteuest mit cron:
0 8 * * * /home/.../start_additional_instances.sh 0 18 * * * /home/.../stop.sh
On-Demand Computing mit EC2
tail /etc/monitrc
check system example.com if cpuusage(user) ...
cpazon/elastic rails sind plugins
WeoCEO ist daemon der auf jeder virt maschone bei amazon installiert werden muss wenn ich EC2 nutzen will
weiterer ec2 helfer ist Rightscale
resourcen
aws.amazon.com
server stehen in seattle, soll bald aber auch in irland eroeffnet wird.
java implementation von amazon selber. diese werden intern bei amazon genutzt.
S3 sichern drei parallel gespeicherte daten zu.
zw 2 bis 8 minuten dauert es bis der neue service dann verfuegbar ist.
zufaellige ip wird zugewiesen aus dem internen netz von amazon.
EC" tools
ec2-describe-images ec2-run-instances ami-asdf -k $RSA_KEY ssh root@domU-12-11-11-11.usma1.compute.amazon.com echo instanz beenden ec2-terminate-instaces i-10a2222
method
params
id
identisch zum request nur ohne antwort. fällt in 1.1 weg
result
error
id
encoding parser geht von utf-8 aus, also probleme bei iso-8859-15 oder -1
http fehler
live coding (grundgeruest eines dienstes) :
json.js
<script src="json.js" /> var xhttp=new XMLHttpRequest; var request=new Object; request.method='foo:bar'; request.id=Date.time(); request.params=new Array(); request.params.push('hallo welt'); // in perl form var request={method:foo::bar', id:Date.time(), params:['hallo welt']} // in dieser weise kommt object serialisiert an xhttp.open('POST', 'http://localhost/foo', false); xhttp.onreadystatechange=handler; xhttp.send(request.toJSONString()); function handler() { if ( xhttp.readyState!=4 ) { return; } try { var result=xhttp.responseText.parseJSON(); if(result.result) { alert('hat geklappt!'); } else { throw result.error; } } catch (e) { alert('Exception:'+e); } }
json.php
<?php
$request=json_decode(file_get_contents('php://stdin') );
$result=new StdClass;
$result->id=$request->id;
$rc=doSomething($request->method, $request->params);
if(!$rc) {
$result->result=NULL; $result->error='Fehlgeschlagen';
} else {
$result->result='super';
$result->error=NULL;
}
header('content-type: text/json');
echo json_encode($result);
?>
Absichern der Eingabe und Ausgabe gegen XSS.
gpe-phonepanel is desktop headline where status information is being shown, in the center gpe-applauncher, at the bottom softkey area. the softkey are associated to the hardware buttons of the phone which are very different from model to model.
Diplomarbeit möglich und tanja anschreiben. problem wäre personal resourcen zur betreuung.
make # no external libs needed cd utils ./librfid-tool -s scanning for RFID token ... ./librfid-lockunlock kate firmware / main_dumbreader.c
A python implementation for the library is under work. and not ready yet.
#!/usr/bin/env python # python-test.py import openpcd res = openpcd.open()
The lib is calles librfid. Wiki is ready for giving help.
Build your own firmware.
Program librfid-lockunlock.c as sample what is possible with the device.
13 MHZ frequency. A sniffer is available.
www.openpcd.org
OpenBeacon Project is also possible with active rfid tokens. http://www.openbeacon.org/