Merge branch 'master' of git.qabel.de:Qabel/schickmacher

This commit is contained in:
Niklas rust 2019-10-22 13:56:45 +02:00
commit 220057750b
11 changed files with 274 additions and 48 deletions

1
.gitignore vendored
View file

@ -183,6 +183,7 @@ typings/
# Gradle: # Gradle:
.idea/**/gradle.xml .idea/**/gradle.xml
.idea/**/libraries .idea/**/libraries
.idea/
# CMake # CMake
cmake-build-debug/ cmake-build-debug/

View file

@ -275,19 +275,12 @@ COMPRESS_PRECOMPILERS = (
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
MARKDOWNX_MARKDOWN_EXTENSIONS = [ MARKDOWNX_MARKDOWN_EXTENSIONS = [
'markdown.extensions.extra', 'markdown.extensions.extra',
'markdown.extensions.abbr',
'markdown.extensions.attr_list',
'markdown.extensions.def_list',
'markdown.extensions.fenced_code',
'markdown.extensions.footnotes',
'markdown.extensions.tables',
'markdown.extensions.admonition', 'markdown.extensions.admonition',
'markdown.extensions.codehilite', 'markdown.extensions.codehilite',
'markdown.extensions.meta', 'markdown.extensions.meta',
'markdown.extensions.nl2br',
'markdown.extensions.sane_lists',
'markdown.extensions.smarty', 'markdown.extensions.smarty',
'markdown.extensions.toc', 'markdown.extensions.toc',
'markdown.extensions.wikilinks', 'markdown.extensions.wikilinks',
'mdx_truly_sane_lists',
] ]

View file

@ -20,7 +20,8 @@ djangorestframework==3.10.2 # https://github.com/encode/django-rest-framework
coreapi==2.3.3 # https://github.com/core-api/python-client coreapi==2.3.3 # https://github.com/core-api/python-client
django-markdownx==2.0.28 django-markdownx==2.0.28
WeasyPrint==49 mdx_truly_sane_lists==1.2
WeasyPrint==50
django-weasyprint==0.5.4 django-weasyprint==0.5.4
whitenoise==4.1.3 whitenoise==4.1.3
Pygments==2.4.2 Pygments==2.4.2

View file

@ -6,6 +6,7 @@ from markdownx.fields import MarkdownxFormField
class RendererForm(forms.Form): class RendererForm(forms.Form):
title = forms.CharField(label=_('Title'), required=False) title = forms.CharField(label=_('Title'), required=False)
show_title = forms.BooleanField(label=_('Show Title'), required=False)
date = forms.DateField(label=_('Date'), date = forms.DateField(label=_('Date'),
initial=lambda: timezone.now().strftime('%Y-%m-%d'), initial=lambda: timezone.now().strftime('%Y-%m-%d'),
widget=forms.TextInput( widget=forms.TextInput(
@ -14,3 +15,7 @@ class RendererForm(forms.Form):
render_content = MarkdownxFormField( render_content = MarkdownxFormField(
label=_('Content'), label=_('Content'),
) )
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['show_title'].initial = True

View file

@ -24,3 +24,23 @@ class TestRendererFormView:
assert b'Example' in response.content assert b'Example' in response.content
assert response.content.startswith(b'%PDF') assert response.content.startswith(b'%PDF')
def test_html_render(self, client: Client):
response = client.post('/renderer/renderhtml', data={
'title': 'Sample Title',
'date': '2009-11-15',
'render_content': '# Example',
'show_title': 'on',
})
assert b'Sample Title' in response.content
assert b'<h1>Sample Title</h1>' in response.content
assert b'Example' in response.content
def test_hiding_title(self, client: Client):
response = client.post('/renderer/renderhtml', data={
'title': 'Sample Title',
'date': '2009-11-15',
'render_content': '# Example'
})
assert b'Sample Title' in response.content
assert b'<h1>Sample Title</h1>' not in response.content
assert b'Example' in response.content

View file

@ -21,6 +21,7 @@ class HtmlRenderView(TemplateView):
if form.is_valid(): if form.is_valid():
return { return {
'date': form.cleaned_data['date'], 'date': form.cleaned_data['date'],
'show_title': form.cleaned_data['show_title'],
'content': markdownify(form.cleaned_data['render_content']), 'content': markdownify(form.cleaned_data['render_content']),
'title': form.cleaned_data['title'] 'title': form.cleaned_data['title']
} }

View file

@ -3,7 +3,7 @@
// project specific CSS goes here // project specific CSS goes here
//////////////////////////////// ////////////////////////////////
//Variables// //Variables//
//////////////////////////////// ////////////////////////////////
// Alert colors // Alert colors
@ -16,7 +16,7 @@ $dark-pink: #eed3d7;
$red: #b94a48; $red: #b94a48;
//////////////////////////////// ////////////////////////////////
//Alerts// //Alerts//
//////////////////////////////// ////////////////////////////////
// bootstrap alert CSS, translated to the django-standard levels of // bootstrap alert CSS, translated to the django-standard levels of
@ -34,6 +34,16 @@ $red: #b94a48;
color: $red; color: $red;
} }
.markdownx {
display: flex;
column-gap: 2.5em;
}
.markdownx-editor {
width: 50%;
}
.markdownx-preview { .markdownx-preview {
width: 50%;
@import 'render'; @import 'render';
} }

View file

@ -14,6 +14,7 @@
@bottom-center { @bottom-center {
content: 'qabel.de'; content: 'qabel.de';
font-weight: bold; font-weight: bold;
color: $orange;
} }
@top-center { @top-center {
@ -32,13 +33,15 @@
z-index: 10; z-index: 10;
color:white; color:white;
white-space: nowrap; white-space: nowrap;
//font-size: 1.4em;
/*content filled in template*/ /*content filled in template*/
} }
@top-left { @top-left {
z-index: 10; z-index: 10;
white-space: nowrap; width: 75%;
color:white; color:white;;
font-size: 1.4em;
padding-left: 50pt; padding-left: 50pt;
/*content filled in template*/ /*content filled in template*/
} }
@ -115,24 +118,14 @@ hr{
border-top: 1px solid black; border-top: 1px solid black;
} }
/* table {
ul { width: 100%;
list-style: none; border-collapse:collapse;
}
> li:before { tr:nth-child(even) {
content: ""; background-color: #f2f2f2
border-color: transparent $orange; }
border-style: solid;
border-width: 0.35em 0 0.35em 0.6em;
margin-top: -0.7em;
display: block;
height: 0;
width: 0;
left: -1em;
top: 1em;
position: relative;
}
}*/
ul { ul {
list-style: none; list-style: none;

View file

@ -17,7 +17,5 @@
{% csrf_token %} {% csrf_token %}
{{ form|crispy }} {{ form|crispy }}
</form> </form>
<div class="preview">
{{ form.media }} {{ form.media }}
</div>
{% endblock %} {% endblock %}

View file

@ -25,9 +25,11 @@
<body> <body>
<div class="container"> <div class="container">
{% if show_title %}
<div class="header"> <div class="header">
<h1>{{ title }}</h1> <h1>{{ title }}</h1>
</div> </div>
{% endif %}
<div class="document"> <div class="document">
{{ content | safe }} {{ content | safe }}
</div> </div>

234
test.md
View file

@ -1,3 +1,167 @@
# Lead Developer
- Jahrgang: 1988
- Ausbildung: Bachelor of Science Informatik, Leibniz Universität Hannover
## Fachkenntnisse
### Softwareentwicklung
#### Kernkompetenzen
- Agile Development, Test-Driven-Development
- Reactive Design, Microservices
- Clean Architecture, Domain Driven Development
- OpenSource Lizenzen im kommerziellen Einsatz
#### Tiefgreifende Erfahrung
- Testmanagement und -automatisierung (xUnit, Selenium, pytest, Espresso, etc)
- Logisches Datenbankdesign, relational und NoSQL (PostgreSQL, MySQL / MariaDB, SQLite, MongoDB, Redis, Elasticsearch)
- Android App-Entwicklung (RxJava, MVVM, Jetpack, Architecture Components, USB-CDC)
- Python (Django, Django-Rest-Framework, Tornado), Kotlin, Java (Spring Boot), PHP (Yii, Zend Framework 3), Ruby (Rails)
- Web-Frontends mit Angular (Material Design, Redux), jQuery, TypeScript, JavaScript
#### Grundlegende Erfahrung
- Oracle DB, C++ (embedded development), .NET, C#, Haskell, Go
### Infrastruktur
- Deployment und Integration bei Amazon Web Services (S3, EC2) und Firebase
- Git, SVN, Mercurial
- JetBrains Toolchain (Hub, YouTrack, Teamcity, Upsource), Jenkins, Jira, GoCD, Redmine
- Linux Server, nginx, Docker, Docker-Compose
### Datenschutz/Datensicherheit
- Privacy by Design in der Praxis, DSGVO-Zusammenhänge
- Implementation intern entwickelter Kryptographieprotokolle, Entwicklung und Review von Kryptographieprotokollen
- Auditierung von Full-Stack Webanwendungen
### Wissensvermittlung
- Konzeption von Präsentationen und Vorträgen, Durchführung von Präsentationen und Vorträgen
- Entwicklerschulungen, Beratung für Software-Architektur, Security by Design und Teamleitung
## Weitere Kenntnisse
### Branchen
- Universitäten
- Veranstaltungsbranche
- Medizinbranche
- Büroelektronik
- Telekommunikationsbranche
### Sprachen
- Deutsch (Muttersprache)
- Englisch (fließend)
## Ausgewählte Projekte
### 2019
#### Niedersächsische Tierseuchenkasse, Hannover
Diverse Module einer Website mit Integration von Services Dritter
Technologien
- PHP 7.2, Zend Framework 3, PHPUnit
- Bootstrap 3, jQuery
- Docker
- MySQL/MariaDB
### 2019
#### Arconic Fastening Systems, Hildesheim
Informationsflussanalyse und Erarbeitung von Optimierungspotenzialen im Kontext von Industrie 4.0 in einem
Hauptfertigungsstandort anhand von Interviews und bestehender Dokumentation
- Interdisziplinäre Zusammenarbeit mit dem Institut für Integrierte Produktion Hannover
### 2018
#### Büroelektronik Konzern, Hannover
Implementierung eines Mock-Ups zur Demonstration eines neuen kryptographischen
Konzepts und seiner Anwendungsmöglichkeiten
- Entwicklung eines Mock-Ups
Technologien
- Angular, Clarity Design
#### Büroelektronik Konzern, Hannover
Privacy Firewall zur Einstufung personenbezogener Daten in
Unternehmensnetzwerken als Teil eines Großprojekts
- Entwicklung einer Server Applikation
- Beratung in den Bereichen Natural Language Processing und KI
- Review der Gesamtarchitektur mit Bezug auf IT-Security und Performance / Skalierung
Technologien
- Python, MQTT
- spaCy - Industrial Streng Natural Language Processing
### 2017 - 2018
#### Softwareentwicklungsbranche, Hannover
Entwicklung einer sicheren Telekommikationslösung mit IoT-Komponenten
- Software-Entwicklung (Android, Embedded, Webserver)
- Leitung eines verteilten und interdisziplinären Teams
Technologien
- C++ auf ARM32
- Kotlin, Python, Django
- Angular, Typescript, Clarity Design
- WebSockets, WebRTC
- USB-CDC mit Android Device als USB-Host
- Protobuf, serielle Protokolle
- Docker
### 2017
#### Frankiermaschinenhersteller, Berlin
Auditing einer umfangreichen online Software für digitale Signaturen
- Durchführung der Auditierung
- Coaching der Teamleitung (insb. Testing, Teamführung und Kommunikation
mit der Projektleitung)
- Beratung bzgl. Verbesserung der vorhanden Entwicklungsprozesse
hinsichtlich agile Development
#### Büroelektronik Konzern, Hannover
Entwicklung eines Demonstrators für eine smarte Arbeitsumgebung unter
Berücksichtigung von Privacy-by-design and default Vorgaben
- Software Entwicklung
Technologien
- MQTT, IoT
- Windows 10 C# .NET App
#### Büroelektronik Konzern, Hannover
Entwicklung eines Demonstrators zum Einsatz von Attribute-Based-Credentials zur anonymen Authentifizierung und Authorisierung von Mitarbeitern mithilfe von Smart Devices
- Software-Entwicklung
- Konzept-Entwicklung - Attribute-Based-Credentials im Enterprise Umfeld
Technologien
- Python, Flask
- Angular, Material Design
- Android, Kotlin, AndroidWear (Smartwatches), NFC
### 2015 - 2016
#### Qabel GmbH (internes Projekt), Hannover
Kryptographie-Plattform zur sicheren Kommunikation mit Ende-zu-Ende Verschlüsselung und Dokumentenablage in der Amazon Cloud mit Client-Anwendungen für Android und Windows/Mac/Linux
Technologien
- Java, Kotlin, Android
- Python, Django
- Docker
- Angular
- PostgreSQL, SQLite
### 2011 - 2014
#### Event Software Hersteller, Hannover
Entwicklung einer modularen und skalierbaren Webanwendung zur Organisation von Veranstaltungen wie beispielsweise Messen
- Performance-optimiertes ORM auf Basis von MongoDB und Redis
- Massen-Email-Versand in Hintergrundprozessen
Technologien
- Python
- PHP, Yii-Framework
- MongoDB, Redis
- HTML 5, CSS3, jQuery, DataTables
### 2008 - 2012
#### Juristische Fakultät, Leibniz Universität Hannover
Administration, Webentwicklung und Druck-Layouting
Technologien
- PHP
- Python
- LaTeX
- MySQL
***
# <a name="top"></a>Markdown Test Page # <a name="top"></a>Markdown Test Page
* [Headings](#Headings) * [Headings](#Headings)
@ -78,9 +242,9 @@ Adipisicing voluptate ipsum culpa voluptate id aute laboris labore esse fugiat v
Deserunt officia esse aliquip consectetur duis ut labore laborum commodo aliquip aliquip velit pariatur dolore. Deserunt officia esse aliquip consectetur duis ut labore laborum commodo aliquip aliquip velit pariatur dolore.
4. Marionberry 4. Marionberry
5. Melon 5. Melon
- Cantaloupe - Cantaloupe
- Honeydew - Honeydew
- Watermelon - Watermelon
6. Miracle fruit 6. Miracle fruit
7. Mulberry 7. Mulberry
@ -88,8 +252,8 @@ Adipisicing voluptate ipsum culpa voluptate id aute laboris labore esse fugiat v
- Olive - Olive
- Orange - Orange
- Blood orange - Blood orange
- Clementine - Clementine
- Papaya - Papaya
- Ut aute ipsum occaecat nisi culpa Lorem id occaecat cupidatat id id magna laboris ad duis. Fugiat cillum dolore veniam nostrud proident sint consectetur eiusmod irure adipisicing. - Ut aute ipsum occaecat nisi culpa Lorem id occaecat cupidatat id id magna laboris ad duis. Fugiat cillum dolore veniam nostrud proident sint consectetur eiusmod irure adipisicing.
- Passionfruit - Passionfruit
@ -132,24 +296,62 @@ Ad amet irure est magna id mollit Lorem in do duis enim. Excepteur velit nisi ma
Et fugiat ad nisi amet magna labore do cillum fugiat occaecat cillum Lorem proident. In sint dolor ullamco ad do adipisicing amet id excepteur Lorem aliquip sit irure veniam laborum duis cillum. Aliqua occaecat minim cillum deserunt magna sunt laboris do do irure ea nostrud consequat ut voluptate ex. Et fugiat ad nisi amet magna labore do cillum fugiat occaecat cillum Lorem proident. In sint dolor ullamco ad do adipisicing amet id excepteur Lorem aliquip sit irure veniam laborum duis cillum. Aliqua occaecat minim cillum deserunt magna sunt laboris do do irure ea nostrud consequat ut voluptate ex.
```go ### Bash
package main
import ( ```bash
"fmt" #!/bin/bash
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) { cd $ROOT_DIR
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) DOT_FILES="lastpass weechat ssh Xauthority"
for dotfile in $DOT_FILES; do conform_link "$DATA_DIR/$dotfile" ".$dotfile"; done
```
### C
```c
#define UNICODE
#include <windows.h>
int main(int argc, char **argv) {
int speed = 0, speed1 = 0, speed2 = 0; // 1-20
if (argc == 1) return 0;
if (argc >= 2) sscanf(argv[1], "%d", &speed1);
if (argc >= 3) sscanf(argv[2], "%d", &speed2);
if (argc == 2) // set speed to first value
speed = speed1;
else if (speed == speed1 || speed == speed2) // alternate
speed = speed1 + speed2 - speed;
else
speed = speed1; // start with first value
SystemParametersInfo(SPI_SETMOUSESPEED, 0, speed, 0);
SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0);
printf("New speed: %2d\n", speed);
return 0;
} }
```
func main() {
http.HandleFunc("/", handler) ### CSS
http.ListenAndServe(":8080", nil)
```css
/* CSS Comment */
#some-id .some-class {
float: left;
width: 100px;
} }
``` ```
### HTML
```html
<a name="Inline"></a>Inline elements
```
Ex amet id ex aliquip id do laborum excepteur exercitation elit sint commodo occaecat nostrud est. Nostrud pariatur esse veniam laborum non sint magna sit laboris minim in id. Aliqua pariatur pariatur excepteur adipisicing irure culpa consequat commodo et ex id ad. Ex amet id ex aliquip id do laborum excepteur exercitation elit sint commodo occaecat nostrud est. Nostrud pariatur esse veniam laborum non sint magna sit laboris minim in id. Aliqua pariatur pariatur excepteur adipisicing irure culpa consequat commodo et ex id ad.
[[Top]](#top) [[Top]](#top)