Archiv pro rubriku: tech

PrestaShop 1.6 a pomalý import produktů

Jak už jsem psal v minulém článku, poslední dobou se zabývám nastavením a spuštěním e-shopu s náhradními díly pro motocykly Harley-Davidson. Máme několik dodavatelů, a tak jdou počty produktů do stovek tisíc. V současné době jsme ve stavu, kdy chceme použít PrestaShop (zejména kvůli snadné rozšiřitelnosti a faktu, že vše je uloženo na našem serveru). Stále ale řešíme problém s importem produktů – je pomalý. Tento import se bude pravděpodobně provádět každý měsíc (i častěji), aby se zjistilo, které produkty už naši dodavatelé smazali a které naopak přidali. Při současném počtu (150 tisíc produktů) to vychází, že jeden plný import trvá 22 hodin čistého času. Během tohoto času musí někdo pořád u počítače sedět a nahrávat další a další soubory. To je moc.

Zásadním problémem je, že i na velmi výkonném stroji import běží rychlostí asi 3 položky za sekundu. Zatím jsem nepřišel na to, proč je to takto pomalé. Svou roli bude pravděpodobně hrát zmenšování obrázků (to se dá ale udělat dávkově v Photoshopu). Zatím jediný způsob řešení, který mě napadá, je přeprogramovat import, resp. napsat externí modul, který provede import produktů separátně. Určitě to nebude lehký úkol, ale pokud by se celý proces zrychlil na jednotky minut, byl by to úspěch.

Zatím jsem rozhodnutý modul psát v Javě, protože bych rád zpracoval celou dávku produktů najednou a v PHP bych narážel na max_execution_time. Modul by pak mohl běžet na úplně jiném počítači a jen sahat do e-shopové databáze.

O postupu budu průběžně informovat.

Adobe Creative Cloud pro studenty

Adobe začal v poslední době (asi jeden nebo dva roky) nabízet své produkty i ve formě měsíčního předplatného. Celý balík všech aplikací stojí asi 60€ měsíčně. Podle mě je to rozhodně krok správným směrem – pro nově vznikající firmy a začínající freelancery zmizela nutnost investovat několik desítek tisíc do softwarového vybavení. Pro Adobe se zcela jistě snížila míra pirátství (protože jen málo firem a jednotlivců tyto velké částky měli). Adobe má nicméně pro studenty denního studia ještě zajímavější nabídku.

Plná verze Adobe Creative Cloud za 20€ měsíčně

Za v přepočtu 550 Kč měsíčně (~ jeden skromný večer v klubu) můžete mít nejen populární Photoshop, ale i Adobe Illustrator, Premiere a spoustu další nástrojů pro úpravu digitálních médií.

Jedná se o promo akci na první rok, musíte si tedy ohlídat, abyste účet po 12 měsících zrušili, jinak se začne účtovat standardní cena. Nic vám ale nebrání si poté zaregistrovat účet nový (možná bude potřeba jiná platební karta, ještě jsem to nezkoušel).

A to nejlepší na závěr. V EULA podmínkách společnost Adobe neuvádí, že je vyloučeno komerční použití. Můžete tak celý tento balík používat i pro placené soukromé projekty.

Jen malá informace na závěr – v průběhu prvního měsíce můžete své členství ukončit. Po prvním měsíci už členství nelze vypovědět (v rámci 12 měsíců).

Import produktů v PrestaShop 1.6

Pro jednoho z mých klientů dohlížím na vznik e-shopu. E-shop obsahuje velké množství produktů (ke dnešnímu dni kolem 50 tisíc, v nejbližší době 100-200 tisíc produktů). Nejprve jsme se snažili jít cestou hotového řešení. Zkoušeli jsme Shoptet a Eshop-rychle.cz. Shoptet jsme vyřadili z důvodů velké provozní ceny (měsíční cena se odvíjí podle počtu produktů), do Eshop-rychle jsme zkusili nahrát základní set produktů a záhy jsme narazili na omezení, která znamenala vydat se vlastní cestou. Prozatím jsme se rozhodli nevyvíjet vlastní řešení, ale zvolili jsme PrestaShop. Do budoucna podle obratů a návštěvnosti možná tento krok přehodnotíme. Na následujících řádcích se podělím o některé problémy, které jsem řešil při importu velkého množství produktů.

Import kategorií

