7 Commits

Author SHA1 Message Date
  Thomas Buck bed5faf17e add table helper macro for quadcopter pages 2 years ago
  Thomas Buck cc72514889 fix poole.py for utf-8 compatibility 2 years ago
  Thomas Buck e05a8b87d8 use menu helper for blog 2 years ago
  Thomas Buck e2a8550456 use menu helper for quadcopter pages 2 years ago
  Thomas Buck 0c8cb1adc7 use menu helper for xyrobot 2 years ago
  Thomas Buck f2f9c77477 add menu helper macro 2 years ago
  Thomas Buck ec58a6bae3 add gta san andreas unity drone sim page 2 years ago

+ 1
- 15
input/blog.md View File

@@ -12,19 +12,5 @@ noheader: true
12 12
 To receive my latest updates, you can subscribe to the <a href="rss.xml"><img src="img/rss.png">RSS Feed</a>.
13 13
 
14 14
 <!--%
15
-from datetime import datetime
16
-posts = [p for p in pages if "post" in p] # get all blog post pages
17
-posts.sort(key=lambda p: p.get("date", "9999-01-01"), reverse=True) # sort post pages by date
18
-lastyear = "0"
19
-for p in posts:
20
-    year = p.get("date", "")[0:4]
21
-    if year != lastyear:
22
-        lastyear = year
23
-        print "\n\n#### %s\n" % (year)
24
-
25
-    date = datetime.strptime(p.date, "%Y-%m-%d").strftime("%B %d, %Y")
26
-    print "  * **[%s](%s)** - %s" % (p.post, p.url, date)
27
-
28
-    if p.get("description", "") != "":
29
-        print "<br><span class=\"listdesc\">" + p.get("description", "") + "</span>"
15
+printBlogMenu()
30 16
 %-->

+ 1
- 0
input/blog/2015/2015_12_20_serialgamepad.md View File

@@ -6,6 +6,7 @@ comments: true
6 6
 flattr: true
7 7
 github: https://github.com/xythobuz/SerialGamepad
8 8
 parent: projects
9
+show_in_quadcopters: true
9 10
 position: 50
10 11
 ---
11 12
 

+ 1
- 0
input/blog/2016/2016_07_24_usb_host_cppm.md View File

@@ -6,6 +6,7 @@ comments: true
6 6
 flattr: true
7 7
 github: https://github.com/xythobuz/Saitek-X52-PPM
8 8
 parent: projects
9
+show_in_quadcopters: true
9 10
 position: 80
10 11
 ---
11 12
 

+ 1
- 0
input/blog/2016/2016_11_05_frsky_telemetry.md View File

@@ -6,6 +6,7 @@ comments: true
6 6
 flattr: true
7 7
 github: https://github.com/xythobuz/FrSky-Telemetry-Arduino
8 8
 parent: projects
9
+show_in_quadcopters: true
9 10
 position: 90
10 11
 ---
11 12
 

+ 1
- 12
input/index.md View File

@@ -38,18 +38,7 @@ To receive my latest updates, you can subscribe to the <a href="rss.xml"><img sr
38 38
 ### Recent Posts
39 39
 
40 40
 <!--%
41
-from datetime import datetime
42
-posts = [p for p in pages if "date" in p]
43
-posts.sort(key=lambda p: p.get("date"), reverse=True)
44
-for p in posts[0:5]:
45
-    date = datetime.strptime(p.date, "%Y-%m-%d").strftime("%B %d, %Y")
46
-    if "post" in p:
47
-        print "  * **[%s](%s)** - %s" % (p.post, p.url, date)
48
-    else:
49
-        print "  * **[%s](%s)** - %s" % (p.title, p.url, date)
50
-
51
-    if p.get("description", "") != "":
52
-        print "<br><span class=\"listdesc\">" + p.get("description", "") + "</span>"
41
+printRecentMenu()
53 42
 %-->
54 43
 
55 44
 ### Tweets

+ 1
- 37
input/projects.md View File

@@ -10,41 +10,5 @@ Some others are on-going or still recent for other reasons, these are listed fir
10 10
 To receive my latest updates, you can subscribe to the <a href="rss.xml"><img src="img/rss.png">RSS Feed</a>.
11 11
 
12 12
 <!--%
13
-# prints all pages with parent 'projects' or 'stuff'.
14
-# first the ones without date, sorted by position.
15
-# then afterwards those with date, split by year.
16
-# also supports blog posts with parent.
17
-
18
-enpages = [p for p in pages if p.lang == "en"]
19
-
20
-dpages = [p for p in enpages if p.get("date", "") == ""]
21
-mpages = [p for p in dpages if any(x in p.get("parent", "") for x in [ 'projects', 'stuff' ])]
22
-mpages.sort(key=lambda p: [int(p.get("position", "999"))])
23
-for p in mpages:
24
-    print "  * **[%s](%s)**" % (p.title, p.url)
25
-    if p.get("description", "") != "":
26
-        print "<br><span class=\"listdesc\">" + p.get("description", "") + "</span>"
27
-
28
-dpages = [p for p in enpages if p.get("date", "") != ""]
29
-mpages = [p for p in dpages if any(x in p.get("parent", "") for x in [ 'projects', 'stuff' ])]
30
-mpages.sort(key=lambda p: [p.get("date", "9999-01-01")], reverse = True)
31
-lastyear = "0"
32
-for p in mpages:
33
-    title = p.title
34
-    if p.title == "Blog":
35
-        title = p.post
36
-
37
-    year = p.get("date", "")[0:4]
38
-    if year != lastyear:
39
-        lastyear = year
40
-        print "\n\n#### %s\n" % (year)
41
-
42
-    dateto = ""
43
-    if p.get("update", "") != "" and p.get("update", "")[0:4] != year:
44
-        dateto = " (%s - %s)" % (year, p.get("update", "")[0:4])
45
-
46
-    print "  * **[%s](%s)**%s" % (title, p.url, dateto)
47
-
48
-    if p.get("description", "") != "":
49
-        print "<br><span class=\"listdesc\">" + p.get("description", "") + "</span>"
13
+printProjectsMenu()
50 14
 %-->

+ 1
- 6
input/projects/3d-printing.md View File

@@ -9,12 +9,7 @@ In the meantime, I've modified my printers quite a bit and also written about it
9 9
 Here are all the articles that are part of my 3D printing series:
10 10
 
11 11
 <!--%
