Nur weil das Protokoll Ticketgranting (Authorization) und Auth(entication) voneinander trennt, heißt das nicht, daß die Dienste nicht (auf einer Platform) vereint werden können. (Es sei denn der RFC sagt dazu etwas anderes)

Letztlich ist der Sinn der Komponentenauftrennung wohl Verteilung und Skalierbarkeit. Kerberos ist innerhalb des Projektes Athena entstanden. Dazu kommt die grundlegende Entwurfsüphilosophie aus der Unixwelt.

Hast Du Dir mal die RFCs angeschaut, denn dort sollte an den entsprechenden Stellen dargelegt werden, warum die Dinge so umgesetzt wurden. Falls nicht, kannst Du in die entsprechenden Dokumente von v4 schauen.

P.S.: Das ist übrigens das gleiche Athena, dem wir die Athena Widgets und X11 zu verdanken haben.

...zur Antwort
all_ds = [ {"name":"abc", "cooldown":1}, {"name":"cba","cooldown":2}]
for i in all_ds: #iterate over list of dicts
  print(i["name"])
...zur Antwort

Der einzige echte Vorteil ist, daß sie prinzipiell auch auf Oberflächen funktioniert, auf denen eien optische Maus keien Abtastung hinbekommt (Glasplatte ohne Mauspad z.B.).

Jenseits dessen hat sie nur Nachteile, Insbesondere das Verdrecken der Kugel und der Achsen, bis gar nichts mehr geht. Die Abtastgenauigkeit ist auch so eine Sache, wobei es heute kein Schlitzrad mehr benötigt.

...zur Antwort

Offenbar wird das Modul socket nicht gefunden, bezüglich der Gründe könnte ich nur spekulieren.

socket ist auch bei uPython Teil der Standardbibliothek.

Wenn Du mit

from network import *

Alles aus network in den globalen NAmespace holst, dann ergibt

wlan = network.WLAN(network.STA_IF)

wenig Sinn, es sollte dann eher:

wlan = WLAN(network.STA_IF)

lautwn, da WLAN eien Klasse im Modul network ist, Du WLAN aber in den globalen NS geholt hast.

Du kannst mal schauen ob uPython den Parameter -v kennt, damit kannst Du ggf. rausfinden wo uPython nach socket sucht und danach schauen, wo es eigentlich ist.

...zur Antwort
    class Easy_name2flag_game: 
        def __init__(self):
             .....
        @run_once
        def getvalues(self):
            .........
 
        def rendering(self):  # renders the text, etc.
            global text_render
            var = Game.Easy_name2flag_game()  ########

####### Du instanziierst die Klasse in ihrer eigenen MEthode, oder übersehe ich hier etwas?

Eine Möglichgkeit, um die Variablen einer anderen Klasse zu nutzen, ist ein getter, das wäre als Schnittstelel sauber, sonst kannst Du auch direkt auf Attribute einer Fremden Klasse zugreifen.

Hier mal eien kurze Demonstration:

>>> class A:
...    def __init__(this,name,age):
...          this.name=name
...          this.age=age
...    def getvals(self):
...          return self.name,self.age
...
>>> test=A('Hans',12)
>>> test
<__main__.A object at 0x7f0be7d85ea0>
>>> test.getvals()
('Hans', 12)
>>> test.name
'Hans'

Das sollte selbsterklärend sein, getvals() liefert einfach alle Attribute als Tupel, ich kann auch auf ein Attribut der Objektinstanz direkt zugreifen.

Nun nutzen wir diese Klasse in einer anderen:

>>> class B:
...     def __init__(self):
...         self.foreign=A('Klaus',14)
...     def getassoc(self):
...         return self.foreign
...     def getv1(self):
...         return self.foreign.getvals()  #call to foreign method
...     def getv2(self):
...         return self.foreign.name,self.foreign.age 
...     def getassocm(self):
...         return self.foreign.getvals
...
>>> check=B()

Soweit so klar, wir instanziieren die Klasse B, die nun eine Instanz von A enthält.

>>> check.getassoc()
<__main__.A object at 0x7f0be7d85f60> #Die Instanz von A
>>> check.getassoc().getvals() #Methode von A() von außen aufr.
('Klaus', 14)
>>> check.getassoc().name # Durchgriff auf die Attribute
'Klaus'
>>> check.getassoc().age
14

Wenn ich also die Referenz auf die Objektinstanz nach außen reiche, kann ich die normal nutzen.

>>> check.getv1()
('Klaus', 14)
>>> check.getv2()
('Klaus', 14)

Einmal Nutzung von getter durch B, einmal direkter Durchgriff.

>>> check.getassocm()
<bound method A.getvals of <__main__.A object at 0x7f0be7d85f60>>

Hier lasse ich mir von der Methode von B eine Referenz auf die getter-Methode von A nach außen reichen. Der Aufruf ist entsprechend:

>>> check.getassocm()()
('Klaus', 14)

Python kennt die typische Kapselung nicht, man macht das einfach über die Benennung, aber hier mal der volle Durchgriff:

>>> check.foreign.getvals()
('Klaus', 14)
>>> check.foreign.name
'Klaus'