Než začneme importovat produkty, musíme naimportovat kategorie. Dělá se to pomocí CSV souboru. My přebíráme katalogy od externích dodavatelů, v Javě máme napsaný skript, který katalogy naparsuje do databáze a z této databáze generujeme csv soubory. Zde mám jen jeden tip: U podkategorií můžete zadat Parent Category i jako její ID (tedy není nutné vkládat název). Mám tušení, že to může celý import trochu urychlit, protože se parsuje integer a ne string. V našem případě, kde máme asi 2500 kategorií se to moc neprojevilo, import je hotový během několika sekund.

Import produktů

V případě importu produktů už začíná trochu přituhovat. Každý produkt má několik obrázků. Celou složku s obrázky jsem nahrál na server do složky /img/src/. V našem případě je to asi 150 tisíc obrázků. V případě nahrávání přes FTP bychom se asi moc nechytali, protože spousta poskytovatelů webhostingu limituje výpisy adresářů. Naštěstí náš e-shop běží na vps, kde máme ssh přístup. A nyní důležitá věc! I když jsou obrázky jsou přístupné na adrese http://url/img/src/… , tak tuto adresu do CSV souboru nedávejte. PrestaShop ji bude posuzovat jako externí a na každý obrázek udělá HTTP request a to celý import velmi zpomalí. Raději použijte relativní cestu (vzhledem ke složce admin), v našem případě „../img/src/*“.

S předchozím doporučením zabere import 1000 produktů v závislosti na výkonu vašeho serveru 1-5 minut. Pokud máte slabý server, pak doporučuji fázi nahrávání svěřit nějakému brigádníkovi, protože se jedná o načítání předpřipravené mapy a jednotlivých souborů.

S dalšími tipy se podělím v průběhu konfigurace e-shopu.

Základy získávání informací z webových stránek

Občas potřebuji získat nějakou informaci z velkého množství stejných stránek. Může se jednat například o ceny výrobků v rámci jednoho e-shopu nebo parametry jednotlivých výrobků na stránkách výrobce.

Za několik let jsem používal různé nástroje, od komerčních klikacích (např. Mozenda) přes procházení DOM až po vlastní regulární výrazy. Posledních několik měsíců používám knihovnu jsoup. Jednoduše se naimportuje do projektu (ať už jako jar knihovna nebo pomocí Mavenu) a její používání je doslova na pár řádků.

Příklad na export nadpisů z wikipedie

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements newsHeadlines = doc.select("#mp-itn b a");

Jak je vidět, elementy se jednoduše adresují pomocí CSS tříd. Více příkladů je v Cookbooku.

Jsoup a čeština

Během používání jsem narazil pouze na jeden zásadnější problém – některé české znaky se správně neparsovaly a zobrazily se místo nich jen html entity, které navíc byly nesmyslné.

Po nedlouhém pátrání jsem tento problém vyřešil pomocnou metodou, kterou používám místo Jsoup.connect:

public static Document loadDoc(String uri) throws MalformedURLException,
			IOException {
		Document d = Jsoup.parse(new URL(uri).openStream(), "utf-8", uri);
		d.outputSettings().charset("UTF-8");
		d.outputSettings().escapeMode(EscapeMode.xhtml);
		System.out.println(uri);
		return d;
	}

Poznámka: Toto bude fungovat na webových stránkách v UTF-8, ale předpokládám, že pro jiná kódování to bude fungovat s drobnou úpravou také.

Jak funguje Bluetooth?

Všichni máme Bluetooth ve svých telefonech, tabletech a noteboocích. Jak ale skutečně funguje a k čemu vlastně je?

Bluetooth protokol pracuje v bezlicenčním pásmu 2.4GHz. V tomto pásmu pracují i další protokoly, například WiFi nebo ZigBee. Existuje množina pravidel, kterými se Bluetooth liší od zbývajících protokolů. V následujících pár větách se pokusím shrnout, jak protokol Bluetooth funguje. Vysvětlení je spíše pro laiky, další detaily najdete na Wikipedii.

Master, Slave, Piconet

Bluetooth síť (známá jako Piconet) používá master-slave model pro řízení toho, kdy a kam může dané zařízení posílat data. Master může být spojen až se sedmi slave. Slave může být v dané piconet síti připojen pouze k jednomu masterovi.

Master řídí komunikaci v piconetu. Může posílat data kterémukoliv slave a všechny slave si mohou vyžádat data i od něj. Slave mohou posílat a přijímat data pouze od příslušného mastera. Jeden slave nemůže komunikovat s jiným slave v rámci piconetu.

