Wichtigkeit eines Backup des /efs Ordners des Samsung Galaxy S (Roaming DREI)

Ich poste hier eine 1:1 Kopie dessen, was ich auch im Forum android-Hilfe.de gepostet habe:

Ich habe heute ein SGS1 von Gingerbread 2.3.3 auf 2.3.4 (JVR) gebracht, danach auf Darkcore Kernel.

Abschließend dann noch die GOA-Custom Firmware auf dem Handy installiert.

So und nach einen Wipe und Factory Reset hatte ich dann das Problem, dass das DREI Handy nur noch roamte bzw. bei ausgeschaltetem Roaming keine Einbuchung in das Netz von 3 (Anzeige am Sperrscreen 3AT) mehr möglich war.

Internetseitig gab es nur noch Edge, was ganz klar darauf hindeutete dass das Handy über A1 fährt. Auch der Sperrscreen zeigte nur ein 3. Ein nächstes Indiz dafür dass sich das SGS wohl nicht richtig im DREI AT Netz einbuchen konnte.

Erster Gedanke: Naja spiel ich halt meine modifizierte spn-conf.xml ein. Also eingespielt, Handy aus und wieder ein geschaltet. Und…… noch immer nix, kein HSDPA, nur Edge kein 3AT nur 3(A1).

Nachdem ich ja IMMER eine Sicherung des EFS Ordners (…die nv_data.*) durchführe, bevor ich experimente starte, hab ich die Originaldateien von der Datensicherung wieder auf das SGS gespielt.

Das Handy neu gestartet, dann Paketdaten deaktivert – etwas gewartet – und Paketdaten wieder aktiviert.

Und siehe da: HSDPA , Netz = 3AT Sperrscreen = 3AT

Ich nehme deshalb an, dass es sowohl an der nv_data.* liegt UND an der modifizierten spn-conf.xml. (siehe Beitrag über Roaming)

BITTE IMMER eine Datensicherung Ordner /efs -> nv_data*.* durchführen BEVOR IHR IRGENDETWAS am Originalzustand des SGS ändert! Am Besten gleich die spn-conf.xml mitsichern! Die nv_data kann auch mit dem Product Code Checker gesichert werden. Anleitungen hierfür im Forum android-hilfe.de

Python Grundkurs: Teil 2: Schleifen

Nein, kein Mittel zur Verzierung :-). Schleifen kommen immer dann zum Einsatz, wenn etwas x mal wiederholt werden soll, oder so lange wiederholt werden soll, bis ein gewisser Zustand erreicht worden, oder durch den User ausgelöst worden ist.

Unterschieden wird hier zwischen while und for. While kommt dann zum Zug, wenn man nicht weiß, wie oft die Schleife durchlaufen wird. (So lange bis der Anwender das Programm stoppt).

For hingegen ist in der Laufzeit (Schleifendurchläufe) limitiert. (Man weiß, dass die Schleife 5x durchlaufen soll):

 

Beispiele – for – Schleife

for i in range(1,11):
   x = raw_input('Wert eingeben: ')

Beispiel whileSchleife

x = "1"
while x != "":
   x = raw_input ('Eingabe :')

An obigem Beispiel sieht man nun den Unterschied. In der while Schleife hängt es vom Benutzer ab, wann er als Wert nichts eingibt (also nur Return drückt) und somit die while Bedingung nicht mehr erfüllt wird. Sie besagt, dass die Schleife so lange durchlaufen wird, so lange der Wert der Variablen x nicht „“ (also leer) ist.

Wir wissen also bei while nicht, wann der Anwender nichts mehr eingeben will!

Python Grundkurs: Teil 1.2: Grundlegende Operatoren

Variablen haben wir bereits kennen gelernt. Nun geht es darum, auch kurz einen Blick auf die grundlegenden Operatoren zu werfen. Hierbei gibt es vor allem bei = und == einen großen Unterschied!

Während folgender Code bedeutet, dass die Variable x den Wert 10 zugewiesen bekommt:

x = 10

bedeutet folgendes, dass x mit dem Wert 10 verglichen wird (sozusagen: Entspricht x dem Wert 10?)

x == 10

Gut einprägen!

Weitere Operatoren

  • + –
  • * /
  • < > >= <=
  • % (Modulooperator – zeigt den Rest einer Division)
  • or, and, not, in

Genauer betrachten möchte ich hier kurz den Modulooperator. Dieser gibt – wie bereits kurz angeschnitten, den Rest einer Division aus.

Das probieren wir gleich mal aus und tippen direkt in der Pythonshell folgendes ein:

10%3

Als Ausgabe erhalten wir 1. Warum? Weil 3 in 10 3x enthalten ist (3×3 = 9) Rest = 1. Modulo (also %) gibt immer den Rest einer Division aus.

 

 

Python Grundkurs: Teil 1.1: Datentypen

Nun kurz zu den Datentypen, die eine sehr wichtige Rolle spielen!

