Naučte sa Python a elektroniku s edíciou Minecraft Pi

Naučte sa Python a elektroniku s edíciou Minecraft Pi

Vždy ste sa chceli naučiť kódovať, ale nevedeli ste, kde začať? Naučte sa ovládať Minecraft na Raspberry Pi pomocou Pythonu a jednoduchej elektroniky. Tu je konečný výsledok:





Na tento projekt budete potrebovať Pi 2 alebo novší, a aj keď väčšinu týchto úloh môžete vykonávať prostredníctvom príkazového riadka cez Secure Shell (SSH), tento tutoriál sa zameria na kódovanie priamo na Pi.





Ste v Minecrafte nováčik? Nebojte sa - tu je náš Príručka pre začiatočníkov Minecraft .





Úvod do Minecraftu Pi

Minecraft pre Raspberry Pi bol vyvinutý na učenie a drotárstvo (a je zadarmo). Dodáva sa s rozhraním API (Application Programming Interface), ktoré umožňuje kódu ľahko komunikovať s Minecraftom. Je skvelé naučiť sa kódovať v Pythone a začať s elektronikou.

Čo je to Python?

Python je programovací jazyk. to je vykladané , čo znamená, že keď spustíte súbor alebo program Python, počítač musí so súborom najskôr urobiť kus práce. Temnejšie stránky sú, že ho možno považovať za pomalý v porovnaní s kompilovanými jazykmi [Broken URL Removed].



Výhodou interpretovaných jazykov je rýchlosť kódovania a ich priateľskosť. Nemusíte to hovoriť počítaču čo údaje, ktoré chcete uložiť, iba to, že chcete niečo uložiť a počítač príde na to, čo má urobiť. Existujú samozrejme výnimky, a toto je trochu zjednodušený pohľad, programovanie by však malo byť zábavné! Ak sa pustíte do hĺbky zložitých technických detailov, môže to byť trochu namáhavé.

