Tag Archive for 'C#'

Buchtipp: Durchstarten mit Raspberry Pi

Eine große Stärke des Einplatinen-Computers Raspberry Pi sind die vielfältigen Einsatz- und Erweiterungs-Möglichkeiten. Doch wie legt man eigentlich los? Erik Bartmann beantwortet diese Frage und hilft beim „Durchstarten mit Raspberry Pi“.

Unterstützt durch ein ansprechendes und mehrfarbiges Layout liest sich das Buch gut – sofern man die eher flapsige Art des Autors mag. Klasse sind die zahlreichen Hinweise, die typische Fragen und Stolperfalle hervorheben und anschaulich erklären. Verwirrend ist jedoch der Wechsel zwischen virtualisierten Linux-Umgebungen und dem echten Raspberry Pi. Zumal auch mehrere Betriebssystem-Versionen wie Debian Squeeze und das neuere Debian Wheeze im Buch vorkommen. In Anbetracht des frühen Erscheinungstermins des Buches ist klar, dass die neueste Hardware-Revision fehlt: Hier ist unbedingt Vorsicht geboten, wenn man sich mit den Hardware-nahen Beispielen im Buch befasst. Aber der Autor hat darauf reagiert und bereits einen entsprechenden Artikel (PDF) verfasst. Gut gefällt der Rundumschlag zu Linux, inklusive Kommandozeile und der grafischen Benutzungsoberfläche. Das nötigste wird bereits im Buch vermittelt und am Ende gibt es noch einmal ein hilfreiches Zusatzkapitel mit Linux-Grundlagen.

Der umfangreiche Einstieg in die Raspberry Pi Welt umfasst neben Installation und Konfiguration auch die Paketverwaltung. Darauf folgt ein Schnelleinstieg in die Programmierung mit Python und C. Dass diese rund 40 Seiten Programmierkurs einem Einsteiger viel nützen, bezweifle ich. Dennoch ist es ein schöner Überblick, um mit Hilfe von Zusatzliteratur oder Vorkenntnissen schnell zu einem Raspberry-Pi-Programmierer zu werden.

Eine Stärke des Buches sind die Themen, bei denen es um die Erweiterungsfähigkeiten des Raspberry Pis geht. Sowohl das Zusammenspiel mit Arduino als auch die GPIO-Pins und Erweiterungsplatinen wie Gertboard und PiFace werden behandelt. Schade ist, dass dem Leser hier wenig Entscheidungshilfe gegeben wird, welcher Weg sich für was eignet. Drum herum werden noch elektrotechnische Grundlagen vermittelt und das so anschaulich und gut, so dass man sich davon mehr wünschen würde – gerade wenn man eher von der Code-Seite kommt.

Wer einen ansprechenden Einstieg in die Erweiterungsmöglichkeiten des Raspberry Pi sucht, erhält mit diesem Buch einen umfassenden Überblick. Die Breite der behandelten Themen ist groß. Darunter leidet zwar ab und zu der Tiefgang, doch entsprechende Vorkenntnisse oder Zusatzliteratur vorausgesetzt, kann das auch ein Vorteil sein. Das Buch ist durchaus für den ambitionierten Einsteiger geeignet ohne den Fortgeschrittenen zu langweilen.

„Durchstarten mit Raspberry Pi“
Autor: Erik Bartmann
Preis: ca. Euro 25,-
ISBN: 3868994106
Erscheinungsdatum: O’Reilly, 28. Oktober 2012
Link: Amazon