12
-mpages = [p for p in pages if p.get("parent", "") == "3d-printing" and p.lang == "en"]
13
-mpages.sort(key=lambda p: int(p["position"]))
14
-for p in mpages:
15
-    print "  * **[%s](%s)**" % (p.title, p.url) # markdown list item
16
-    if p.get("description", "") != "":
17
-        print "<br><span class=\"listdesc\">" + p.get("description", "") + "</span>"
12
+print3DPrintingMenu()
18 13
 %-->
19 14
 
20 15
 If you're interested in my 3D print designs, take a look [at my Thingiverse account](https://www.thingiverse.com/xythobuz/designs) or my [Git Repository](https://git.xythobuz.de/thomas/3d-print-designs).

+ 7
- 6
input/projects/quadcopters.md View File

@@ -11,10 +11,11 @@ All of these I'm flying with [FatShark Dominator v3 Camo Blue](https://hobbyking
11 11
 Of course I'm not flying illegally, I have a model flight insurance and I am a registered UAV pilot in the European Union! 👮
12 12
 
13 13
 <!--%
14
-mpages = [p for p in pages if p.get("parent", "") == "quadcopters" and p.lang == "en"]
15
-mpages.sort(key=lambda p: int(p["position"]))
16
-for p in mpages:
17
-    print "  * **[%s](%s)**" % (p.title, p.url)
18
-    if p.get("description", "") != "":
19
-        print "<br><span class=\"listdesc\">" + p.get("description", "") + "</span>"
14
+printQuadcopterMenu()
15
+%-->
16
+
17
+The following projects are also related to my Quadcopter endeavours.
18
+
19
+<!--%
20
+printQuadcopterRelatedMenu()
20 21
 %-->

+ 26
- 46
input/projects/quadcopters/aurora100.md View File

@@ -8,9 +8,11 @@ update: 2021-05-21
8 8
 
9 9
 <span class="listdesc">[...back to RC-Vehicles overview](quadcopters.html)</span>
10 10
 
11
+Not being totally happy with the power available with [my 2S xyAurora90](aurora90.html) I decided to build a 3S Aurora100 in July 2017.
12
+
11 13
 <!--%
12 14
 lightgallery([
13
-    [ "img/xyaurora100_1.jpg", "Front Top view" ]
15
+    [ "img/xyaurora100_1.jpg", "Original Setup with AIO cam, Front Top view" ]
14 16
 ])
15 17
 %-->
16 18
 
@@ -26,54 +28,32 @@ lightgallery([
26 28
 ])
27 29
 %-->
28 30
 
29
-Initially tried the 1104 7000KV DYS motors, but they had problems with vibrations I couldn't fix with any soft-mounting solutions I've tried, and after tuning the filters with a blackbox.
30
-Now with these Eachine motors, everything works perfectly with stock PID settings.
31
-Has a lot of power on 3S!
32
-
33
-## Parts List
34
-
35
-<table>
36
-<tr><th>Part</th><th>Description</th><th>Cost</th></tr>
37
-
38
-<tr><td style="text-align: right;">Frame</td>
39
-<td><a href="https://www.banggood.com/Eachine-Aurora-100-100MM-Mini-Brushless-FPV-Multirotor-Racing-Frame-14_5g-Carbon-Fiber-p-1133462.html?p=3F201911077692015010">Eachine Aurora 100 100MM Mini Brushless FPV Multirotor Racing Frame 14.5g Carbon Fiber</a></td>
40
-<td style="text-align: right;">11.99$</td></tr>
41
-
42
-<tr><td style="text-align: right;">Spare</td>
43
-<td><a href="https://www.banggood.com/Eachine-Aurora-100-Mini-Brushless-FPV-Racer-Spare-Part-2mm-2_5mm-Bottom-Plate-3K-Carbon-Fiber-p-1144532.html?p=3F201911077692015010&cur_warehouse=CN&ID=529763">Eachine Aurora 100 Mini Brushless FPV Racer Spare Part 2mm 2.5mm Bottom Plate 3K Carbon Fiber</a></td>
44
-<td style="text-align: right;">5.39$</td></tr>
45
-
46
-<tr><td style="text-align: right;">FC</td>
47
-<td><a href="https://www.banggood.com/Eachine-Minicube-20x20mm-F4-OSD-Compatible-Frsky-Flysky-DSM-RX-Blheli_S-10A-For-Aurora-68-90-100-p-1165366.html?p=3F201911077692015010">Eachine Minicube 20x20mm F4 OSD Compatible Frsky Flysky DSM RX Blheli_S 10A For Aurora 68 90 100</a></td>
48
-<td style="text-align: right;">60.99$</td></tr>
31
+Initially I tried the 1104 7000KV DYS motors, but they had problems with vibrations I couldn't fix with any soft-mounting solutions I've tried, and after tuning the filters with a blackbox.
32
+I then swapped to the Eachine motors listed below, with them everything works perfectly with stock PID settings.
49 33
 