Python rozlišuje veľké a malé písmena. To je dôležité vedieť, pretože Python nerozpoznáva objekty aj keď sú napísané správne ak je prípad nesprávny. „Dosomething ()“ nebude fungovať, ak sa metóda skutočne nazýva „DoSomething ()“. Python tiež používa odsadenie . Ostatným programovacím jazykom môže byť jedno, koľko zarážok má váš kód, zatiaľ čo v Pythone robí starostlivosť. Odrážky slúžia na to, aby Pythonu povedali, kam kód patrí. Iné jazyky môžu na zoskupenie kódu používať „Curly Braces“ ({}) - Python ich nepoužíva. Python používa na komentáre hodnotu hash (#) a komentáre slúžia na to, aby iným vývojárom alebo ľuďom pozerajúcim sa na kód povedali, čo konkrétna časť robí alebo prečo je potrebná. Po hashe Python čokoľvek ignoruje.





Nakoniec existujú dve hlavné verzie Pythonu - Python 2.7.x a Python 3.x. Medzi týmito dvoma existuje niekoľko rozdielov ( ake su rozdiely? ). Tento tutoriál bude používať Python 3.

Pôvodné nastavenie

Poskytnutie vášho Pi už je nastavenie a spustenie Raspbian , nie je potrebné veľa úvodného nastavenia.





Otvorený terminál ( Menu> Príslušenstvo> Terminál ) a spustite tento príkaz. Vždy je vhodné udržiavať aktualizovaný zoznam úložísk, čím sa stiahne najnovší zoznam programov (nesťahujú sa samotné programy, to pomáha Pi vedieť, aké programy sa volajú a kde ich nájsť).

sudo apt-get update

Teraz aktualizujte Pi (môže to chvíľu trvať):

sudo apt-get upgrade

Python a Minecraft Pi sú už nainštalované, ale ak Minecraft Pi z akéhokoľvek dôvodu nie je nainštalovaný, inštalácia je jednoduchá:

sudo apt-get install minecraft-pi

Prejdite na dokumenty a vytvorte nový priečinok s názvom „Minecraft“:

cd Documents/
mkdir Minecraft

Obsah tohto nového priečinka si môžete prezrieť:

ls

Tu je tip - ak začnete písať a stlačíte kláves TAB, príkazový riadok sa pokúsi automaticky doplniť príkaz za vás.

Cestu do aktuálneho adresára môžete preskúmať pomocou príkazu pwd, čo znamená Print Working Directory:

pwd

Spustite Minecraft tak, že prejdete na Ponuka> Hry> Minecraft Pi . Tento beh budete potrebovať, ale vrátite sa k nemu neskôr.

Otvorte Python 3 z Ponuka> Programovanie> Python 3 (IDLE) . Tento program poskytuje spôsob, ako môžete spúšťať príkazy Pythonu a písať programy.

Teraz by ste sem mohli písať príkazy Pythonu, ale to nie je príliš praktické. Ísť do Súbor> Nový súbor a potom Súbor> Uložiť a uložte ho do priečinka, ktorý ste vytvorili predtým. ( Dokumenty> Minecraft ). Nazvime to ' ahoj_world.py '. Príponu .py nemusíte používať, bude sa pridávať automaticky, ale je to osvedčený postup.

Ak prepnete späť na terminál a prejdete do priečinka Minecraft, mali by ste vidieť súbor, ktorý ste práve vytvorili:

cd Minecraft/
ls

Tento súbor môžete spustiť takto:

python hello_world

Všimnite si, ako je „python“ napísaný malými písmenami. To musí byť pred názvom súboru, pretože hovorí Pi, že nasledujúci súbor je Python, takže by mal byť spustený ako taký.

Prepnite späť do editora Pythonu a zadajte:

print 'Hello, World!'

Uložte tento súbor a spustite ho znova - teraz by ste mali vidieť „Ahoj, svet!“ objaviť sa v príkazovom riadku - úhľadne! Príkaz print jednoducho povie Pythonu, aby vydal nasledujúci text v dvojitých úvodzovkách. Je to dobré, ale nie veľmi užitočné pre Minecraft, prepojme to:

from mcpi.minecraft import Minecraft
mc = Minecraft.create()
mc.postToChat('Hello, World!')

Ak teraz tento súbor uložíte a spustíte, malo by sa vám zobraziť „Ahoj, svet!“ objaviť sa v hre Minecraft. Poďme rozdeliť kód:

from mcpi.minecraft import Minecraft

Tento riadok hovorí Pythonu, že chcete použiť kód z iného súboru. Tento súbor mcpi.minecraft bol vyvinutý tak, aby umožňoval ľahké ovládanie Minecraftu.

mc = Minecraft.create()

Tento riadok vytvára objekt s názvom 'mc' (Minecraft). Musíte to vytvoriť, aby ste umožnili komunikáciu s hrou Minecraft - nestačí iba zahrnúť súbor.

mc.postToChat('Hello, World!')

Nakoniec tento riadok hovorí Minecraftu, aby napísal nejaký text do chatu. Skúste zmeniť „Ahoj, svet!“ na niečo iné a uvidíte, čo sa stane, ale nezabudnite zahrnúť oba úvodzovky. Ak máte problémy so softvérom, jedná sa o bežné chyby Python a Minecraft Pi:

  • AttributeError - jedná sa o preklep, napríklad pint alebo prnt namiesto tlače
  • NameError: názov „Minecraft“ nie je definovaný - nezabudnite importovať potrebné moduly
  • NameError: názov „true“ nie je definovaný - v Pythone sa rozlišujú malé a veľké písmená, zmeňte na „True“
  • socket.error: [Errno 111] Pripojenie odmietnuté - uistite sa, že je spustený Minecraft

Projekty

Teraz, keď poznáte základy Pythonu a Minecraftu, urobme pár skvelých projektov. Celý kód je možné stiahnuť z Githubu.

Automatický staviteľ mostov

Tento program efektívne postaví most cez vodu. Akonáhle sa hráč priblíži k vodnému dielu, program prevedie niekoľko blokov na kameň. Pretože Minecraft používa súradnicový systém, je veľmi ľahké zistiť polohu hráča spolu s typom blokov okolo hráča. Minecraft Pi je mierne obmedzený, takže nie je možné hromadne aktualizovať niekoľko rôznych blokov. Toto správanie však môžete jednoducho kódovať sami.

Vytvorte nový súbor ( Súbor> Nový súbor ) a uložte ho ako „ bridge_builder.py '.

from mcpi.minecraft import Minecraft
mc = Minecraft.create() # create Minecraft Object
while True:
x, y, z = mc.player.getPos() # store player position

# store the surrounding blocks
a = mc.getBlock(x, y - 1, z + 1)
b = mc.getBlock(x, y - 1, z - 1)
c = mc.getBlock(x - 1, y - 1, z)
d = mc.getBlock(x + 1, y - 1, z)
if a == 8 or a == 9 or b == 8 or b == 9 or c == 8 or c == 9 or d == 8 or d == 9:
# 8 or 9 is water. Set surrounding blocks on floor to a solid (stone) if water is found
mc.setBlocks(x, y - 1, z, x + 1, y - 1, z + 1, 1)
mc.setBlocks(x, y - 1, z, x - 1, y - 1, z - 1, 1)
mc.setBlocks(x, y - 1, z, x - 1, y - 1, z + 1, 1)
mc.setBlocks(x, y - 1, z, x + 1, y - 1, z - 1, 1)

Všimnite si, ako sa hodnota y skutočne pozerá na y - 1. Toto je úroveň podlahy. Ak by sa použila hodnota y, skript by hľadal bloky zhruba na úrovni kolien - nefungovalo by to veľmi dobre! Mc.getBlock () vráti id bloku pre dané súradnice. Pretože x, y a z sú súradnice hráča, môžete ich pridať alebo odčítať a získať tak pozície okolo hráča. Nemusíte používať hodnoty x, y a z, môžete použiť akékoľvek číslo, možno však neviete, ako sa konkrétny blok týka hráča - je lepšie použiť hodnoty relatívne k prehrávaču. Spustite tento súbor z príkazového riadka a uvidíte, čo sa stane.

Mali by ste vidieť, že malá plocha zeme sa zmení na kameň, akonáhle sa hráč dostane k vodnému dielu. Nie je to skvelé - ste schopní ísť dostatočne rýchlo na to, aby ste spôsobili problém. Môžete to vyriešiť premenou väčšieho objemu vody na pevninu. Poslednou časťou metódy mc.setBlocks () je ID bloku. Jedným z nich je ID bloku kameňa. Môžete to zmeniť na drevo, trávu alebo čokoľvek. Ak by ste chceli, mohli by ste to celkom ľahko previesť na komplexný dizajn - možno visutý most!

Tlačidlo super ťažby

Tento príklad urobí krátku prácu pri ťažbe. Skladá sa z fyzického tlačidla, ktoré po stlačení vyťaží 10 kociek kociek. Začnime tlačidlom. Podobne ako tlačidlá na Arduine budete potrebovať malé množstvo elektroniky, ktoré nájdete v základnej štartovacej súprave:

  • 1 x Breadboard
  • 1 x momentový spínač
  • 1 x 220 ohmový odpor
  • Ženské> mužské štartovacie káble
  • Samec> Samec prepojovacích káblov

Tu je obvod:

Pripojenie pomocou tlačidla Pi

Tento odpor sa nazýva „sťahovací“ odpor. Pomáha to zaistiť, že to, čo si Pi myslí, že je stlačené tlačidlo, je skutočne stlačené tlačidlo. Toto nemusíte používať, ale odporúča sa to, pretože bez neho môžete nájsť veľa hluku a falošných údajov.

Tlačidlo je pripojené ku kolíku 14 univerzálneho vstupného výstupu (GPIO). Môžete použiť ľubovoľný kolík GPIO, pozrite sa však na pinout po prvé, pretože nie sú všetky ovládateľné z Pi a medzi modelmi sa mierne líšia.

Teraz, keď je tlačidlo pripojené, je čas ho otestovať. Vytvorte nový súbor a uložte ho ako „ button_test.py '. Pridajte tento kód, uložte ho a potom ho spustite v termináli.

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use
GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input
while True:
if GPIO.input(14) == True: # look for button press
print 'BUTTON WORKS!' # log result
time.sleep(0.5) # wait 0.5 seconds

Stlačte Ovládanie + C. zastaviť skript. Ak všetko funguje správne, mali by ste vidieť „TLAČIDLO FUNGUJE!“ v Termináli. Všimnite si, ako tento modul, podobne ako modul Minecraft, používa moduly RPi.GPIO a čas. Tieto umožňujú Pi prístup k hardvérovým kolíkom a poskytujú užitočné funkcie načasovania.

Teraz dokončíme zvyšok kódu. Vytvorte nový súbor s názvom „ super_mine.py '. Tu je kód:

import RPi.GPIO as GPIO
import time
from mcpi.minecraft import Minecraft
mc = Minecraft.create() # create Minecraft Object
GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use
GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input
while True:
if GPIO.input(14) == True: # look for button press
x, y, z = mc.player.getPos() # read the player position
mc.setBlocks(x, y, z, x + 10, y + 10, z + 10, 0) # mine 10 blocks
mc.setBlocks(x, y, z, x - 10, y + 10, z - 10, 0) # mine 10 blocks
time.sleep(0.5) # wait 0.5 seconds

mc.player.getPos () vráti hráčom aktuálne súradnice, ktoré sú potom uložené v x, y a z. The setBlocks () metóda hovorí Minecraftu, aby vyplnil všetky bloky od začiatku do konca nasledujúcim blokom. Nula je blokové ID pre vzduch. Môžete to zmeniť na iný identifikátor bloku, aby oblasť vyplnila plnú hmotu. Môžete tiež zmeniť súradnice na +100 alebo dokonca +1000 blokov, ale Pi môže začať bojovať, ak sa príliš zbláznite. Všimnite si, ako je y + 10 rovnaké pre oba riadky. Môžete to zmeniť na y - 10, ak by ste chceli odstrániť bloky pod zemou.

Teleportovanie

Ďalším jednoduchým použitím tohto tlačidla by mohlo byť „teleportovanie“. Minecraft Pi Api poskytuje spôsob, ako nastaviť pozíciu hráča. Nasledujúci kód „teleportuje“ hráča na predvolené miesto:

mc.player.setPos(0, 0, 0)

Všimnite si, že jeho metóda akceptuje tri parametre; x, y a z - takže ich môžete nastaviť na čokoľvek, aby ste hráča okamžite teleportovali na dané miesto.

Vytvorte kópiu súboru super_mine ( Súbor> Uložiť Kopírovať ako ) a upravte ho nahradením reťazca if nasledujúcim:

if GPIO.input(14) == True: # look for button press
mc.player.setPos(0, 0, 0) # teleport player
time.sleep(0.5) # wait 0.5 seconds

Tento súbor by teraz mal vyzerať takto:

import RPi.GPIO as GPIO
from mcpi.minecraft import Minecraft
import time
mc = Minecraft.create() # create Minecraft Object
GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use
GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input
while True:
if GPIO.input(14) == True: # look for button press
mc.player.setPos(0, 0, 0) # teleport player
time.sleep(0.5) # wait 0.5 seconds

Uložiť ako ' teleport.py “a bežte.

Keď to použijete, hráč môže uviaznuť v niektorých blokoch. V takom prípade budete musieť súradnice prispôsobiť známemu voľnému priestoru (ľavá horná časť obrazovky zobrazuje vašu aktuálnu polohu).

Postaviť dom

Poslednou úlohou tohto tlačidla je postaviť dom. Rovnako ako vyššie uvedený príklad rýchlej ťažby, toto jednoducho nahradí bloky okolo hráča, aby si postavil dom. Na rôzne materiály (okná, steny atď.) Sa použijú rôzne ID blokov. Aby bolo kódovanie jednoduchšie, vytvorí sa pevný blok a potom sa odstráni vnútro (blok sa nastaví na vzduch), čím sa vytvorí dutá škrupina. Môžete pridať doplnky ako posteľ alebo dvere, ale projekt Minecraft Pi je trochu neúplný, a hoci tieto objekty fungujú, keď ich umiestni hráč, nie sú pri použití Pythonu geniálne.

from mcpi.minecraft import Minecraft
import RPi.GPIO as GPIO
import time
mc = Minecraft.create() # create Minecraft Object
GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use
GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input
while True:
if GPIO.input(14) == True:
x, y, z = mc.player.getPos()
mc.setBlocks(x + 2, y - 1, z + 2, x + 7, y + 3, z + 8, 5) # make shell
mc.setBlocks(x + 3, y, z + 3, x + 6, y + 2, z + 7, 0) # remove inside
mc.setBlocks(x + 2, y, z + 5, x + 2, y + 1, z + 5, 0) # make doorway
mc.setBlocks(x + 4, y + 1, z + 8, x + 5, y + 1, z + 8, 102) # make window 1
mc.setBlocks(x + 4, y + 1, z + 2, x + 5, y + 1, z + 2, 102) # make window 2
mc.setBlocks(x + 7, y + 1, z + 4, x + 7, y + 1, z + 6, 102) # make window 3

Uložiť ako ' house.py “a bežte. Ak je všetko v poriadku, mali by ste vidieť malý domček (možno sa budete musieť otočiť, aby ste ho našli). Je to veľmi jednoduché, otváracie a niektoré okná. Teoreticky neexistuje žiadny limit na to, akú veľkú alebo komplexnú budovu by ste mohli postaviť.

Vytvorte minihru

Ďalej urobme minihru! To bude celkom jednoduché, keď hráč vstúpi na blok piesku, po náhodnom čase sa zmení na lávu. Je to dobrá hra, pretože si môžete navrhnúť svoje vlastné úrovne alebo ich upraviť, aby boli veci ťažšie. V tomto prípade tlačidlo nebudete potrebovať.

Vytvorte nový súbor a uložte ho ako „ mini_game.py '. Tu je kód:

from mcpi.minecraft import Minecraft
import random
import time
mc = Minecraft.create() # create Minecraft Object
while True:
x, y, z = mc.player.getPos()
block_under_player = mc.getBlock(x, y - 1, z)

if block_under_player == 12:
# player standing on sand, start the timer
random_time = random.uniform(0.1, 2.5) # generate random number
time.sleep(random_time); # wait
mc.setBlock(x, y - 1, z, 11) # turn it into lava

Tento kód je dobrým štartérom na serveri náhodný () funkcia: random.uniform (0,1, 2,5) vygeneruje náhodné číslo medzi 0,1 (1/10 sekundy) a 2,5 (2 1/2 sekundy). Zvýšenie týchto čísel uľahčí hru.

Vyskúšaj to! Postavte sa na blok piesku a onedlho sa zmení na lávu. To by mohol byť základ komplexnejšej hry.

Vytvorte ďalšiu minihru

Podstata tejto hry je jednoduchá - nestojte na drevenej podlahe, keď vyprší čas. Hráč sa teleportuje do „arény“. Sú nútení stáť na mieste, kým sa hra nezačne. Hneď ako sa spustí časovač, podlaha sa zmení na vodu. Aby hráč prežil, musí stáť v bezpečnej zóne (diamantové bloky). Každá úroveň skracuje časovač o jednu sekundu. Po každej úspešnej úrovni sa bezpečná oblasť zvýši. Pozrite sa na nasledujúci kód:

import time
import random
from mcpi.minecraft import Minecraft
mc = Minecraft.create() # create Minecraft Object
# clear area
mc.setBlocks(-10, 1, -10, 25, 5, 25, 0)
# create arena shell
mc.setBlocks(0, 0, 0, 25, 10, 25, 17)
# hollow out arena
mc.setBlocks(1, 1, 1, 24, 10, 24, 0)
# move player to arena
mc.player.setPos(14, 25, 20) # teleport player
# make them stay put
# teleport player to start position every 1/10th second.
# do this for 5 seconds then start the game
time.sleep(2)
total_wait = 0
mc.postToChat('Waiting to Start')
while total_wait <5:
mc.player.setPos(14, 1, 20) # teleport player
time.sleep(0.1)
total_wait += 0.1
mc.postToChat('BEGIN!')
# 10 levels
for level in range(10):
x, y, z = mc.player.getPos()
level_time = 10 - level # reduce time by 1 second for each level
mc.postToChat('Level - ' + str(level + 1) + ' start')
# build floor
mc.setBlocks(0, 0, 0, 25, 0, 25, 17)
# make safe area
safe_area_start = random.uniform(0, 22)
safe_area_end = random.uniform(0, 22)
mc.setBlocks(safe_area_start, 0, safe_area_end, safe_area_start + level, 0, safe_area_end + level, 57)
elapsed_time = 0
while elapsed_time <10:
x, y, z = mc.player.getPos()
time.sleep(0.25)
elapsed_time += 0.25
# check player is still on floor
if y <0.75:
mc.postToChat('Game Over')
break;
else:
# remove floor
mc.setBlocks(-10, 0, -10, 25, 0, 25, 8)
# put safe area back
mc.setBlocks(safe_area_start, 0, safe_area_end, safe_area_start + level, 0, safe_area_end + level, 57)
time.sleep(2.5)
continue
break

Uložiť ako ' mini_game_2.py “a vyskúšaj to.

Pi 2 má pri spustení Minecraftu niekoľko problémov s výkonom. Graf využitia centrálnej procesorovej jednotky (CPU) ( pravý horný roh ) nikdy nevykazuje žiadne veľké zaťaženie, takže musí ísť o zlý dizajn a optimalizácie vývojárov. Tieto problémy nesúvisia so spusteným kódom (pretože pokračujú, aj keď nie je spustený Python), ale sú ešte umocnené touto mini hrou. Ak má váš Pi skutočne problémy, možno budete chcieť zmenšiť veľkosť arény alebo pretaktovať svoj Pi.

ako zabezpečiť, aby Windows 7 vyzeral ako xp

Diamantový detektor

Urobme ďalší okruh. Toto použije diódu vyžarujúcu svetlo (LED), aby sa rozsvietila, ak sú pod ňou diamanty (do 15 blokov). Čo potrebujete:

  • 1 x Breadboard
  • 1 x LED dióda
  • 1 x 220 ohmový odpor
  • Ženské> mužské štartovacie káble
  • Samec> Samec prepojovacích káblov

Tu je obvod:

Pripojte anódu (dlhá noha) k kolíku GPIO 14. Tento kolík funguje ako +5v. Pripojte katódu (krátku nohu) k zemi.

Použil som lacnú hračku z rudy a upravil som ju odstránením zadného krytu a elektroniky, potom som pod ňu umiestnil LED diódu. Môžete to ľahko vytvoriť pomocou horúceho lepidla alebo niečoho podobného.

Uložiť tento kód ako ' diamonds.py ':

import RPi.GPIO as GPIO
import time
from mcpi.minecraft import Minecraft
mc = Minecraft.create() # create Minecraft Object
led_pin = 14 # store the GPIO pin number
GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use
GPIO.setup(14, GPIO.OUT) # tell the Pi this pin is an output
while True:
# repeat indefinitely
x, y, z = mc.player.getPos()
for i in range(15):
# look at every block until block 15
if mc.getBlock(x, y - i, z) == 56:
GPIO.output(led_pin, True) # turn LED on
time.sleep(0.25) # wait
GPIO.output(led_pin, False) # turn LED off
time.sleep(0.25) # wait

Keď je pod prehrávačom blok diamantových rúd (do 15 blokov), kontrolka začne blikať.

ThinkGeek Minecraft Light -Up Blue Stone Diamond Ore - určite udržíte Pigmen preč KÚPIŤ TERAZ NA AMAZÓNE

Vyrobili ste niečo skvelé s Minecraft Pi? Dajte mi vedieť v komentároch, čo ste urobili alebo ako ďaleko ste sa v hrách dostali.

Dúfame, že sa vám budú páčiť položky, ktoré odporúčame a diskutujeme! MUO má pridružené a sponzorované partnerstvá, takže dostávame časť výnosov z niektorých vašich nákupov. To neovplyvní cenu, ktorú zaplatíte, a pomôže nám to ponúknuť najlepšie odporúčania produktov.

zdieľam zdieľam Tweet E -mail Oplatí sa upgradovať na Windows 11?

Windows bol prepracovaný. Stačí to však na to, aby ste sa presvedčili o prechode z Windows 10 na Windows 11?

Čítajte ďalej
Súvisiace témy
  • DIY
  • Programovanie
  • Minecraft
  • Malinový koláč
  • Elektronika
  • Python
O autorovi Joe Coburn(136 publikovaných článkov)

Joe je absolventom počítačových vied na University of Lincoln, UK. Je profesionálnym softvérovým vývojárom a keď nelieta s dronmi alebo nepíše hudbu, často ho zastihne fotografovanie alebo vytváranie videí.

Viac od Joe Coburn

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné elektronické knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber
Kategórie Diy