Der Befehl raw_input nimmt Einnahmen entgegen und speichert diese standardmäßig als String (also Zeichenkette) ab. Dies lässt sich leicht durch den Befehl type(variablenname) überprüfen.

name = raw_input('Bitte Ihren Namen eingeben:')
datentyp = type(name)
print datentyp

Diese 3 Zeilen muss man nun allerdings in den Editor eingeben und abspeichern, bevor man das Programm starten kann.

Was passiert?

  1. Man gibt seinen Namen ein. Dieser wird der Variable name zugewiesen.
  2. der Variable datentyp wird der Wert der Ausgabe des Befehles type zugewiesen. In Worten: „Sag mir welcher Datentyp die Variable name ist“.
  3. der print-Befehl gibt diesen Wert schließlich als <type ’str‘> aus. Wir haben hier also eine Zeichenkette eingegeben.

 Einige weitere Datentypen

  • int (Integer – Ganze Zahlen)
  • float (Kommazahl)
  • long (lange Integerzahlen)
  • complex (komplexe Zahlen)

Was, wenn man mit den Werten rechnen will – Mit Strings kann man das doch nicht!

Richtig! Mit Zeichenketten kann man keine Berechnungen durchführen. Deshalb hängt folgendes Programm die 2 Werte zusammen, anstatt diese zu addieren:

wert1 = raw_input('Wert1: ')
wert2 = raw_input('Wert2: ')
print wert1+wert2

Wenn man mit den beiden Werten rechnen will, muss das so aussehen:

wert1 = int(raw_input('Wert1: '))
wert2 = int(raw_input('Wert2: '))
print wert1+wert2

Warum?

Berechnungen können nur mit Zahlen (Datentyp = Zahl) durchgeführt werden. Durch die Verwendung von int() „weiß“ Python, dass die Eingabe als Integer zu verstehen ist. Strings können nicht zu Berechnungszwecken herangezogen werden. Integerzahlen schon!

Statt int() könnten wir hier auch float() verwenden. Die Inputanweisung würde dann so aussehen:

wert1 = float(raw_input('Wert1: '))

Wir könnten hier dann zum Beispiel: 1.2 eingeben – also eine Kommazah

Übungsaufgabe 1

Schreibe ein Programm, dass 1. Deinen Namen abfragt, danach  2 Werte abfragt – diese addiert und zuletzt folgendes ausgibt:

Hallo Name, die Berechung ergibt Ergebnis. (Wobei Name eine Variable ist und das Ergebnis natürlich der Berechnung entspricht).

Tipp: Die Verkettung von Strings und Zahlen erfolgt mit Hilfe des print Befehles in dieser Art und Weise (, statt +):

print 'Hallo ', name, 'die Berechnung ergibt ', ergebnis

Lösung

name = raw_input('Bitte deinen Namen eingeben: ')
wert1 = int(raw_input('Wert1: '))
wert2 = int(raw_input('Wert2: '))
ergebnis = wert1 + wert2 print 'Hallo ',name,' die Berechnung ergibt ',ergebnis

Python Grundkurs: Teil 1: Einfache Ein- und Ausgabe

Ausgabe von Text (Befehl print)

Um Texte (aber auch Variablen) ausgeben zu können, bedient man sich des Befehls print. Da wir uns in Python 2.7.2 befinden, ist dieser Befehl keine Funktion (wie z.B. in Python 3.x). Um einen Text auszugeben, schreiben wir folgenden Befehl in Idle:

print 'Hallo, hier spricht Python'

danach starten wir „das Programm“ und sehen, dass – wie erwartet – Hallo, hier spricht Python ausgegeben wird.

Zusatzinfo:

  • Diese Übungen (auch die folgenden!) kann man auch direkt in der Pythonshell eingeben, ohne zuvor die Datei zu erstellen und zu speichern
  • Variablen = Platzhalter, die Werte speichern können
  • Statt dem einfachen ‚ kann auch “ verwendet werden

Eingabe durch den Anwender (Befehl raw_input)

Um nun einen Wert (Text oder Zahl) eingeben zu können, müssen wir zuerst einen Platzhalter schaffen. Dieser wird als Variable bezeichnet. Eine entsprechende Zuordnung wird wie folgt erstellt:

name = raw_input('Bitte geben Sie Ihren Namen ein:')

Was passiert hier? der Variable name wird eine Eingabe zugewiesen, die vom Anwender kommt. Gibt man z.B.: Daniel ein, bekommt die Variable name den Wert Daniel.

Nun prüfen wir, ob die Variable auch einen Wert gespeichert hat:

print name

Hierbei sollte nun der Wert ausgegeben werden, der eingegeben wurde.

„Zusammenhängen“ von Ausgaben

Will man einen String und den Wert einer Variable mit einem print – Befehl ausgeben ist auch das möglich:

print 'Hallo, ' + name + ' wie geht es dir?'

Die Verkettung erfolgt also mit dem +.