bits aus ? auslesen

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Mal was Neues:
Meine User können immer mal wieder Einstellungen vornehmen oder bekommen einmalige Hinweise. Diese will ich in dem Feld "voreinstellungen" speichern. Hier habe ich schon alles mögliche ausprobiert, wurde aber damit nicht wirklich glücklich. Am liebsten wäre mir, ich könnte sowas in einem Byte speichern und diesen auslesen. Ich könnte mir das so vorstellen, dass ich einen default wie "00000000" habe, dem ich an der dritten Stelle eine 1 zuweisen kann und an anderer Stelle überprüfen, ob da eine Null oder Eins steht. Ich habe es mit Primzahlen probiert, mit einem String (da kann man leider nicht die 3.Stelle ändern), eine Liste in einem JSONField will Django nicht. Bei einem Dict müsste ich zunächst die Keys festlegen, oder hinterher überprüfen, ob sie vorhanden sind (soweit ich das sehe).
Das geht aber doch sicher ganz einfach?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dazu legst du einfach eine Relation an, die eben diese Einstellungen Speichert. Als String ode etwas auch immer. So Bitfummelei macht man auf einer solchen Plattform nicht.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

__deets__ hat geschrieben: Freitag 27. Januar 2023, 17:07 Dazu legst du einfach eine Relation an, die eben diese Einstellungen Speichert. Als String ode etwas auch immer. So Bitfummelei macht man auf einer solchen Plattform nicht.
Meinst du damit, für jede Einstellung ein eigenes Feld?
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

was spricht den konkret gegen ein JSONField und ein Dict? Das ist doch IMHO das verständlichste überhaupt. Wenn du das mit Bits machen würdest, dann wird das ganze doch kryptisch, weil man wissen _muss_, welche Bedeutung z.B. das Bit an der dritten Stellen hat.

Außerdem scheint die Anzahl der Einstellungen ja überschaubar zu sein, weil du ja hoffentlich nicht mit einer 20 oder 30-stelligen Bitfolge hantieren wolltest, oder?

Gruß, noisefloor
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Nö, ich habe gerade mal nachgezählt: Im bestehenden Rechentrainer sind es etwa 8.
Also nehme ich ein Dict als JSON. Dann müsste ich die Keys aber jetzt alle schon als default eintragen - oder? Ansonsten müsste ich bei jedem Eintrag/bzw bei jeder Abfrage erst überprüfen, ob es diesen Key (heißt das so?) schon gibt.
Der größte Teil dieser Abfrageb betrifft die Aufgaben in den Jahrgängen ab 9 und da habe ich die entsprechenden Aufgaben nocht nicht. Ich will jetzt mal ein Beispiel geben, um was es sich da handelt, damit ihr euch das besser vorstellen könnt: was ich jetzt schon brauche, ist die Abfrage, ob ein neues Schuljahr angefangen werden soll (das habe ich ja schon mehrmals erwähnt) Diese Abfrage kommt immer im Januar, Juni und Juli. Wenn der user hier "ja" eingibt, wird ein neues Halbjahr angefangen, ansonsten kommt diese Abfrage jedes mal wieder. Das nervt. Also kann man wählen "Diese Frage nicht mehr stellen".
Später kommt dann ein Hinweis, wie man Pi, Wurzeloder Exponenten eingibt. Das will ich einmal machen und dann kommt diese Anzeige nicht mehr.
Ich habe nicht rausbekommen, ob ich das Dict leer lassen kann und nur bei Bedarf unkompliziert eines anlegen oder ob es Sinn macht, diese per default jetzt schon alle anzulegen.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ich verstehe dein Problem / Hadern mit den Defaulteinträgen nicht... Bei Bits hättest du das auch. Also: ja, natürlich solltest du das Dict komplett anlegen. Außerdem machst du das ja nur genau 1x, nämlich wenn du das Feld in deinem Modell anlegst und die Defaultwerte vorgibst.

Bzgl. der Schuljahrbeginn: IMO ist es unmöglich, dass ein neues Schuljahr im Juni beginnt. Das frühste, was geht, ist bei 6 Wochen Sommerferien irgendwas im Juli. Oder halt August oder September.

Gruß, noisefloor
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

