export HISTCONTROL=erasedups
export HISTSIZE=10000
shopt -s histappend
Monthly Archives: June 2010
Bad Hersfelder Kunst
incredible game at rain
Blackberry Widget – About Page
Bei jedem Programm sollte eigentlich immer Platz für ein paar Informationen sein. Ich habe mir die Mühe gemacht und ein kleines Template geschrieben. Es ließt automatisch die Einstellungen aus der config.xml aus (die man ohnehin Eintragen sollte) und erstellt einen neuen Menüpunkt. Somit kann man immer schnell auf die Seite zugreifen und hat alle Informationen auf einen Blick parat.
Einfach Herunterladen, in dem gewünschten Widget entpacken und das Javascript einbinden. Zum Beispiel im header:
<script type=”text/javascript” src=”about/js/about.js”></script>
Fertig. Schöne UI Beispiele gibt es im Forum bei RIM.
Blackberry Widget – RSS Parser
Solange ich noch auf meine Zugangsdaten für die Pushservices warte bediene Ich mich momentan anderen Pull Techniken. Eine davon verbreitete Möglichkeit ist dabei RSS. Fast jede Internetseite hat RSS und ggf. noch eine sehr kluge. Normale Browser erlauben keine cross domains. Das heist dass die zu parsende Datei auch local liegen muss und man die nicht erst von einem anderen Server holen. Bei den Widgets gibt es die Möglichkeit cross domains zu benutzen in dem man die gewünschte/n Domains freigibt. Also kann man sich bequem Informationen auf den BB Pullen.
Fangen wir also mit einem normalen RSS an und mal schauen was noch kommt… Ich hab es leider nicht selber geschrieben und weiss nicht mehr wo ich es gefunden habe :( Die Credits gehen also an Anonymous.
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<meta name=”viewport” id=”viewport” content=”initial-scale=1.0,user-scalable=no”>
<title>RSS Beispiel</title>
</head>
<script language=”javascript” type=”text/javascript”>var RSSRequestObject = false; // XMLHttpRequest Object
var Backend = ‘http://news.google.de/news?pz=1&cf=all&ned=de&hl=de&q=blackberry&cf=all&output=rss’; // Backend url
window.setInterval(“update_timer()”, 1200000); // update the data every 20 min
RSSRequestObject = new XMLHttpRequest();/*
* onreadystatechange function
*/
function ReqChange() {// If data received correctly
if (RSSRequestObject.readyState==4) {// if data is valid
if (RSSRequestObject.responseText.indexOf(‘invalid’) == -1)
{
// Parsing RSS
var node = RSSRequestObject.responseXML.documentElement;// Get Channel information
var channel = node.getElementsByTagName(‘channel’).item(0);
var title = channel.getElementsByTagName(‘title’).item(0).firstChild.data;
var link = channel.getElementsByTagName(‘link’).item(0).firstChild.data;content = ‘<div style=”padding-top:2px; margin-bottom: 1px; background:grey;”></div>’;
// Browse items
var items = channel.getElementsByTagName(‘item’);
for (var n=0; n < items.length; n++)
{
var itemTitle = items[n].getElementsByTagName(‘title’).item(0).firstChild.data;
var itemLink = items[n].getElementsByTagName(‘link’).item(0).firstChild.data;
var itemDesc = items[n].getElementsByTagName(‘description’).item(0).firstChild.data;content += ‘<a href=”‘+itemLink+'” style=”padding-left: 17px; display: block; background:#fff; text-decoration: none; color: black; “>’+itemTitle+'</a>’;
content += ‘<div style=”margin-left: 15px; padding-top:1px; background:#d5d3d3;>”></div>’;}
// content += ‘<hr/>’;
// Display the result
document.getElementById(“ajaxreader”).innerHTML = content;// Tell the reader the everything is done
document.getElementById(“status”).innerHTML = “Done.”;}
else {
// Tell the reader that there was error requesting data
document.getElementById(“status”).innerHTML = “<div>Error requesting data.<div>”;
}HideShow(‘status’);
}}
/*
* Main AJAX RSS reader request
*/
function RSSRequest() {// change the status to requesting data
HideShow(‘status’);
document.getElementById(“status”).innerHTML = “Requesting data …”;// Prepare the request
RSSRequestObject.open(“GET”, Backend , true);
// Set the onreadystatechange function
RSSRequestObject.onreadystatechange = ReqChange;
// Send
RSSRequestObject.send(null);
}/*
* Timer
*/
function update_timer() {
RSSRequest();
}function HideShow(id){
var el = GetObject(id);
if(el.style.display==”none”)
el.style.display=”;
else
el.style.display=’none’;
}function GetObject(id){
var el = document.getElementById(id);
return(el);
}</script>
<body onload=”RSSRequest();”>
<div id=”status” style=”display:none”></div>
<div id=”ajaxreader”></div></body>
</html>
Das und noch ein bisschen mehr ist dann auch schon der Sourcecode für die WMLive app. Mir hat das sehr viel geholfen um gefallen an Blackberry Widgets zu bekommen und mal schauen was man noch alles machen kann.
Blackberry Widget – WM 2010 Live (Update)
Seit drei Tagen bin ich am schrauben und frickeln und bin immer noch nicht Fertig, aber ich will die App jetzt einfach mal veröffentlichen weil die WM auch bald vorbei ist ;) Ich habe die App zum ausprobieren von verschiedenen Notifications vom BB geschrieben und vielleicht bringt sie dem einen oder anderen etwas. Die eine oder andere WM App für den Blackberry funktionieren nicht so wirklich oder verbrauchen zu viel Akku.
Was leider noch nicht funktioniert ist den Intervall einzustellen (updated sich jetzt jede Minute) weil ich es noch nicht geschafft habe dass sich das Menü öffnet. Außerdem hätte ich gerne dass das Blackberry noch Vibriert wenn ein Tor gefallen ist (daran Arbeite ich gerade). Die App vibriert endlich wenn eine neue Benachrichtigung eintrifft.
Kommen wir mal zu dem Punkt wo ich sage was schon funktioniert ;) Die App läuft im Hintergrund und schaut jede Minute nach ob bei irgend einem Spiel ein Tor gefallen ist oder ob ein Spiel fertig ist. Wenn dies geschehen ist wird man darüber informiert. Wie immer – keep it simple und sobald es Vibriert gibt es eine neue Version ;)
OTAInstall: here
Blackberry Widget – WebIcon/Webstarter
Bei einem Blackberry kann man leider nicht ohne weiteres einen Link auf dem Desktop platzieren. Man muss erst den Browser öffnen und dann das Lesezeichen auswählen. Ein ziemlich langer weg und wenn man bestimmte Seiten öfters besucht, dann kann dass manchmal Nerven. Zum Glück haben wir die Widgets womit sich das sehr einfach erledigen lässt (Ich hoffe das BB OS 6.0 dass wie andere Systeme integriert hat). Wenn man das Widget öffnet wird automatisch der Browser mit einer definierten URL geöffnet. Das und nicht mehr.
Also schauen wir mal in die API Dokumentation und dort steht eigentlich schon alles. Schnippe…. Schnappe und so könnte die fertige HTML Datei aussehen:
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<meta name=”viewport” id=”viewport” content=”initial-scale=1.0,user-scalable=no”>
<script type=”text/javascript”>
function Load () {
var args = new blackberry.invoke.BrowserArguments(‘http://blackberry.itbert.de’);
blackberry.invoke.invoke(blackberry.invoke.APP_BROWSER, args);
// exit web icon after browser is closed
blackberry.app.exit();
}
</script>
<title>WebIcon demo</title>
</head>
<body onload=”javascript:Load();”>
</body>
</html>
und die config.xml folgendermaßen:
<?xml version=”1.0″ encoding=”UTF-8″?>
<widget xmlns=”http://www.w3.org/ns/widgets” xmlns:rim=”http://www.blackberry.com/ns/widgets” version=”1.0.0.0″>
<name>WebIcon</name>
<description>webicon demonstration icon</description>
<author email=”bla@itbert.de” href=”http://blackberry.itbert.de”>Steffen Wirth</author>
<feature id=”blackberry.invoke” required=”true” version=”1.0.0.0″/>
<feature id=”blackberry.invoke.BrowserArguments” required=”true” version=”1.0.0.0″/>
<feature id=”blackberry.identity” required=”true” version=”1.0.0.0″/>
<feature id=”blackberry.app” required=”true” version=”1.0.0.0″/>
<icon rim:hover=”false” src=”ext/icon_flat.png”/>
<icon rim:hover=”true” src=”ext/icon_glossy.png”/>
<content src=”index.html”/></widget>
Ich habe noch eine Exit Funktion nach dem der Browser geschlossen wurde eingetragen damit das Widget sich auch beendet. Jede App braucht ein Icon und das kann man sich einfach hier erstellen lassen. Die Texture für das Icon kommt von Petey Morf.
Hier ein paar Screenshots (die jetzt im Nachhinein nicht viel aussagen):
Wer sowas für seine/eine Homepage haben möchte kann sich gerne bei mir Melden (am besten gleich mit fertigen Icons).
Ein Test von proplay.de
Auf linuxforen.de bin ich auf einen Artikel gestoßen der um günstige vServer handelt und damit bin ich zufällig auf proplay.de gestoßen. Bei einem Preis von dem kleinsten vServer von 6EUR für 3 Monate kann man sich mal einen Spaß erlauben. Ich gehe an die Sache mit wenig Erwartungen und werde ein bisschen Berichtigen wie es dem Server oder meinen Nerven ergeht.
Nachdem ich meine Kundendaten (nach einem Arbeitstag) erhalten habe und das Erste mal eingeloggte war sah ich Nachrichten über Wartungsarbeiten mit Uhrzeitangaben wo ich nicht entziffern kann ob die UTC, GMT oder GMT+6 sind. Ansonsten ganz schnell zusammengefasst auf den ersten Blick:
- Debian 5.0 Minimal / Ubuntu LTS / Arch… (also viel Auswahl)
- iptables input chain sieht sehr…. freizügig aus, aber wenigstens gibt es eine und man kann sie einfach bearbeiten (init script)
- cool ein “RAC Interface” über ssh
- snapshot backups für den vServer (leider nur ein snapshot jeden Monat, aber immerhin)
- laut Webinterface habe ich keine native ipv6 Adressen – laut Anzeige aber schon! Notiz: Mail schreiben (noch keine Antwort nach Tagen…)
- ich habe zwar eine Messageinbox, aber kann selber keine schreiben aus dem Webinterface (oder ich finde sie nicht)
- FAQ ist anscheinend noch im Aufbau
Soweit kann ich sagen das es auf den ersten Blick ganz ordentlich aussieht, auch wenn noch nicht alle Funktionen im Webinterface funktionieren und ich meine ipv6 Adressen vermisse.
Bash timeout function
TIMEOUT=”60″
$MYPROGRAM >/dev/null &
pid=$!
sleep $TIMEOUT && kill -9 $pid >/dev/null 2>&1 && echo “$MYPROGRAM failed”
Blackberry Widgets
Jeder kennt heutzutage “Apps”. Für alle die sie nicht kennen, Apps sind Programme die man auf seinem Mobiltelefon installieren kann. Bei fast allen Geräten ist das Heutzutage möglich. Die meisten werden in eigenen Sprachen oder Java geschrieben und man muss “wirklich” Programmieren können um nur ein “Hello World” auf den Bildschirm zu bekommen. RIM hat schon seit längerem (seit BB OS5) die sogenannten Blackberry Widgets integriert. Das sind Programme die auf HTML/CSS und Javascript aufbauen und somit für fast Jedermann möglich eine mini web application für sein Blackberry zu schreiben. Es bietet nicht alles was eine richtige Programmiersprache bietet, aber für das eine oder andere kleine Programm sollte es reichen.
Das hat mich ein bisschen Gereizt und ich habe mich ein bisschen damit Beschäftigt. Bevor man aber loslegen kann muss man einige Programme von RIM herunterladen. Dabei braucht man das Java JDK, Eclipse + Widget SDK und einen Blackberry Emulator. Wenn man das Geschafft hat kann man eigentlich schon loslegen. Man sollte sich ein bisschen rein lesen und vielleicht das eine oder andere Video anschauen. Leider funktioniert es soweit nur unter Windows und deswegen komme ich nicht wirklich dazu und mag es nicht wirklich.
Nichts desto trotz kann man mit nur ein paar Zeilen ein kleines Widget schreiben. Im Grunde braucht man dazu nur eine index.hml, config.xml und die Bilder die man verwenden möchte. Zum Testen habe ich ein kleines Widget geschrieben (ganz ohne Javascript) womit man schneller (als über Bookmarks) auf wadoku.de suchen kann. Das ganze sieht dann wie folgt aus:
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<meta name=”viewport” id=”viewport” content=”initial-scale=1.0,user-scalable=no”>
<link href=”ext/style.css” rel=”stylesheet” type=”text/css”><title>Wadoku Online</title>
</head>
<body>
<br><br><CENTER><IMG SRC=”ext/image.gif”><br>
<form action=”http://wadoku.de/mobile.jsp?” target=”_blank”>
<b>Japanisch-Deutsches Wörterbuch</b><br><br>
<input type=”text” name=”phrase” style=”width:50%”>
<br><br><input type=”submit” value=”Suchen”>
</form>
</CENTER>
</body>
</html>
Wie man sehen kann ist es reines html und ist sehr schnell geschrieben. Den Code kann man jetzt als jar verpacken lassen und auf seinem Emulator ausprobieren. Damit das Widget aber noch auf einem richtigen Blackberry laufen kann braucht man noch die “Java Code Signing Keys“. Die Kosten nur 20USD, aber das kann man mal ausgeben.
In dem Emulator sieht das dann folgendermaßen aus:
Über die Widget API kann man noch auf Geräteeinstellungen zugreifen und so doch ein etwas anspruchsvolleres Widget schreiben als ich es hier zum Beispiel gemacht habe.
Das eine oder andere Widget das ich Veröffentlichen werde kann man in Zukunft unter http://blackberry.itbert.de finden