Compare commits

..
38 Commits
Author SHA1 Message Date
Esther Kleinhenz 811b7c5453 tested django-newsletter 2018-10-26 15:21:17 +02:00
Esther Kleinhenz 7ed667d043 fixed some issues with non-used tags 2018-10-24 19:04:43 +02:00
Esther Kleinhenz f5980566ae added celery and tasks but most important added tag_list 2018-10-22 18:58:10 +02:00
Esther Kleinhenz 3c7005afaf added search url to navbar 2018-10-21 10:39:18 +02:00
Esther Kleinhenz df5d420505 added post search 2018-10-20 23:42:29 +02:00
Esther Kleinhenz 4a753ff6c9 new migration 2018-10-20 17:28:50 +02:00
Esther Kleinhenz 7d0350d452 added logger and logging addon 2018-10-19 09:29:55 +02:00
Esther Kleinhenz d01ed0085c added logger 2018-10-16 20:04:26 +02:00
Esther Kleinhenz 5dc4b05a8f added figures to framework and 2018-10-16 19:06:27 +02:00
Esther Kleinhenz ca6655d535 thesis added bootstrap capitel 2018-10-10 10:50:32 +02:00
Esther Kleinhenz 26cbed89c8 added text to taggable manager 2018-10-04 21:59:47 +02:00
Esther Kleinhenz aea40fe98a neue Abbildung und subsection besonderheiten 2018-10-02 19:24:02 +02:00
Esther Kleinhenz 49c98b5cb6 Kapitel Einleitung und Django angefangen 2018-10-02 18:47:11 +02:00
Esther Kleinhenz 48ca31a47b added new template 2018-09-28 17:02:23 +02:00
Esther Kleinhenz 49ecd88a28 Einleitung verfasst 2018-09-28 12:29:04 +02:00
Esther Kleinhenz cd7e63dcc5 added new thesis template with name, keep the old version for insureance 2018-09-28 10:13:41 +02:00
Esther Kleinhenz 932959d6b0 fixed table of content 2018-09-27 10:25:43 +02:00
Esther Kleinhenz c2c238fe26 added new chapters and content to latex thesis paper 2018-09-19 17:25:01 +02:00
Esther Kleinhenz 9c3d607f87 changed the cover of latex thesis 2018-09-12 14:51:33 +02:00
Esther Kleinhenz e78011daca tried to build a tag list of the logged in user 2018-09-11 18:50:46 +02:00
Esther Kleinhenz 768a3e4a2e by clicking on tags, all the posts with this tag showing up 2018-09-02 11:58:21 +02:00
Esther Kleinhenz 6cdbec7315 added migrations 2018-08-31 17:32:29 +02:00
Esther Kleinhenz b8a6c16ac2 edited tag code 2018-08-31 17:31:34 +02:00
Esther Kleinhenz 5a30a0adea adding new tags from student_page to backend 2018-08-31 15:43:06 +02:00
Esther Kleinhenz 8ae45354f0 added TagSearch class but not using it atm 2018-08-30 17:40:25 +02:00
Esther Kleinhenz 8da96e27a5 added setuptools and new url taggit-template2 2018-08-25 12:14:54 +02:00
Esther Kleinhenz 3d9e40f840 tried search queries - fial 2018-08-19 22:55:06 +02:00
Esther Kleinhenz 145fd921d9 added new js file and make the published date editable on webiste 2018-08-19 16:24:53 +02:00
Esther Kleinhenz 2cb1629a81 reinstalled django because of problems with the migrations and installed taggit-template2 to list tags 2018-08-18 18:30:57 +02:00
Esther Kleinhenz a1ff9def5c aded author to post_list 2018-08-18 17:00:50 +02:00
Esther Kleinhenz 42d69dfe44 shows tags of each post in post_list 2018-08-18 12:10:40 +02:00
Esther Kleinhenz 1a2130bb49 extended default user model to save subscribed tags 2018-08-15 19:18:35 +02:00
Esther Kleinhenz 4b28a5a91b posts editable for only for author 2018-08-15 11:33:53 +02:00
Esther Kleinhenz 774757c610 added mockups and tested taggit lib 2018-08-04 17:01:28 +02:00
Esther Kleinhenz 0c34f508b8 edited nav-bar 2018-07-29 13:24:15 +02:00
Esther Kleinhenz b4415af0b8 added new student page 2018-07-23 07:35:45 +02:00
Esther Kleinhenz 9be60fb7a4 added decorator to the view so not authorized users cannot enter specific pages 2018-07-15 15:46:16 +02:00
Esther Kleinhenz 65188e033e added post to admin.py and fixed css 2018-07-15 15:27:10 +02:00
4369 changed files with 738405 additions and 107222 deletions

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
from __future__ import absolute_import, unicode_literals
# This will make sure celery is always imported when
# Django starts so that shared_task will use this app.
from .celeryapp import app as celery_app
__all__ = ['celery_app']
+62 -1
View File
@@ -1,3 +1,64 @@
from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
# Register your models here.
from .models import Post, CustomUser
from .models import ScheduledReport, ReportRecipient, ScheduledReportGroup
from .forms import ScheduledReportForm
class CustomUserInline(admin.StackedInline):
model = CustomUser
can_delete = False
verbose_name_plural = 'customUsers'
# Define a new User admin
class UserAdmin(BaseUserAdmin):
inlines = (CustomUserInline, )
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
admin.site.register(Post)
class ReportRecipientAdmin(admin.TabularInline):
model = ReportRecipient
class ScheduledReportAdmin(admin.ModelAdmin):
"""
List display for Scheduled reports in Django admin
"""
model = ScheduledReport
list_display = ('id', 'get_recipients')
inlines = [
ReportRecipientAdmin
]
form = ScheduledReportForm
def get_recipients(self, model):
recipients = model.reportrecep.all().values_list('email', flat=True)
if not recipients:
return 'No recipients added'
recipient_list = ''
for recipient in recipients:
recipient_list = recipient_list + recipient + ', '
return recipient_list[:-2]
get_recipients.short_description = 'Recipients'
get_recipients.allow_tags = True
class ScheduledReportGroupAdmin(admin.ModelAdmin):
"""
List display for ScheduledReportGroup Admin
"""
model = ScheduledReportGroup
list_display = ('get_scheduled_report_name','get_report_name')
def get_scheduled_report_name(self, model):
return model.scheduled_report.subject
def get_report_name(self, model):
return model.report.name
get_scheduled_report_name.short_description = "Scheduled Report Name"
get_report_name.short_description = "Report Name"
show_change_link = True
get_report_name.allow_tags = True
admin.site.register(ScheduledReport, ScheduledReportAdmin)
admin.site.register(ScheduledReportGroup, ScheduledReportGroupAdmin)
+13
View File
@@ -0,0 +1,13 @@
from __future__ import absolute_import
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings')
from django.conf import settings
app = Celery('application')
# Using a string here means the worker don't have to serialize
# the configuration object to child processes.
app.config_from_object('django.conf:settings')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
+57
View File
@@ -0,0 +1,57 @@
from datetime import datetime, timedelta
from django.core.mail import send_mail
from django.template import Template, Context
from django.http import HttpResponse
from django.conf import settings
from .models import ScheduledReport, ScheduledReportGroup, ReportRecipient
class ScheduledReportConfig(object):
def __init__(self, scheduled_report):
"""
Expects a scheduled report object and inititializes
its own scheduled_report attribute with it
"""
self.scheduled_report = scheduled_report
def get_report_config(self):
"""
Returns the configuration related to a scheduled report, needed
to populate the email
"""
return {
"template_context": self._get_related_reports_data(),
"recipients": self._get_report_recipients()
}
def _get_related_reports_data(self):
"""
Returns the list of reports data which needs to be sent out in a scheduled report
"""
pass
def _get_report_recipients(self):
"""
Returns the recipient list for a scheduled report
"""
pass
def create_email_data(content=None):
content = '''
''' + str(content) + ''''''
return content
def send_emails():
current_time = datetime.utcnow()
scheduled_reports = ScheduledReport.objects.filter(next_run_at__lt = current_time)
for scheduled_report in scheduled_reports:
report_config = ScheduledReportConfig(scheduled_report).get_report_config()
""" Specify the template path you want to send out in the email. """
template = Template(create_email_data('path/to/your/email_template.html'))
""" //Create your email html using Django's context processor """
report_template = template.render(Context(report_config['template_context']))
scheduled_report.save()
if not scheduled_report.subject:
""" Handle exception for subject not provided """
if not report_config['recipients']:
""" Handle exception for recipients not provided """
send_mail(
scheduled_report.subject, 'Here is the message.',
settings.EMAIL_HOST_USER, report_config['recipients'],
fail_silently=False, html_message=report_template
)
+41 -3
View File
@@ -1,9 +1,47 @@
from django import forms
from datetime import datetime
from .models import Post
from .models import Post, CustomUser
from django.forms import ModelForm, ValidationError
from taggit.forms import *
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from datetime import datetime
from croniter import croniter
from django.forms import ModelForm, ValidationError
from .models import ScheduledReport
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('title', 'text')
fields = ('title', 'text', 'published_date','tags')
class NewTagForm(forms.ModelForm):
m_tags = TagField()
class Meta:
model = CustomUser
fields = ['m_tags']
class ScheduledReportForm(ModelForm):
class Meta:
model = ScheduledReport
fields = ['subject', 'cron_expression']
fields = ['subject', 'cron_expression']
help_texts = {'cron_expression': 'Scheduled time is considered in UTC'}
def clean(self):
cleaned_data = super(ScheduledReportForm, self).clean()
cron_expression = cleaned_data.get("cron_expression")
try:
iter = croniter(cron_expression, datetime.now())
except:
raise ValidationError("Incorrect cron expression:\
The information you must include is (in order of appearance):\
A number (or list of numbers, or range of numbers), m, representing the minute of the hour\
A number (or list of numbers, or range of numbers), h, representing the hour of the day\
A number (or list of numbers, or range of numbers), dom, representing the day of the month\
A number (or list, or range), or name (or list of names), mon, representing the month of the year\
A number (or list, or range), or name (or list of names), dow, representing the day of the week\
The asterisks (*) in our entry tell cron that for that unit of time, the job should be run every.\
Eg. */5 * * * * cron for executing every 5 mins")
return cleaned_data
+7 -1
View File
@@ -1,4 +1,4 @@
# Generated by Django 2.0.6 on 2018-06-28 09:13
# Generated by Django 2.1 on 2018-08-18 15:34
from django.conf import settings
from django.db import migrations, models
@@ -15,6 +15,12 @@ class Migration(migrations.Migration):
]
operations = [
migrations.CreateModel(
name='CustomUser',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
),
migrations.CreateModel(
name='Post',
fields=[
@@ -0,0 +1,35 @@
# Generated by Django 2.1 on 2018-08-18 15:34
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import taggit.managers
class Migration(migrations.Migration):
initial = True
dependencies = [
('taggit', '0001_initial'),
('application', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='post',
name='tags',
field=taggit.managers.TaggableManager(help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags'),
),
migrations.AddField(
model_name='customuser',
name='mytags',
field=taggit.managers.TaggableManager(help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags'),
),
migrations.AddField(
model_name='customuser',
name='user',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
]
@@ -0,0 +1,20 @@
# Generated by Django 2.1 on 2018-08-30 16:14
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('application', '0002_auto_20180818_1734'),
]
operations = [
migrations.AlterField(
model_name='customuser',
name='user',
field=models.OneToOneField(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
]
@@ -0,0 +1,20 @@
# Generated by Django 2.1 on 2018-08-31 08:19
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('application', '0003_auto_20180830_1814'),
]
operations = [
migrations.AlterField(
model_name='customuser',
name='user',
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
]
@@ -0,0 +1,18 @@
# Generated by Django 2.1 on 2018-10-19 14:45
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('application', '0004_auto_20180831_1019'),
]
operations = [
migrations.RenameField(
model_name='customuser',
old_name='mytags',
new_name='tags',
),
]
@@ -0,0 +1,51 @@
# Generated by Django 2.1 on 2018-10-21 11:47
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('application', '0005_auto_20181019_1645'),
]
operations = [
migrations.CreateModel(
name='Report',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('report_text', models.TextField()),
],
),
migrations.CreateModel(
name='ReportRecipient',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('email', models.EmailField(max_length=254)),
],
),
migrations.CreateModel(
name='ScheduledReport',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('subject', models.CharField(max_length=200)),
('last_run_at', models.DateTimeField(blank=True, null=True)),
('next_run_at', models.DateTimeField(blank=True, null=True)),
('cron_expression', models.CharField(max_length=200)),
],
),
migrations.CreateModel(
name='ScheduledReportGroup',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('report', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report', to='application.Report')),
('scheduled_report', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='relatedscheduledreport', to='application.ScheduledReport')),
],
),
migrations.AddField(
model_name='reportrecipient',
name='scheduled_report',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reportrecep', to='application.ScheduledReport'),
),
]
+46 -2
View File
@@ -1,8 +1,16 @@
from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
from taggit.managers import TaggableManager
from datetime import datetime
from croniter import croniter
class CustomUser(models.Model):
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
tags = TaggableManager()
class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
@@ -12,10 +20,46 @@ class Post(models.Model):
published_date = models.DateTimeField(
blank=True, null=True)
tags = TaggableManager()
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
return self.title
class Report(models.Model):
report_text = models.TextField()
class ScheduledReport(models.Model):
"""
Contains email subject and cron expression,to evaluate when the email has to be sent
"""
subject = models.CharField(max_length=200)
last_run_at = models.DateTimeField(null=True, blank=True)
next_run_at = models.DateTimeField(null=True, blank=True)
cron_expression = models.CharField(max_length=200)
def save(self, *args, **kwargs):
"""
function to evaluate "next_run_at" using the cron expression, so that it is updated once the report is sent.
"""
self.last_run_at = datetime.now()
iter = croniter(self.cron_expression, self.last_run_at)
self.next_run_at = iter.get_next(datetime)
super(ScheduledReport, self).save(*args, **kwargs)
def __unicode__(self):
return self.subject
class ScheduledReportGroup(models.Model):
"""
Many to many mapping between reports which will be sent out in a scheduled report
"""
report = models.ForeignKey(Report, related_name='report', on_delete=models.CASCADE)
scheduled_report = models.ForeignKey(ScheduledReport,
related_name='relatedscheduledreport', on_delete=models.CASCADE)
class ReportRecipient(models.Model):
"""
Stores all the recipients of the given scheduled report
"""
email = models.EmailField()
scheduled_report = models.ForeignKey(ScheduledReport, related_name='reportrecep', on_delete=models.CASCADE)
+10308
View File
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+293
View File
@@ -0,0 +1,293 @@
@import url(http://fonts.googleapis.com/css?family=Roboto); /* FREE GOOGLE FONT */
body {
font-family: 'Roboto', sans-serif;
line-height: 30px;
}
.set-radius-zero {
border-radius: 0px;
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
}
.content-wrapper {
margin-top: 40px;
min-height: 600px;
padding-bottom: 60px;
}
.page-head-line {
font-weight: 900;
padding-bottom: 20px;
border-bottom: 2px solid #F0677C;
text-transform: uppercase;
color: #F0677C;
font-size: 20px;
margin-bottom: 40px;
}
.btn {
border-radius: 0px;
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
}
.progress {
height: 8px;
border-radius: 0px;
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
}
.login-icon {
height: 60px;
width: 60px;
padding: 13px;
border-radius: 50%;
font-size: 30px;
margin-bottom: 20px;
color: #fff;
text-align: center;
cursor:pointer;
background-color:#F0677C;
-webkit-border-radius:50%;
-moz-border-radius:50%;
}
/* =============================================================
HEADER SECTION STYLES
============================================================ */
header {
background-color: #F0677C;
color: #fff;
padding: 10px;
text-align: right;
}
/* =============================================================
LOGO SECTION STYLES
============================================================ */
.left-div {
padding-left: 30px;
margin-top: 40px;
margin-bottom: 30px;
}
.navbar-brand {
width: 250px;
padding-top: 30px;
}
/* USER SETTINGS DIV */
.user-settings-wrapper .nav > li > a {
position: relative;
display: block;
padding: 15px 18px;
border-radius: 50%;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
height: 60px;
width: 60px;
background-color: #F0677C;
color: #fff;
}
.user-settings-wrapper {
margin-top: 10px;
}
.user-settings-wrapper li {
display: inline-block;
}
.user-settings-wrapper .dropdown-settings {
width: 200px;
padding: 10px;
}
.user-settings-wrapper .nav > li > a:hover,.user-settings-wrapper .nav > li > a:focus {
text-decoration: none;
background-color: #C36464!important;
}
.user-settings-wrapper img {
height: 64px;
width: 64px;
border: 1px solid #000000;
}
.user-settings-wrapper .dropdown-menu {
margin: 0px;
border-radius: 0px!important;
-moz-border-radius: 0px!important;
-webkit-border-radius: 0px!important;
}
.user-settings-wrapper .btn {
border-radius: 0px!important;
-moz-border-radius: 0px!important;
-webkit-border-radius: 0px!important;
}
.user-settings-wrapper .media-heading {
padding-top: 10px;
}
/* MENU LINKS SECTION*/
.menu-section {
background-color: #3D3D3D;
}
#menu-top a {
color: #FFF;
text-decoration: none;
font-weight: 500;
padding: 10px 10px 10px 10px;
text-transform: uppercase;
}
.menu-top-active {
background-color: #C36464;
}
.menu-section .nav > li > a:hover,.menu-section .nav > li > a:focus {
background-color: #F0677C!important;
}
.menu-section .dropdown-menu > li > a:hover,.menu-section .dropdown-menu > li > a:focus {
background-color: #F0677C!important;
}
.navbar-inverse {
background-color: #C36464;
border-color: transparent;
}
.navbar-toggle {
background-color: #F0677C;
border: 1px solid #fff;
}
.navbar {
margin-bottom: 0px;
}
/* =============================================================
FOOTER SECTION STYLES
============================================================ */
footer {
padding: 10px;
color: #fff;
font-size: 12px;
background-color: #C36464;
}
footer a, footer a:hover {
color: #fff;
text-decoration: none;
}
/*==============================================
DASHBOARD STYLES
=============================================*/
/* DASHBOARD ICONS */
.bk-clr-one {
background-color: #B9B739;
}
.bk-clr-two {
background-color: #F94C4C;
}
.bk-clr-three {
background-color: #119c7e;
}
.bk-clr-four {
background-color: #b739b9;
}
.dashboard-div-icon {
height: 75px;
width: 75px;
border: 2px solid #fff;
padding: 20px;
border-radius: 50%;
-webkit-border-radius:50%;
-moz-border-radius:50%;
font-size: 30px;
margin-bottom: 20px;
color: #fff;
}
.dashboard-div-wrapper {
border-radius: 5px;
text-align: center;
padding: 15px;
color: #fff;
margin-bottom: 50px;
}
.dashboard-div-wrapper .progress {
height: 2px;
}
/* NOTICE BOARD */
.notice-board .panel {
border-radius: 0px;
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
}
.notice-board ul {
padding-left: 0px;
list-style: none;
}
.notice-board li {
padding: 10px;
border-bottom: 1px solid #E5E5E5;
}
.notice-board li span {
margin-right: 10px;
border: 1px solid #DBDBDB;
padding: 5px;
}
.notice-board li a, li a:hover {
text-decoration: none;
color: #000;
}
/* SOCIAL BUTTONS */
.btn-social {
color: white;
opacity: 0.8;
}
.btn-social:hover {
color: white;
opacity: 1;
text-decoration: none;
}
.btn-facebook {
background-color: #3b5998;
}
.btn-twitter {
background-color: #00aced;
}
.btn-linkedin {
background-color: #0e76a8;
}
.btn-google {
background-color: #c32f10;
}
+7
View File
@@ -0,0 +1,7 @@
from celery.task.schedules import crontab
from celery.decorators import periodic_task
from .email_service import send_emails
# this will run every minute, see http://celeryproject.org/docs/reference/celery.task.schedules.html#celery.task.schedules.crontab
@periodic_task(run_every=crontab(hour="*", minute="*", day_of_week="*"))
def trigger_emails():
send_emails()
+31 -5
View File
@@ -6,7 +6,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title> {% block title %}Seitenname{% endblock %}</title>
<link href="{% static 'css/mysite.css' %}" rel="stylesheet">
<link href="{% static 'css/application.css' %}" rel="stylesheet">
<link href="{% static 'bootstrap/css/bootstrap.css' %}" rel="stylesheet">
</head>
@@ -31,8 +31,26 @@
<li class="nav-item">
<a class="nav-link" href="{% url 'admin:index' %}">Administration</a>
</li>
{% endif %} {% if user.is_staff %}
<li>
<a class="nav-link" href="{% url 'post_list' %}">Dashboard</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'student_page' %}">Studentenansicht</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'blog_search_list_view' %}">Suche</a>
</li>
{% elif user.is_staff %}
<li class="nav-item">
<a class="nav-link" href="{% url 'logout' %}">Administration</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'post_list' %}">Dashboard</a>
</li>
{% else %}
<li class="nav-item">
<a class="nav-link" href="{% url 'student_page' %}">{{user.get_username}}'s Dashboard</a>
</li>
{% endif %}
</ul>
@@ -40,7 +58,7 @@
<ul class="nav navbar-nav navbar-right">
{% if user.is_authenticated %}
<li class="nav-item">
<a class="nav-link disabled" href="#">{{ user.first_name }} {{ user.last_name }}</a>
<a class="nav-link disabled" href="#"></a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'logout' %}?next={{ LOGOUT_REDIRECT_URL }}">Abmelden</a>
@@ -76,9 +94,17 @@
</div>
</nav>
{% block content %} {% endblock %}
<div class="content container">
<div class="row">
<div class="col-md-8">
{% block content %} {% endblock %}
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="{% static 'bootstrap/js/jquery-1.11.1.js' %} "></script>
<script src="{% static 'bootstrap/jsjquery.tagcanvas.min.js' %} " type="text/javascript"></script>
<script src="{% static 'js/app.js' %}"></script>
<script src="{% static 'bootstrap/js/bootstrap.bundle.js' %}"></script>
</body>
@@ -0,0 +1,27 @@
{% extends "base.html" %} {% block content %}
{% load taggit_templatetags2_tags %}
{% get_tagcloud as tags for 'application' %}
{% include_tagcloud 'application.Post' %}
<form type="get" action="." style="margin: 0">
<input id="search_box" type="text" name="search_box" placeholder="Search...">
<button id="search_submit" type="submit">Suchen</button>
</form>
<div>
{% for post in posts %}
<div class="post">
<div class="date">
{{ post.published_date }}
</div>
<h1>
<a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a>
</h1>
<p>{{ post.text|linebreaks }}</p>
Tags: {% for tag in post.tags.all %}
<a href="{% url 'post_list_by_tag' tag.slug %}">{{ tag.name }}</a>
{% if not forloop.last %}, {% endif %} {% endfor %} <p>
{{ post.author }}
</p>
</div>
{% endfor %}
</div>
{% endblock %}
+16 -7
View File
@@ -5,15 +5,24 @@
{{ post.published_date }}
</div>
{% else %}
<a class="btn btn-default" href="{% url 'post_publish' pk=post.pk %}">Publish</a>
<a class="btn btn-outline-dark" href="{% url 'post_publish' pk=post.pk %}">Publish</a>
{% endif %} {% if user.is_staff and user == post.author %}
<a class="btn btn-outline-dark" href="{% url 'post_edit' pk=post.pk %}">
<span class="glyphicon glyphicon-pencil">Edit</span>
</a>
<a class="btn btn-outline-dark" href="{% url 'post_remove' pk=post.pk %}">
<span class="glyphicon glyphicon-remove">Remove</span>
</a>
{% endif %}
<a class="btn btn-default" href="{% url 'post_edit' pk=post.pk %}">
<span class="glyphicon glyphicon-pencil"></span>
</a>
<a class="btn btn-default" href="{% url 'post_remove' pk=post.pk %}">
<span class="glyphicon glyphicon-remove"></span>
</a>
<h1>{{ post.title }}</h1>
<p>{{ post.text|linebreaksbr }}</p>
<p>
{% for tag in post.tags.all %}
<a href="{% url 'blog_search_list_view' %}">{{ tag.name }}, </a>
{% endfor %}
</p>
<p>
Autor: {{ post.author }}
</p>
</div>
{% endblock %}
+2 -2
View File
@@ -3,7 +3,7 @@
{% block content %}
<h1>New post</h1>
<form method="POST" class="post-form">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Save</button>
{{ form.as_p }}
<button type="submit" class="save btn btn-outline-dark">Save</button>
</form>
{% endblock %}
+11 -2
View File
@@ -1,4 +1,6 @@
{% extends 'base.html' %} {% block content %} {% for post in posts %}
{% extends 'base.html' %} {% block content %}
{% if tag %} Posts tagged with "{{ tag.name }}" {% endif %}
{% for post in posts %}
<div class="post">
<div class="date">
{{ post.published_date }}
@@ -7,5 +9,12 @@
<a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a>
</h1>
<p>{{ post.text|linebreaks }}</p>
Tags: {% for tag in post.tags.all %}
<a href="{% url 'post_list_by_tag' tag.slug %}">{{ tag.name }}</a>
{% if not forloop.last %}, {% endif %} {% endfor %} <p>
{{ post.author }}
</p>
</div>
{% endfor %} {% endblock %}
{% endfor %}
</div>
{% endblock %}
@@ -24,7 +24,7 @@
</div>
<div>
<input type="submit" value="login" />
<input type="submit" value="login" class="btn btn-lg btn-primary"/>
<input type="hidden" name="next" value="{{ next }}" />
</div>
</form>
+24
View File
@@ -0,0 +1,24 @@
{% extends "base.html" %} {% block content %} {% load taggit_templatetags2_tags %} {% get_taglist as tags for 'application.post'%}
<div id="">
<ul>
{% for tag in tags %}
<li>{{tag}}
<a class="btn btn-outline-dark" href="{% url 'tag_remove' tag.slug %}">
<span class="glyphicon glyphicon-remove">Remove</span>
</a>
</li>
{{ result }} {% endfor %}
</ul>
</div>
<div>
{% if messages %}
{% for message in messages %}
<div {% if message.tags %} class="{{ message.tags }}" {% endif %}>{{ message }}</div>
{% endfor %}
{% endif %}
<form class="post-form" method="post">
{% csrf_token %} {{form.as_p}}
<button type="submit" class="save btn btn-outline-dark">Save</button>
</form>
{% endblock %}
+25
View File
@@ -0,0 +1,25 @@
{% extends "base.html" %} {% block content %}
{% load taggit_templatetags2_tags %}
<div>
</div>
<div>
{% for post in posts %}
<div class="post">
<div class="date">
{{ post.published_date }}
</div>
<h1>
<a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a>
</h1>
<p>{{ post.text|linebreaks }}</p>
Tags: {% for tag in post.tags.all %}
<a href="{% url 'post_list_by_tag' tag.slug %}">{{ tag.name }}</a>
{% if not forloop.last %}, {% endif %} {% endfor %} <p>
{{ post.author }}
</p>
</div>
{% endfor %}
</div>
{% endblock %}
+20
View File
@@ -0,0 +1,20 @@
{% extends 'base.html' %} {% block content %}
{% if tag %} Posts tagged with "{{ tag.name }}" {% endif %}
{% for post in posts %}
<div class="post">
<div class="date">
{{ post.published_date }}
</div>
<h1>
<a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a>
</h1>
<p>{{ post.text|linebreaks }}</p>
Tags: {% for tag in post.tags.all %}
<a href="{% url 'student_page_remove' tag.slug %}">{{ tag.name }}</a>
{% if not forloop.last %}, {% endif %} {% endfor %} <p>
{{ post.author }}
</p>
</div>
{% endfor %}
</div>
{% endblock %}
+21 -1
View File
@@ -1,12 +1,32 @@
from django.conf import settings
from django.conf.urls import url
from django.conf.urls import include
from django.urls import path
from taggit_templatetags2 import urls as taggit_templatetags2_urls
from . import views
import debug_toolbar
urlpatterns = [
url(r'^$', views.post_list, name='post_list'),
url(r'^tag/(?P<slug>[-\w]+)/$', views.post_list, name='post_list_by_tag'),
url(r'^taglist/$', views.tag_list, name='tag_list'),
url(r'^student/', views.student_page, name='student_page'),
url(r'^search/', views.blog_search_list_view, name='blog_search_list_view'),
url(r'^search/result/$', views.blog_search_list_view, name='post_list_by_search'),
url(r'^post/(?P<pk>\d+)/$', views.post_detail, name='post_detail'),
url(r'^post/new/$', views.post_new, name='post_new'),
url(r'^post/(?P<pk>\d+)/edit/$', views.post_edit, name='post_edit'),
url(r'^drafts/$', views.post_draft_list, name='post_draft_list'),
url(r'^post/(?P<pk>\d+)/publish/$', views.post_publish, name='post_publish'),
url(r'^post/(?P<pk>\d+)/remove/$', views.post_remove, name='post_remove'),
]
url(r'^student/(?P<slug>[-\w]+)/remove/$', views.tag_remove, name='tag_remove'),
url(r'^tags/', include('taggit_templatetags2.urls')),
url(r'^newsletter/', include('newsletter.urls')),
]
if settings.DEBUG:
import debug_toolbar
urlpatterns += [
url(r'^__debug__/', include(debug_toolbar.urls)),
]
+112 -10
View File
@@ -1,20 +1,30 @@
from django.shortcuts import render, get_object_or_404
from django.utils import timezone
from .models import Post
from .forms import PostForm
from .models import Post, CustomUser
from taggit.models import Tag
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from .forms import PostForm, NewTagForm
from django.shortcuts import redirect
from django.contrib.auth.decorators import login_required
from django.contrib.admin.views.decorators import staff_member_required
from django.contrib.auth import authenticate, login, logout
from django.db.models import Q
import sys
import collections
from taggit_templatetags2.views import TagCanvasListView
from django.contrib.auth.models import User
from django.contrib import messages
import logging
import mysite.settings
# Create your views here.
import operator
def navlogin(request):
log = logging.getLogger('medinf')
log = logging.getLogger('mysite')
logout(request)
error = ""
if request.POST:
@@ -36,17 +46,25 @@ def navlogin(request):
return render(request, 'index.html', context)
def post_list(request):
posts = Post.objects.filter(
published_date__lte=timezone.now()).order_by('published_date')
return render(request, 'post_list.html', {'posts': posts})
@login_required
def post_list(request, slug=None):
log = logging.getLogger('mysite')
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
if slug:
tag = get_object_or_404(Tag, slug=slug)
posts = posts.filter(tags__in=[tag])
log.info(posts)
return render(request, 'post_list.html', locals())
@login_required
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'post_detail.html', {'post': post})
@login_required
@staff_member_required
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST)
@@ -59,7 +77,9 @@ def post_new(request):
form = PostForm()
return render(request, 'post_edit.html', {'form': form})
@login_required
@staff_member_required
def post_edit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
@@ -68,25 +88,107 @@ def post_edit(request, pk):
post = form.save(commit=False)
post.author = request.user
post.save()
form.save_m2m()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm(instance=post)
return render(request, 'post_edit.html', {'form': form})
@login_required
@staff_member_required
def post_draft_list(request):
posts = Post.objects.filter(
published_date__isnull=True).order_by('created_date')
return render(request, 'post_draft_list.html', {'posts': posts})
@login_required
@staff_member_required
def post_publish(request, pk):
post = get_object_or_404(Post, pk=pk)
post.publish()
return redirect('post_detail', pk=pk)
@login_required
@staff_member_required
def post_remove(request, pk):
post = get_object_or_404(Post, pk=pk)
post.delete()
return redirect('post_list')
@login_required
def tag_remove(request, slug=None):
if slug:
tag = get_object_or_404(Tag, slug=slug)
tag.delete()
save_m2m()
return redirect('student_page')
@login_required
def student_page(request):
user_instance = get_object_or_404(CustomUser, user=request.user)
if request.method == "POST":
form = NewTagForm(request.POST, instance=user_instance)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.save()
m_tags = form.cleaned_data['m_tags']
tags = Tag.objects.all()
if m_tags in tags:
obj.tags.add(*m_tags)
form.save_m2m()
return redirect('/student/')
else:
messages.info(request, 'Sorry !! Den Tag den du suchst gibt es leider nicht!')
else:
form = NewTagForm()
return render(request, 'student_page.html', {'form':form})
@login_required
def tag_list(request):
log = logging.getLogger('mysite')
u = User.objects.get(username=request.user)
if u:
tags_user = Tag.objects.filter(customuser__user = u)
log.info(tags_user)
for tag in tags_user:
posts = Post.objects.filter(tags__in=[tag]).order_by('-published_date')
log.info(posts)
return render(request, 'tag_list.html', locals())
class TagSearch(TagCanvasListView):
template_name = 'blog_search_list_view.html'
model = Post
context_object_name = 'list'
paginate_by = 8
def get_context_data(self, **kwargs):
context = super(CustomerSearch, self).get_context_data(**kwargs)
context = self.get_queryset()
return context
def get_queryset(self):
cObj = Customer.objects.all()
var_get_search = self.request.GET.get('search_box')
if var_get_search is not None:
cObj = cObj.filter(firstname__icontains=var_get_search)
if var_get_order_by is not None:
cObj = cObj.order_by(var_get_order_by)
return cObj
def blog_search_list_view(request):
log = logging.getLogger('mysite')
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
if request.method == 'GET':
search_query = request.GET.get('search_box', None)
log.info(search_query)
posts = posts.filter(tags__name__in=[search_query])
return render(request, 'blog_search_list_view.html', locals())
def tag_cloud(request):
return render(request, 'tag_cloud.html', {})
Submodule
+1
Submodule croniter added at 3273cbc777.
@@ -0,0 +1,36 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\contentsline {chapter}{Abk\"urzungsverzeichnis}{xi}{chapter*.6}}
\newacro{Bla}[\AC@hyperlink{Bla}{Bla}]{blbablabal}
\@setckpt{abkuerzungsverzeichnis/abkuerzungsverzeichnis}{
\setcounter{page}{12}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{0}
\setcounter{section}{0}
\setcounter{subsection}{0}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{bookmark@seq@number}{5}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,36 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\contentsline {chapter}{Abstract}{i}{figure.caption.1}}
\@setckpt{abstract/abstract}{
\setcounter{page}{2}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{0}
\setcounter{section}{0}
\setcounter{subsection}{0}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{Hy@AnnotLevel}{0}
\setcounter{bookmark@seq@number}{1}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,47 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\providecommand*\new@tpo@label[2]{}
\catcode `"\active
\AC@reset@newl@bel
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
\global\let\oldcontentsline\contentsline
\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
\global\let\oldnewlabel\newlabel
\gdef\newlabel#1#2{\newlabelxx{#1}#2}
\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
\AtEndDocument{\ifx\hyper@anchor\@undefined
\let\contentsline\oldcontentsline
\let\newlabel\oldnewlabel
\fi}
\fi}
\global\let\hyper@last\relax
\gdef\HyperFirstAtBeginDocument#1{#1}
\providecommand*\HyPL@Entry[1]{}
\@input{titlepage/titlepage.aux}
\HyPL@Entry{0<</S/D>>}
\babel@aux{german}{}
\babel@aux{german}{}
\@input{abstract/abstract.aux}
\HyPL@Entry{2<</S/r>>}
\HyPL@Entry{6<</S/D>>}
\@writefile{toc}{\contentsline {chapter}{Abbildungsverzeichnis}{1}{chapter*.4}}
\@input{chapters/einleitung.aux}
\@input{chapters/framework.aux}
\@input{chapters/prototyp.aux}
\@input{chapters/ergebnis.aux}
\@input{chapters/ausblick.aux}
\@input{chapters/fazit.aux}
\bibstyle{alpha}
\citation{*}
\bibdata{references/References_2}
\bibcite{Dixit}{{Dix18}{}{{}}{{}}}
\bibcite{Python}{{Fou18}{}{{}}{{}}}
\bibcite{Gaynor}{{Gay10}{}{{}}{{}}}
\bibcite{Herzog}{{Her16}{}{{}}{{}}}
\bibcite{King}{{Kin17}{}{{}}{{}}}
\bibcite{Leipner}{{Lei13}{}{{}}{{}}}
\bibcite{Ndukwe}{{Ndu17}{}{{}}{{}}}
\bibcite{Shelest}{{She09}{}{{}}{{}}}
\providecommand\NAT@force@numbers{}\NAT@force@numbers
\@writefile{toc}{\contentsline {chapter}{Referenzen}{19}{chapter*.11}}
@@ -0,0 +1,61 @@
\begin{thebibliography}{Ndu17}
\bibitem[Dix18]{Dixit}
Chitrank Dixit.
\newblock Pep-8 tutorial: Code standards in python.
\newblock 2018.
\newblock
https://www.datacamp.com/community/tutorials/pep8-tutorial-python-code.
\bibitem[Fou18]{Python}
Python~Software Foundation.
\newblock Virtual environments and packages.
\newblock 2018.
\newblock https://docs.python.org/3/tutorial/venv.html.
\bibitem[Gay10]{Gaynor}
Alex Gaynor.
\newblock Exploring django-taggit’s data model.
\newblock 2010.
\newblock https://django-taggit.readthedocs.io/en/latest/getting\_started.
\bibitem[Her16]{Herzog}
Stephan Herzog.
\newblock Model view controller, model view presenter, and model view viewmodel
design patterns.
\newblock 2016.
\newblock
https://medium.com/sthzg/a-short-exploration-of-django-taggit-bb869ea5051f.
\bibitem[Kin17]{King}
Adam King.
\newblock Django middlewares and the request/response cycle.
\newblock 2017.
\newblock
https://medium.com/zeitcode/django-middlewares-and-the-request-response-cycle-fcbf8efb903f.
\bibitem[Lei13]{Leipner}
Ingo Leipner.
\newblock Stress für beschäftigte: Wie kann man die e-mail-flut
bekämpfen.
\newblock 2013.
\newblock
http://www.mz-web.de/wirtschaft/e-mail-flut-mails-bearbeiten-kommunikation-stress-zeit-sparen.
\bibitem[Ndu17]{Ndukwe}
Nnenna Ndukwe.
\newblock Python is the back-end programming language of the future and
here’s why.
\newblock 2017.
\newblock
https://medium.com/@nnennahacks/https-medium-com-nnennandukwe-python-is-the-back-end-programming-language-of-the-future-heres-why.
\bibitem[She09]{Shelest}
Alexy Shelest.
\newblock Model view controller, model view presenter, and model view viewmodel
design patterns.
\newblock 2009.
\newblock
https://www.codeproject.com/Articles/42830/Model-View-Controller-Model-View-Presenter-and-Mod.
\end{thebibliography}
@@ -0,0 +1,63 @@
This is BibTeX, Version 0.99d (TeX Live 2018)
Capacity: max_strings=100000, hash_size=100000, hash_prime=85009
The top-level auxiliary file: /Users/Esthi/thesis_ek/doc/bachelorarbeit_EstherKleinhenz/.texpadtmp/bachelorabeit_EstherKleinhenz.aux
A level-1 auxiliary file: titlepage/titlepage.aux
A level-1 auxiliary file: abstract/abstract.aux
A level-1 auxiliary file: chapters/einleitung.aux
A level-1 auxiliary file: chapters/framework.aux
A level-1 auxiliary file: chapters/prototyp.aux
A level-1 auxiliary file: chapters/ergebnis.aux
A level-1 auxiliary file: chapters/ausblick.aux
A level-1 auxiliary file: chapters/fazit.aux
The style file: alpha.bst
Database file #1: ../references/References_2.bib
Warning--empty journal in Dixit
Warning--empty journal in Python
Warning--empty journal in Gaynor
Warning--empty journal in Herzog
Warning--empty journal in King
Warning--empty journal in Leipner
Warning--empty journal in Ndukwe
Warning--empty journal in Shelest
You've used 8 entries,
2543 wiz_defined-function locations,
611 strings with 6085 characters,
and the built_in function-call counts, 2196 in all, are:
= -- 216
> -- 64
< -- 8
+ -- 16
- -- 16
* -- 106
:= -- 390
add.period$ -- 32
call.type$ -- 8
change.case$ -- 40
chr.to.int$ -- 8
cite$ -- 16
duplicate$ -- 112
empty$ -- 161
format.name$ -- 32
if$ -- 426
int.to.chr$ -- 1
int.to.str$ -- 0
missing$ -- 8
newline$ -- 51
num.names$ -- 24
pop$ -- 48
preamble$ -- 1
purify$ -- 48
quote$ -- 0
skip$ -- 88
stack$ -- 0
substring$ -- 56
swap$ -- 0
text.length$ -- 8
text.prefix$ -- 8
top$ -- 0
type$ -- 64
warning$ -- 8
while$ -- 16
width$ -- 10
write$ -- 106
(There were 8 warnings)
@@ -0,0 +1,13 @@
\babel@toc {german}{}
\babel@toc {german}{}
\addvspace {10\p@ }
\addvspace {10\p@ }
\contentsline {figure}{\numberline {2.1}{\ignorespaces Vereinfachter MVP\relax }}{6}{figure.caption.5}
\contentsline {figure}{\numberline {2.2}{\ignorespaces Request-Response-Kreislauf des Django Frameworks\relax }}{7}{figure.caption.6}
\contentsline {figure}{\numberline {2.3}{\ignorespaces Erstellen der virtuelle Umgebung im Terminal\relax }}{8}{figure.caption.7}
\contentsline {figure}{\numberline {2.4}{\ignorespaces Beispiel eines LDAP-Trees\relax }}{9}{figure.caption.8}
\contentsline {figure}{\numberline {2.5}{\ignorespaces Einbindung von Bootstrap in einer HTML-Datei\relax }}{11}{figure.caption.9}
\contentsline {figure}{\numberline {2.6}{\ignorespaces Bootstrap-Klassen in HTML-Tag\relax }}{12}{figure.caption.10}
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,23 @@
\BOOKMARK [0][-]{figure.caption.1}{Abstract}{}% 1
\BOOKMARK [0][-]{chapter*.4}{Abbildungsverzeichnis}{}% 2
\BOOKMARK [0][-]{chapter.1}{Einleitung}{}% 3
\BOOKMARK [1][-]{section.1.1}{Ausgangssituation}{chapter.1}% 4
\BOOKMARK [1][-]{section.1.2}{Ziel\040der\040Arbeit}{chapter.1}% 5
\BOOKMARK [0][-]{chapter.2}{Framework}{}% 6
\BOOKMARK [1][-]{section.2.1}{Django}{chapter.2}% 7
\BOOKMARK [2][-]{subsection.2.1.1}{Besonderheiten}{section.2.1}% 8
\BOOKMARK [1][-]{section.2.2}{Erweiterungen}{chapter.2}% 9
\BOOKMARK [2][-]{subsection.2.2.1}{Taggable-Manager}{section.2.2}% 10
\BOOKMARK [1][-]{section.2.3}{Bootstrap}{chapter.2}% 11
\BOOKMARK [0][-]{chapter.3}{Prototyp}{}% 12
\BOOKMARK [1][-]{section.3.1}{Organisation}{chapter.3}% 13
\BOOKMARK [2][-]{subsection.3.1.1}{Verwaltung\040im\040Administrator-Backend}{section.3.1}% 14
\BOOKMARK [2][-]{subsection.3.1.2}{Berechtigung\040der\040User}{section.3.1}% 15
\BOOKMARK [1][-]{section.3.2}{Funktion}{chapter.3}% 16
\BOOKMARK [2][-]{subsection.3.2.1}{Abonnieren}{section.3.2}% 17
\BOOKMARK [2][-]{subsection.3.2.2}{Filtern}{section.3.2}% 18
\BOOKMARK [2][-]{subsection.3.2.3}{Benachrichtigung}{section.3.2}% 19
\BOOKMARK [0][-]{chapter.4}{Ergebnis}{}% 20
\BOOKMARK [1][-]{subsection.4.0.1}{Evaluierung}{chapter.4}% 21
\BOOKMARK [0][-]{chapter.5}{Zusammenfassung\040und\040Ausblick}{}% 22
\BOOKMARK [0][-]{chapter*.11}{Referenzen}{}% 23
@@ -0,0 +1,25 @@
\babel@toc {german}{}
\babel@toc {german}{}
\contentsline {chapter}{Abstract}{i}{figure.caption.1}
\contentsline {chapter}{Abbildungsverzeichnis}{1}{chapter*.4}
\contentsline {chapter}{\numberline {1}Einleitung}{3}{chapter.1}
\contentsline {section}{\numberline {1.1}Ausgangssituation}{3}{section.1.1}
\contentsline {section}{\numberline {1.2}Ziel der Arbeit}{4}{section.1.2}
\contentsline {chapter}{\numberline {2}Framework}{5}{chapter.2}
\contentsline {section}{\numberline {2.1}Django}{5}{section.2.1}
\contentsline {subsection}{\numberline {2.1.1}Besonderheiten}{6}{subsection.2.1.1}
\contentsline {section}{\numberline {2.2}Erweiterungen}{8}{section.2.2}
\contentsline {subsection}{\numberline {2.2.1}Taggable-Manager}{10}{subsection.2.2.1}
\contentsline {section}{\numberline {2.3}Bootstrap}{11}{section.2.3}
\contentsline {chapter}{\numberline {3}Prototyp}{13}{chapter.3}
\contentsline {section}{\numberline {3.1}Organisation}{13}{section.3.1}
\contentsline {subsection}{\numberline {3.1.1}Verwaltung im Administrator-Backend}{13}{subsection.3.1.1}
\contentsline {subsection}{\numberline {3.1.2}Berechtigung der User}{13}{subsection.3.1.2}
\contentsline {section}{\numberline {3.2}Funktion}{13}{section.3.2}
\contentsline {subsection}{\numberline {3.2.1}Abonnieren}{13}{subsection.3.2.1}
\contentsline {subsection}{\numberline {3.2.2}Filtern}{13}{subsection.3.2.2}
\contentsline {subsection}{\numberline {3.2.3}Benachrichtigung}{14}{subsection.3.2.3}
\contentsline {chapter}{\numberline {4}Ergebnis}{15}{chapter.4}
\contentsline {subsection}{\numberline {4.0.1}Evaluierung}{15}{subsection.4.0.1}
\contentsline {chapter}{\numberline {5}Zusammenfassung und Ausblick}{17}{chapter.5}
\contentsline {chapter}{Referenzen}{19}{chapter*.11}
@@ -0,0 +1,38 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\providecommand*\new@tpo@label[2]{}
\catcode `"\active
\AC@reset@newl@bel
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
\global\let\oldcontentsline\contentsline
\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
\global\let\oldnewlabel\newlabel
\gdef\newlabel#1#2{\newlabelxx{#1}#2}
\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
\AtEndDocument{\ifx\hyper@anchor\@undefined
\let\contentsline\oldcontentsline
\let\newlabel\oldnewlabel
\fi}
\fi}
\global\let\hyper@last\relax
\gdef\HyperFirstAtBeginDocument#1{#1}
\providecommand*\HyPL@Entry[1]{}
\@input{titlepage/titlepage.aux}
\HyPL@Entry{0<</S/D>>}
\babel@aux{german}{}
\babel@aux{german}{}
\@input{abstract/abstract.aux}
\HyPL@Entry{2<</S/r>>}
\@input{chapters/einleitung.aux}
\HyPL@Entry{6<</S/D>>}
\@input{chapters/grundlagen.aux}
\@input{chapters/standderTechnik.aux}
\@input{chapters/softwareUndUrsprung.aux}
\@input{chapters/eigeneUntersuchungen.aux}
\@input{chapters/ausblick.aux}
\@input{chapters/fazit.aux}
\bibstyle{alpha}
\citation{*}
\bibdata{references/References_2}
\@writefile{toc}{\contentsline {chapter}{Referenzen}{15}{chapter*.4}}
@@ -0,0 +1,3 @@
\begin{thebibliography}{}
\end{thebibliography}
@@ -0,0 +1,55 @@
This is BibTeX, Version 0.99d (TeX Live 2018)
Capacity: max_strings=100000, hash_size=100000, hash_prime=85009
The top-level auxiliary file: /Users/Esthi/Downloads/Template/.texpadtmp/bachelorabeit_EstherKleinhenz.aux
A level-1 auxiliary file: titlepage/titlepage.aux
A level-1 auxiliary file: abstract/abstract.aux
A level-1 auxiliary file: chapters/einleitung.aux
A level-1 auxiliary file: chapters/grundlagen.aux
A level-1 auxiliary file: chapters/standderTechnik.aux
A level-1 auxiliary file: chapters/softwareUndUrsprung.aux
A level-1 auxiliary file: chapters/eigeneUntersuchungen.aux
A level-1 auxiliary file: chapters/ausblick.aux
A level-1 auxiliary file: chapters/fazit.aux
The style file: alpha.bst
Database file #1: ../references/References_2.bib
You've used 0 entries,
2543 wiz_defined-function locations,
567 strings with 4801 characters,
and the built_in function-call counts, 24 in all, are:
= -- 0
> -- 0
< -- 0
+ -- 0
- -- 0
* -- 2
:= -- 10
add.period$ -- 0
call.type$ -- 0
change.case$ -- 0
chr.to.int$ -- 0
cite$ -- 0
duplicate$ -- 0
empty$ -- 1
format.name$ -- 0
if$ -- 2
int.to.chr$ -- 1
int.to.str$ -- 0
missing$ -- 0
newline$ -- 3
num.names$ -- 0
pop$ -- 0
preamble$ -- 1
purify$ -- 0
quote$ -- 0
skip$ -- 2
stack$ -- 0
substring$ -- 0
swap$ -- 0
text.length$ -- 0
text.prefix$ -- 0
top$ -- 0
type$ -- 0
warning$ -- 0
while$ -- 0
width$ -- 0
write$ -- 2
@@ -0,0 +1,9 @@
\babel@toc {german}{}
\babel@toc {german}{}
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,9 @@
\babel@toc {german}{}
\babel@toc {german}{}
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
@@ -0,0 +1,11 @@
\BOOKMARK [0][-]{figure.caption.1}{Abstract}{}% 1
\BOOKMARK [0][-]{chapter.1}{Einleitung}{}% 2
\BOOKMARK [1][-]{section.1.1}{Motivation}{chapter.1}% 3
\BOOKMARK [0][-]{chapter.2}{Grundlagen}{}% 4
\BOOKMARK [1][-]{section.2.1}{Blabla}{chapter.2}% 5
\BOOKMARK [0][-]{chapter.3}{Stand\040der\040Technik}{}% 6
\BOOKMARK [0][-]{chapter.4}{Software\040und\040Ursprung}{}% 7
\BOOKMARK [0][-]{chapter.5}{Eigene\040Untersuchungen}{}% 8
\BOOKMARK [0][-]{chapter.6}{Ausblick}{}% 9
\BOOKMARK [0][-]{chapter.7}{Zusammenfassung}{}% 10
\BOOKMARK [0][-]{chapter*.4}{Referenzen}{}% 11
@@ -0,0 +1,13 @@
\babel@toc {german}{}
\babel@toc {german}{}
\contentsline {chapter}{Abstract}{i}{figure.caption.1}
\contentsline {chapter}{\numberline {1}Einleitung}{1}{chapter.1}
\contentsline {section}{\numberline {1.1}Motivation}{1}{section.1.1}
\contentsline {chapter}{\numberline {2}Grundlagen}{3}{chapter.2}
\contentsline {section}{\numberline {2.1}Blabla}{3}{section.2.1}
\contentsline {chapter}{\numberline {3}Stand der Technik}{5}{chapter.3}
\contentsline {chapter}{\numberline {4}Software und Ursprung}{7}{chapter.4}
\contentsline {chapter}{\numberline {5}Eigene Untersuchungen}{9}{chapter.5}
\contentsline {chapter}{\numberline {6}Ausblick}{11}{chapter.6}
\contentsline {chapter}{\numberline {7}Zusammenfassung}{13}{chapter.7}
\contentsline {chapter}{Referenzen}{15}{chapter*.4}
@@ -0,0 +1,35 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@setckpt{chapters/ausblick}{
\setcounter{page}{16}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{4}
\setcounter{section}{0}
\setcounter{subsection}{1}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{Hy@AnnotLevel}{0}
\setcounter{bookmark@seq@number}{21}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,35 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@setckpt{chapters/eigeneUntersuchungen}{
\setcounter{page}{8}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{4}
\setcounter{section}{0}
\setcounter{subsection}{1}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{Hy@AnnotLevel}{0}
\setcounter{bookmark@seq@number}{19}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,40 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\contentsline {chapter}{\numberline {1}Einleitung}{3}{chapter.1}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@writefile{toc}{\contentsline {section}{\numberline {1.1}Ausgangssituation}{3}{section.1.1}}
\@writefile{toc}{\contentsline {section}{\numberline {1.2}Ziel der Arbeit}{4}{section.1.2}}
\@setckpt{chapters/einleitung}{
\setcounter{page}{5}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{1}
\setcounter{section}{2}
\setcounter{subsection}{0}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{Hy@AnnotLevel}{0}
\setcounter{bookmark@seq@number}{5}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,40 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\contentsline {chapter}{\numberline {4}Ergebnis}{15}{chapter.4}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{ch:ergebnis}{{4}{15}{Ergebnis}{chapter.4}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.0.1}Evaluierung}{15}{subsection.4.0.1}}
\@setckpt{chapters/ergebnis}{
\setcounter{page}{16}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{4}
\setcounter{section}{0}
\setcounter{subsection}{1}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{Hy@AnnotLevel}{0}
\setcounter{bookmark@seq@number}{21}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,39 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\contentsline {chapter}{\numberline {5}Zusammenfassung und Ausblick}{17}{chapter.5}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{ch:zusammenfassung}{{5}{17}{Zusammenfassung und Ausblick}{chapter.5}{}}
\@setckpt{chapters/fazit}{
\setcounter{page}{18}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{5}
\setcounter{section}{0}
\setcounter{subsection}{0}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{Hy@AnnotLevel}{0}
\setcounter{bookmark@seq@number}{22}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,50 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\contentsline {chapter}{\numberline {2}Framework}{5}{chapter.2}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{ch:framework}{{2}{5}{Framework}{chapter.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2.1}Django}{5}{section.2.1}}
\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces Vereinfachter MVP\relax }}{6}{figure.caption.5}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.1}Besonderheiten}{6}{subsection.2.1.1}}
\@writefile{lof}{\contentsline {figure}{\numberline {2.2}{\ignorespaces Request-Response-Kreislauf des Django Frameworks\relax }}{7}{figure.caption.6}}
\@writefile{toc}{\contentsline {section}{\numberline {2.2}Erweiterungen}{8}{section.2.2}}
\@writefile{lof}{\contentsline {figure}{\numberline {2.3}{\ignorespaces Erstellen der virtuelle Umgebung im Terminal\relax }}{8}{figure.caption.7}}
\@writefile{lof}{\contentsline {figure}{\numberline {2.4}{\ignorespaces Beispiel eines LDAP-Trees\relax }}{9}{figure.caption.8}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.1}Taggable-Manager}{10}{subsection.2.2.1}}
\@writefile{toc}{\contentsline {section}{\numberline {2.3}Bootstrap}{11}{section.2.3}}
\@writefile{lof}{\contentsline {figure}{\numberline {2.5}{\ignorespaces Einbindung von Bootstrap in einer HTML-Datei\relax }}{11}{figure.caption.9}}
\@writefile{lof}{\contentsline {figure}{\numberline {2.6}{\ignorespaces Bootstrap-Klassen in HTML-Tag\relax }}{12}{figure.caption.10}}
\@setckpt{chapters/framework}{
\setcounter{page}{13}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{2}
\setcounter{section}{3}
\setcounter{subsection}{0}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{6}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{Hy@AnnotLevel}{0}
\setcounter{bookmark@seq@number}{11}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,43 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\contentsline {chapter}{\numberline {2}Framework}{3}{chapter.2}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{ch:framework}{{2}{3}{Framework}{chapter.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2.1}Django}{3}{section.2.1}}
\@writefile{toc}{\contentsline {section}{\numberline {2.2}Erweiterung}{3}{section.2.2}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.1}Taggable-Manager}{3}{subsection.2.2.1}}
\@writefile{toc}{\contentsline {section}{\numberline {2.3}Bootstrap}{3}{section.2.3}}
\@setckpt{chapters/grundlagen}{
\setcounter{page}{4}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{2}
\setcounter{section}{3}
\setcounter{subsection}{0}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{Hy@AnnotLevel}{0}
\setcounter{bookmark@seq@number}{9}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,46 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\contentsline {chapter}{\numberline {3}Prototyp}{13}{chapter.3}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{ch:prototyp}{{3}{13}{Prototyp}{chapter.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3.1}Organisation}{13}{section.3.1}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}Verwaltung im Administrator-Backend}{13}{subsection.3.1.1}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.2}Berechtigung der User}{13}{subsection.3.1.2}}
\@writefile{toc}{\contentsline {section}{\numberline {3.2}Funktion}{13}{section.3.2}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.1}Abonnieren}{13}{subsection.3.2.1}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.2}Filtern}{13}{subsection.3.2.2}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.3}Benachrichtigung}{14}{subsection.3.2.3}}
\@setckpt{chapters/prototyp}{
\setcounter{page}{15}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{3}
\setcounter{section}{2}
\setcounter{subsection}{3}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{Hy@AnnotLevel}{0}
\setcounter{bookmark@seq@number}{19}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,40 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\contentsline {chapter}{\numberline {4}Ergebnis}{7}{chapter.4}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{ch:ergebnis}{{4}{7}{Ergebnis}{chapter.4}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.0.1}Evaluierung}{7}{subsection.4.0.1}}
\@setckpt{chapters/softwareUndUrsprung}{
\setcounter{page}{8}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{4}
\setcounter{section}{0}
\setcounter{subsection}{1}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{Hy@AnnotLevel}{0}
\setcounter{bookmark@seq@number}{19}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,46 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\contentsline {chapter}{\numberline {3}Prototyp}{5}{chapter.3}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{ch:prototyp}{{3}{5}{Prototyp}{chapter.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3.1}Organisation}{5}{section.3.1}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}Verwaltung im Administrator-Backend}{5}{subsection.3.1.1}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.2}Berechtigung der User}{5}{subsection.3.1.2}}
\@writefile{toc}{\contentsline {section}{\numberline {3.2}Funktion}{5}{section.3.2}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.1}Abonnieren}{5}{subsection.3.2.1}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.2}Filtern}{5}{subsection.3.2.2}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.3}Benachrichtigung}{5}{subsection.3.2.3}}
\@setckpt{chapters/standderTechnik}{
\setcounter{page}{6}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{3}
\setcounter{section}{2}
\setcounter{subsection}{3}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{Hy@AnnotLevel}{0}
\setcounter{bookmark@seq@number}{17}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,32 @@
\relax
\@setckpt{preambule/thesis.preamble}{
\setcounter{page}{1}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{0}
\setcounter{section}{0}
\setcounter{subsection}{0}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{4}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{Hy@AnnotLevel}{0}
\setcounter{bookmark@seq@number}{0}
\setcounter{NAT@ctr}{0}
}
@@ -0,0 +1,20 @@
\relax
\@setckpt{preambule/thesis.preamble.tex}{
\setcounter{page}{1}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{0}
\setcounter{section}{0}
\setcounter{subsection}{0}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
}
@@ -0,0 +1,35 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\contentsline {chapter}{Zusammenfassung}{i}{figure.caption.1}}
\@setckpt{summary/summary}{
\setcounter{page}{2}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{0}
\setcounter{section}{0}
\setcounter{subsection}{0}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{bookmark@seq@number}{1}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,35 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@setckpt{titlepage/titlepage}{
\setcounter{page}{3}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{0}
\setcounter{section}{0}
\setcounter{subsection}{0}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{float@type}{8}
\setcounter{parentequation}{0}
\setcounter{lstnumber}{1}
\setcounter{ContinuedFloat}{0}
\setcounter{subfigure}{0}
\setcounter{subtable}{0}
\setcounter{r@tfl@t}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{Hy@AnnotLevel}{0}
\setcounter{bookmark@seq@number}{0}
\setcounter{NAT@ctr}{0}
\setcounter{lstlisting}{0}
\setcounter{section@level}{0}
}
@@ -0,0 +1,12 @@
\cleardoublepage
\addcontentsline{toc}{chapter}{Acknowledgements}
\chapter*{Acknowledgements}
I would like to express (whatever feelings I have) to:
My family and friends...
@@ -0,0 +1,7 @@
\thispagestyle{plain}
\vspace*{3cm}
To someone...
@@ -0,0 +1,8 @@
\thispagestyle{plain}
\vspace*{10cm}
`Quote text here.'\\
\\
\indent \emph{Guy Quoted}
+104
View File
@@ -0,0 +1,104 @@
%-----------------------------------------------------------------
% INSERT 1 IMAGE
%-----------------------------------------------------------------
\begin{figure}[!ht]
\centering
\includegraphics[width=1\textwidth]{IMAGE_NAME}
\caption{IMAGE_CAPTION}\label{fig:IMAGE_LABEL}
\end{figure}
\FloatBarrier
%-----------------------------------------------------------------
% START PARAGRAPH WITH NO SPACE
%-----------------------------------------------------------------
\noindent
%-----------------------------------------------------------------
% INSERT 2 OR MORE IMAGES - SIDE BY SIDE
%-----------------------------------------------------------------
\begin{figure}[!ht]
\centering
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{IMAGE_NAME}
\caption{IMAGE_CAPTION}\label{fig:IMAGE_LABEL}
\end{subfigure}
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{IMAGE_NAME}
\caption{IMAGE_CAPTION}\label{fig:IMAGE_LABEL}
\end{subfigure}
\caption{GLOBAL_FIGURE_CAPTION}\label{fig:GLOBAL_FIGURE_LABEL}
\end{figure}
\FloatBarrier
%-----------------------------------------------------------------
% INSERT 2 OR MORE IMAGES - ONE BELOW OTHER
%-----------------------------------------------------------------
\begin{figure}[!ht]
\centering
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{IMAGE_NAME}
\caption{IMAGE_CAPTION}\label{fig:IMAGE_LABEL}
\end{subfigure}
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{IMAGE_NAME}
\caption{IMAGE_CAPTION}\label{fig:IMAGE_LABEL}
\end{subfigure}
\caption{GLOBAL_FIGURE_CAPTION}\label{fig:GLOBAL_FIGURE_LABEL}
\end{figure}
\FloatBarrier
%-----------------------------------------------------------------
% INSERT TABLE
%-----------------------------------------------------------------
\begin{table}[!ht]
\caption {Mesh Parameters}\label{tab:meshpara}
\centering
\begin{tabular}{ccccc}
\hline \hline
Element Type & Elements & Nodes & Degrees of Freedom \\
\hline
Shell181 & 8000 & 8241 & 49206 \\
\hline \hline
\end{tabular}
\end{table}
\FloatBarrier
%-----------------------------------------------------------------
% INSER (ANOTHER) TABLE
%-----------------------------------------------------------------
\begin{table}[!ht]
\caption {Mesh Parameters}\label{tab:meshpara}
\centering
\begin{tabular}{ccccc}
\toprule
Element Type & Elements & Nodes & Degrees of Freedom \\
\midrule
Shell181 & 8000 & 8241 & 49206 \\
\bottomrule
\end{tabular}
\end{table}
\FloatBarrier
%-----------------------------------------------------------------
% INSERT EQUATION
%-----------------------------------------------------------------
\begin{equation}\label{eq:EQUATION_NAME}
EQUATION FORMULA
\end{equation}
%-----------------------------------------------------------------
% REFERENCES
%-----------------------------------------------------------------
\cite{REFERENCE_HERE} - reference documents
\eqref{EQUATION_HERE} - reference equations
\ref{fig:...} - reference images, tables, sections, chapters
$ EQUATION HERE $ - reference equations in the text OR insert numbers in the text
@@ -0,0 +1,8 @@
\addcontentsline{toc}{chapter}{Abk\"urzungsverzeichnis}
\chapter*{Abk{\"u}rzungsverzeichnis}
\begin{acronym}
\acro{Bla}{blbablabal}
\end{acronym}
+11
View File
@@ -0,0 +1,11 @@
\addcontentsline{toc}{chapter}{Abstract}
\chapter*{Abstract}
Content of this Bachelor thesis is ....
\vspace{\fill}
\noindent \textbf{Keywords}: bla,bla Georg Simon Ohm, Wirtschaftsinformatik
@@ -0,0 +1,270 @@
\newcommand{\etalchar}[1]{$^{#1}$}
\begin{thebibliography}{BEWW16}
\bibitem[Alp04]{alpaydin2004}
E.~Alpaydin.
\newblock {\em Introduction to Machine Learning}.
\newblock Adaptive computation and machine learning. MIT Press, 2004.
\bibitem[Alp08]{alpaydin2008}
Ethem Alpayd{\i}n.
\newblock {\em Maschinelles Lernen}.
\newblock Oldenbourg Verlag, 2008.
\bibitem[Alp14]{alpaydin2014}
Ethem Alpaydin.
\newblock {\em Introduction to Machine Learning}.
\newblock The MIT Press, 2014.
\bibitem[Alp16]{alpaydin2016}
Ethem Alpaydin.
\newblock {\em Machine Learning: The New AI}.
\newblock The MIT Press, 2016.
\bibitem[And]{code}
Karpathy Andrej.
\newblock Minimal character-level language model with a vanilla recurrent
neural network, in python/numpy, Abgerufen am 01.09.2017.
\bibitem[Ber17]{wdr17}
Nika Bertram.
\newblock Utopie oder endzeitphantasien?
\newblock {\em WDR}, Abgerufen am 15.09.2017 2017.
\bibitem[BEWW16]{backhaus2016multivariate}
Klaus Backhaus, Bernd Erichson, P~Wulff, and Rolf Weiber.
\newblock Multivariate analysemethoden--eine anwendungsorientierte
einf{\"u}hrung. 14., {\"u}berarbeitete und aktualisierte auflage, 2016.
\bibitem[Bri15]{WILDML}
Denny Britz.
\newblock Wildml artificial intelligence, deep learning, and nlp, Abgerufen am
19.07.2017 2015.
\bibitem[Bro16]{Brownlee2016}
Jason Brownlee.
\newblock Crash course in recurrent neural networks for deep learning,
Abgerufen am 29.07.2017 2016.
\bibitem[Dee]{Deeplearning4j}
Deeplearning4j.
\newblock A beginner’s guide to recurrent networks and lstms, Abgerufen am
27.07.2017.
\bibitem[Eur]{eurichArtikel}
Christian Eurich.
\newblock neuronale netzwerke, Abgerufen am 19.06.2017.
\bibitem[Git]{GitCsharp}
GitHub.
\newblock C\# projekte, Abgerufen am 14.09.1017.
\bibitem[Gra14]{Graves2014}
Alex Graves.
\newblock Generating sequences with recurrent neural networks.
\newblock Cornell University Library, Abgerufen am 09.09.2017 2014.
\bibitem[Ham00]{hammer2000learning}
B.~Hammer.
\newblock {\em Learning with Recurrent Neural Networks}.
\newblock Lecture Notes in Control and Information Sciences. Springer London,
2000.
\bibitem[HH17]{ten2017logistik}
Michael Hompel and Michael Henke.
\newblock Logistik 4.0--ein ausblick auf die planung und das management der
zuk{\"u}nftigen logistik vor dem hintergrund der vierten industriellen
revolution.
\newblock In {\em Handbuch Industrie 4.0 Bd. 4}, pages 247--257. Springer,
2017.
\bibitem[HS17]{HwangSung2017}
Kyuyeon Hwang and Wonyong Sung.
\newblock Character-level language modeling with hierarchical recurrent neural
networks.
\newblock Cornell Universtity Library, Abgerufen am 09.09.2017 2017.
\bibitem[Hut12]{hutterPrize}
M.~Hutter.
\newblock The human knowledge compression contest, Abgerufen am 11.09.2017
2012.
\bibitem[Ill17]{pokerGo}
Patrick Illinger.
\newblock Maschine schlägt mensch - jetzt auch beim pokern.
\newblock {\em Süddeutsche Zeitung}, Abgerufen am 17.09.2017 2017.
\bibitem[Imp17]{import}
Import.io.
\newblock Collect data and images, Abgerufen am 15.09.2017 2017.
\bibitem[Kü17]{Eike2017}
Eike Kühl.
\newblock Eine sprache macht noch keinen terminator.
\newblock {\em Zeit Online}, Abgerufen am 06.08.2017 2017.
\bibitem[Kar15]{Karpathy2015}
Andrey Karpathy.
\newblock The unreasonable effectiveness of recurrent neural networks,
Abgerufen am 09.08.2017 2015.
\bibitem[KBB{\etalchar{+}}15]{kruse2015computational}
R.~Kruse, C.~Borgelt, C.~Braune, F.~Klawonn, C.~Moewes, and M.~Steinbrecher.
\newblock {\em Computational Intelligence: Eine methodische Einf{\"u}hrung in
K{\"u}nstliche Neuronale Netze, Evolution{\"a}re Algorithmen, Fuzzy-Systeme
und Bayes-Netze}.
\newblock Computational Intelligence. Springer Fachmedien Wiesbaden, 2015.
\bibitem[KJSR16]{kim2016character}
Yoon Kim, Yacine Jernite, David Sontag, and Alexander~M Rush.
\newblock Character-aware neural language models.
\newblock In {\em AAAI}, pages 2741--2749, 2016.
\bibitem[Kni17]{Knight17}
Will Knight.
\newblock The dark secret at the heart of ai, Abgerufen am 14.09.2017 2017.
\bibitem[Kom]{neuronImage}
Medizin Kompakt.
\newblock Menschliches neuron, Abgerufen am 14.06.2017.
\bibitem[Lal]{csvBuddy}
Jean Lalonde.
\newblock Csv buddy, Abgerufen am 15.09.2017.
\bibitem[LNT98]{leisewitz1998}
MC~Leisewitz, V~Nissen, and M~Tietze.
\newblock Betriebswirtschaftliche anwendungen des soft computings-neuronale
netze, fuzzy systeme und evolution{\"a}re algorithmen.
\newblock {\em Braunschweig: Vieweg}, page 9 ff., 1998.
\bibitem[LZZ15]{LeCun15}
Yann LeCun, Xiang Zhang, and Junbo Zhao.
\newblock Character-level convolutional networks for text classification,
Abgerufen am 12.09.2017 2015.
\bibitem[Man17]{computerwoche}
Dr.~Klaus Manhart.
\newblock Was sie über maschinelles lernen wissen müssen.
\newblock {\em Computerwoche}, Abgerufen am 21.09.2017 2017.
\bibitem[Mer16]{rnnImage}
Mercyse.
\newblock Rekkurentes netz, Abgerufen am 16.05.2017 2016.
\newblock Cross-wiki upload from fa.wikipedia.org.
\bibitem[Mica]{Microsoft}
Microsoft.
\newblock Codebeispiele für entwickler, Abgerufen am 14.09.2017.
\bibitem[Micb]{NET}
Microsoft.
\newblock Download the entire source code of .net framework, Abgerufen am
13.09.2017.
\bibitem[MJ01]{medsker2001}
Larry Medsker and Lakhmi~C Jain.
\newblock {\em Recurrent neural networks: design and applications}.
\newblock CRC press, 2001.
\bibitem[MMS93a]{PennTreebank}
Mitchell~P. Marcus, Mary~Ann Marcinkiewicz, and Beatrice Santorini.
\newblock Building a large annotated corpus of english: The penn treebank.
\newblock {\em Comput. Linguist.}, 19(2):313--330, June 1993.
\bibitem[MMS93b]{Marcus:1993:BLA:972470.972475}
Mitchell~P. Marcus, Mary~Ann Marcinkiewicz, and Beatrice Santorini.
\newblock Building a large annotated corpus of english: The penn treebank.
\newblock {\em Comput. Linguist.}, 19(2):313--330, June 1993.
\bibitem[Mon98]{monpetainArtikel}
Klaus Monpetain.
\newblock Neuronale-netze eine einführung, Abgerfuen am 19.06.2017 1998.
\bibitem[Nei16]{neises2016aktuelle}
Mario Neises.
\newblock {\em Aktuelle Entwicklung und Probleme bei künstlichen Neuronalen
Netzen in Bezug auf deep learning}.
\newblock PhD thesis, Master’s thesis, Hochschule fuer Technik und Wirtschaft
Berlin, 2016.
\bibitem[Neu]{NeuroNation}
NeuroNation.
\newblock Definition der intelligenz - was ist das eigentlich?, Abgerufen am
06.08.2017.
\bibitem[Num17]{Numpy}
NumPy.
\newblock Numpy, Abgerufen am 09.09.2017 2017.
\bibitem[Ola15]{colah2015}
Christopher Olah.
\newblock Understanding lstm networks, Abgerufen am 29.07.2017 2015.
\bibitem[Ope]{nnImage}
OpenCV.
\newblock Neuronales netz, Abgerufen am 19.06.2017.
\bibitem[Pet16]{Petereit16}
Dieter Petereit.
\newblock Was ist eigentlich der unterschied zwischen ai, machine learning,
deep learning und natural language processing?
\newblock t3n - digital pioneers, Abgerufen am 17.09.2017 2016.
\bibitem[RN09]{Russell09}
Stuart~J. Russell and Peter Norvig.
\newblock {\em Artificial Intelligence: A Modern Approach}.
\newblock Pearson Education, 3 edition, 2009.
\bibitem[Ron]{torch}
Koray und~Soumith Ronan, Clément.
\newblock Torch - a scientific computing framework for luajit, Aberufen am
04.09.2017.
\bibitem[RW10]{rey2010neuronale}
G{\"u}nter~Daniel Rey and Karl~F Wender.
\newblock {\em Neuronale Netze: Eine Einf{\"u}hrung in die Grundlagen,
Anwendungen und Datenauswertung}.
\newblock Huber, 2010.
\bibitem[Set15]{MarI/O}
SethBling.
\newblock Mari/o - machine learning for video games, Abgerufen am 06.08.2017
2015.
\bibitem[SMH11]{sutskever2011generating}
Ilya Sutskever, James Martens, and Geoffrey~E Hinton.
\newblock Generating text with recurrent neural networks.
\newblock In {\em Proceedings of the 28th International Conference on Machine
Learning (ICML-11)}, pages 1017--1024, 2011.
\bibitem[Sto17]{Stockburger2017}
Christoph Stockburger.
\newblock Die denksportwagen.
\newblock {\em Spiegel Online}, Abgerufen am 06.08.2017 2017.
\bibitem[Tor]{informatikseite}
Christoph Tornau.
\newblock Die informatikseite - neuronale netze, Abgerufen am 25.07.2017.
\bibitem[Tra16]{Tran2016}
Trung Tran.
\newblock Creating a text generator using recurrent neural network, Abgerufen
am 02.09.2017 2016.
\bibitem[Tuc17]{Tuck2017}
Jay Tuck.
\newblock Künstliche intelligenz in der medizin.
\newblock {\em PC Welt}, Abgerufen am 06.08.2017 2017.
\bibitem[Vö17]{Voelkl17}
Gerhard Völkl.
\newblock Zeichenerkennung, Abgerufen am 12.09.2017 2017.
\bibitem[Wal05]{walde2005}
J.F. Walde.
\newblock {\em Design K{\"u}nstlicher Neuronaler Netze: Ein Leitfaden zur
effizienten Handhabung mehrschichtiger Perzeptrone}.
\newblock Deutscher Universit{\"a}tsverlag, 2005.
\end{thebibliography}
@@ -0,0 +1,27 @@
This is BibTeX, Version 0.99dThe top-level auxiliary file: bachelorabeit_EstherKleinhenz.aux
A level-1 auxiliary file: titlepage/titlepage.aux
A level-1 auxiliary file: summary/summary.aux
A level-1 auxiliary file: abstract/abstract.aux
A level-1 auxiliary file: abkuerzungsverzeichnis/abkuerzungsverzeichnis.aux
A level-1 auxiliary file: chapters/einleitung.aux
A level-1 auxiliary file: chapters/grundlagen.aux
A level-1 auxiliary file: chapters/standderTechnik.aux
A level-1 auxiliary file: chapters/softwareUndUrsprung.aux
A level-1 auxiliary file: chapters/eigeneUntersuchungen.aux
A level-1 auxiliary file: chapters/ausblick.aux
A level-1 auxiliary file: chapters/fazit.aux
The style file: alpha.bst
Database file #1: references/References_2.bib
Warning--there's a month but no year in code
Warning--there's a month but no year in Deeplearning4j
Warning--there's a month but no year in eurichArtikel
Warning--there's a month but no year in GitCsharp
Warning--there's a month but no year in neuronImage
Warning--there's a month but no year in csvBuddy
Warning--there's a month but no year in Microsoft
Warning--there's a month but no year in NET
Warning--there's a month but no year in NeuroNation
Warning--there's a month but no year in nnImage
Warning--there's a month but no year in torch
Warning--there's a month but no year in informatikseite
(There were 12 warnings)
Binary file not shown.
@@ -0,0 +1,9 @@
\babel@toc {german}{}
\babel@toc {german}{}
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
@@ -0,0 +1,9 @@
\babel@toc {german}{}
\babel@toc {german}{}
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
\addvspace {10\p@ }
@@ -0,0 +1,15 @@
\BOOKMARK [0][-]{figure.caption.1}{Zusammenfassung}{}% 1
\BOOKMARK [0][-]{chapter*.2}{Abstract}{}% 2
\BOOKMARK [0][-]{chapter*.5}{Abbildungsverzeichnis}{}% 3
\BOOKMARK [0][-]{chapter*.6}{Tabellenverzeichnis}{}% 4
\BOOKMARK [0][-]{chapter*.6}{Abk\374rzungsverzeichnis}{}% 5
\BOOKMARK [0][-]{chapter.1}{Einleitung}{}% 6
\BOOKMARK [1][-]{section.1.1}{Motivation}{chapter.1}% 7
\BOOKMARK [0][-]{chapter.2}{Grundlagen}{}% 8
\BOOKMARK [1][-]{section.2.1}{Blabla}{chapter.2}% 9
\BOOKMARK [0][-]{chapter.3}{Stand der Technik}{}% 10
\BOOKMARK [0][-]{chapter.4}{Software und Ursprung}{}% 11
\BOOKMARK [0][-]{chapter.5}{Eigene Untersuchungen}{}% 12
\BOOKMARK [0][-]{chapter.6}{Ausblick}{}% 13
\BOOKMARK [0][-]{chapter.7}{Zusammenfassung}{}% 14
\BOOKMARK [0][-]{chapter*.8}{Referenzen}{}% 15
@@ -0,0 +1,78 @@
\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst}
\documentclass[12pt,a4paper,openright,twoside]{report}
%------------------------------------------------------------------------------
% preambule
\include{preambule/thesis.preamble}
%------------------------------------------------------------------------------
% path for figures
%\graphicspath{{figures/}}
%------------------------------------------------------------------------------
% includeonly for faster compilation
%\includeonly{
%titlepage/titlepage,
%abstract/abstract,
%AcknowledgmentsDedicationSentence/dedication,
%AcknowledgmentsDedicationSentence/sentence,
%AcknowledgmentsDedicationSentence/acknowledgements,
%chapters/einleitung,
%chapters/OLD/introduction,
%chapters/OLD/background,
%chapters/OLD/results,
%chapters/OLD/conclusion,
%}
%------------------------------------------------------------------------------
% document begins here
\begin{document}\selectlanguage{german}
%Zeilenabstand -> ausklammern bei viel Text
%\begin{onehalfspace}
%------------------------------------------------------------------------------
%titlepage
\include{titlepage/titlepage}
\cleardoublepage
\setcounter{page}{1}
\pagenumbering{roman}
%------------------------------------------------------------------------------
% abstract
\clearpage{\thispagestyle{empty}}
\include{abstract/abstract}
%------------------------------------------------------------------------------
% dedication, acknowledgments and quotes
%\include{AcknowledgmentsDedicationSentence/dedication}
%\clearpage{\thispagestyle{empty}}
%\include{AcknowledgmentsDedicationSentence/sentence}
%\clearpage{\thispagestyle{empty}}
%\include{AcknowledgmentsDedicationSentence/acknowledgements}
%\clearpage{\thispagestyle{empty}}
%------------------------------------------------------------------------------
% table of contents, list of figures and list of tables
\tableofcontents
\cleardoublepage
\vspace{3cm}
\listoffigures
\vspace{3cm}
%------------------------------------------------------------------------------
%body of thesis comes here
\pagenumbering{arabic}
\include{chapters/einleitung}
\include{chapters/framework}
\include{chapters/prototyp}
\include{chapters/ergebnis}
\include{chapters/ausblick}
\include{chapters/fazit}
%------------------------------------------------------------------------------
% references
\renewcommand{\bibname}{Referenzen}
%\addcontentsline{toc}{chapter}{Referenzen}
\bibliographystyle{alpha}
\nocite{*}
\bibliography{references/References_2}
%------------------------------------------------------------------------------
% appendices come here
\appendix
%\include{chapters/anexos_equipamentoexperimental_EN}
%\include{chapters/anexos_equipamentoexperimental_PT}
%------------------------------------------------------------------------------
%\end{onehalfspace}
\end{document}
%------------------------------------------------------------------------------
+3
View File
@@ -0,0 +1,3 @@
\chapter{Zusammenfassung und Ausblick}
\label{ch:zusammenfassung}
Zusammenfassung...
+13
View File
@@ -0,0 +1,13 @@
\chapter{Einleitung}
\textcolor{red}{Die vorliegende Arbeit beschäftigt sich mit der wachsenden E-Mail-Flut in den Postfächern der Studierenden und wie man diese reduzieren kann.}
Schon seit geraumer Zeit ist bekannt, dass das Versenden von Informationen über elektronische Post nicht nur Vorteile mit sich bringt. Wie der Spezialist für Gesundheitsprozessberatung in einem Bericht der Mitteldeutschen Zeitung erwähnt, \glqq macht es die stets wachsende E-Mail-Menge unmöglich sich vernünftig mit den Informationen zu befassen"([Ver13]). Nicht nur am Arbeitsplatz sondern auch in Hochschulen wird Gebrauch gemacht, weitere Empfänger oder sogar ganze Verteiler mit in die Kopie einer E-Mail zu integrieren. Um die Prioritäten der Informationen besser bilden zu können, sollen Studierende selbst entscheiden, welche Nachrichten relevant sind. Hierfür wird eine Social Media Plattform mit personalisierbarem Dashboard implementiert.
\section{Ausgangssituation}
Alle Informationen der Fakultät Elektrotechnik Feinwerktechnik Informationstechnik, kurz efi, werden über die globalen Verteiler des Hochschulinternen Postfaches versendet. Viele dieser Daten sind jedoch nur für eine geringe Schnittmenge der Empfänger relevant und lassen sich nur schwer priorisieren. Das ständig überlastete Postfach muss somit regelmä"sig gepflegt werden. Einen massiven Administrativen Aufwand bedeutet es, E-Mails zu filtern und nach persönlichem Ermessen zu verwalten.
Zudem leidet die Nachhaltigkeit der Informationen. Möchten die Empfänger ältere E-Mails abrufen, mussten diese meist schon entfernt werden um Platz für den neuen, eintreffenden E-Mail-Verkehr zu schaffen.
Diese Situation führt dazu, dass Empfänger die Informationen meist nicht lesen und sofort entfernen. Die Ersteller haben keinerlei Möglichkeiten zu überprüfen ob und wie viele Studierende und Dozenten eingehende Nachrichten öffnen und lesen.
\section{Ziel der Arbeit}
Ziel der Arbeit ist es, durch die Einbindung einer Social Media Plattform den Speicheraufwand des Hochschulpostfaches für Studierende der Efi-Fakultät zu reduzieren. Die Flut an E-Mails soll durch das Verwenden eines personalisierte Dashboard gedrosselt werden. Hierbei wird zunächst der Fokus auf die grundlegenden Funktionen der Website gelegt. Dazu gehört das Abonnieren, einpflegen von neuen und löschen von alten Nachrichten.
Zudem sollen die Autoren benachrichtigt werden, in welchem Umfang die hochgeladenen Informationen bereits abonniert und gelesen wurden.
@@ -0,0 +1,4 @@
\chapter{Ergebnis}
\label{ch:ergebnis}
\subsection{Evaluierung}
@@ -0,0 +1,144 @@
\chapter{Framework}
\label{ch:framework}
Um die Website-Erweiterung realisieren zu können, wird zunächst festgelegt welche Programmierschnittstellen verwendet werden. Im Web-Backend fällt die Wahl auf die objektorientierte Sprache Python, die ausschlie"slich Serverseitig anwendbar ist. Der Programmaufbau Pythons macht den Code leicht lesbar und der einfache Syntax ermöglicht einen strukturierte Implementierung der Website([Ndu17]). Die vielen abstrakten Datentypen, wie dynamische Arrays und Wörterbücher, sind gro"sflächig einsetzbar.
Ein entscheidender Vorteil hierbei ist das dazugehörige Framework Django, auf das im folgenden Kapitel genauer eingegangen wird.
\section{Django}
Django ist ein Web-Framework, das auf einer Model-View-Presenter (MVP) Architektur basiert. Ähnlich wie der Model-View-Controller sind die Interaktionen zwischen Model und View die Auswahl und Ausführung von Befehlen und das Auslösen von Ereignissen (vgl. Abbildung 2.1). Da die View aber hier bereits den Gro"steil des Controllers übernimmt, ist der MVP eine Überarbeitung. Der Teil, der Elemente des Modells auswählt, Operationen durchführt und alle Ereignisse kapselt, ergibt die Presenter-Klasse([She09]). Durch die direkte Bindung von Daten und View, geregelt durch den Presenter, wird die Codemenge der Applikation stark reduziert.
\begin{figure}[!h]
\centering
\includegraphics[width=0.5\textwidth]{figures/MVP}
\caption{Vereinfachter MVP}
\hfill
\end{figure}
Der Prozess vom Anfragen der URL über den Server, bis hin zur fertig gerenderten Website kann wie folgt vereinfacht darstellen. Der User gibt eine URL im Browser ein und sendet sie an den Web-Server.
Das Interface WSGI am Web-Server verbindet diesen mit dem Web-Framework, indem es den Request zum passenden Objekt weiterleitet. Hier wird der Applikation eine Callback-Funktion zur Verfügung gestellt [Kin17]. Au"serdem werden folgende Schritte durchgeführt:
\begin{itemize}
\item Die Middleware-Klassen aus der settings.py werden geladen
\item Die Methoden der Listen Request, View, Response und Excpetion werden geladen
\item Die angeforderte URL wird aufgelöst
\end{itemize}
Der WSGI-Handler fungiert also als Pförtner und Manager zwischen dem Web-Server und dem Django-Projekt.
Um die URL, wie weiter oben erwähnt, aufzulösen, benötigt WSGI einen urlresolver. Durch die explizite Zuweisung der vorhandenen Seiten, kann dieser über die regulären Ausdrücke der url.py-Datei iterieren. Gibt es eine Übereinstimmung, wird die damit verknüpfte Funktion in der View (view.py) aufgerufen. Hier ist die gesamte Logik der Website lokalisiert. Wie bereits erwähnt, ist es möglich unter Anderem auf die Datenbank der Applikation zuzugreifen und Eingaben des Users über eine Form zu verarbeiten. Nachdem werden die Informationen der View an das Template weitergereicht. Es handelt sich dabei um eine einfache HTML-Seite in der der strukturelle Aufbau im Frontend festgelegt wird. Die Informationen der View können hier zwischen doppelt-geschweiften Klammern eingebunden und, wenn nötig, mit einfachen Python-Befehlen angepasst werden. Nun kann das Template, die vom WSGI-Framework zur Verfügung gestellte Callback-Funktion befüllen und einen Response an den Web-Server schicken. Die fertige Seite ist beim Klienten im Browserfenster zum rendern bereit (vgl. Abbildung 2.2.).
\begin{figure}[!h]
\centering
\includegraphics[width=0.5\textwidth]{figures/request-response-cycle}
\caption{Request-Response-Kreislauf des Django Frameworks}
\hfill
\end{figure}
\subsection {Besonderheiten}
Das Django-Framework bringt einige Besonderheiten mit sich, die beim implementiern des Prototypen von Bedeutung sind. Diese werden im Folgenden beschrieben.
Die Administratoroberfläche ist eines der hilfreichsten Werkzeugen des gesamten Frameworks. Es stellt die Metadaten der Modelle aus dem Code visuell dar. Verifizierte Benutzer können die Daten nicht nur schnell erfassen, sondern diese auch editieren und verwalten. Das Recht, das Admin-Backend uneingeschränkt zu benutzen, ist dem sogenannten superuser vorenthalten. Dieser kann beim erstmaligen zuweisen nur über die Kommandozeile eingerichtet werden. Ist bereits ein superuser vorhanden, kann dieser im Admin-Backend weiteren Benutzern den gleichen Handlungsfreiraum einräumen. Zudem gibt es noch weitere Stufen der Zugangsberechtigungen, Staff- und Active-Status, die für eine breitere Gruppe von Benutzern geeignet ist.
Um die gestaffelten Zugangsberechtigungen auch auf der Website umsetzen zu können, stellt Django verschiedene Decorator zur Verfügung. Soll eine bestimmte Seite nur von eingeloggten Benutzern besucht werden dürfen, so importiert man die Decorator des, von Django zur Verfügung gestellten, Authentifizierungssystems mit
\\
\noindent\hspace*{10mm}%
from django.contrib.auth.decorators import login\_required
\\
Direkt über den Beginn der Funktion in view.py, oder auch single-view-function, wird zudem folgende Zeile ergänzt:
\\
\noindent\hspace*{10mm}%
\makeatletter @login\_required
\\
Natürlich lassen sich die Decoratoren auch für andere Zwecke vor Funktionen platzieren. Begrenzte Zugänge zu den Views können durch die Art der Anfrage realisiert werden. Der Benutzer muss also zum Beispiel durch GET auf eine Seite zugreifen wollen um Einsicht zu erhalten.
Benutzerdefinierte Decorator sind im Django-Framework möglich, darauf wird hier aber nicht weiter eingegangen.
\section{Erweiterungen}
Die Programmiersprache Python bringt viele hilfreiche Erweiterungen mit sich. Die im folgenden aufgeführten sind hauptsächlich für die Paketverwaltung der Applikation zuständig.
Wird ein neues Projekt gestartet, ist es üblich, verschiedensten Programme und Module dafür zu verwenden. Die Versionen dieser spielen hierbei eine entscheidende Rolle, um Konflikte zu vermeiden [Fou18]. Um diesem Problem vorzubeugen, wird eine virtuelle Umgebung implementiert. Diese besitzt einen eigenen Projektpfad, beinhaltet alle nötigen Pakete und Bibliotheken, und lässt sich nach dem Einrichten im Terminal benutzten. Die folgende Abbildung (2.3) zeigt das Erstellen eines neunen Ordners, das Erstellen der virtuellen Umgebung und den Aktivierungsbefehl. Ist der Name des Environment in Klammern am Anfang der Zeile, bedeutet das, diese ist jetzt aktiv.
\begin{figure}[!h]
\centering
\includegraphics[width=0.7\textwidth]{figures/virt-env-terminal}
\caption{Erstellen der virtuelle Umgebung im Terminal}
\hfill
\end{figure}
Die Umgebung ist jetzt bereit befüllt zu werden. Um die Pakete und Module kollisionsfrei zu installieren ist es empfehlenswert einen Package-Manager zu verwenden. Mit pip können diese installiert, geupdated und gelöscht werden. Au"serdem kann der Manager Abhängigkeiten, wenn nötig, überschreiben und optimieren. Falls ein, sich von der neuesten Version unterscheidendes, Programm installiert werden soll, so ist dies ebenso möglich.
Eine weitere hilfreiche Erweiterung ist pylint. Das Tool sucht nicht nur nach Fehlern im Code, sondern versucht diesen sauber und einheitlich zu gestalten. Hierbei wird auf den Code-Standard PEP-8 geprüft [Dix18]. Die folgende Liste zeigt eine Kurzfassung der wichtigsten Regeln:
\begin{itemize}
\item Einrückung, meist 4 Leerzeichen
\item Maximale Zeichenanzahl pro Zeile
\item Zwei Leerzeile zwischen Klassen und Funktionen
\item Eine Leerzeile zwischen Methoden innerhalb einer Klasse
\item Leerzeichen in Ausdrücke und Anweisungen vermeiden
\item Die Reihenfolge der Importe: Standartbibliotheken, Drittanbieterbibliotheken, Lokale Anwendungen
\item Konventionen der Namensgebung von Funktionen, Modulen usw.
\end{itemize}
Natürlich sind dies Vorgaben, die eingehalten werden können, aber nicht notwendig sind um den Code fertig kompilieren und ausgeben zu lassen.
Das ldap, Lightweight Directory Access Protocol, muss als Erweiterung in die hier bearbeitende Bachelor-Arbeit eingebunden werden. Dies ist ein Internetprotokoll, welches die Kommunikation mit dem Hochschulinternen Active Directory verwaltet. Es wird eingesetzt um Benutzer so schnell und effizient wie möglich durch eine bereits existierende Datenbank abzufragen und zu authentifizieren. Der Aufbau ist mit einem Baum zu vergleichen (vgl. Abbildung 2.4.). Die Wurzel besteht aus sehr allgemeinen Informationen, umso näher man den Blättern kommt, umso spezifischer werden diese. Ein Objekt in der Struktur wird durch einen einmaligen Namen identifiziert, der aus den gesamten hinterlegten Informationen besteht. Der Name für den in der Abbildung 2.4 dargestellten Baum wäre \glqq cn=John Doe, ou=People, dc=sun.com\grqq.
\begin{figure}[!h]
\centering
\includegraphics[width=0.5\textwidth]{figures/ldap-tree}
\caption{Beispiel eines LDAP-Trees}
\hfill
\end{figure}
\subsection {Taggable-Manager}
Django-taggit ist eine Erweiterung von Alex Gaynor, einem Entwickler aus Washingtion DC. Das Add-on ermöglicht das Verwenden von Tags die automatisch mit einem eindeutigen Slug versehen werden. Der darin enthaltene Taggable Manager verwendet Django's Contenttype Framework, welches per Default verwendet wird, um die Modelle der Applikation zu verfolgen und diese durch generische Beziehungen zu verknüpfen. Die Felder app\_label und model machen die Modelle eindeutig zuweisbar. Instanzen des Contenttypes präsentieren und speichern die Informationen und Erstellen automatisch neue Instanzen, wenn Modelle hinzugefügt werden. Zudem stehen Methoden zur Verfügung, die das Abrufen und Arbeiten mit Instanzen der einzelnen Modelle erleichtern.
Der Taggable-Manager ist jedoch nicht an das Contenttype-Framework gebunden ([Her16]). Durch die Verwendung eines echten Fremdschlüssels, kann zum Beispiel die Performance und Referenzgarantie verwirklicht werden. Dazu ist lediglich die Erstellung einer eigenen lookup-Tabelle notwendig, die die Entitäten zweier Tabellen direkt verlinkt, anstatt diese generische zu verbinden. Weiterführend können Modelle in einem benutzerdefinierten Modell vereint werden, sodass er Zugriff auf diese einheitlich geschieht. Außerdem ist es möglich Primary-Keys zu verwenden, die nicht aus ganzen Zahlen bestehen, sondern aus Buchstaben und Wörtern.
Um django-taggit zu installieren wird der folgende Befehl in die Kommandozeile eingefügt([Gay10]):
\\
\noindent\hspace*{10mm}%
\$ pip install django-taggit
\\
Im model.py wird das Feld tag neu erstellt und als Taggable Manager definiert.
Au"serdem muss taggit in der settings.py unter INSTALLED\_APPS ergänzt werden. Um dem Programm zu sagen, dass nun eine neue Liste der Datenbank hinzugefügt werden muss, werden folgende Befehle in die Kommandozeile eingefügt:
\\
\noindent\hspace*{10mm}%
\$ python3 manage.py makemigrations \\
\noindent\hspace*{10mm}%
\$ python3 manage.py migrate
\\
Im Admin-Backend kann nun geprüft werden, ob das neue Feld in die Datenbank integriert wurde. Neue Tags können in das Textfeld eingetragen werden. Der Parser verarbeitet jedes Wort, dass durch ein Komma oder ein Leerzeichen getrennt ist als ein Tag. Soll dieses jedoch aus mehreren Wörtern bestehen so müssen diese mit Anführungszeichen umfasst werden. Standardmäßig unterscheidet der Taggable Manager zwischen Groß- und Kleinschreibung, Tags sind also case sensitive. Ändern kann man das, indem der Boolean TAGGIT\_CASE\_INSENSITIVE in der settings.py auf True gestellt wird.
\section{Bootstrap}
Eine umfangreiche Website einheitlich zu gestalten ist oft sehr komplex und zeitaufwendig. Die Entwickler von Twitter haben deshalb, zunächst Firmenintern, an einem neuen Verwaltungswerkzeug gearbeitet, das mehrere Bibliotheken zusammenführen sollte. Sie merkten, das die neue Bibliothek, die daraus entstand, nicht nur auf Ihre eigene Website anwendbar, sondern so flexible ist, dass jede Art von Website davon profitieren könnte. 2011 entschieden Sie sich Bootstrap für die Öffentlichkeit frei zugänglich zu machen. Die Open-Source-Bibliothek, die auf GitHub abrufbar ist, wird seitdem von vielen interessierten Programmierern weiterentwickelt und ist somit stark gewachsen. Version 2.0 verfügt au"serdem über die Fähigkeit Websites responsive auf verschiedenste mobile Endgeräte anzupassen.
Das Bootstrap-Paket beinhaltet vorgefertigte Cascading Stylesheets, kurz CSS, die Farben, Schriftarten und viele weitere Stildefinitionen. Zudem befinden sich auch Erweiterungen des JavaScript-Frameworks jQuery in der Bibliothek, die weiterführende Funktionen beinhalten wie zum Beispiel Filter oder Dropdown-Menüs. Das Paket kann einfach eingebunden werden im head-tag einer HTML-Datei (vgl. Abbildung 2.3). Das bedeutet, dass Medie-Queries oder ähnliche Methoden nicht mehr nötig sind, nicht nur um eine Website mobilfähig zu machen, sondern auch kompatibel für die verschiedensten Browser.
\begin{figure}[!h]
\centering
\includegraphics[width=1\textwidth]{figures/bootstrap-head-tag}
\caption{Einbindung von Bootstrap in einer HTML-Datei}
\hfill
\end{figure}
Durch das Einbinden von Bootstrap in einer HTML-Datei werden einige Styles bereits automatisch auf die darin vorkommenden Tags, wie Links und Überschriften, angewandt. Dies ist jedoch nur ein sehr kleiner Teil den die Bibliothek zur Verfügung stellt. Möchte man Bootstrap umfangreich nutzen so lassen sich die Stildefinitionen mit Klassen oder ID's in diverse HTML-Tags eintragen (vlg. Abbildung 2.4.).
\begin{figure}[!h]
\centering
\includegraphics[width=1\textwidth]{figures/bootstrap-class-example}
\caption{Bootstrap-Klassen in HTML-Tag}
\hfill
\end{figure}
Möchte man bestimmte gestalterische Eigenschaften von Bootstrap überschreiben muss eine eigens verfasste CSS-Datei nach der Verlinkung von Bootstrap in die Website eingebunden werden. Der Parser liest die Datei von oben nach unten, Links nach Rechts. Liest dieser also zu erst die Bootstrap Bibliothek und speichert diese, so überschreiben die Styles die danach kommen, die bereits gelesenen Eingaben. Die Styles, die inline auf ein Tag angewendet werden sind somit die bestimmenden Eigenschaften. Natürlich sollten Stildefinitionen niemals inline eingepflegt werden, da dies zu einem sehr unübersichtlichen und wartungsintensiven Code führen.
@@ -0,0 +1,4 @@
This is BibTeX, Version 0.99dThe top-level auxiliary file: grundlagen.aux
I found no \bibdata command---while reading file grundlagen.aux
I found no \bibstyle command---while reading file grundlagen.aux
(There were 2 error messages)
@@ -0,0 +1,25 @@
\chapter{Prototyp}
\label{ch:prototyp}
Um zu beweisen, wie eine Spcial Media Plattform die Mail-Flut der Efi-Fakultät reduzieren kann, wird ein Prototyp implementiert.
\section{Organisation}
Grundlegender Aufbau der Website, Verwaltung der Daten evlt auf nochmal Taggable-Manager (ManyToMany) ...
\subsection{Verwaltung im Administrator-Backend}
Näher auf CustomUserModel eingehen, Diagramm erstellen und einbinden
\subsection{Berechtigung der User}
Welche Berechtigungen gibt es im Prototyp, welche werden vom Active Directory übernommen?
\section{Funktion}
Nötige Funktionen
\subsection{Abonnieren}
Tags als eingeloggter User abonnieren und verwalten Front-end und Admin-Backend?
\subsection{Filtern}
Tag-map? Filtern nach abonnierten Posts, alle Posts und Posts mit bestimmten Tags
\subsection{Benachrichtigung}
Mail-Benachrichtigung wöchentlich
Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

+104
View File
@@ -0,0 +1,104 @@
%-----------------------------------------------------------------
% INSERT 1 IMAGE
%-----------------------------------------------------------------
\begin{figure}[!ht]
\centering
\includegraphics[width=1\textwidth]{IMAGE_NAME}
\caption{IMAGE_CAPTION}\label{fig:IMAGE_LABEL}
\end{figure}
\FloatBarrier
%-----------------------------------------------------------------
% START PARAGRAPH WITH NO SPACE
%-----------------------------------------------------------------
\noindent
%-----------------------------------------------------------------
% INSERT 2 OR MORE IMAGES - SIDE BY SIDE
%-----------------------------------------------------------------
\begin{figure}[!ht]
\centering
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{IMAGE_NAME}
\caption{IMAGE_CAPTION}\label{fig:IMAGE_LABEL}
\end{subfigure}
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{IMAGE_NAME}
\caption{IMAGE_CAPTION}\label{fig:IMAGE_LABEL}
\end{subfigure}
\caption{GLOBAL_FIGURE_CAPTION}\label{fig:GLOBAL_FIGURE_LABEL}
\end{figure}
\FloatBarrier
%-----------------------------------------------------------------
% INSERT 2 OR MORE IMAGES - ONE BELOW OTHER
%-----------------------------------------------------------------
\begin{figure}[!ht]
\centering
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{IMAGE_NAME}
\caption{IMAGE_CAPTION}\label{fig:IMAGE_LABEL}
\end{subfigure}
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{IMAGE_NAME}
\caption{IMAGE_CAPTION}\label{fig:IMAGE_LABEL}
\end{subfigure}
\caption{GLOBAL_FIGURE_CAPTION}\label{fig:GLOBAL_FIGURE_LABEL}
\end{figure}
\FloatBarrier
%-----------------------------------------------------------------
% INSERT TABLE
%-----------------------------------------------------------------
\begin{table}[!ht]
\caption {Mesh Parameters}\label{tab:meshpara}
\centering
\begin{tabular}{ccccc}
\hline \hline
Element Type & Elements & Nodes & Degrees of Freedom \\
\hline
Shell181 & 8000 & 8241 & 49206 \\
\hline \hline
\end{tabular}
\end{table}
\FloatBarrier
%-----------------------------------------------------------------
% INSER (ANOTHER) TABLE
%-----------------------------------------------------------------
\begin{table}[!ht]
\caption {Mesh Parameters}\label{tab:meshpara}
\centering
\begin{tabular}{ccccc}
\toprule
Element Type & Elements & Nodes & Degrees of Freedom \\
\midrule
Shell181 & 8000 & 8241 & 49206 \\
\bottomrule
\end{tabular}
\end{table}
\FloatBarrier
%-----------------------------------------------------------------
% INSERT EQUATION
%-----------------------------------------------------------------
\begin{equation}\label{eq:EQUATION_NAME}
EQUATION FORMULA
\end{equation}
%-----------------------------------------------------------------
% REFERENCES
%-----------------------------------------------------------------
\cite{REFERENCE_HERE} - reference documents
\eqref{EQUATION_HERE} - reference equations
\ref{fig:...} - reference images, tables, sections, chapters
$ EQUATION HERE $ - reference equations in the text OR insert numbers in the text
+302
View File
@@ -0,0 +1,302 @@
%%
%% This is file `mcode.sty'
%%
%% It is supposed to help you easily include MATLAB source code
%% into LaTeX document, but have it nicely highlighted, using
%% the great listings package.
%%
%% PLEASE NOTE that this package does nothing but save you from
%% figuring out some configurations in setting up the LISTINGS
%% package. ALL the work is done by that package! Thus, please
%% refer your questions to the listings package documentation.
%%
%% Usage: You have three ways of including your MATLAB code. As
%% environment, as inline object and directly from an external
%% file.
%%
%% 1) Environment:
%%
%% \begin{lstlisting}
%% YOUR CODE HERE
%% \end{lstlisting}
%%
%%
%% 2) Inline object*:
%%
%% Bla bla \mcode{CODEFRAGMENT} bla bla.
%%
%%
%% 3) Include external file (in environment form)
%%
%% \lstinputlisting{YOUR-FILE.m}
%%
%%
%% For your convenience this package has the following options:
%%
%% - bw if you intend to print the document (highlighting done
%% via text formatting (bold, italic) and shades of gray)
%%
%% - numbered if you want line numbers
%%
%% - autolinebreaks if you want the package to automatically
%% wrap your code. This is buggy as it may well break
%% break syntax and it doesn't work well with comments.
%% You REALLY should wrap your code manually.
%%
%% - useliterate if you want some characters / relations in
%% your code to be replace with something more readable.
%% Example: ~= becomes $\neq$, >= becomes $\geq$, delta
%% becomes $\delta$ and so on.
%%
%% - framed if you want a frame around the source code blocks
%%
%% - final if you have ``gloablly'' set the draft option, the
%% listings package will not output the code at all. to
%% force it to do so anyway, load this package with the
%% final option (passes the ``final'' on to listings).
%%
%% For example, you may use \usepackage[numbered,framed]{mcode}
%% in your document preamble.
%%
%% * If you want to place some inline code in a footnote, use
%% \mcodefn{} instead (this will reduce the font size a bit).
%%
%% Note: Inside code blocks you can escape to LaTeX text mode
%% using §...§. For ex. §text and some math: $x^2$§, which is
%% especially useful in comments for putting nicely typeset
%% equations etc. To get the same colour/style as in the rest
%% of the comment use \mcommentfont, i.e. §\mcommentfont $x^2$§
%%
%% To change the font used, edit the first line in the "custo-
%% mise below" section. And feel free to edit other things as
%% well. Refer to the documentation of the listings package to
%% see what else you could do. If an extra small font is re-
%% quired, use {\fontfamily{pcr}\fontsize{3}{4.6}\selectfont}
%% in the definition of \lstbasicfont.
%%
%% Author:
%% Florian Knorn | florian@knorn.org | www.florian-knorn.com
%%
%% Version history:
%% 2.7 -- Bugfixes + keywords (thanks Hildo Guillardi Jr.)
%% 2.6 -- Add support for µ, fix for math-minus problem
%% 2.5 -- Renamed internal variables (thx S. Kranenbarg!)
%% 2.4 -- Added \mcodefn{} command (thx Tony Almeida!)
%% 2.3 -- More keywords (thx Dominik Wild!)
%% 2.2 -- Bugfix (thx Willi Gerbig!)
%% 2.1 -- Finally automatic detection between end and end
%% 2.0 -- New options for line breaking and literate prog.
%% 1.8 -- Fixed typo in documentation regarding §...§
%% 1.7 -- Added MATLAB block comment syntax %{ ...... %}
%% 1.6 -- Added some infos, dealing with keyword ``end''
%% 1.5 -- Tweaked check to see wether textcomp is loaded
%% 1.4 -- Fixed misconfig (mathescape now set to false)
%% 1.3 -- Purely cosmetic (tabs replaced by spaces)
%% 1.2 -- Added \lstset{showstringspaces=false}
%% 1.1 -- Added \mcode command and [final] option
%% 1.0 -- Release
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% D O N ' T T O U C H T H I S %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\fileversion{2.7}
\def\filedate{2015/11/11}
\typeout{-- Package: `mcode' \fileversion\space <\filedate> --}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mcode}[\filedate\space\fileversion]
% for bw-option
\newif\ifmcode@bw
\DeclareOption{bw}{\mcode@bwtrue}
% numbered option
\newif\ifmcode@numbered
\DeclareOption{numbered}{\mcode@numberedtrue}
% final option
\newif\ifmcode@final
\DeclareOption{final}{\mcode@finaltrue}
% autolinebreaks option
\newif\ifmcode@autolinebreaks
\DeclareOption{autolinebreaks}{\mcode@autolinebreakstrue}
% literate programming (replace certain characters/relations
\newif\ifmcode@useliterate
\DeclareOption{useliterate}{\mcode@useliteratetrue}
% framed option
\newif\ifmcode@framed
\DeclareOption{framed}{\mcode@framedtrue}
\DeclareOption*{% default
\PackageWarning{mcode}{Unknown option `\CurrentOption' !}%
}
\ProcessOptions
\ifmcode@bw\typeout{ - settings optimized for printing (bw formating)}
\else\typeout{ - settings optimized for display (colour formating)}\fi
\ifmcode@numbered\typeout{ - line numbering enabled}\else\fi
\ifmcode@useliterate\typeout{ - literate programming (character replacements) enabled}\else\fi
\ifmcode@autolinebreaks\typeout{ - automatic line breaking enabled (careful, buggy!)}\else\fi
\ifmcode@framed\typeout{ - framed listings}\else\fi
% This command allows you to typeset syntax highlighted Matlab
% code ``inline''. The font size \small seems to look best...
\newcommand{\mcode}[1]{\lstinline[basicstyle=\lstbasicfont\small]|#1|}
% Same, but for footnotes
\newcommand{\mcodefn}[1]{\lstinline[basicstyle=\lstbasicfont\footnotesize]|#1|}
% check if color command exists
\ifx\color\undefined%
\RequirePackage{xcolor}%
\fi
% check if listings has been loaded
\ifx\lstset\undefined%
\ifmcode@final
\RequirePackage[final]{listings}
\else
\RequirePackage{listings}
\fi
\fi
% Check if textcomp has been loaded (this package is needed for
% upright quotes '' (instead of typographic ones `´)...
\ifx\textquotesingle\undefined%
\RequirePackage{textcomp}%
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% C U S T O M I S E B E L O W %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ---------------------------------------------------------------------------------
% default font
\def\lstbasicfont{\fontfamily{pcr}\selectfont\footnotesize}
% ---------------------------------------------------------------------------------
% matlat languate definition
\lstdefinelanguage{matlabfloz}{%
alsoletter={...},%
morekeywords={% % keywords
break,case,catch,classdef,continue,else,
elseif,end,for,function,global,if,
otherwise,parfor,persistent,
return,spmd,switch,try,while,...}, % Use the matlab "iskeyword" command to get those
comment=[l]\%, % comments
morecomment=[l]..., % comments
morecomment=[s]{\%\{}{\%\}}, % block comments
morestring=[m]' % strings
}[keywords,comments,strings]%
% ---------------------------------------------------------------------------------
% general definitions
\lstset{%
basicstyle={\lstbasicfont}, % set font
showstringspaces=false, % do not emphasize spaces in strings
tabsize=4, % number of spaces of a TAB
mathescape=false,escapechar=§, % escape to latex with §...§
upquote=true, % upright quotes
aboveskip={1.5\baselineskip}, % a bit of space above listings
columns=fixed % nice spacing
}
% ---------------------------------------------------------------------------------
% define colours and styles
\ifmcode@bw % use font formating and gray 'colors'
\def\mcommentfont{\color[gray]{.75}\itshape} %comments light gray and italic
\lstset{language=matlabfloz, % use our version of highlighting
keywordstyle=\bfseries, % keywords in bold
commentstyle=\mcommentfont, % comments
stringstyle=\color[gray]{0.5} % strings darker gray
}
\else% notbw => use colors : )
\def\mcommentfont{\color[rgb]{.133,.545,.133}} %comments in green
\lstset{language=matlabfloz, % use our version of highlighting
keywordstyle=\color[rgb]{0,0,1}, % keywords in blue
commentstyle=\mcommentfont, % comments
stringstyle=\color[rgb]{.627,.126,.941} % strings in purple
}
\fi%bw
% ---------------------------------------------------------------------------------
% automatic line breaking --- warning, this is buggy and
% doesn't break comments correctly!
\ifmcode@autolinebreaks
\newsavebox{\lbreakdots}\sbox{\lbreakdots}{\lstbasicfont\mcommentfont...}
\lstset{breaklines=true,breakatwhitespace=true,prebreak=\usebox{\lbreakdots}}
\fi
% ---------------------------------------------------------------------------------
% literate replacements
% the following is for replacing some matlab relations like >= or ~=
% by the corresponding LaTeX symbols, which are much easier to read ...
\ifmcode@useliterate
\lstset{%
literate=%
{~}{{$\neg$}}1 % \neg, logical not
{<=}{{\tiny$\leq$}}1 % \leq
{>=}{{\tiny$\geq$}}1 % \geq
{~=}{{\tiny$\neq$}}1 % \neq, not equal
{delta}{{\tiny$\Delta$}}1 % \Delta
{µ}{{$\mu$}}1 % \mu
{(end)}{\lstbasicfont (end)}{5} % black ``end'' when indexing last vector element
{({ }end)}{\lstbasicfont ({ }end)}{6}
{(end{ })}{\lstbasicfont (end{ })}{6}
{({ }end{ })}{\lstbasicfont ({ }end{ })}{7}
{:end}{\lstbasicfont :end}{4}
{:{ }end}{\lstbasicfont :{ }end}{5}
{end:}{\lstbasicfont end:}{4}
{end{ }:}{\lstbasicfont end{ }:}{5}
{,end}{\lstbasicfont ,end}{4}
{,{ }end}{\lstbasicfont ,{ }end}{5}
}
\else
\lstset{%
literate=%
{(end)}{\lstbasicfont (end)}{5} % black ``end'' when indexing last vector element
{({ }end)}{\lstbasicfont ({ }end)}{6}
{(end{ })}{\lstbasicfont (end{ })}{6}
{({ }end{ })}{\lstbasicfont ({ }end{ })}{7}
{:end}{\lstbasicfont :end}{4}
{:{ }end}{\lstbasicfont :{ }end}{5}
{end:}{\lstbasicfont end:}{4}
{end{ }:}{\lstbasicfont end{ }:}{5}
{,end}{\lstbasicfont ,end}{4}
{,{ }end}{\lstbasicfont ,{ }end}{5}
{µ}{$\mu$}1
{~}{{\fontfamily{ptm}\selectfont\texttildelow}}1 % get a nicer tilde character
}
\fi%literates
% ---------------------------------------------------------------------------------
% line numbering
\ifmcode@numbered% numbered option
\lstset{%
numbersep=3mm, numbers=left, numberstyle=\tiny, % number style
}
\fi
\ifmcode@framed% framed option
\lstset{%
frame=single,rulecolor=\color{black} % frame
}
\ifmcode@numbered%
\lstset{%
framexleftmargin=6mm, xleftmargin=6mm % tweak margins
}
\fi
\fi
% fix for ``minus'' character issue, as suggested by Stefan Karlsson, thanks!
\makeatletter
\lst@CCPutMacro\lst@ProcessOther {"2D}{\lst@ttfamily{-{}}{-{}}}
\@empty\z@\@empty
\makeatother
\endinput
%% End of file `mcode.sty'.
@@ -0,0 +1,91 @@
%------------------------------------------------------------------------------
%geometry
\usepackage[a4paper,inner=2cm,outer=4cm,top=3cm,bottom=3cm]{geometry}
\renewcommand{\topfraction}{.85}
\renewcommand{\bottomfraction}{.85}
%load packages-----------------------------------------------------------------
\usepackage[T1]{fontenc}
\usepackage{ae}
\usepackage[utf8]{inputenc}
\usepackage{scrextend}
\usepackage{enumerate}
\usepackage[shortlabels]{enumitem}
\usepackage[english,german]{babel}
\usepackage{float}
\usepackage[onehalfspacing]{setspace}
\usepackage{textcomp}
%Abkürzungsverzeichnis
\usepackage[printonlyused]{acronym}
%------------------------------------------------------------------------------
\usepackage{amssymb}
\usepackage{amsmath}
%------------------------------------------------------------------------------
% appendix: matlab codes
\usepackage[autolinebreaks]{mcode}
%------------------------------------------------------------------------------
%packages for graphics
\usepackage[]{graphicx}
\usepackage[labelfont=bf,textfont=md,labelsep=period]{caption}
\usepackage{subcaption}
\usepackage{epstopdf}
\usepackage{flafter}
\usepackage{placeins}
\usepackage{listings}
%------------------------------------------------------------------------------
% Package for creating the landscape table
\usepackage{rotating}
\usepackage{multirow} % create multirow tables
%------------------------------------------------------------------------------
\usepackage{notoccite}
%------------------------------------------------------------------------------
\usepackage[nottoc]{tocbibind}
%------------------------------------------------------------------------------
\usepackage{titlesec}
%------------------------------------------------------------------------------
\usepackage{comment}
%------------------------------------------------------------------------------
\usepackage{color}
\definecolor{myblue}{rgb}{0.08,0.17,0.55}
%------------------------------------------------------------------------------
\usepackage[colorlinks=true, citecolor=red, linkcolor=blue]{hyperref}
% REMOVE THE COMMENT WHEN PRINTING
%\hypersetup{hidelinks=true}
%------------------------------------------------------------------------------
%\usepackage[square,authoryear,sort&compress,semicolon]{natbib}
\usepackage[square,numbers,sort&compress,semicolon]{natbib}
%------------------------------------------------------------------------------
% tables(toprule/midrule/bottomrule)
\usepackage{siunitx,booktabs}
% Footnotes/Headings-----------------------------------------------------------
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0.2mm} \renewcommand{\footrulewidth}{0mm}
\renewcommand{\chaptermark}[1]%
{\markboth{{ \thechapter.\ #1}}{}}
\renewcommand{\sectionmark}[1]%
{\markright{{ \thesection.\ #1}}}
\fancyhead{}
\fancyhead[RO]{\rightmark}
\fancyhead[LE]{\leftmark}
\fancyfoot{}
\fancyfoot[CE,CO]{\thepage}
% Endfootnotes/headings
% ChapterFormat----------------------------------------------------------------
%\newcommand\blankpage{%
%\null
%\thispagestyle{empty}%
%\addtocounter{page}{-1}%
%\newpage}
\titleformat{\chapter}[display]
{\bfseries\Large}
{\filleft\Large\chaptertitlename~\thechapter}
{3ex}
{\titlerule\vspace{1.5ex}\filright}
[\vspace{1ex}\titlerule]
% EndChapterFormat
\providecommand{\opj}{\mathrm{j}} \providecommand{\ope}{\mathrm{e}}
\providecommand{\dif}{\mathrm{d}} \providecommand{\opT}{\mathrm{T}}
\renewcommand{\vec}[1]{\mbox{\boldmath$#1$}}
% end--------------------------------------------------------------------------
@@ -0,0 +1,106 @@
@article{Singh1996739,
title = "Composite shaft rotordynamic analysis using a layerwise theory",
journal = "Journal of Sound and Vibration ",
volume = "191",
number = "5",
pages = "739 - 756",
year = "1996",
doi = "http://dx.doi.org/10.1006/jsvi.1996.0153",
url = "http://www.sciencedirect.com/science/article/pii/S0022460X96901534",
author = "S.P. Singh and K. Gupta"
}
@article{Gubran2005231,
title = "The effect of stacking sequence and coupling mechanisms on the natural frequencies of composite shafts ",
journal = "Journal of Sound and Vibration ",
volume = "282",
number = "1-2",
pages = "231 - 248",
year = "2005",
doi = "http://dx.doi.org/10.1016/j.jsv.2004.02.022",
url = "http://www.sciencedirect.com/science/article/pii/S0022460X04001853",
author = "H.B.H. Gubran and K. Gupta"
}
@article{Chang2004637,
title = "A simple spinning laminated composite shaft model ",
journal = "International Journal of Solids and Structures ",
volume = "41",
number = "3-4",
pages = "637 - 662",
year = "2004",
doi = "http://dx.doi.org/10.1016/j.ijsolstr.2003.09.043",
url = "http://www.sciencedirect.com/science/article/pii/S0020768303005559",
author = "Min-Yung Chang and Jeng-Keag Chen and Chih-Yung Chang"
}
@article{Sino2008337,
title = "Dynamic analysis of a rotating composite shaft ",
journal = "Composites Science and Technology ",
volume = "68",
number = "2",
pages = "337 - 345",
year = "2008",
doi = "http://dx.doi.org/10.1016/j.compscitech.2007.06.019",
url = "http://www.sciencedirect.com/science/article/pii/S0266353807002680",
author = "R. Sino and T.N. Baranger and E. Chatelet and G. Jacquet"
}
@article{jdr:jva,
title = "Shaft Finite Elements for Rotor Dynamics Analysis",
journal = "ASME, Journal of Vibration and Acoustics",
volume = "113",
number = " ",
pages = "482-493",
year = "1991",
doi = " ",
url = " ",
author = "T.C. Gmuer and J.F.D. Rodrigues"
}
@article{Chen1998253,
title = "The stability behavior of rotating composite shafts under axial compressive loads ",
journal = "Composite Structures ",
volume = "41",
number = "3-4",
pages = "253 - 263",
year = "1998",
doi = "http://dx.doi.org/10.1016/S0263-8223(98)00022-1",
url = "http://www.sciencedirect.com/science/article/pii/S0263822398000221",
author = "Lien-Wen Chen and Wen-Kung Peng"
}
@article{Chang200421,
title = "Vibration analysis of rotating composite shafts containing randomly oriented reinforcements ",
journal = "Composite Structures ",
volume = "63",
number = "1",
pages = "21 - 32",
year = "2004",
doi = "http://dx.doi.org/10.1016/S0263-8223(03)00121-1",
url = "http://www.sciencedirect.com/science/article/pii/S0263822303001211",
author = "Chih-Yung Chang and Min-Yung Chang and Jin H. Huang"
}
@manual{jdr_2016,
title = {Apontamentos de Vibrações de Sistemas Mecânicos},
author = {Dias Rodrigues, J.},
organization = {Faculdade de Engenharia da U.PORTO},
address = {PORTO},
edition = {2016},
year = {2016}
}
@article{Kinkaid2003105,
title = "Automotive disc brake squeal ",
journal = "Journal of Sound and Vibration ",
volume = "267",
number = "1",
pages = "105 - 166",
year = "2003",
note = "",
issn = "0022-460X",
doi = "http://dx.doi.org/10.1016/S0022-460X(02)01573-0",
url = "http://www.sciencedirect.com/science/article/pii/S0022460X02015730",
author = "N.M. Kinkaid and O.M. O'Reilly and P. Papadopoulos"
}
@@ -0,0 +1,55 @@
@article{Leipner,
author = "Ingo Leipner",
title = "Stress für Beschäftigte: Wie kann man die E-Mail-Flut bekämpfen",
year = "2013",
note = "http://www.mz-web.de/wirtschaft/e-mail-flut-mails-bearbeiten-kommunikation-stress-zeit-sparen"
}
@article{Ndukwe,
author = "Nnenna Ndukwe",
title = "Python is the back-end programming language of the future and here’s why",
year = "2017",
note = "https://medium.com/@nnennahacks/https-medium-com-nnennandukwe-python-is-the-back-end-programming-language-of-the-future-heres-why"
}
@article{Shelest,
author = "Alexy Shelest",
title = "Model View Controller, Model View Presenter, and Model View ViewModel Design Patterns",
year = "2009",
note = "https://www.codeproject.com/Articles/42830/Model-View-Controller-Model-View-Presenter-and-Mod"
}
@article{Gaynor,
author = "Alex Gaynor",
title = "Exploring Django-Taggit’s Data Model",
year = "2010",
note = "https://django-taggit.readthedocs.io/en/latest/getting\_started"
}
@article{Herzog,
author = "Stephan Herzog",
title = "Model View Controller, Model View Presenter, and Model View ViewModel Design Patterns",
year = "2016",
note = "https://medium.com/sthzg/a-short-exploration-of-django-taggit-bb869ea5051f"
}
@article{King,
author = "Adam King",
title = "Django Middlewares and the Request/Response Cycle",
year = "2017",
note = "https://medium.com/zeitcode/django-middlewares-and-the-request-response-cycle-fcbf8efb903f"
}
@article{Python,
author = "Python Software Foundation",
title = "Virtual Environments and Packages",
year = "2018",
note = "https://docs.python.org/3/tutorial/venv.html"
}
@article{Dixit,
author = "Chitrank Dixit",
title = "PEP-8 Tutorial: Code Standards in Python",
year = "2018",
note = "https://www.datacamp.com/community/tutorials/pep8-tutorial-python-code"
}
+9
View File
@@ -0,0 +1,9 @@
\addcontentsline{toc}{chapter}{Zusammenfassung}
\chapter*{Zusammenfassung}
Die vorliegende Bachelorarbeit befasst sich mit....
\vspace{\fill}
\noindent \textbf{Schlüsselwörter}: blablabla, Georg Simon Ohm, Wirtschaftsinformatik
+10
View File
@@ -0,0 +1,10 @@
\addcontentsline{toc}{chapter}{Zusammenfassung}
\chapter*{Zusammenfassung}
English...
\vspace{\fill}
+86
View File
@@ -0,0 +1,86 @@
\begin{titlepage}
%------------------------------------------------------------------------------
\begin{center}
\begin{figure}[!h]
\includegraphics[width=0.7\textwidth]{figures/Ohm_logo}
\hfill
\end{figure}
\vspace{12mm}
\thispagestyle{empty}
\setlength{\unitlength}{15cm}
\line(1,0){1}\\
\vspace{0.4cm}
{\LARGE\textbf{\LARGE Entwicklung einer internen Social Media Plattform mit personalisierbarem Dashboard für Studierende}}
\setlength{\unitlength}{15cm}
\line(1,0){1}\\
\vspace{2.0cm}
\textbf{\huge{Esther Kleinhenz}}\\
\vspace{0.4cm}
{\Large \textbf{Matrikelnummer: }2649270}\\
\vspace{2.5cm}
{\LARGE \textbf{Bachelorarbeit}}\\
%\vspace{0.3cm}
{zur Erlangung des akademischen Grades}\\
\vspace{0.5cm}
\textbf{\Large Bachelor of Engineering}\\
{\large Media Engineering}\\
\vspace{2.5cm}
{\Large \textbf{Erstprüfer: }Prof. Dr. Oliver Hofmann}\\
{\Large \textbf{Zweitprüfer: }Prof. Dr. Matthias Hopf}\\
%\vspace{2.0cm}
%{Co-Advisor:}\\
%{Name}\\
%\vspace{2.0cm}
%{Laborat\'orio de Vibra\c{c}\~oes de Sistemas Mec%\^anicos}\\
%{Departamento de Engenharia Mec\^anica }\\
%{Faculdade de Engenharia da Universidade do Porto}\\
%\vspace{1.2cm}
\vspace{\fill}
Nürnberg, {\today}\\
\end{center}
\newpage
\thispagestyle{empty}
\setlength{\unitlength}{15cm}
\line(1,0){1}\\
%\indent Diese Dissertation wurde\\
%\indent Studiengang Wirtschaftsinformatik\\
%\indent Fakultät Informatik\\
%\indent Technischen Hochschule Nürnberg\\
%\indent Georg Simon Ohm \\
%\indent Nürnberg, Deutschland\\
%\indent verfasst.
%\vspace{1.5cm}
\indent Hiermit erkläre ich, dass die vorliegende Arbeit von mir selbständig verfasst und nicht\\
\indent anderweitig für Prüfungszwecke vorgelegt wurde, keine anderen als die angegebenen\\
\indent Quellen oder Hilfsmittel benutzt sowie wörtliche oder sinngemäße Zitate als solche\\
\indent gekennzeichnet wurden.
\vspace{0.5cm}
\begin{flushright}
Nürnberg, \today
\end{flushright}
\vspace{1.0cm}
\indent Katja Cornelia Hader \\
\indent E-mail: {haderka56442@th-nuernberg.de}
\vspace{\fill}
\indent Studiengang Wirtschaftsinformatik\\
\indent Georg Simon Ohm\\
\indent Technische Hochschule Nürnberg\\
\indent Keßlerplatz 12\\
\indent 90489 Nürnberg\\
\indent Deutschland
\end{titlepage}
%------------------------------------------------------------------------------
Loaded 100 of 4369 files, more files were not shown because too many files have changed in this diff. Show more