Compare commits

..

19 Commits

Author SHA1 Message Date
Andreas Zweili 4d3c9c7596 Merge branch 'master' into production 2018-03-02 17:32:29 +01:00
Andreas Zweili db43275f69 Merge branch 'production' of git.2li.ch:ibz/web_AI-5 into production 2018-03-02 16:22:12 +01:00
Andreas Zweili 1a325cfaad Merge branch 'master' into production 2018-03-02 16:22:08 +01:00
Andreas Zweili ffcf22937c Merge branch 'master' into production 2018-02-28 22:24:43 +01:00
Andreas Zweili 2f7a565545 Merge branch 'master' into production 2018-01-28 22:05:24 +01:00
Andreas Zweili 097e46988a Merge branch 'master' into production 2018-01-28 21:34:59 +01:00
Andreas Zweili 33261ecdb2 Merge branch 'master' into production 2018-01-28 12:57:56 +01:00
Andreas Zweili 0d89651219 Merge branch 'master' into production 2018-01-14 13:00:42 +01:00
Andreas Zweili 6f25179795 Merge branch 'master' into production 2018-01-14 12:39:02 +01:00
Andreas Zweili 05717a63ea Merge branch 'master' into production 2018-01-14 12:36:57 +01:00
Andreas Zweili c7abe2ffd2 Merge branch 'master' into production 2018-01-14 12:34:47 +01:00
Andreas Zweili 75dac7d385 Merge branch 'master' into production 2018-01-14 12:28:48 +01:00
Andreas Zweili 50d7d11fe4 Merge branch 'production' of git.2li.ch:ibz/web_AI-5 into production 2018-01-13 17:40:17 +01:00
Andreas Zweili f7d86ea9c0 Merge branch 'master' into production 2018-01-13 17:40:11 +01:00
Andreas Zweili 185f07044c remove a duplicate application entry 2018-01-13 09:32:03 +01:00
Andreas Zweili b31133b5b2 correct the settings for the production server 2018-01-13 08:31:18 +01:00
Andreas Zweili 5c9a8bec1a Merge branch 'master' into production 2018-01-13 08:30:23 +01:00
Andreas Zweili 9269e77e4a Merge branch 'master' into production 2017-12-31 15:23:59 +01:00
Andreas Zweili bf1533bcd7 force django to use ssl 2017-12-30 17:59:56 +01:00
19 changed files with 634 additions and 791 deletions

View File

@ -50,4 +50,3 @@ We don't provide any support for the content in this repository.
### License
The project is licensed under the GPLv3 license.

View File