Master slave bluetooth

Bluetooth identifikátory a jména

Každé bluetooth zařízení má unikátní 48 bitový identifikátor, obecně zkracovanou jako BD_ADDR. Ten je obvykle reprezentovaný ve formě dvanáctimístné hexadecimální hodnoty. Levá polovina této hodnoty je unikátní identifikátor organizace (OUI), který označuje výrobce. Pravá část je unikátní pro každé zařízení.

Tento identifikátor by měla být napsaná na každém Bluetooth zařízení. Například na následujícím obrázku (RN-42 Bluetooth Modul) se identifikátor nachází pod označením MAC NO a je 000666422152. 000666 označuje výrobce a je stejný pro všechny moduly tohoto typu. 422152 jednoznačně identifikuje každý modul.

bluetooth id zařízení

Bluetooth zařízení ale obsahují taky uživatelsky přívětivá jména, která jim uživatelé mohou dát. Slouží pro jednoduší rozpoznání, o které zařízení se jedná. Pravidla pro tato jména jsou méně přísná. Mohou být až 248 bajtů dlouhá a nemusí být unikátní.

Připojovací proces

Vytvoření spojení mezi dvěma zařízeními je vícekrokový proces, který obsahuje tři základní části:

  1. Požadavek (Inquiry) – pokud o sobě dvě zařízení neví vůbec nic, jedno z nich musí poslat požadavek a zkusit objevit to druhé. Jedno zařízení vysílá požadavek a jakékoliv jiné zařízení, které ho přijme, odpoví svou adresou a případně i přiřazeným jménem.
  2. Připojování (Paging) – během této části se vytvoří spojení mezi zařízeními, která se poznala během vyslání požadavku
  3. Spojení (Connection) – po úspěšném dokončení připojování jsou zařízení ve stavu Spojení. Když jsou zařízení spojená, mohou buď aktivně komunikovat nebo být v módu úspory energie.
    • Aktivní mód – zařízení aktivně přijímá nebo odesílá data
    • Sniff mód – úsporný mód, kdy zařízení kontroluje spojení ve větším intervalu (například každých 100ms)
    • Hold mód – dočasný úsporný mód, kdy je zařízení na určitou dobu uspáno a po vypršení této doby se opět probouzí, master posílá příkaz na přepnutí do tohoto módu
    • Park mód – master může poslat příkaz k zaparkování a slave se stává neaktivním, než mu master pošle příkaz pro probuzení

Párování

Pokud se dvě zařízení k sobě připojují často, mohou být spárovaná. Spárování automaticky vytvoří spojení, pokud je signál dost silný. Týká se to například handsfree sad v autě. Po spárování zařízení sdílí soukromý klíč, který se při párování vytvoří, který jim umožní spojení bez zásahu uživatele.

Párování vyžaduje autentifikační proceduru, kdy uživatel ověří spojení mezi zařízeními. Občas není při párování vyžadován žádný kód, většinou je ale potřeba zadat čtyř až šestimístný pin.

Třídy výkonu

Vysílací výkon (a tedy dosah) záleží na třídě výkonu daného zařízení. Existují následující třídy výkonu:

Číslo třídy Maximální výstupní výkon (dbm) Maximální výstupní výkon (mw) maximální dosah
Třída 1 20 dBm 100 mW 100 m
Třída 2 4 dBm 2.5 mW 10 m
Třída 3 0 dBm 1 mW 10 cm

Článek vznikl částečným překladem článku: Bluetooth Basics.

PhoneGap: Vyvíjíme mobilní aplikace pomocí HTML, CSS a JS

PhoneGap je framework pro vývoj mobilních aplikací vlastněný společností Adobe. Umožňuje webovým vývojářům stavět aplikace pomocí JavaScriptu, HTML5 a CSS3 pro libovolnou cílovou platformu. PhoneGap používá platformu Apache Cordova.

Největší výhoda PhoneGapu tedy je, že nemusíte znát platformě závislé programovací jazyky (v případě iOS Objective-C) a přesto můžete pro tyto platformy produkovat mobilní aplikace.

PhoneGap podporuje kromě tradičních mobilních platforem jako je Android, iOS, Windows Phone a Blackberry také exotické jako jsou Amazon Fire, Firefox OS a Ubuntu.  Pro majoritní platformy je dostupná široká podpora přístupu k hardwarovému vybavení jako například kamera, datové úložiště nebo GPS senzor.