So, ich hoffe damit kannst Du Deine Wunschkomposition hinbekommen.

...zur Antwort
Nein

Solange man sich nicht im Grenzbereich bewegt, definitiv nicht.

Bei extremer Leistungsschwäche muß man eben schauen, daß man eine Sprache nutzt, bei der die Performance am Ende stimmt.

Bei stark parallelisierten Sachen sollte die Sprache geeignete Primitive (oder zumindest Libs) bieten, um leicht über Cluster oder Gruppen von Clustern skalieren zu können.

...zur Antwort

Dann schau Dir vielleicht mal davor an, wie nachname bzw. nachname[0] aussehen. Konkrete Bedeutung, in Deinem Statement wird eine Variable angekündigt, Du übergibst aber anscheinend 7 Stück.

Zur Erinnerung, Du übergibst (nachname[0]), Deine 'Sequenz' sind also die Zeichen von nachname[0] und der scheint 7 Zeichen lang zu sein.

Du möchtest vermutlich eher (nachname[0],) übergeben.

...zur Antwort

Am häufigsten sind wohl uC basierte Steuerungen bei Bestandsanlagen. Natürlich wird kein Hersteller daran gehindert, auch ein SBC zu nutzen und ein beliebiges OS drauf laufen zu lassen.

Manche Hersteller haben (trotz uC beim 'Kessel') definierte Schnittstellen, dann kannste da ein Modul reinstecken und kannst direkt mit der App vom Handy alle Einstellungen machen und steuern.

Das geht dann hoch bis zu Gebäudeautomatisierung, wo verschiedene Komponenten mit einem Bus(o.ä.) verbunden sind und letztlich z.B. ein beliebiger Panel-PC als zentrale Steuereinheit fungieren kann.

Was genau vorliegt, kann man am Begriff 'computergesteuert' nicht wirklich festmachen.

...zur Antwort

Ich kommentiere die Beschreibung der Schritte besser nicht weiter.

Was ein Router machen muß:

Nach Empfang des Ethernetframe und dessen Prüfung, wird anhand der Protokoll-ID nach oben gereicht, für den Fall IP also an das IP-Layer.

Dieses muß noch schauen, ob das Packet local to host ist, also für den Host selbst, wenn nein, dann geht es an die Routinginstanz.

Die Routinginstanz macht ein Lookup in der Routingtabelle, wenn das Ziel lokal erreichbar ist, wird ein ARP Lookup auf die Ziel-IP gemacht, sonst auf die IP des ermittelten Nexthop. Das Paket wird nach unter gereicht, mit einem Ethernet-Header versehen, wobei die von ARP ermittelte Ziel-MAC verwendet wird. Nun wird das Paket auf der zugehörigen Schnittstelle rausgesendet.

...zur Antwort

Wenn nötig, werden sie aufteilen. Allerdings kannst Du in der Vorweihnachtszeit mit mindestens 1 Woche bis Versand rechnen.

...zur Antwort

Ein Stackframe ist ein kontinuierlicher Block Speicher innerhalb des Stacks. Eigentlich ist der Name hier schon selbstredend.

Der Frame enthält jeweils die mit einem Aufruf zusammenhängenden Daten.

----

Besser wird sein, Du schaust Dir an, wie ein Callstack funktioniert, dann noch die Doku zu Enter/Leave, dann solltest Du in der Lage sein, die Frage zu beantworten.

...zur Antwort

Wie sieht der Calltree einer Funktion mit zwei rekursiven Aufrufen aus?

Hi,

ich verzweifle gerade an dem Versuch zu verstehen, was genau auf dem Stack einer Funktion mit zwei rekursiven Aufrufen passiert. Als Beispiel nehme ich jetzt mal einen einfachen Binary Tree Inorder Traversal:

void helper(struct TreeNode* root, int* array, int* i)
{
  if (root != NULL) {
    helper(root->left, array, i);
    array[(*i)++] = root->val;
    helper(root->right, array, i);
  }
  else {
    return 0;
  }
}

Bei dem Input [5, 3, 2, 4, 5, 3, 2] sieht a nach der Traversierung so aus:

[4, 3, 5, 5, 3, 2, 2]

Folgendes glaube ich zu verstehen:

  1. Start mit 5 -> 5 auf den Stack
  2. Erster rekursiver Aufruf mit root->left also 3 -> 3 auf den Stack
  3. Zweiter rekursiver Aufruf wieder mit root->left also 4 -> 4 auf den Stack
  4. Dritter rekursiver Aufruf wieder mit root->left also NULL -> NULL auf den Stack
  5. Dann in den else-Zweig und return 0 -> NULL vom Stack nehmen

So und hier hört mein Verständnis auf. Jetzt ist doch eigentlich noch die 4 auf dem Stack, oder?

Warum kommt man jetzt nicht in eine Endlosschleife, in der NULL immer auf den Stack gelegt und dann gezogen wird, sodass wieder 4 auf dem Stack liegt, wodurch anschliessend durch root->left wieder NULL auf dem Stack gelegt wird, und so weiter?