@ -23,7 +23,7 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = '(#4#-$$&mx7(%q+6&&@-c&g%i0dc4)zfks1%sy8b%lsxspou&%'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
DEBUG = False
ALLOWED_HOSTS = [
'localhost',
@ -164,3 +164,6 @@ MEDIA_URL = '/media/'
MEDIA_ROOT = '/srv/media/'
LOGIN_REDIRECT_URL = '/'
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True

File diff suppressed because it is too large Load Diff

View File

@ -548,17 +548,13 @@ auch, weshalb wir uns dafür entschieden haben.
#+LATEX:\begin{landscape}
** Zeitplanung
In der Tabelle:([[tab:time]]) ist die Zeitplanung für das Projekt zu
sehen. Die einzelnen Phasen wurden dabei gegenüber ihren Subtasks hervorgehoben.
#+CAPTION: Variantenbewertung Ergebnis
#+NAME: tab:time
#+ATTR_LATEX: :environment longtable :align |r|l|l|l|r|r|
|------------+----------------------------------------------------+------------+------------+------------+------------|
| <10> | | <10> | <10> | <10> | <10> |
| *ID*\cellcolor[HTML]{C0C0C0} | *Subject*\cellcolor[HTML]{C0C0C0} | *Type*\cellcolor[HTML]{C0C0C0} | *Status*\cellcolor[HTML]{C0C0C0} | *Estimated time*\cellcolor[HTML]{C0C0C0} | *Spent time*\cellcolor[HTML]{C0C0C0} |
|------------+----------------------------------------------------+------------+------------+------------+------------|
| *201* | *Projektanalyse und Planung* | *Phase* | *Closed* | | |
| 201 | Projektanalyse und Planung | Phase | Closed | | |
| 202 | Projektziele | Task | Closed | 1 | 0.5 |
| 203 | Vision | Task | Closed | 1 | 0.5 |
| 204 | SWOT-Analyse | Task | Closed | 3 | 0.5 |
@ -571,7 +567,7 @@ sehen. Die einzelnen Phasen wurden dabei gegenüber ihren Subtasks hervorgehoben
| 306 | Meeting 3 | Milestone | Closed | 1.5 | 3 |
| 313 | Meeting 4 | Milestone | Closed | 1 | 1 |
| 314 | Meeting 5 | Milestone | Closed | 1 | 1 |
| *208* | *Projektmanagement* | *Phase* | *Closed* | | |
| 208 | Projektmanagement | Phase | Closed | | |
| 218 | Architektur vorbereiten | Phase | Closed | | |
| 219 | Architektur Grafik | Task | Rejected | 6 | 0 |
| 220 | Use Case Grafiken | Task | Closed | 6 | 3 |
@ -581,7 +577,7 @@ sehen. Die einzelnen Phasen wurden dabei gegenüber ihren Subtasks hervorgehoben
| 222 | Organigramm | Task | Closed | 0.5 | 0.5 |
| 223 | Projektstrukturplan | Task | Closed | 1.5 | 1.5 |
| 224 | Arbeitspakete definieren | Task | Closed | 4 | 1 |
| *225* | *Datenbank* | *Phase* | *Closed* | | |
| 225 | Datenbank | Phase | Closed | | |
| 226 | Anforderungsanalyse | Task | Closed | 0.5 | 0 |
| 227 | Relationen Model | Task | Closed | 2 | 0.5 |
| 228 | Relationen Diagramm | Task | Closed | 4 | 5.25 |
@ -591,9 +587,9 @@ sehen. Die einzelnen Phasen wurden dabei gegenüber ihren Subtasks hervorgehoben
| 232 | SQL Views erstellen | Task | Rejected | 2 | 0.1 |
| 233 | SQL Prozeduren und Funktionen erarbeiten | Task | Rejected | 2 | 0.1 |
| 304 | SQL Create Tables | Task | Rejected | 2 | 0.1 |
| *234* | *Benutzerinterface* | *Phase* | *Closed* | | |
| 234 | Benutzerinterface | Phase | Closed | | |
| 235 | Mockup skizzieren | Task | Closed | 1 | 1 |
| *236* | *Frontend* *Umsetzung* | *Phase* | *Closed* | | |
| 236 | Frontend Umsetzung | Phase | Closed | | |
| 237 | Login | Task | Closed | 0.5 | 2.75 |
| 315 | BUG: Eine zu lange Strassenummer wirf einen Fehler | Task | Closed | 0.5 | 0.25 |
| 238 | Artikel | Task | Closed | | 0.25 |
@ -601,7 +597,7 @@ sehen. Die einzelnen Phasen wurden dabei gegenüber ihren Subtasks hervorgehoben
| 239 | Artikelliste | Task | Closed | 5 | 5 |
| 240 | Warenkorb | Task | Closed | 5 | 12 |
| 241 | Checkout | Task | Closed | 5 | 5 |
| *242* | *Backend* *Umsetzung* | *Phase* | *Closed* | | |
| 242 | Backend Umsetzung | Phase | Closed | | |
| 243 | Login | Task | Closed | 5 | 5 |
| 244 | Artikel | Task | Closed | 5 | 1 |
| 247 | Artikelliste | Task | Closed | 2.5 | 0.5 |
@ -615,17 +611,17 @@ sehen. Die einzelnen Phasen wurden dabei gegenüber ihren Subtasks hervorgehoben
| 250 | Kunden Liste | Task | Closed | 1 | 0.5 |
| 308 | Models | Task | Closed | 3 | 5 |
| 309 | Währungskurse | Task | Closed | 5 | 18 |
| *252* | *Testing* | *Phase* | *Closed* | | |
| 252 | Testing | Phase | Closed | | |
| 255 | Test Cases Durchführung | Task | Closed | 10 | 10 |
| 257 | Dokumentations Styling | Task | Closed | 2 | 2.5 |
| 258 | Präsentation | Milestone | In progress | 2 | 0 |
| 263 | Vorprojekt | Task | Closed | 28.25 | 35.5 |
| *209* | *Tools* *vorbereiten* | *Phase* | *Closed* | | |
| 209 | Tools vorbereiten | Phase | Closed | | |
| 210 | GIT-Workspace | Task | Closed | 0.5 | 0.5 |
| 211 | Development Container | Task | Closed | 2 | 7.25 |
| 261 | Domain reservieren | Task | Closed | 0.25 | 0.25 |
| 262 | Produktions Server aufsetzen | Task | Closed | 2 | 4 |
| *212* | *Technologien* *abklären* | *Phase* | *Closed* | | |
| 212 | Technologien abklären | Phase | Closed | | |
| 213 | C# | Task | Closed | 1 | 1 |
| 214 | Django | Task | Closed | 5 | 5 |
| 215 | MariaDB | Task | Closed | 0.5 | 0.5 |

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

View File

@ -1 +0,0 @@
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0" version="8.4.6" editor="www.draw.io" type="device"><diagram id="08cd9217-de5f-1429-298d-04c22af63481" name="Page-1">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</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 598 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

View File

@ -1 +0,0 @@
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0" version="8.4.0" editor="www.draw.io" type="device"><diagram id="283ea62a-d2dd-6ffc-9a9e-c1de98e88eac" name="Page-1">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</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 374 KiB

View File

@ -1,153 +0,0 @@
#+TITLE: Case-Study
#+AUTHOR: Ivan Hörler und Andreas Zweili
#+OPTIONS: toc:1 num:nil
#+REVEAL_TRANS: linear
#+REVEAL_THEME: solarized
#+REVEAL_ROOT: https://cdn.jsdelivr.net/reveal.js/3.0.0/
#+LANGUAGE: de
* Ausgangslage
- Webshop erstellen
- Währungsumrechnung CHF zu ...
- Freie Software in Bezug auf Open-Source Code.
** Vision
Die Vision wurde anhand eines Mindmaps erstmals grob umfasst:
#+ATTR_HTML: :width 70%
[[file:pictures/webshop.png]]
** Vision - Artikel
#+ATTR_HTML: :width 80%
[[file:pictures/Vision-Artikel.png]]
** Vision - Warenkorb
#+ATTR_HTML: :width 80%
[[file:pictures/Vision-Warenkorb.png]]
* Varianten
** ASP.NET (C#) und SQL Server
[[file:pictures/csharp.png]]
** Laravel (PHP) und MySQL
[[file:pictures/laravel.png]]
** Django und MariaDB
[[file:pictures/django.png]]
** Kriterien
- Freie Software
- Cross Plattform nutzbar
- Lesbarkeit des Codes
- Einfachheit des Setups
- Ohne spezielle Tools nutzbar
- Vorkenntnisse und Lernfaktor
** Vergleich
|------------------------+-------------------------------|
| *Variante* | *Erreichte Punktzahl von 235* |
|------------------------+-------------------------------|
| ASP.NET und SQL Server | 141 |
| Laravel und MySQL | 161 |
| Django und MariaDB | 196 |
|------------------------+-------------------------------|
* Kosten
** Tools
- Ausgaben während der Case-Study: 0.00 CHF
- 100% freie Software
- "Let's Encrypt" für SSL
- "freenom.com" für Domain
** Laravel Webshop
| Sprache | Codezeilen |
|---------+------------|
| PHP | 8679 |
|---------+------------|
| *Total* | *8679* |
|---------+------------|
#+TBLFM: @>$2=vsum(@2..@-1);%.0f
** Django Webshop
| Sprache | Codezeilen |
|---------+------------|
| Python | 1460 |
| SQL | 4639 |
|---------+------------|
| *Total* | *6099* |
|---------+------------|
#+TBLFM: @>$2=vsum(@2..@-1);%.0f
* Vorgehen
** Currencies - App
- Wurde in Django als eigenen App entwickelt und sollte daher problemlos in andere Applikationen eingebunden werden können.
- Die Quelle der Währungen ist die Schweizerische Nationalbank mit der URL:
https://www.snb.ch
https://www.snb.ch/selector/de/mmr/exfeed/rss
#+ATTR_HTML: :width 80%
[[file:pictures/currencies-rss-reader.png]]
** Currencies - Quelle
[[file:pictures/currencies-rss-xml.png]]
** Currencies - Parsing
- Das Konvertieren des XML's wurde mit Python eigener Module gemacht.
- für das Herunterladen des XML's wurde das Modul 'urllib' verwendet (1)
- für das Parsen über die einzelnen items/nodes das Modul xml.etree.ElementTree. (2)
(1) https://docs.python.org/2/library/urllib.html
(2) https://docs.python.org/2/library/xml.etree.elementtree.html
** Currencies - Ablauf
#+ATTR_HTML: :width 55%
[[file:pictures/currencies.png]]
** Infrastruktur
#+BEGIN_NOTES
Andreas erzählt wie die infrastruktur aufgebaut ist.
#+END_NOTES
#+ATTR_HTML: :width 90%
[[file:pictures/Server-Architecture.png]]
** Programmierung
#+ATTR_HTML: :width 60%
[[file:pictures/form.png]]
#+BEGIN_SRC python
amount_form = CartForm(
initial={'amount_form': cart_position.amount}
)
#+END_SRC
* Fazit
- Trotz Model View Controll, SQL unerlässlich.
- Vagrant (up, suspend, provision, destroy)
- Git
- Python/Django, JS brauchts trotzdem.
** Besten Dank für die Aufmerksahmkeit.
Ivan & Andreas