PC KartKicker
From ICO wiki
Meeskond
- Martin Kask
- Rain Saarmäe
- Jan Eerik
Idee
Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).
Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara "jõuga" ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.
Põhiline funktsionaalsus
- Kasutaja saab lisada üks kuni mitu arvutiskeemi
- Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)
- Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne
- Nii pooleliolevaid kui valminud skeeme saab salvestada
- Igal jupil on oma vaade koos tehnilise infoga
Nice to have
- Parima hinna kuvamine (nt Amazon, Newegg)
- Komponentide võrdlus
Ülesanne 1: XML
Teema
XML
<?xml version="1.0" encoding="utf-8"?> <components> <cases> <case brand="NZXT" name="S340" type="Mid Tower" formFactor="ATX" bay5="0" bay3="3" psu="" maxGpuLength="364" maxCpuHeight="161" primaryColor="black" secondaryColor="red" price="66.99"></case> <case brand="Deepcool" name="TESSERACT SW" type="Mid Tower" formFactor="ATX" bay5="2" bay3="4" psu="" maxGpuLength="" maxCpuHeight="" primaryColor="black" secondaryColor="light blue" price="38.99"></case> <case brand="Xion" name ="XON-310_BK" type="Mid Tower" formFactor="MicroATX" bay5="0" bay3="1" psu="" maxGpuLength="" maxCpuHeight="" primaryColor="black" secondaryColor="" price="22.98"></case> <case brand="Corsair" name="750D" type="Full tower" formFactor="MicroATX" bay5="3" bay3="6" psu="" maxGpuLength="450" maxCpuHeight="170" primaryColor="black" secondaryColor="" price="149.99"></case> </cases> <cpus> <cpu brand="Intel" name="7700k" cooler="no" series="Core i7" family="Kaby Lake" socket="LGA1151" iGPU="HD 630" cores="4" threads="8" ecc="no" speed="4,2" TDP="91" lithography="14" maxPowerDraw="" price="327.98"></cpu> <cpu brand="Intel" name="7600k" cooler="no" series="Core i5" family="Kaby Lake" socket="LGA1151" iGPU="HD 630" cores="4" threads="4" ecc="no" speed="3,8" TDP="91" lithography="14" maxPowerDraw="" price="233.89"></cpu> <cpu brand="Intel" name="6700k" cooler="no" series="Core i7" family="Skylake" socket="LGA1151" iGPU="HD 530" cores="4" threads="8" ecc="no" speed="4,0" TDP="91" lithography="14" maxPowerDraw="" price="316.98"></cpu> <cpu brand="Intel" name="6600k" cooler="no" series="Core i5" family="Skylake" socket="LGA1151" iGPU="HD 530" cores="4" threads="4" ecc="no" speed="3,5" TDP="91" lithography="14" maxPowerDraw="" price="219.99"></cpu> <cpu brand="Intel" name="E5-2699 V3" cooler="no" series="Xeon" family="Haswell" socket="LGA2011-3" iGPU="" cores="18" threads="36" ecc="yes" speed="2,3" TDP="145" lithography="22" maxPowerDraw="" price="3410.46"></cpu> <cpu brand="AMD" name="1800X" cooler="no" series="Ryzen 7" family="Ryzen" socket="AM4" iGPU="" cores="8" threads="16" ecc="no" speed="3,6" TDP="95" lithography="14" maxPowerDraw="" price="469.99"></cpu> </cpus> <cpucoolers> <cpucooler brand="Cooler Master" name="Hyper 212 EVO" liquid="no" rad="" fans="1" height="159" price="24.88"> <sockets> <socket>AM2</socket> <socket>AM2+</socket> <socket>AM3</socket> <socket>AM3+</socket> <socket>FM1</socket> <socket>FM2</socket> <socket>FM2+</socket> <socket>LGA1150</socket> <socket>LGA1151</socket> <socket>LGA1155</socket> <socket>LGA1156</socket> <socket>LGA1366</socket> <socket>LGA2011</socket> <socket>LGA2011-3</socket> <socket>LGA775</socket> </sockets> </cpucooler> <cpucooler brand="Corsair" name="H100i v2" liquid="yes" rad="240" fans="2" height="" price="99.99"> <sockets> <socket>AM2</socket> <socket>AM2+</socket> <socket>AM3</socket> <socket>AM3+</socket> <socket>FM1</socket> <socket>FM2</socket> <socket>FM2+</socket> <socket>LGA1150</socket> <socket>LGA1151</socket> <socket>LGA1155</socket> <socket>LGA1156</socket> <socket>LGA1366</socket> <socket>LGA2011</socket> <socket>LGA2011-3</socket> </sockets> </cpucooler> <cpucooler brand="Noctua" name="NH-D15" liquid="no" rad="" fans="2" height="165" price="85.49"> <sockets> <socket>AM2</socket> <socket>AM2+</socket> <socket>AM3</socket> <socket>AM3+</socket> <socket>FM1</socket> <socket>FM2</socket> <socket>FM2+</socket> <socket>LGA1150</socket> <socket>LGA1151</socket> <socket>LGA1155</socket> <socket>LGA1156</socket> <socket>LGA1366</socket> <socket>LGA2011</socket> <socket>LGA2011-3</socket> </sockets> </cpucooler> </cpucoolers> <gpus> <gpu manufacturer="PowerColor" brandname="Radeon" codename="RX460" series="Red Dragon" vram="2" psuPin="" length="226" maxPowerDraw="" price="73.98"></gpu> <gpu manufacturer="Sapphire" brandname="Radeon" codename="RX480" series="Nitro+" vram="8" psuPin="8" length="240" maxPowerDraw="" price="253.99"></gpu> <gpu manufacturer="MSI" brandname="Geforce" codename="GTX1070" series="Quick Silver OC" vram="8" psuPin="6+8" length="279" maxPowerDraw="" price="409.99"></gpu> </gpus> <memorychips> <memorychip brand="Kingston" name="ValueRAM" type="DIMM" rank="single" cas="15" gen="DDR4" speed="2133" moduleSize="8" modules="1" ECC="yes" price="67.58"></memorychip> <memorychip brand="Corsair" name="Dominator Platinum" type="DIMM" rank="" cas="15" gen="DDR4" speed="3000" moduleSize="8" modules="2" ECC="no" price="123.25"></memorychip> <memorychip brand="ADATA" name="" type="DIMM" rank="" cas="15" gen="DDR3" speed="1600" moduleSize="8" modules="1" ECC="no" price="88.29"></memorychip> </memorychips> <motherboards> <motherboard brand="Asus" name="Z170-A" formFactor="ATX" chipset="Z170" socket="LGA1151" memoryType="DDR4" memorySlots="4" maxMemory="64" maxMemorySpeed="3400" video="" sata3="4" ethernet="1000" usb3="yes" price="152.99"></motherboard> <motherboard brand="ASRock" name="H110M-HDS" formFactor="MicroATX" chipset="H110" socket="LGA1151" memoryType="DDR4" memorySlots="2" maxMemory="32" maxMemorySpeed="2133" video="" sata3="4" ethernet="1000" usb3="yes" price="37.98"></motherboard> <motherboard brand="Asus" name="Prime X370-PRO" formFactor="ATX" chipset="X370" socket="AM4" memoryType="DDR4" memorySlots="4" maxMemory="64" maxMemorySpeed="3200" video="" sata3="8" ethernet="1000" usb3="yes" price="162.98"></motherboard> </motherboards> <psus> <psu brand="EVGA" name="SuperNOVA 650" formFactor="ATX" wattage="650" eff80plus="gold" modular="full" pcie6="0" pcie6p2="4" price="77.88"></psu> <psu brand="be Quiet!" name="Pure Power L8 600W" formFactor="ATX" wattage="600" eff80plus="bronze" modular="no" pcie6="0" pcie6p2="4" price="77.88"></psu> <psu brand="Corsair" name="CX550M" formFactor="ATX" wattage="550" eff80plus="bronze" modular="semi" pcie6="0" pcie6p2="2" price="43.98"></psu> </psus> <storage> <ssds> <ssd brand="Samsung" name="850 PRO" capacity="2048" cache="" interface="sata3" formFactor="2,5" price="823.14"></ssd> <ssd brand="Intel" name="DC P3608" capacity="4096" cache="" interface="pcie8x" formFactor="pcie" price="8867.99"></ssd> <ssd brand="Samsung" name="960 PRO" capacity="1024" cache="" interface="m.2" formFactor="m.2-2280" price="629.95"></ssd> </ssds> <hdds> <hdd brand="Western Digital" name="Black" capacity="6144" cache="128" interface="sata3" formFactor="3,5" rpm="7200" price="279.00"></hdd> <hdd brand="Seagate" name="BarraCuda Pro" capacity="10240" cache="256" interface="sata3" formFactor="3,5" rpm="7200" price="429.99"></hdd> <hdd brand="Hitachi" name="Travelstar" capacity="1024" cache="32" interface="sata3" formFactor="2,5" rpm="7200" price="53.99"></hdd> </hdds> </storage> </components>
XML skeem (XSD)
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="components"> <xs:complexType> <xs:sequence> <xs:element name="cases" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="case"> <xs:complexType> <xs:attribute name="brand" type="xs:string" use="required" /> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="type" type="xs:string" use="required" /> <xs:attribute name="formFactor" type="xs:string" use="required" /> <xs:attribute name="bay5" type="xs:integer" use="required" /> <xs:attribute name="bay3" type="xs:integer" use="required" /> <xs:attribute name="psu" type="xs:string" use="required" /> <xs:attribute name="maxGpuLength" type="xs:string" use="required" /> <xs:attribute name="maxCpuHeight" type="xs:string" use="required" /> <xs:attribute name="primaryColor" type="xs:string"/> <xs:attribute name="secondaryColor" type="xs:string"/> <xs:attribute name="price" type="xs:decimal" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="cpus" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="cpu"> <xs:complexType> <xs:attribute name="brand" type="xs:string" use="required" /> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="cooler" type="xs:string" use="required" /> <xs:attribute name="series" type="xs:string" use="required" /> <xs:attribute name="family" type="xs:string" use="required" /> <xs:attribute name="socket" type="xs:string" use="required" /> <xs:attribute name="iGPU" type="xs:string" use="required" /> <xs:attribute name="cores" type="xs:integer" use="required" /> <xs:attribute name="threads" type="xs:integer" use="required" /> <xs:attribute name="ecc" type="xs:string" use="required" /> <xs:attribute name="speed" type="xs:string" use="required" /> <xs:attribute name="TDP" type="xs:integer" use="required" /> <xs:attribute name="lithography" type="xs:integer" use="required" /> <xs:attribute name="maxPowerDraw" type="xs:string" use="required" /> <xs:attribute name="price" type="xs:decimal" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="cpucoolers" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="cpucooler"> <xs:complexType> <xs:sequence> <xs:element name="sockets"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="socket" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="brand" type="xs:string" use="required" /> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="liquid" type="xs:string" use="required" /> <xs:attribute name="rad" type="xs:string" use="required" /> <xs:attribute name="fans" type="xs:integer" use="required" /> <xs:attribute name="height" type="xs:string" use="required" /> <xs:attribute name="price" type="xs:decimal" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="gpus" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="gpu"> <xs:complexType> <xs:attribute name="manufacturer" type="xs:string" use="required" /> <xs:attribute name="brandname" type="xs:string" use="required" /> <xs:attribute name="codename" type="xs:string" use="required" /> <xs:attribute name="series" type="xs:string" use="required" /> <xs:attribute name="vram" type="xs:integer" use="required" /> <xs:attribute name="psuPin" type="xs:string" use="required" /> <xs:attribute name="length" type="xs:integer" use="required" /> <xs:attribute name="maxPowerDraw" type="xs:string" use="required" /> <xs:attribute name="price" type="xs:decimal" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="memorychips" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="memorychip"> <xs:complexType> <xs:attribute name="brand" type="xs:string" use="required" /> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="type" type="xs:string" use="required" /> <xs:attribute name="rank" type="xs:string" use="required" /> <xs:attribute name="cas" type="xs:integer" use="required" /> <xs:attribute name="gen" type="xs:string" use="required" /> <xs:attribute name="speed" type="xs:integer" use="required" /> <xs:attribute name="moduleSize" type="xs:integer" use="required" /> <xs:attribute name="modules" type="xs:integer" use="required" /> <xs:attribute name="ECC" type="xs:string" use="required" /> <xs:attribute name="price" type="xs:decimal" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="motherboards" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="motherboard"> <xs:complexType> <xs:attribute name="brand" type="xs:string" use="required" /> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="formFactor" type="xs:string" use="required" /> <xs:attribute name="chipset" type="xs:string" use="required" /> <xs:attribute name="socket" type="xs:string" use="required" /> <xs:attribute name="memoryType" type="xs:string" use="required" /> <xs:attribute name="memorySlots" type="xs:integer" use="required" /> <xs:attribute name="maxMemory" type="xs:integer" use="required" /> <xs:attribute name="maxMemorySpeed" type="xs:integer" use="required" /> <xs:attribute name="video" type="xs:string" use="required" /> <xs:attribute name="sata3" type="xs:integer" use="required" /> <xs:attribute name="ethernet" type="xs:integer" use="required" /> <xs:attribute name="usb3" type="xs:string" use="required" /> <xs:attribute name="price" type="xs:decimal" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="psus" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="psu"> <xs:complexType> <xs:attribute name="brand" type="xs:string" use="required" /> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="formFactor" type="xs:string" use="required" /> <xs:attribute name="wattage" type="xs:integer" use="required" /> <xs:attribute name="eff80plus" type="xs:string" use="required" /> <xs:attribute name="modular" type="xs:string" use="required" /> <xs:attribute name="pcie6" type="xs:integer" use="required" /> <xs:attribute name="pcie6p2" type="xs:integer" use="required" /> <xs:attribute name="price" type="xs:decimal" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="storage" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="ssds" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="ssd"> <xs:complexType> <xs:attribute name="brand" type="xs:string" use="required" /> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="capacity" type="xs:integer" use="required" /> <xs:attribute name="cache" type="xs:string" use="required" /> <xs:attribute name="interface" type="xs:string" use="required" /> <xs:attribute name="formFactor" type="xs:string" use="required" /> <xs:attribute name="price" type="xs:decimal" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="hdds" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="hdd"> <xs:complexType> <xs:attribute name="brand" type="xs:string" use="required" /> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="capacity" type="xs:integer" use="required" /> <xs:attribute name="cache" type="xs:integer" use="required" /> <xs:attribute name="interface" type="xs:string" use="required" /> <xs:attribute name="formFactor" type="xs:string" use="required" /> <xs:attribute name="rpm" type="xs:integer" use="required" /> <xs:attribute name="price" type="xs:decimal" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
XSLT 1
XSLT 2
Ülesanne 1 retsensioonid
Ülesanne 2: Veebirakendus
Ülesanne 3: Klientrakendus
(b)logi
- 20/03/2017: Loodud Wiki leht, jagatud ülesanded
- 20/03/2017: Projekti esimene osa valmis