Wird sich irgendwie gemerkt, wer was aufgerufen hat oder versteh ich den Stack-Mechanismus einfach komplett falsch?

Und wie geht es dann allgemein nach dem ersten rekursiven Aufruf weiter? Wie wird erkannt, dass bei 3 plötzlich wieder nach rechts etwas geht?

Ich habe bis jetzt im Internet leider noch keine für mich verständliche Erklärung gefunden. Es wird meistens nur erklärt, wie der Calltree aussieht. Aber nie, warum es so funktioniert.

Ich bin mir bewusst, dass meine Frage ziemlich undeutlich gestellt ist, was wahrscheinlich daran liegt, dass ich selber nicht einmal genau weiß, was ich eigentlich nicht verstehe.

Jedenfalls wäre ich unendlich dankbar für eine Antwort, die mir und vielleicht auch anderen endlose weitere Recherche erspart. Gerne auch einfach Links zu anderen Seiten, falls die es gut erklären. :D

...zur Frage

Was Du übersiehst, auf dem Callstack landet natürlich auch der Befehlszeiger, sodaß nach dem return dieser wieder hergestellt und mit dem Folgebefehl fortgesetzt wird.

void helper(struct TreeNode* root, int* array, int* i){
  if(root != NULL){
    helper(root->left, array, i);
    array[(*i)++] = root->val; /* Hier gehts weiter für die 4 */
    helper(root->right, array, i);
  }else{     
    return 0; /* Null wird vom Stack entfernt, Rücksprung */
  }
}

Vielleicht noch als Zusatz, Schau Dir bitte mal an, wie ein Callstack aussieht und ein Stackframe aufgebaut ist. Vielleicht hilft Dir das dann weiter.

...zur Antwort

Anbindung der BSS, Anzahl der BTSen, zugewiesene Bänder. Bereich der von der BSS abgedeckt wird.

Ich stelle ja keine 6 BTSen mit ultra vielen Bändern und XXL-Anbindung auf, wenn ich als 'Kunden' nur ein paar IoTs von Rindviechern auf ausgedehntem platten Land erwarte - Entschuldige die Überspitzung.

Die Kapazitätsplanung muß sich natürlich an potentielelr Nutzerschaft und deren erwarteten Nutzungsverhalten orientieren, wenn ich keine vollständige Fehlinvestition hinlegen möchte.

-------

Auch wenn ich jetzt Links zu den Komponenten von GSM gesetzt habe, der grundlegende zelluläre Aufbau ist bei anderen Standards nicht total anders, zumal oft auch kombinierte Anlagen rumstehen.

Bei UMTS hast Du beispielsweise Node B und RNC, anstatt die Kombi BTS und BTC.

...zur Antwort

Die global dynamic dürfte durch einen dhcpclient entstanden sein, stelle erstmal sicher, daß dieser nicht mehr läuft und auch nicht mehr gestartet wird.

Danach kannst Du dann versuchen die Netzschnittstellen neu zu starten, eventuell reicht das schon, sonst kannst Du manuell mit

ip address del ....

Die IP explizit entfernen.

ip address help

ist Dein Freund für umfassendere Optionen.

...zur Antwort

Du kannst hiermit starten:

https://de.wikipedia.org/wiki/Europ%C3%A4isches_Verbundsystem

Die UCTE-Region überspannt weite Teile Kontinentaleuropas und reicht darüber hinaus. Hat also eher wenig mit der supernationalen Organisation EU zu tun.

Du kannst dann im Wikiartikel auch mal die Quellen anschauen, Dir den Artikel zur Regelleistung anschauen und vielleicht noch den zu ENTSO-E.

...zur Antwort

Code als Quelltext.

Die Fehlermeldung sagt, der XPAth-Ausdruck hat einen Syntaxfehler, wer hinschaut könnte sich fragen, warum da zwei schließende eckige Klammern 'div[1]]' auftauchen.

...zur Antwort

Die wenigsten Hochsprachen haben Primitive um mit der HW zu kommunizieren, außer eben ggf. Inline-Assembler.

Insofern bleibt Dir nichts anderes als (inline)-ASM, wenn Du hardwarenahe Sachen erledigen möchtest.

Sonst eignet es sich natürlich hervorragend, um dem eigenen Masochismus zu frönen. Die Zeiten, in denen Du mit handgeschriebenem ASM noch richtig viel reißen konntest ist lange vorbei. Ein typischer Nischenbereich sind hier noch Codecs wie h264 und ähnliches, wenn Du explizit mit spezielleren Einheiten der CPU arbeiten möchest.

...zur Antwort

Log ist unvollständig, der eigentliche Fehler ist davor zu lesen. Typisch wäre irgend eien fehlende Klammer oder Semikolon in der config oder ähnliches.

Nachtrag:

Du könntest mal testweise ein dhcpd -t ausführen, um die Config mal rudimentär prüfen zu lassen.

...zur Antwort
Das jede Eingabe und zu jedem Zustand einen oder mehr als einen Folgezustände haben kann. Wie kann das sein?

Mann nennt es NFA. Wenn der Betrag 1 ist, landen wir beim DFA.

...zur Antwort