Instalace platformy

V následujícím návodu popíšu své zkušenosti s instalací a spuštěním první aplikace. Pro testování aplikací používám telefon HTC s Androidem a počítač s Windows 8.1.

1) Instalace ADT

Prvním krokem je instalace standardního ADT, které si můžete stáhnout z oficiálních stránek. Doporučuji si zkusit napsat a spustit na telefonu aspoň jednoduchou Hello World aplikaci (stačí projít průvodce vytvoření nové aktivity). Budete mít tak ověřeno, že telefon komunikuje s počítačem bez problémů. Případné problémy se mnohem lépe řeší, protože Eclipse IDE používá většina Android vývojářů. V případě HTC telefonů pravidelně nastávají problémy se správným ovladačem telefonu. S pomocí Googlu tyto problémy snadno vyřešíte. Složky \sdk\tools a \sdk\platform-tools přidejte to systémové proměnné PATH.

2) Instalace prerekvizit

Před instalací samotného PhoneGapu musíte mít nainstalováno Node.js a ANT. Návod pro Node.Js i návod pro ANT je přehledný a nejsou s ním žádné problémy.

3) Instalace PhoneGapu

Nyní už přichází na instalaci samotného PhoneGapu, ta není vůbec složitá a můžete postupovat podle návodu na oficiálních stránkách.

A pokud celým návodem projdete, měla by se na displeji vašeho telefonu objevit Hello World aplikace podobná této:

2014-05-31 21.59.00

 

Celkem rychlé ne? Pokud umíte ovládat počítač s OS Windows, tak by vám návod neměl zabrat více než pár desítek minut. S PhoneGapem začínám a v rámci předmětu Mobile Computing na JKU v něm budu vyvíjet aplikaci, se kterou jsem vystoupil v eClubu, na hlášení lokálních nedostatků a problémů.

Rychlá analýza síťového provozu na Windows

Potřebujete si rychle zkontrolovat jak a s kým váš počítač komunikuje? Nejjednodušší cesta je podívat se na otevřená spojení pomocí příkazu netstat, ale tím nic moc nezjistíte.

Dnes jsem objevil výborný nástroj přímo z dílen Microsoftu zvaný TPCView. Zobrazí vám všechny otevřený spojení a vidíte i jak vznikají a zanikají. Také můžete odhalit, zda si někdo nekopíruje obsah vašeho disku, protože v přehledu vidíte počet odeslaných a přijatých bajtů.

TCPView screenshot

2. WordPress konference – report z akce

Na konci dubna jsem zaznamenal ve facebookové skupině WordPress Meetup ČR příspěvek, že se koná druhá konference o WordPressu, nyní v jižních Čechách – v Hluboké nad Vltavou. Za normálních okolností bych asi nebyl nadšený z místa konání a byl raději, kdyby se konala v Praze, ale vzhledem k tomu, že tento semestr studuji v rakouském Linci, tak jsem se bez váhání přihlásil.

Celou konferenci sponzorovala (spíše zaplatila) firma Wedos, která poskytuje webhosting a VPS (sám tam mám několik webhostingových účtů). Nabídka prohlídky datacentra se mi líbila také, aspoň jsem se poprvé podíval, kde mé weby běží.

Nyní k samotné konferenci. Začínalo se v deset hodin dopoledne přednáškou o základech zabezpečení WordPressu, kterou vedl Radek Kučera. Pro mě to bylo příjemné zopakování základních pojmů a signál, že věnovat se zabezpečení má smysl.

Pokračovalo se dvěma přednáškami o cachovaní (kešování) ve WordPressu. Už jsem párkrát řešil problémy s rychlostí některých instalací, vždy mi pomohlo už původní nastavení pluginů, a tak jsem byl zvědavý, jak se dá nastavení měnit a tím web zrychlit. Základy kešování moc pěkně představil Jakub Klapka, s více technickými detaily pokračoval David Biňovec. První přednáška mi pomohla si ujasnit pojmy ohledně kešování, druhá mi ukázala pokročilé možnosti kešování, které se dají použít i mimo WordPress a určitě v nejbližší době tyto možnosti prozkoumám více do hloubky.

Další přednášku vedl Tomáš Andrlík a týkala se členských sekcí ve WordPressu. Několik klientů se mě již na tuto problematiku ptalo, zatím jim vždy v jejich zájmu poradil, aby šli nejjednodušší cestou a stránku jen zaheslovali a vše ostatní řešili manuálně. Až se některému z nich podnikání rozjede, rozhodně opráším poznámky z této přednášky.

