$ORACLE_HOME/network/admin/sqlnet.ora
DIAG_ADR_ENABLED=FALSE
DIAG_DDE_ENABLED=FALSE
$ORACLE_HOME/network/admin/sqlnet.ora
DIAG_ADR_ENABLED=FALSE
DIAG_DDE_ENABLED=FALSE
Auf dem Blackberry kann man zum Glück noch Programme installieren die nicht aus der App World kommen. Entweder man installiert sie OTA (OverTheAir) oder mit dem Blackberry Manager. Ich denke das jeder lieber die OTA Variante wählt. Wenn man eine App über App World heruntergeladen und Installiert hat, dann wird man auch über neue Updates informiert. Das Funktioniert leider nicht bei Apps die man OTA von irgendwo anders installiert hat und so muss jede App eine eigene Update Funktion mit sich bringen. Dazu habe ich einen kleinen XML Parser geschrieben der auf Abruf (oder Automatisiert – je nachdem wie man es einbaut) nachschauen kann ob es eine neue Version vorhanden ist. Dafür muss man selber nur in der App das folgende Script einbauen und auf dem Server die passende xml Datei hinterlegen und updaten wenn man eine neue Veröffentlichen will.
Die XML Datei sieht bei mir folgendermaßen aus:
<version>
<weatherme version=”1.0.0.4″ url=”http://blackberry.itbert.de/weatherme/weatherme.jad”></weatherme>
<wmlive version=”1.0.0.3″ url=”http://blackberry.itbert.de/wmlive/wmlive.jad”></wmlive>
<wadokulive version=”1.0.0.4″ url=”http://blackberry.itbert.de/wadokuonline/wadokuonline.jad”></wadokulive>
</version>
An sich ganz einfach. Für jede Anwendung kann man die Version und die URL des Downloads angeben. Was braucht man mehr? Das Javascript sieht auch nicht viel komplizierter aus:
var AppVersion = “1.0.0.2”;
var AppName = “weatherme”;function checkUpdates () {
var req = new XMLHttpRequest();
req.open(“GET”, “http://blackberry.itbert.de/finger/version.xml”, false);
req.send(null);if (req) {
version = req.responseXML.getElementsByTagName(AppName).item(0).getAttribute(“version”);
url = req.responseXML.getElementsByTagName(AppName).item(0).getAttribute(“url”);if ( AppVersion < version ) {
if (confirm(‘Do you want Upgrade to version ‘+version+’?’))
{
var args = new blackberry.invoke.BrowserArguments(url);
blackberry.invoke.invoke(blackberry.invoke.APP_BROWSER, args);
}
}}
}
Damit das ganze auch Funktioniert braucht man folgende Berechtigungen in der config.xml
<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.ui.dialog” required=”true” version=”1.0.0.0″/>
<feature id=”blackberry.app” required=”true” version=”1.0.0.0″/>
Jetzt muss man nur noch die Funktion in einen Button einbauen oder bei jedem Start der App aufrufen.
<script language=”javascript” type=”text/javascript”>
checkUpdates ();
</script>
Das ganze als Paket gibt es hier und bei Gelegenheit werde ich das in meine bestehenden Apps einbauen, aber vorher verdrücke ich mich in das hoffentlich kühlere Wien.
In Deutschland ist es eigentlich nur möglich den Blackberry Service mit einem Vertrag zu benutzen. O2O könnte man als Prepaid zählen lassen, aber ich will hier auf die traditionellen Prepaid Tarife eingehen. Im Ausland hingeben gibt es so langsam ein bisschen Bewegung und es werden Blackberry Services für Prepaid angeboten. Es sind noch nicht viele, aber es werden langsam immer mehr.
Wie man sehen kann ist es noch sehr selten einen Blackberry Prepaid Tarif anzutreffen, aber so langsam…
export HISTCONTROL=erasedups
export HISTSIZE=10000
shopt -s histappend
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.
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.
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
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).
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:
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.
TIMEOUT=”60″
$MYPROGRAM >/dev/null &
pid=$!
sleep $TIMEOUT && kill -9 $pid >/dev/null 2>&1 && echo “$MYPROGRAM failed”