noisefloor hat geschrieben: Freitag 27. Januar 2023, 18:09 ich verstehe dein Problem / Hadern mit den Defaulteinträgen nicht... Bei Bits hättest du das auch.
Das wäre aber einfacher und resourcensparender. Wenn ich z.B. einen String "00000000" anlegen könnte, würde ich die 3 Stelle auf eins setzen und später die 3 Stelle überprüfen, ob sie 1 ist. Klar, das wäre kryptischer. Ich weiß halt jetzt noch nicht so genau, was mir im Laufe der nächsten Zeit noch einfällt.
noisefloor hat geschrieben: Freitag 27. Januar 2023, 18:09 Bzgl. der Schuljahrbeginn: IMO ist es unmöglich, dass ein neues Schuljahr im Juni beginnt. Das frühste, was geht, ist bei 6 Wochen Sommerferien irgendwas im Juli. Oder halt August oder September.
Das Halbjahr beginnt offiziell immer am 1.August. Aber ich zitiere mich mal selbst:
... Das heißt im Profil des users wird gespeichert, an welchem Schulhalbjahr er arbeitet (das kann nunmal im Januar, Juni und Juli auch schon das nächste sein - das habe ich so vorgesehen, da ich die Arbeit der Kids bei meiner Zeugnisnote berücksichtigt habe und diese Zeugnisnote im Januar und Juli (und oft auch schon im Juni) feststeht ) . Einige müssen noch was für ihre Zeugnisnote tun und einige können schon vorarbeiten.
- das haben die Kids auch immer gerne so angenommen.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Das wäre aber einfacher und resourcensparender.
Jetzt mal im ernst: was ist an 8 bedeutungslosen Bits vs. einem Dict mit 8 aussagekräftigen Schlüsselnamen einfacher? Und wenn ein Dict pro Nutzer mit acht Schlüsseln, deren Werte True oder False sind, dein Projekt zum jetzigen Zeitpunkt schon an die Ressourcengrenze bringen würde, dann kannst du das ganze gerade einstellen. Weil du paar hundert Bytes pro Nutzer sind doch im Vergleich zu den anderen Daten, Benutzerdaten etc. nichts.

Wenn du aber bei Bits bleiben willst: https://stackoverflow.com/questions/285 ... e-or-false -> in dem Thread ist erklärt, wie du prüfst, ob das x-te Bit einer Bitsequenz gesetzt ist.

Gruß, noisefloor
Benutzeravatar
pillmuncher
User
Beiträge: 1482
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@Pitwheazle: Stell dir selbst mal die Frage, wie ein SQL-Statement aussehen müsste, mit dem du genau 1 Wert aus deinem Bit-Array ausliest. Dann merkst du vielleicht, warum du kein Bit-Array verwenden solltest. Frag auch mal Google nach "sql first normal form".
In specifications, Murphy's Law supersedes Ohm's.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

OK, das ganze war halt mehr akademisch. Und das mit dem Bitvergleich in deinem Link ist nicht wirklich übersichtlich.
Aber dann doch noch eine Überlegung - ich weiß halt selbst noch nicht, was mir alles noch so einfällt:
Es spricht ja auch nichts dagegen, dass ich jetzt die "neues-Halbjahr-Frage" als default anlege und später noch Einträge ergänze. Oder übersehe ich da was? ich dachte an "dict.setdefault(key, default_value)"
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

pillmuncher hat geschrieben: Freitag 27. Januar 2023, 18:46 @Pitwheazle: Stell dir selbst mal die Frage, wie ein SQL-Statement aussehen müsste, mit dem du genau 1 Wert aus deinem Bit-Array ausliest. Dann merkst du vielleicht, warum du kein Bit-Array verwenden solltest. Frag auch mal Google nach "sql first normal form".
Mit sql kenne ich mich ja noch gar nicht aus und es hätte ja auch nicht unbedingt in Bitform gespeichert werden müssen, eine Liste hätte es ja auch getan, die will aber das JSONField nicht. In StarBasic habe ich viel mit Arrays gearbeitet und die kann man prima über ihren Index setzen und auslesen.
(Da bin ich schon gespannt, wie ich die Aufgaben, die ich in StarBasic größtenteils mit Arrays erzeugt habe (das waren zum Beispiel zufällig erzeugte Terme wie "2x+3y-2x²-5y".)
Antworten