Kulturní vložkou se stal výstup Daniela Dubravce, bývalého pracovníka zákaznické podpory Wedosu, který se podělil o perličky z komunikace s klienty. Z této přednášky žádné poznámky nemám, ale určitě se podívejte na video.

Posledním přednášejícím před obědovou pauzou byl Vladislav Musílek, který představil základy tvorby pluginů pro WordPress. Já jsem zatím žádný plugin pro WordPress netvořil, jen jsem pro své potřeby upravoval hotové, a tak přednáška pro byla vyjasněním pojmů a nyní mám pocit, že začínám rozumět tomu, jak je plugin postavený.

Po obědě ukázal možnosti Google Analytics Petr Bechyně. Musím přiznat, že webová analytika není můj oblíbený obor a rád nechávám analýzy na jiných. Nicméně tipy, které Petr řekl rozhodně při nastavování nových profilů v Google Analytics, si budu určitě pamatovat. Zejména část o Bounce rate a měření doby návštěvy poslední stránky. Také začnu používat komentáře!

Večer se pomalu blížil a pro mě přicházel vrchol dne – Zdeněk Dvořák a Michal Kubíček. Oba už dlouhou dobu sleduju na Twitteru a byly to pro mě dvě „známé tváře“.

Zdeněk Dvořák (známý jako Linki) promluvil o odkazech z trochu vyšší perspektivy, kdy se na ně nehledí jen jako na zdroj lepších ranků, ale také jako na zdroj návštěvnosti nebo prostředek pro budování značky. Toto téma je pro mě v poslední době zajímavé víc než kdy jindy. Jednak proto, že spousta mých webů má v tomto směru rezervy a druhak protože mám zapsaný předmět Web Search and Mining. Asi nejhodnotnějším tipem je pro mě nápad s budováním tématických balíčků a souhrnů. Je to takový ten nápad, který všichni používají, je všude vidět, ale dokud vám ho někdo neřekne, tak nad ním neuvažujete.

Závěrem večera a nejlepším přednášejícím byl pro mě známý internetový podnikatel Michal Kubíček. Ukazoval WordPress jako prostředek k vydělání peněz. Líbilo se mi, že vše ukazoval na konkrétních případech a často i řekl konkrétní číslo. To je jev, který v českém prostředí moc často nevidíme. Také se mi líbí přístup, že pokud mám nějakou teorii, tak si ji ověřím na vlastních projektech (neexperimentuji na klientech a nepřebírám slepě něco, co si přečtu na fórech ). Snažím se to dělat podobně.

Souhrn

Nevěděl jsem, co od dnešní konference očekávat. Nakonec jsem si odnesl několik popsaných papírů (obrazně) plných užitečných věcí, u kterých jsem si jistý, že většinu z nich ve velmi krátké době použiju. Rád bych poděkoval i firmě Wedos za zafinancování celé akce, i když si myslím, že v některých ohledech byli až moc štědří (jídlo a pití zdarma).

Osobně bych neměl nejmenší problém zaplatit pár tisíc za vstup na podobnou konferenci, protože její přínos byl pro mě obrovský. Jestli to bylo pro ostatní návštěvníky podobné, to nemohu posoudit, na networkingových schopnostech musím ještě zapracovat.

Závěrem bych rád poděkoval ještě všem organizátorům, kteří nezištně budují WordPress komunitu v Čechách a budu se těšit na další setkání a podobně zaměřených akcích.

Pár fotek z prohlídky datacentra Wedos

Servisní menu u LCD monitorů Samsung

Toto skryté menu neukazuje moc zajímavých informací, vlastně jediný zajímavý je celkový čas běhu, což se může hodit, pokud kupujete starší monitor, abyste si ověřili, zda opravdu byl použitý jen měsíc a zbytek roku stál v rohu.

Jak se dostat do servisního menu?

Nejprve vyvolejte Menu. Snižte Jas (Brightness) na minimum, snižte i kontrast (Contrast) na minimum a tlačítko potvrzení (stejné jako na výběr zdroje – Source) držte asi 5 sekund. Objeví se vám servisní informace. Dialog odstraníte vypnutím a zapnutím monitoru.

Ověřováno na modelu Samsung SyncMaster S24B300, předpokládám, že to bude fungovat na všech. Případné problémy pište do komentářů.