|
|
|
|
Ich bin motivierter als ihr. Ich habe es seit 2 Wochen geschafft zu jeder* Vorlesung zu gehen. Und meine Motivation es zu tun wird immer größer, weil ich ja sonst meine Serien abbreche
*: Ausser einmal, da habe ich verschlafen, hab mir die VL aber aufgezeichnet angeschaut. Und gestern konnte ich nicht zu einer Übung, weil ich auf einen Feuermelder-Kontrolleur warten musste.
|
|
|
|
|
|
|
Die aktuell langweiligste Vorlesung (Datenbanken) gibts bei uns auch im Livestream und als Aufzeichnung. Bringt nur relativ wenig, weil ich sowieso immer direkt davor eine andere Vorlesung habe, und dann kann ich auch gleich da hin gehen statt nach Hause.
|
|
|
|
|
|
|
Die Don't-Break-The-Chain-Methode. Funktioniert auch bei anderen Dingen (Sport und so) ausgezeichnet.
|
|
|
|
|
|
|
| Zitat von SirSiggi Deuter Cross City | | Der sieht schon mal gar nicht schlecht aus. Ich glaube, ich gehe heute einfach mal in ein Rucksackgeschäft und gucke mir an was die da so haben.
|
|
|
|
|
|
|
Mein Problem ist immer, dass ich auf'm Fahrrad immer gas gebe. Wenn ich dann nen Rucksack aufhabe, ist hinten alles Klitschnass
|
|
|
|
|
|
|
| Zitat von TriggerTG
Mein Problem ist immer, dass ich auf'm Fahrrad immer gas gebe. Wenn ich dann nen Rucksack aufhabe, ist hinten alles Klitschnass
| | dann besorg dir halt einen rucksack, der für sowas gemacht ist, oder schnall ihn auf dem gepäckträger fest.
|
|
|
|
|
|
|
Brauch keinen. Fahrradtasche + Umhängetasche reichen mir für alles
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Spassbremse.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Drei Links in dem Artikel, und keiner führt zum Wikipedia-Profil von dem Typen
|
|
|
|
|
|
|
Roboter sind ja an sich nicht so mein Interessensgebiet, aber mit Android arbeiten wird lustig, und wenn wir da wirklich mit Robotern rumfahren dürfen wird das sicher ein lustiges Semesterprojekt
|
|
|
|
|
|
|
Hier gibts doch garantiert Chrome-Fanboys. Erklärt mir mal dieses Verhalten: Ich habe ein Userscript, das auf einer SSL-gesicherten Seite ausgeführt wird. Das Userscript soll unter anderem ein Hintergrundbild per CSS setzen, und weil es keinen Bilderhoster mit gesicherter Verbindung gibt binde ich das Bild per data:image/png;base64 ein. Wieso hält Chrome das für eine ungesicherte Verbindung und zeigt deshalb in der Adressleiste das https in rot und durchgestrichen an?
|
|
|
|
|
|
|
Pffff. Viel toller ist doch, dass floristennetzwerk.de vorgestern die 15 Millionste .de Domain wurde!
Quelle
|
|
|
|
|
|
|
ICE-Abteil. Fahrgast steigt zu, setzt sich mir gegenueber mit seinen Sachen hin. Ich ruecke den Laptop etwas zurecht, um Platz auf dem gemeinsamen Tisch zu machen. Er: "Mein Teil ist nicht so gross." Und mir faellt nur ein trauriges "Oh. " darauf ein.
|
|
|
|
|
|
|
So gerade mal ein schönes AJAX-Back- & Frontend für Formulare gebastelt. Richtig hübsch, es markiert sogar die falschen Felder und sagt was falsch ist*
Aber am Ende lädt er die Seite trotzdem neu, weil ich dann doch nicht so bekloppt bin, die Änderungen auch noch im Client zu replizieren. Wer bin ich denn?
*auf Basis von Djangos Daten
|
|
|
|
|
|
|
Das cewle daran: Ich habe jetzt eine Subklasse von forms.Form (und forms.ModelForm), die ich nur benutzen brauche, um das Backend zu nutzen. In meiner abgeleiteten Form-Klasse kann ich dann alles wie gewohnt machen, am Ende wirds aber als modaler AJAX-Dialog dargestellt.
//e: Das mit den Rechten wird aber so richtig "FUUU!". Da habe ich noch gar keine Ahnung, wie ich das in den Formularen abbilden soll. Weil es dann doch irgendwie blöd wäre, über das schöne Frontend zwar Ordner&Ressourcen erstellen zu können, dann aber ins Admin-Backend zu gehen, um die Rechte einzustellen...
///e: Und ich weiß noch nicht so wirklich, wer an den Rechten rumfummeln darf, und wieviel dieser jemand sehen darf. Ach, Rechteverwaltung ist eh fu.
|
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von csde_rats am 20.04.2012 18:59]
|
|
|
|
|
|
| Zitat von igor]2
ICE-Abteil. Fahrgast steigt zu, setzt sich mir gegenueber mit seinen Sachen hin. Ich ruecke den Laptop etwas zurecht, um Platz auf dem gemeinsamen Tisch zu machen. Er: "Mein Teil ist nicht so gross." Und mir faellt nur ein trauriges "Oh. " darauf ein.
| |
So gemein!
|
|
|
|
|
|
|
Warum benutzt du eigentlich nicht django-mptt für deine Baumstruktur? Da müsstest du eigentlich ganz einfach deine Rechts dranpacken können...
|
|
|
|
|
|
|
MPTT ist mir bekannt, würde hier aber keinen großen Unterschied machen. Man kanns ja für die Nutzergruppen einbinden und damit effektiv das gleiche erreichen...
|
|
|
|
|
|
|
So meine Todo-Liste für heute:
-Ressourcen bearbeiten
-Rrrechte im Frontend
-Diffs für Dokumente
-Dokumente auf Version zurücksetzen
-Dokumenteinstellungen im Frontend
-Simples Addressbuch
|
|
|
|
|
|
|
So meine Todo-Liste für heute:
- Nach allen Regeln der Kunst ablümmeln
|
|
|
|
|
|
|
| Zitat von csde_rats
MPTT ist mir bekannt, würde hier aber keinen großen Unterschied machen.
| |
Naja, du hast doch neulig gejammert, dass du es nicht so machen kannst, wie es einfach benutzbar gewesen wäre, weil es dann zu unperformant würde, oder?
|
|
|
|
|
|
|
Meine ToDo-Liste für heute:
[x] Uni
[x] Übungszettel (2 * 0.5)
[x] Diablo III Beta installieren
[ ] Bier
[ ] 21 Uhr
[ ] Diablo III
|
|
|
|
|
|
|
@Achsel des Bösen:
Ja, aber daran ändert ja die Implementierung nichts. Mit MPTT würde es weder wesentlich einfacher noch schneller werden...
apropos: das ist der Kernpunkt meines dynamischen Rechteformulars:
for group in self.groups:
initial = set()
for perm in FolderPermission.objects.filter(folder=folder, group=group):
[initial.add(p.codename) for p in perm.permissions.all()]
self.fields["group%s" % group.id] = forms.MultipleChoiceField(choices=[(p.codename, p.name) for p in Permission.objects.filter(content_type__app_label="zephyros", content_type__name="folder")], initial=initial, label=group.name, widget=forms.CheckboxSelectMultiple)
|
|
|
|
|
|
|
Das Gruppeneligibilitätsproblem habe ich übrigens einfach so gelöst:
def get_eligible_groups(user):
if user.is_superuser:
return Group.objects.all()
else:
return user.groups.all()
|
|
|
|
|
|
|
So, funzt:
def FolderPermissionForm(user, folder):
class Form(DialogForm):
def __init__(self, *args, **kwargs):
super(Form, self).__init__(*args, **kwargs)
self.instance = folder
self.dialog["title"] = "Edit folder %s permissions" % folder.name
self.dialog["id"] = "%s-changeperm" % folder.slug
self.dialog["form_id"] = "folder-changeperm"
self.groups = get_eligible_groups(user)
for group in self.groups:
initial = set()
for perm in FolderPermission.objects.filter(folder=folder, group=group):
[initial.add(p.codename) for p in perm.permissions.all()]
self.fields["group%s" % group.id] = forms.MultipleChoiceField(choices=[(p.codename, p.name) for p in Permission.objects.filter(content_type__app_label="zephyros", content_type__name="folder")], initial=initial, label=group.name, widget=forms.CheckboxSelectMultiple, required=False)
def save(self):
for group in self.groups:
cur = self.cleaned_data.get("group%s" % group.id, False)
if not cur:
continue # Silently ignore this, the group was added to the user between form request and submission
# Seperate existing permissions
gps = FolderPermission.objects.filter(folder=self.instance, group=group)
for gp in gps:
gp.folder.remove(self.instance)
gp = FolderPermission(group=group)
gp.save()
gp.folder.add(self.instance.id)
for cn in cur:
gp.permissions.add(Permission.objects.get(content_type__app_label="zephyros", content_type__name="folder", codename=cn).id)
gp.save()
return Form
|
|
|
|
|
|
Thema: Gehirnsalat ( wir unter uns ) |