50
-<tr><td style="text-align: right;">Motors</td>
51
-<td><a href="https://www.banggood.com/Eachine-1104-6500KV-1-3S-Brushless-Motor-For-Eachine-Aurora-90-100-Mini-FPV-Racer-p-1138072.html?p=3F201911077692015010&cur_warehouse=CN">4 x Eachine Upgrade Motor 1104 6500KV Brushless Motor 1-3S For Eachine Aurora 90 100 RC Drone FPV Racing</a></td>
52
-<td style="text-align: right;">35.56$</td></tr>
34
+Also, at first I was using the [Eachine 25mW AIO Cam](https://www.banggood.com/Eachine-AIO-FPV-5_8G-25mW-48CH-VTX-600TVL-CMOS-1-or-4-inch-Camera-For-Aurora-90-100-RC-Drone-FPV-Racing-p-1122902.html?akmClientCountry=DE&p=3F201911077692015010&cur_warehouse=CN) with this build.
35
+However, because I flew often simultaneously with friends, we decided to all switch to RunCams and TBS transmitters, as listed below.
53 36
 
54
-<tr><td style="text-align: right;">Props</td>
55
-<td><a href="https://www.banggood.com/10-Pairs-Racerstar-1935-50mm-5-Blade-Racing-Propeller-1_5mm-Mounting-Hole-For-Micro-FPV-Frame-p-1129109.html?p=3F201911077692015010">10 Pairs Racerstar 1935 50mm 5 Blade Racing Propeller 1.5mm Mounting Hole For Micro FPV Frame</a></td>
56
-<td style="text-align: right;">8.29$</td></tr>
57
-
58
-<tr><td style="text-align: right;">Cam</td>
59
-<td><a href="https://www.banggood.com/Eachine-AIO-FPV-5_8G-25mW-48CH-VTX-600TVL-CMOS-1-or-4-inch-Camera-For-Aurora-90-100-RC-Drone-FPV-Racing-p-1122902.html?akmClientCountry=DE&p=3F201911077692015010&cur_warehouse=CN">Eachine AIO FPV 5.8G 25mW 48CH VTX 600TVL CMOS 1/4 inch Camera For Aurora 90 100 Mini FPV Racer</a></td>
60
-<td style="text-align: right;">21.99$</td></tr>
61
-
62
-<tr><td style="text-align: right;">Antenna</td>
63
-<td><a href="https://www.banggood.com/10X-3DBI-Brass-2_4G-Receiver-Antenna-Omnidirectional-IPEX-Port-Compatible-Futaba-JR-WFLY-p-1093273.html?p=3F201911077692015010&cur_warehouse=CN">10X 3DBI Brass 2.4G Receiver Antenna Omni Directional IPEX Port Compatible Futaba JR WFLY</a></td>
64
-<td style="text-align: right;">5.14$</td></tr>
65
-
66
-<tr><td style="text-align: right;">Bats</td>
67
-<td><a href="https://www.gensace.de/tattu-450mah-11-1v-75c-3s1p-lipo-battery-pack-long-size-for-h-frame.html">Tattu 450mAh 11.1V 75C 3S1P Lipo Battery Pack- Long Size for H Frame</a></td>
68
-<td style="text-align: right;">15.89$</td></tr>
37
+## Parts List
69 38
 
70
-<tr><td style="text-align: right;">Misc</td>
71
-<td><a href="https://www.banggood.com/4-PCS-Eachine-Propeller-Guard-For-Aurora-100-Mini-FPV-Racing-RC-Drone-1102-1103-1104-1105-Brushless-Motor-p-1143685.html?akmClientCountry=DE&p=3F201911077692015010&cur_warehouse=CN&ID=224">4 PCS Eachine Propeller Guard For Aurora 100 Mini FPV Racing RC Drone 1102 1103 1104 1105 Brushless Motor</a></td>
72
-<td style="text-align: right;">2.49$</td></tr>
39
+These are the prices as recorded by Rotorbuilds.
40
+To be honest, I have no clue if they are what I paid back when I built this copter.
73 41
 
74
-<tr><td></td>
75
-<td style="text-align: right;">Sum</td>
76
-<td style="text-align: right;">167.73$</td></tr>
77
-</table>
42
+<!--%
43
+tableHelper([ "align-right", "align-last-right", "align-right"],
44
+    [ "Part", "Description", "Cost" ], [
45
+        [ "Frame", ("Eachine Aurora 100 100MM Mini Brushless FPV Multirotor Racing Frame 14.5g Carbon Fiber", "https://www.banggood.com/Eachine-Aurora-100-100MM-Mini-Brushless-FPV-Multirotor-Racing-Frame-14_5g-Carbon-Fiber-p-1133462.html?p=3F201911077692015010"), "11.99$" ],
46
+        [ "Spare", ("Eachine Aurora 100 Mini Brushless FPV Racer Spare Part 2mm 2.5mm Bottom Plate 3K Carbon Fiber", "https://www.banggood.com/Eachine-Aurora-100-Mini-Brushless-FPV-Racer-Spare-Part-2mm-2_5mm-Bottom-Plate-3K-Carbon-Fiber-p-1144532.html?p=3F201911077692015010&cur_warehouse=CN&ID=529763"), "5.39$" ],
47
+        [ "FC", ("Eachine Minicube 20x20mm F4 OSD Compatible Frsky Flysky DSM RX Blheli_S 10A For Aurora 68 90 100", "https://www.banggood.com/Eachine-Minicube-20x20mm-F4-OSD-Compatible-Frsky-Flysky-DSM-RX-Blheli_S-10A-For-Aurora-68-90-100-p-1165366.html?p=3F201911077692015010"), "60.99$" ],
48
+        [ "Motors", ("4 x Eachine Upgrade Motor 1104 6500KV Brushless Motor 1-3S For Eachine Aurora 90 100 RC Drone FPV Racing", "https://www.banggood.com/Eachine-1104-6500KV-1-3S-Brushless-Motor-For-Eachine-Aurora-90-100-Mini-FPV-Racer-p-1138072.html?p=3F201911077692015010&cur_warehouse=CN"), "35.56$" ],
49
+        [ "Props", ("10 Pairs Racerstar 1935 50mm 5 Blade Racing Propeller 1.5mm Mounting Hole For Micro FPV Frame", "https://www.banggood.com/10-Pairs-Racerstar-1935-50mm-5-Blade-Racing-Propeller-1_5mm-Mounting-Hole-For-Micro-FPV-Frame-p-1129109.html?p=3F201911077692015010"), "8.29$" ],
50
+        [ "Cam", ("", ""), "$" ],
51
+        [ "VTx", ("", ""), "$" ],
52
+        [ "Bats", ("Tattu 450mAh 11.1V 75C 3S1P Lipo Battery Pack- Long Size for H Frame", "https://www.gensace.de/tattu-450mah-11-1v-75c-3s1p-lipo-battery-pack-long-size-for-h-frame.html"), "15.89$" ],
53
+        [ "Misc", ("4 PCS Eachine Propeller Guard For Aurora 100 Mini FPV Racing RC Drone 1102 1103 1104 1105 Brushless Motor", "https://www.banggood.com/4-PCS-Eachine-Propeller-Guard-For-Aurora-100-Mini-FPV-Racing-RC-Drone-1102-1103-1104-1105-Brushless-Motor-p-1143685.html?akmClientCountry=DE&p=3F201911077692015010&cur_warehouse=CN&ID=224"), "2.49$" ],
54
+        [ "", "Sum", "$" ]
55
+    ]
56
+)
57
+%-->
78 58
 
79 59
 This write-up was first published on [Rotorbuilds](https://rotorbuilds.com/build/5577).

+ 19
- 46
input/projects/quadcopters/aurora90.md View File

@@ -80,53 +80,26 @@ The picture quality is okay but not great.
80 80
 
81 81
 ## Parts List
82 82
 
83
-<table>
84
-<tr><th>Part</th><th>Description</th><th>Cost</th></tr>
83
+These are the prices as recorded by Rotorbuilds.
84
+To be honest, I have no clue if they are what I paid back when I built this copter.
85 85
 
86
-<tr><td style="text-align: right;">Frame</td>
87
-<td><a href="https://www.banggood.com/Eachine-Aurora-90-90MM-Mini-Brushless-FPV-Multirotor-Racing-Frame-35g-Carbon-Fiber-Aluminium-Construction-p-1109742.html?p=3F201911077692015010">Eachine Aurora 90 90MM Mini Brushless FPV Racing Frame RC Drone 27g</a></td>
88
-<td style="text-align: right;">18.99$</td></tr>
89
-
90
-<tr><td style="text-align: right;">FC</td>
91
-<td><a href="https://www.banggood.com/CleanFlight-BetaFlight-Micro-F3-Flight-Controller-Built-in-PDB-Buzzer-20X20mm-For-FPV-Racing-p-1094615.html?p=3F201911077692015010">PIKO BLX CleanFlight & BetaFlight Micro F3 Flight Controller Built-in PDB Buzzer Port 20X20mm For RC Drone FPV</a></td>
92
-<td style="text-align: right;">15.99$</td></tr>
93
-
94
-<tr><td style="text-align: right;">ESCs</td>
95
-<td><a href="https://www.banggood.com/Racerstar-Mini-RS6Ax4-6A-1-2S-Blheli_S-BB2-4-In-1-ESC-with-5V-BEC-Support-Oneshot125-D-Shot-p-1110025.html?p=3F201911077692015010">Racerstar 20x20mm RS6Ax4 6A 1-2S Blheli_S 4 In 1 ESC with 5V BEC Dshot600</a></td>
96
-<td style="text-align: right;">29.69$</td></tr>
97
-
98
-<tr><td style="text-align: right;">Motors</td>
99
-<td><a href="https://www.banggood.com/4X-Racerstar-Racing-Edition-1103-BR1103-8000KV-1-2S-Brushless-Motor-Purple-For-50-80-100-Multirotor-p-1117646.html?p=3F201911077692015010&cur_warehouse=CN">4X Racerstar Racing Edition 1103 BR1103 8000KV 1-2S Brushless Motor Purple For 50 80 100 Multirotor</a></td>
100
-<td style="text-align: right;">31.99$</td></tr>
101
-
102
-<tr><td style="text-align: right;">Props</td>
103
-<td><a href="https://www.banggood.com/2-Pairs-Kingkong-45mm-3-Blade-Propeller-0_97mm-Mounting-Hole-For-90mm-150mm-DIY-Frame-Kit-p-1122784.html?p=3F201911077692015010&cur_warehouse=CN">2 Pairs Kingkong 45mm 3-Blade Propeller 0.97mm Mounting Hole For 90mm-150mm DIY Frame Kit</a></td>
104
-<td style="text-align: right;">1.99$</td></tr>
105
-
106
-<tr><td style="text-align: right;">Cam</td>
107
-<td><a href="https://www.banggood.com/Eachine-TX03-NTSC-Super-Mini-0-or-25mW-or-50mW-or-200mW-Switchable-AIO-5_8G-72CH-VTX-600TVL-1-or-3-Cmos-FPV-Camera-p-1104884.html?akmClientCountry=DE&p=3F201911077692015010&cur_warehouse=CN">Eachine TX03 NTSC Super Mini 0/25mW/50mW/200mW Switchable AIO 5.8G 72CH VTX 600TVL 1/3 Cmos FPV Camera</a></td>
108
-<td style="text-align: right;">19.99$</td></tr>
109
-
110
-<tr><td style="text-align: right;">Rx</td>
111
-<td><a href="https://www.banggood.com/FD800-Tiny-Frsky-8CH-PPM-or-SBUS-Receiver-Compatible-FRSKY-ACCST-X9D(Plus)DJT-or-DFT-or-DHT-For-QX95-QX90--p-1108071.html?akmClientCountry=DE&p=3F201911077692015010&cur_warehouse=CN&ID=527773">FD800 Tiny Frsky 8CH PPM/SBUS Receiver Compatible FRSKY ACCST X9D(Plus)DJT/DFT/DHT For QX95 QX90</a></td>
112
-<td style="text-align: right;">11.99$</td></tr>
113
-
114
-<tr><td style="text-align: right;">Bat</td>
115
-<td><a href="https://hobbyking.com/en_us/turnigy-nano-tech-460mah-2s-25-40c-lipo-pack.html">Turnigy nano-tech 460mah 2S 25~40C Lipo Pack</a></td>
116
-<td style="text-align: right;">4.71$</td></tr>
117
-
118
-<tr><td style="text-align: right;">LEDs</td>
119
-<td><a href="https://www.banggood.com/Eachine-Aurora-90-100-Mini-FPV-Racer-RC-Drone-Spare-Part-WS2812-LED-Board-LED-Strip-Light-p-1122903.html?akmClientCountry=DE&p=3F201911077692015010&cur_warehouse=CN">Eachine Aurora 90 100 Mini FPV Racer RC Drone Spare Part WS2812 LED Board LED Strip Light</a></td>
120
-<td style="text-align: right;">2.54$</td></tr>
121
-
122
-<tr><td style="text-align: right;">Strap</td>
123
-<td><a href="https://www.banggood.com/Realacc-58mm-Battery-Tie-Down-Strap-for-RC-Micro-FPV-Racing-Quadcopter-Multirotor-p-1118296.html?p=3F201911077692015010">Realacc 58mm Battery Tie Down Strap for RC Micro FPV Racing Quadcopter Multirotor</a></td>
124
-<td style="text-align: right;">1.09$</td></tr>
125
-
126
-<tr><td></td>
127
-<td style="text-align: right;">Sum</td>
128
-<td style="text-align: right;">138.97$</td></tr>
129
-</table>
86
+<!--%
87
+tableHelper([ "align-right", "align-last-right", "align-right"],
88
+    [ "Part", "Description", "Cost" ], [
89
+        [ "Frame", ("Eachine Aurora 90 90MM Mini Brushless FPV Racing Frame RC Drone 27g", "https://www.banggood.com/Eachine-Aurora-90-90MM-Mini-Brushless-FPV-Multirotor-Racing-Frame-35g-Carbon-Fiber-Aluminium-Construction-p-1109742.html?p=3F201911077692015010"), "18.99$" ],
90
+        [ "FC", ("PIKO BLX CleanFlight & BetaFlight Micro F3 Flight Controller Built-in PDB Buzzer Port 20X20mm For RC Drone FPV", "https://www.banggood.com/CleanFlight-BetaFlight-Micro-F3-Flight-Controller-Built-in-PDB-Buzzer-20X20mm-For-FPV-Racing-p-1094615.html?p=3F201911077692015010"), "15.99$" ],
91
+        [ "ESCs", ("Racerstar 20x20mm RS6Ax4 6A 1-2S Blheli_S 4 In 1 ESC with 5V BEC Dshot600", "https://www.banggood.com/Racerstar-Mini-RS6Ax4-6A-1-2S-Blheli_S-BB2-4-In-1-ESC-with-5V-BEC-Support-Oneshot125-D-Shot-p-1110025.html?p=3F201911077692015010"), "29.69$" ],
92
+        [ "Motors", ("4X Racerstar Racing Edition 1103 BR1103 8000KV 1-2S Brushless Motor Purple For 50 80 100 Multirotor", "https://www.banggood.com/4X-Racerstar-Racing-Edition-1103-BR1103-8000KV-1-2S-Brushless-Motor-Purple-For-50-80-100-Multirotor-p-1117646.html?p=3F201911077692015010&cur_warehouse=CN"), "31.99$" ],
93
+        [ "Props", ("2 Pairs Kingkong 45mm 3-Blade Propeller 0.97mm Mounting Hole For 90mm-150mm DIY Frame Kit", "https://www.banggood.com/2-Pairs-Kingkong-45mm-3-Blade-Propeller-0_97mm-Mounting-Hole-For-90mm-150mm-DIY-Frame-Kit-p-1122784.html?p=3F201911077692015010&cur_warehouse=CN"), "1.99$" ],
94
+        [ "Cam", ("Eachine TX03 NTSC Super Mini 0/25mW/50mW/200mW Switchable AIO 5.8G 72CH VTX 600TVL 1/3 Cmos FPV Camera", "https://www.banggood.com/Eachine-TX03-NTSC-Super-Mini-0-or-25mW-or-50mW-or-200mW-Switchable-AIO-5_8G-72CH-VTX-600TVL-1-or-3-Cmos-FPV-Camera-p-1104884.html?akmClientCountry=DE&p=3F201911077692015010&cur_warehouse=CN"), "19.99$" ],
95
+        [ "Rx", ("FD800 Tiny Frsky 8CH PPM/SBUS Receiver Compatible FRSKY ACCST X9D(Plus)DJT/DFT/DHT For QX95 QX90", "https://www.banggood.com/FD800-Tiny-Frsky-8CH-PPM-or-SBUS-Receiver-Compatible-FRSKY-ACCST-X9D(Plus)DJT-or-DFT-or-DHT-For-QX95-QX90--p-1108071.html?akmClientCountry=DE&p=3F201911077692015010&cur_warehouse=CN&ID=527773"), "11.99$" ],
96
+        [ "Bat", ("Turnigy nano-tech 460mah 2S 25~40C Lipo Pack", "https://hobbyking.com/en_us/turnigy-nano-tech-460mah-2s-25-40c-lipo-pack.html"), "4.71$" ],
97
+        [ "LEDs", ("Eachine Aurora 90 100 Mini FPV Racer RC Drone Spare Part WS2812 LED Board LED Strip Light", "https://www.banggood.com/Eachine-Aurora-90-100-Mini-FPV-Racer-RC-Drone-Spare-Part-WS2812-LED-Board-LED-Strip-Light-p-1122903.html?akmClientCountry=DE&p=3F201911077692015010&cur_warehouse=CN"), "2.54$" ],
98
+        [ "Strap", ("Realacc 58mm Battery Tie Down Strap for RC Micro FPV Racing Quadcopter Multirotor", "https://www.banggood.com/Realacc-58mm-Battery-Tie-Down-Strap-for-RC-Micro-FPV-Racing-Quadcopter-Multirotor-p-1118296.html?p=3F201911077692015010"), "1.09$" ],
99
+        [ "", "Sum", "138.97$" ]
100
+    ]
101
+)
102
+%-->
130 103
 
131 104
 Here are some more photos.
132 105
 

+ 20
- 43
input/projects/quadcopters/lx5.md View File

@@ -13,6 +13,10 @@ After my first failed attempts with large copters, gaining some experience with
13 13
 But I had built up some skills and was ready for the next step.
14 14
 So I built a 220mm frame copter with 2205 motors.
15 15
 
16
+<!--%
17
+# TODO photos
18
+%-->
19
+
16 20
 Here are some recordings of the FPV footage.
17 21
 Be aware that these videos are recorded from the received signal on the ground.
18 22
 Not only can you see lots of interference and other HF problems, the loss of quality from the video recorder and the YouTube encoding is also very noticeable.
@@ -43,49 +47,22 @@ Everything else is mounted with rigid spacers.
43 47
 
44 48
 These are the original prices I paid back when I initially bought the parts.
45 49
 
46
-<table>
47
-<tr><th>Part</th><th>Description</th><th>Cost</th></tr>
48
-
49
-<tr><td style="text-align: right;">Frame</td>
50
-<td><a href="https://geprc.com/product/gep-lx5-frame/">GEP-LX5 Leopard Frame, Green Color</a></td>
51
-<td style="text-align: right;">47.20€</td></tr>
52
-
53
-<tr><td style="text-align: right;">FC</td>
54
-<td><a href="https://www.hobbywing.com/goods.php?id=590">Hobbywing XRotor Omnibus F4 Flight Controller</a></td>
55
-<td style="text-align: right;">34.08€</td></tr>
56
-
57
-<tr><td style="text-align: right;">ESCs</td>
58
-<td><a href="https://www.hobbywing.com/goods.php?id=588">Hobbywing XRotor Micro 40A 2-5S 4 in 1 ESC</a></td>
59
-<td style="text-align: right;">52.44€</td></tr>
60
-
61
-<tr><td style="text-align: right;">Motors</td>
62
-<td><a href="https://www.banggood.com/4X-Emax-RS2205-2300-2205-2300KV-Racing-Edition-CW-or-CCW-Motor-For-RC-FPV-Racing-Drone-p-1032857.html?cur_warehouse=CN">4x Emax RS2205 2300KV CW/CCW Motor</a></td>
63
-<td style="text-align: right;">46.32€</td></tr>
64
-
65
-<tr><td style="text-align: right;">Props</td>
66
-<td><a href="https://www.banggood.com/10-Pairs-Racerstar-S5048-PC-3-blade-Propeller-5_0mm-Mounting-Hole-for-RC-Multirotor-FPV-Racing-Drone-p-1169658.html">10 Pairs Racerstar S5048 PC 3-blade Propeller 5.0mm Mounting Hole</a></td>
67
-<td style="text-align: right;">10.48€</td></tr>
68
-
69
-<tr><td style="text-align: right;">Cam</td>
70
-<td><a href="https://shop.runcam.com/runcam-micro-sparrow/">RunCam Micro Sparrow 2.1mm</a></td>
71
-<td style="text-align: right;">26.22€</td></tr>
72
-
73
-<tr><td style="text-align: right;">VTx</td>
74
-<td><a href="https://www.team-blacksheep.com/products/prod:unify_pro">TBS Unify Pro V3 5V</a></td>
75
-<td style="text-align: right;">44.90€</td></tr>
76
-
77
-<tr><td style="text-align: right;">Rx</td>
78
-<td><a href="https://www.frsky-rc.com/product/xsr/">FrSky XSR</a></td>
79
-<td style="text-align: right;">13.98€</td></tr>
80
-
81
-<tr><td style="text-align: right;">Battery</td>
82
-<td><a href="https://www.stefansliposhop.de/en/batteries/sls-quantum/sls-quantum-65c/sls-quantum-1300mah-4s1p-14-8v-65c-130c::1602.html">SLS Quantum 1300mAh 4S1P 14,8V 65C/130C</a></td>
83
-<td style="text-align: right;">26.00€</td></tr>
84
-
85
-<tr><td></td>
86
-<td style="text-align: right;">Sum</td>
87
-<td style="text-align: right;">301.62€</td></tr>
88
-</table>
50
+<!--%
51
+tableHelper([ "align-right", "align-last-right", "align-right"],
52
+    [ "Part", "Description", "Cost" ], [
53
+        [ "Frame", ("GEP-LX5 Leopard Frame, Green Color", "https://geprc.com/product/gep-lx5-frame/"), "47.20€" ],
54
+        [ "FC", ("Hobbywing XRotor Omnibus F4 Flight Controller", "https://www.hobbywing.com/goods.php?id=590"), "34.08€" ],
55
+        [ "ESCs", ("Hobbywing XRotor Micro 40A 2-5S 4 in 1 ESC", "https://www.hobbywing.com/goods.php?id=588"), "52.44€" ],
56
+        [ "Motors", ("4x Emax RS2205 2300KV CW/CCW Motor", "https://www.banggood.com/4X-Emax-RS2205-2300-2205-2300KV-Racing-Edition-CW-or-CCW-Motor-For-RC-FPV-Racing-Drone-p-1032857.html?cur_warehouse=CN"), "46.32€" ],
57
+        [ "Props", ("10 Pairs Racerstar S5048 PC 3-blade Propeller 5.0mm Mounting Hole", "https://www.banggood.com/10-Pairs-Racerstar-S5048-PC-3-blade-Propeller-5_0mm-Mounting-Hole-for-RC-Multirotor-FPV-Racing-Drone-p-1169658.html"), "10.48€" ],
58
+        [ "Cam", ("RunCam Micro Sparrow 2.1mm", "https://shop.runcam.com/runcam-micro-sparrow/"), "26.22€" ],
59
+        [ "VTx", ("TBS Unify Pro V3 5V", "https://www.team-blacksheep.com/products/prod:unify_pro"), "44.90€" ],
60
+        [ "Rx", ("FrSky XSR", "https://www.frsky-rc.com/product/xsr/"), "13.98€" ],
61
+        [ "Battery", ("SLS Quantum 1300mAh 4S1P 14,8V 65C/130C", "https://www.stefansliposhop.de/en/batteries/sls-quantum/sls-quantum-65c/sls-quantum-1300mah-4s1p-14-8v-65c-130c::1602.html"), "26.00€" ],
62
+        [ "", "Sum", "301.62€" ]
63
+    ]
64
+)
65
+%-->
89 66
 
90 67
 I have 3D printed the following parts for this copter:
91 68
 

+ 40
- 0
input/projects/san_andreas_unity_simulator.md View File

@@ -0,0 +1,40 @@
1
+title: GTA: San Andreas Unity Drone Simulator
2
+description: Extremely rudimentary quadcopter sim based on SA:Unity
3
+parent: projects
4
+show_in_quadcopters: true
5
+date: 2017-04-01
6
+update: 2017-10-08
7
+github: https://github.com/xythobuz/SanAndreasUnity/tree/sim
8
+---
9
+
10
+After re-playing GTA:SA, and also because of my general interest in old games, I one day searched GitHub for projects related to GTA San Andreas.
11
+This led me to the [San Andreas Unity project](https://github.com/in0finite/SanAndreasUnity).
12
+I was very much interested in Quadcopters at the time, and I was also looking to gain some experience in working with Unity.
13
+So I decided to attempt and [combine](https://github.com/xythobuz/SanAndreasUnity/tree/sim) the two topics.
14
+
15
+Here is a video of the simulator in action.
16
+
17
+<!--%
18
+lightgallery([
19
+    [ "https://www.youtube.com/watch?v=xUAy7KBpkOs", "img/gta_sa_unity_sim_thumb.jpg", "GTA: San Andreas - Drone Flight Simulator" ]
20
+])
21
+%-->
22
+
23
+The "physics" "simulation" in my code is not working very well.
24
+To reach the state that can be seen in the video above already took a lot of tweaking, and the result is obviously not optimal yet.
25
+
26
+Together with my [SerialGamepad project](http://localhost:8080/2015_12_20_serialgamepad.html) I was even able to fly in the SA:Unity sim with my usual quadcopter transmitter.
27
+
28
+But my curiosity was satisfied at this point and I had no more interest in working on it further.
29
+
30
+Here are some screenshots of San Andreas Unity without my quadcopter modifications.
31
+
32
+<!--%
33
+lightgallery([
34
+    [ "img/gta_sa_unity_sim_1.png", "Standing player model" ],
35
+    [ "img/gta_sa_unity_sim_2.png", "Debug UI visible" ],
36
+    [ "img/gta_sa_unity_sim_3.png", "Player in car" ]
37
+])
38
+%-->
39
+
40
+My fork of SanAndreasUnity can be found [on GitHub](https://github.com/xythobuz/SanAndreasUnity), the simulator experiments are [in the 'sim' branch](https://github.com/xythobuz/SanAndreasUnity/tree/sim).

+ 2
- 12
input/stuff/xyrobot.md View File

@@ -18,12 +18,7 @@ The current software as well as Eagle files of the PCB are on [GitHub][7].
18 18
 Other articles that are part of xyRobot:
19 19
 
20 20
 <!--%
21
-mpages = [p for p in pages if p.get("parent", "") == "xyrobot" and p.lang == "en"]
22
-mpages.sort(key=lambda p: int(p["position"]))
23
-for p in mpages:
24
-    print "  * **[%s](%s)**" % (p.title, p.url) # markdown list item
25
-    if p.get("description", "") != "":
26
-        print "<br><span class=\"listdesc\">" + p.get("description", "") + "</span>"
21
+printRobotMenuEnglish()
27 22
 %-->
28 23
 
29 24
 Now some pictures:
@@ -78,8 +73,6 @@ Now some pictures:
78 73
 
79 74
 lang: de
80 75
 
81
-### {{ page.title_de }}
82
-
83 76
 Dies ist mein kleines Roboterprojekt. Eine eigene Platine mit einem AtMega2560 steuert den Roboter. Angeschlossen sind unter anderem mein [Bluetooth Modul][1], eine [Gameboy Kamera][2] und mein [RAM Modul][3]. Vom [Roboternetz][4] stammen das [RN-KeyLCD][5] und der [RN-VN2 Motortreiber][6].
84 77
 
85 78
 Die aktuelle Software sowie Eagle Dateien der Platine finden sich auf [GitHub][7].
@@ -87,10 +80,7 @@ Die aktuelle Software sowie Eagle Dateien der Platine finden sich auf [GitHub][7
87 80
 Andere Artikel die zu xyRobot gehören:
88 81
 
89 82
 <!--%
90
-mpages = [p for p in pages if p.get("parent", "") == "xyrobot" and p.lang == "de"]
91
-mpages.sort(key=lambda p: int(p["position"]))
92
-for p in mpages:
93
-    print "  * **[%s](%s)**" % (p.title, p.url) # markdown list item
83
+printRobotMenuDeutsch()
94 84
 %-->
95 85
 
96 86
 Hier nun einige Bilder meines Roboters:

+ 1
- 0
input/stuff/xyrobot/bluetooth.md View File

@@ -1,6 +1,7 @@
1 1
 title: Bluetooth UART (BTM-222)
2 2
 title_de: Bluetooth UART (BTM-222)
3 3
 description: PCB for the BTM-222 and 5V level converters
4
+description_de: Platine fuer BTM-222 und 5V Pegelwandler
4 5
 parent: xyrobot
5 6
 position: 0
6 7
 comments: true

+ 1
- 0
input/stuff/xyrobot/k6x4008.md View File

@@ -1,6 +1,7 @@
1 1
 title: K6x4008 SRAM
2 2
 title_de: K6x4008 SRAM
3 3
 description: Connecting an K6x4008 SRAM to an ATmega2560
4
+description_de: K6x4008 SRAM an ATmega2560 verwenden
4 5
 parent: xyrobot
5 6
 position: 1
6 7
 comments: true

+ 1
- 0
input/stuff/xyrobot/rremote.md View File

@@ -1,6 +1,7 @@
1 1
 title: rRemote
2 2
 title_de: rRemote
3 3
 description: Remote Control Casio FX9860-GII Calculator AddIn
4
+description_de: Remote Control Casio FX9860-GII Taschenrechner AddIn
4 5
 parent: xyrobot
5 6
 position: 2
6 7
 comments: true

+ 1
- 0
input/stuff/xyrobot/xyrobotremote.md View File

@@ -1,6 +1,7 @@
1 1
 title: xyRobotRemote
2 2
 title_de: xyRobotRemote
3 3
 description: Java Swing App to remote-control a robot
4
+description: Java Swing App um einen Roboter fernzusteuern
4 5
 parent: xyrobot
5 6
 position: 3
6 7
 comments: true

+ 149
- 0
macros.py View File

@@ -1,3 +1,5 @@
1
+# -*- coding: utf-8 -*-
2
+
1 3
 import re
2 4
 import itertools
3 5
 import email.utils
@@ -10,6 +12,153 @@ DEFAULT_LANG = "en"
10 12
 BASE_URL = "https://www.xythobuz.de"
11 13
 
12 14
 # -----------------------------------------------------------------------------
15
+# table helper macro
16
+# -----------------------------------------------------------------------------
17
+
18
+def tableHelper(style, header, content):
19
+    print "<table>"
20
+    if (header != None) and (len(header) == len(style)):
21
+        print "<tr>"
22
+        for h in header:
23
+            print "<th>" + h + "</th>"
24
+        print "</tr>"
25
+    for ci in range(0, len(content)):
26
+        if len(content[ci]) != len(style):
27
+            # invalid call of table helper!
28
+            continue
29
+        print "<tr>"
30
+        for i in range(0, len(style)):
31
+            s = style[i]
32
+            if "align-last-right" in s:
33
+                if ci == (len(content) - 1):
34
+                    print "<td style=\"text-align: right;\">"
35
+                else:
36
+                    if "align-center" in s:
37
+                        print "<td style=\"text-align: center;\">"
38
+                    else:
39
+                        print "<td>"
40
+            elif "align-right" in s:
41
+                print "<td style=\"text-align: right;\">"
42
+            elif "align-center" in s:
43
+                print "<td style=\"text-align: center;\">"
44
+            else:
45
+                print "<td>"
46
+            if isinstance(content[ci][i], tuple):
47
+                text, link = content[ci][i]
48
+                print "<a href=\"" + link + "\">" + text + "</a>"
49
+            else:
50
+                text = content[ci][i]
51
+                print text
52
+            print "</td>"
53
+        print "</tr>"
54
+    print "</table>"
55
+
56
+# -----------------------------------------------------------------------------
57
+# menu helper macro
58
+# -----------------------------------------------------------------------------
59
+
60
+def printMenuItem(p, yearsAsHeading = False, showDateSpan = False, showOnlyStartDate = False, nicelyFormatFullDate = False, lastyear = "0", lang = ""):
61
+    title = p.title
62
+    if lang != "":
63
+        if p.get("title_" + lang, "") != "":
64
+            title = p.get("title_" + lang, "")
65
+    if p.title == "Blog":
66
+        title = p.post
67
+
68
+    year = p.get("date", "")[0:4]
69
+    if year != lastyear:
70
+        lastyear = year
71
+        if yearsAsHeading:
72
+            print "\n\n#### %s\n" % (year)
73
+
74
+    dateto = ""
75
+    if p.get("date", "" != ""):
76
+        year = p.get("date", "")[0:4]
77
+        if showOnlyStartDate:
78
+            dateto = " (%s)" % (year)
79
+
80
+        if p.get("update", "") != "" and p.get("update", "")[0:4] != year:
81
+            if showDateSpan:
82
+                dateto = " (%s - %s)" % (year, p.get("update", "")[0:4])
83
+
84
+        if nicelyFormatFullDate:
85
+            dateto = " - " + datetime.strptime(p.date, "%Y-%m-%d").strftime("%B %d, %Y")
86
+
87
+    print "  * **[%s](%s)**%s" % (title, p.url, dateto)
88
+
89
+    if p.get("description", "") != "":
90
+        description = p.get("description", "")
91
+        if lang != "":
92
+            if p.get("description_" + lang, "") != "":
93
+                description = p.get("description_" + lang, "")
94
+        print "<br><span class=\"listdesc\">" + description + "</span>"
95
+
96
+    return lastyear
97
+
98
+def printRecentMenu(count = 5):
99
+    posts = [p for p in pages if "date" in p]
100
+    posts.sort(key=lambda p: p.get("date"), reverse=True)
101
+    for p in posts[0:count]:
102
+        printMenuItem(p, False, False, False, True)
103
+
104
+def printBlogMenu():
105
+    posts = [p for p in pages if "post" in p]
106
+    posts.sort(key=lambda p: p.get("date", "9999-01-01"), reverse=True)
107
+    lastyear = "0"
108
+    for p in posts:
109
+        lastyear = printMenuItem(p, True, False, False, True, lastyear)
110
+
111
+def printProjectsMenu():
112
+    # prints all pages with parent 'projects' or 'stuff'.
113
+    # first the ones without date, sorted by position.
114
+    # then afterwards those with date, split by year.
115
+    # also supports blog posts with parent.
116
+    enpages = [p for p in pages if p.lang == "en"]
117
+
118
+    dpages = [p for p in enpages if p.get("date", "") == ""]
119
+    mpages = [p for p in dpages if any(x in p.get("parent", "") for x in [ 'projects', 'stuff' ])]
120
+    mpages.sort(key=lambda p: [int(p.get("position", "999"))])
121
+    for p in mpages:
122
+        printMenuItem(p)
123
+
124
+    dpages = [p for p in enpages if p.get("date", "") != ""]
125
+    mpages = [p for p in dpages if any(x in p.get("parent", "") for x in [ 'projects', 'stuff' ])]
126
+    mpages.sort(key=lambda p: [p.get("date", "9999-01-01")], reverse = True)
127
+    lastyear = "0"
128
+    for p in mpages:
129
+        lastyear = printMenuItem(p, True, True, False, False, lastyear)
130
+
131
+def print3DPrintingMenu():
132
+    mpages = [p for p in pages if p.get("parent", "") == "3d-printing" and p.lang == "en"]
133
+    mpages.sort(key=lambda p: int(p["position"]))
134
+    for p in mpages:
135
+        printMenuItem(p, False, True, True)
136
+
137
+def printQuadcopterMenu():
138
+    mpages = [p for p in pages if p.get("parent", "") == "quadcopters" and p.lang == "en"]
139
+    mpages.sort(key=lambda p: int(p["position"]))
140
+    for p in mpages:
141
+        printMenuItem(p, False, True, True)
142
+
143
+def printQuadcopterRelatedMenu():
144
+    mpages = [p for p in pages if p.get("show_in_quadcopters", "false") == "true"]
145
+    mpages.sort(key=lambda p: [p.get("date", "9999-01-01")], reverse = True)
146
+    for p in mpages:
147
+        printMenuItem(p, False, True, True)
148
+
149
+def printRobotMenuEnglish():
150
+    mpages = [p for p in pages if p.get("parent", "") == "xyrobot" and p.lang == "en"]
151
+    mpages.sort(key=lambda p: int(p["position"]))
152
+    for p in mpages:
153
+        printMenuItem(p)
154
+
155
+def printRobotMenuDeutsch():
156
+    mpages = [p for p in pages if p.get("parent", "") == "xyrobot" and p.lang == "de"]
157
+    mpages.sort(key=lambda p: int(p["position"]))
158
+    for p in mpages:
159
+        printMenuItem(p, False, False, False, False, "0", "de")
160
+
161
+# -----------------------------------------------------------------------------
13 162
 # lightgallery helper macro
14 163
 # -----------------------------------------------------------------------------
15 164
 

+ 4
- 2
poole.py View File

@@ -1,4 +1,5 @@
1 1
 #!/usr/bin/env python2
2
+# -*- coding: utf-8 -*-
2 3
 
3 4
 # =============================================================================
4 5
 #
@@ -61,7 +62,8 @@ else:
61 62
     import tempfile
62 63
     def exec_(code, envdic):
63 64
         with tempfile.NamedTemporaryFile() as tf:
64
-            tf.write(code)
65
+            tf.write('# -*- coding: utf-8 -*-\n')
66
+            tf.write(code.encode('utf-8'))
65 67
             tf.flush()
66 68
             execfile(tf.name, envdic)
67 69
 
@@ -388,7 +390,7 @@ def build(project, opts):
388 390
         """Abort because of an exception in inlined Python code."""
389 391
         print("abort  : Python %s in %s failed" % (itype, page))
390 392
         print((" %s raising the exception " % itype).center(79, "-"))
391
-        print(inline)
393
+        print(inline.encode('utf-8'))
392 394
         print(" exception ".center(79, "-"))
393 395
         print(exc)
394 396
         sys.exit(1)

BIN
static/img/gta_sa_unity_sim_1.png View File


BIN
static/img/gta_sa_unity_sim_1_small.png View File


BIN
static/img/gta_sa_unity_sim_2.png View File


BIN
static/img/gta_sa_unity_sim_2_small.png View File


BIN
static/img/gta_sa_unity_sim_3.png View File


BIN
static/img/gta_sa_unity_sim_3_small.png View File


BIN
static/img/gta_sa_unity_sim_thumb.jpg View File


Loading…
Cancel
Save