Send SMS mit Windows 8 (C#)

Der Versandt von SMS ist durchaus ein adäquates Mittel, um auf wichtige Ereignisse hinzuweisen. Sei es, dass die eigene Highscore übertroffen wurde, der Akku des Rasenmäherroboters kurz vor der Grillparty zur Neige geht oder einfach nur so, um seinen Liebsten eine nette Nachricht zu senden. Glücklicherweise bietet der Developer Garten hier Hilfe: Dort findet sich die Beschreibung einer umfangreichen Schnittstelle (API).

Doch bevor es losgeht, ein klein wenig Vorbereitung: Zuerst einmal ist eine Registrierung unter http://www.developercenter.telekom.com/ notwendig. Anschließend kann dort die Send SMS API im Bereich Telekom API´s freigeschaltet werden (aktuell sind 10 SMS am Tag für Developer kostenlos).

Vor der Nutzung der API steht jedoch die Autorisation. Es gibt verschiedene Wege, um das zu bewerkstelligen. Ähnlich zu OAuth verhält sich hier TAuth (T wie Telekom). Es werden nur Benutzername und Passwort wie bei der Registrierung gewählt benötigt. Im C# Code für Windows 8 (Metro) sieht das dann so aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
///
<summary>/// Url of STS service. Can be overwritten if needed.
/// </summary>
 
private static string UPAuthUrl = "https://sts.idm.telekom.com/rest-v1/tokens/odg";
 
private string username = "username";
private string password = "password";
 
///
<summary>/// Generated by STS service.
/// </summary>
 
private string token;
 
private async void authenticate()
{
 
HttpClientHandler handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential(username, password);
 
HttpClient client = new HttpClient(handler);
 
try
{
HttpResponseMessage response = await client.GetAsync(UPAuthUrl);
// Force an exception if the web server returned an HTTP error status code
response.EnsureSuccessStatusCode();
 
String content = await response.Content.ReadAsStringAsync();
JsonObject json = JsonObject.Parse(content);
token = json.GetNamedValue("token").GetString();
 
// proceed to api call
sendSMS();
}
catch (HttpRequestException hre)
{
Debug.WriteLine(hre.ToString());
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
}
 
}

Die Nutzung der API gestaltet sich nun ähnlich wie der Post-Versandt aus HTML-Formularen. Zusätzlich muss das bei der Autorisation generierte Token in den Header des HTTP-Requests injiziert werden. Hier der passende Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
///
<summary>/// Realm for authorization.
/// {0} is replaced by authorization token
/// </summary>
 
private static string Realm = "realm=\"https://odg.t-online.de\",tauth_token=\"{0}\"";
 
///
<summary>/// URL Path to Send SMS services. Can be overridden if necessary.
/// {0} is replaced by selected environment (sandbox or production)
/// </summary>
 
private static string ServicePath = "plone/odg-sms/rest/{0}/sms";
 
///
<summary>/// Address of Telekom API server.
/// </summary>
 
private static string TelekomBaseUrl = "https://gateway.developer.telekom.com/";
 
private async void sendSMS()
{
 
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("TAuth", String.Format(Realm, token));
 
Uri baseUri = new Uri(TelekomBaseUrl, UriKind.Absolute);
Uri relativeUri = new Uri(String.Format(ServicePath, "production"), UriKind.Relative);
Uri uri = new Uri(baseUri, relativeUri);
 
MultipartFormDataContent form = new MultipartFormDataContent();
form.Add(new StringContent("+4933123456"), "number");
form.Add(new StringContent("Foo"), "message");
// Optional (see http://www.developergarden.com/fileadmin/microsites/ApiProject/Dokumente/Dokumentation/Api_Doc_4_0/telekom-api-rest-4.0/html/sendsms_send_s_m_s.html)
form.Add(new StringContent("Sascha"), "originator");
 
try
{
HttpResponseMessage response = await client.PostAsync(uri, form);
// Force an exception if the web server returned an HTTP error status code
response.EnsureSuccessStatusCode();
}
catch (HttpRequestException hre)
{
Debug.WriteLine(hre.ToString());
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
}
 
}

Wer es sich ein wenig einfacher machen möchte, der findet im Developer Garden SDKs für verschiedene Technologien wie .NET, Java, Objective C und PHP (http://www.developergarden.com/apis/apis-sdks/sdks/). Dort gibt es auch ein Forum für Ideen und Fragen. Viel Spaß…

Windows 8 Trainings

Zur Zeit halte ich einige kostenlose Trainings rund um Windows 8 und noch sind Plätze frei. Hier die aktuellen Termine und Orte:

Und wie immer, Wünsche und Anregungen sind willkommen – am liebsten vor dem jeweiligen Training, denn dann kann ich das ggf. noch vorbereiten und einbauen.