středa 13. prosince 2017

Dětská chůvička pro Android

https://play.google.com/store/apps/details?id=de.SmartDyne.Full.BabyMonitor

pondělí 4. prosince 2017

Vývoj aplikace pro Android - Začátek

Instalace Android Studia

https://developer.android.com/studio/install.html

Zapnout na telefonu vývojářský režim

  1. Otevři nastavení telefonu.
  2. Sjeď úplně dolů kde je O zařízení
  3. Sjeď dolů na číslo sestavení a ťukni na něj 7x
  4. Vrať se zpět kde se objeví nová položka menu Vývojářské možnosti
https://developer.android.com/studio/debug/dev-options.html#general

Časový rozvrh (~2,5hod)

  1. Stažení aplikace Android Studio - 20min
  2. Instalace Android studio - 4min
  3. Inicializace Android Studia - 25min
  4. Zprovoznění debugování a emulátoru - 70min
  5. Vývoj jednoduché výpočetní aplikace - 23min

Layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="20dp"
android:orientation="vertical" >
https://developer.android.com/guide/topics/ui/layout/linear.html

String to Float

Float f = Float.parseFloat(s);
https://stackoverflow.com/questions/10735679/how-to-convert-string-into-float-value-in-android

Button Click Event

Frontend
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="btnCalculate_Click"
android:text="Vypočítat"
/>
Backend
public void btnCalculate_Click(View v)
{
txtResult = (TextView)findViewById(R.id.txtResult);
txtWeight1 = (TextView)findViewById(R.id.txtWeight1);
txtWeight2 = (TextView)findViewById(R.id.txtWeight2);
float weight1 = Float.parseFloat(txtWeight1.getText().toString());
float weight2 = Float.parseFloat(txtWeight2.getText().toString());
float value = (weight2-weight1)/weight2*100;
txtResult.setText("Výsledek je: " + value + "%");
}
https://www.youtube.com/watch?v=RCyuqMVGl4g
https://www.youtube.com/watch?v=6qo_Opqjhew

úterý 3. října 2017

Testování PopUp pomocí Selenia

        [Test]
        public void WaitOnPopUp()
        {
            IWebDriver driver = new OpenQA.Selenium.Firefox.FirefoxDriver();
            driver.Navigate().GoToUrl("http://dinbror.dk/bpopup/");

            var list = driver.FindElements(By.CssSelector(".button.small.pop2"));
            list[4].Click();



            var w = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
            w.Until((d) => {
                bool x = false;
                try {
                    x= driver.FindElement(By.XPath("//*/div[@id='popup2']/*/img")) != null;
                }
                catch (Exception ex)
                {
                }
                return x;
            } );

            driver.Close();
        }

XPath helper do Chrome

Při psaní UI testů se dost často hodí vyhledat ve stránce element pomocí XPath. Rozšíření do prohlížeče Chrome dokáže tuto otravnou činnost dost usnadnit.
Do levé části doplňku píšete XPath dotaz a v pravé se Vám zobrazuje výsledek dotazu.




Zdroj: 
https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl?utm_source=chrome-app-launcher-info-dialog

neděle 27. srpna 2017

Chůvičku nebo WiFi IP kameru?

Nevýhody IP kamer:

  • aplikace padá, 
  • display na mobilu zhasíná (dá se nastavit v nastavení androidu nebo aplikací Lama)
  • trvá než se apka zapne.
  • Když vypadne spojení tak se neobnoví a ani nadá vědět (zvukovým signálem)
  • neukazují teplotu v pokoji
  • Nemají indikátor hluku

Na druhou stranu měli lepší kvalitu obrazu než chůvička.

Nevýhody chůvičky:
  • Cena (cca 8x dražší)
  • Nejde napájet z powerbanky (USB)  (Napájení z powerbanky se hodí pokud díte nespí v postýlce - kočár, obývák, atp.)
  • Nejde na ně koukat odjinud než z rodičovské jednotky (ano u dražších i z druhého konce světa)

Výhody IP kamer
  • Napájení z PowerBanky přes USB
  • Můžete koukat z více zařízení a nemáte doma další krám, který se musí nabíjet.

Výhody Chůviček
  • Nepotřebujete WiFi síť (chata, dovolená)
  • Nepotřebujete telefon, tablet, atp.
Funkce na něco:
  • Noční vidění
Funkce na nic:
  • Ukolébavky
  • 2x digitální Zoom
  • Obousměrná komunikace - Stačí slyšet že pláče


Motorola MBP 36 S - cca 4000,- Kč
https://chuvicky.heureka.cz/motorola-detska-chuvicka-mbp-36-s/

WiFi IP Camera - cca 500,-Kč ($21.71)
https://www.aliexpress.com/item/720P-HD-IP-Wifi-Camera-Onvif-2-1-Protocol-Network-Surveillance-Camera-With-Night-Version-Indoor/32717377111.html?spm=a2g0s.9042311.0.0.jHz1Du

Nastavení RTSP streamu
ve VLC Media/ Otevřít síťový proud
rtsp://192.168.1.102:10554/udp/av0_0
Zeptá se na heslo

pátek 25. srpna 2017

XSLT Nahrazení desetinné čárky za tečku

Je potřeba vytvořit XSLT šablonu aby bylo možné ze zdrojového feedu importovat stavy skladů do ERP Stormware Pohoda. Protože ale zdrojová data obsahují hodnotu s desetinnou čárkou namísto tečky, je potřeba ji nejprve nahradit. A až potom může být vložena sloupce VPrDPC, který je typu desetinné číslo.

<xsl:value-of select="translate(PRICE,',','.')" />

Zdroj:
https://stackoverflow.com/questions/11716358/replacing-characters-in-xslt-1-0
https://www.w3schools.com/xml/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog_if

pondělí 31. července 2017

Windows 10 start aplikace po spuštění

[Win] + [R] - shell:startup

C:\Users\[username]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

VLC
run.bat
"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://admin@192.168.0.104/play1.sdp -f

Zdroj
https://www.howtogeek.com/208224/how-to-add-programs-files-and-folders-to-system-startup-in-windows-8.1/

Zkraty pro Visual Studio


Formátování kódu
Ctrl+ECtrl+D to format the entire document.

Zdroj:
https://stackoverflow.com/questions/4942113/format-code-shortcut-for-visual-studio

Chyba při serializaci objektu pomocí XmlSerializer do existujícího souboru

<?xml version="1.0"?>
<RobotSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ComPortName>COM9</ComPortName>
  <BaudRate>9600</BaudRate>
  <AutoConnect>false</AutoConnect>
  <Velocity>100</Velocity>
  <MoveDuration>250</MoveDuration>
  <TurningDuration>250</TurningDuration>
  <QueueSize>6</QueueSize>
</RobotSettings>>ngDuration></RobotSettings>
Vyserializováním objektu do již existujícího souboru může dojít k chybě, která za "příznivých podmínek" tj. pokud výsledný text je delší než předchozí (a kompletně přepíše starou verzi), nemusí projevit.
Pokud je ale text kratší a vy použijete špatný FileMode - tak přepíše jen začátek a konec ponechá. Jak je vidět v příkladu. A to vede k nevalidnímu XML a chybě parsování a deserializace objektu.

using (FileStream myFileStream = new FileStream(FileName, FileMode.OpenOrCreate))
using (FileStream myFileStream = new FileStream(FileName, FileMode.CreateNew)) ->  již existuje.

Nastavení VPN ve Windows 10 aby nepoužívalo tunel pro připojení k internetu

Ve výchozím nastavení VPN se použije pro připojení k Internetu tunel VPN. Aby se pro běžný provoz používal lokální ISP a VPN pouze pro firemní SubNet. Je potřeba ve WIN 10 spustit poweshell příkaz:


Set-VpnConnection -Name "Připojení k síti myVPN" -SplitTunneling $True

Ověřit změnu trasy provozu můžete po odpojení a novém připojení k VPN příkazem
tracert seznam.cz
Zdroj:
https://www.zive.cz/poradna/windows-10-vpn---jak-spravne-nastavit/sc-20-cq-564458/default.aspx?consultanswers=1

pondělí 24. července 2017

Selenium nastavení cesty k Chrome a Firefox driveru

Chrome

Firefox

https://github.com/mozilla/geckodriver/releases
geckodriver-v0.18.0-win64.zip
geckodriver.exe

Nastavení PATH

Po stažení obou driverů je potřeba nastavit systémovou proměnnou PATH aby obsahovala i cestu k adresáři kam jste rozbalili ovladače.
set PATH=%PATH%;c:\WebDriver\
Po spuštění tohoto příkazu je potřeba restartovat systém jinak Vám budou testy stále hlásit že se nepodařilo nalézt uvedený soubor.

Nuget

Install-Package Selenium.Support
https://www.nuget.org/packages/Selenium.Support

Tutorial Page Object
http://toolsqa.com/selenium-webdriver/page-object-model/

Udemy Kurz
https://www.udemy.com/selenium-webdriver-page-objects

sobota 27. května 2017

OpenSCAD 2D kreslení

circle
circle(d=3, $fn=25);

square
square([10,20],center=true);

linear_extrude
linear_extrude(height=10, scale=1, slices=20, twist=0)

polygon
polygon(points=[[0,0],[100,0],[130,50],[30,50]]);

středa 24. května 2017

Co může za chybu v Castle?

Server Error in '/' Application.
Publisher tried to start subscriber NěcoNěco that was not found
Exception Details
Castle.Facilities.EventWiring.EventWiringException: Publisher tried to start subscriber NěcoNěco that was not found

Zkontrolujte jestli máte zaregistrovanou implementaci požadovaného rozhraní.

pondělí 22. května 2017

OpenSCAD - tahák

Často používané proměnné
Width = 50; //x
Height = 50; //y
Thiknes = 1.5; //z
ScrewHole=3;
Pitch=10;
EmentalHole=4;

cube
cube([BoxWidth, BoxHeight, BoxDepth],Center);
ex: cube([4,4,1.5], true);

cylinder
cylinder(h=2,d=7.5,center=true); // válec s průměrem 7.5
cylinder(16,r=3,true,$fn=60); // válec s poloměrem 3

translate
translate([-50,85,1]) // posun v ose x, y, z

rotate
rotate([90,0,270]) // otočení

difference()
Odečítá od prvního tělesa všechny následující

union()
sloučí všechny tělesa do jednoho

intersection()
Vytvoří průnik mezi dvěma tělesy (pouze ta část kde se překrývají)

for
Pokud je potřeba více otvorů nebo něco zopakovat
for (y =[0:Height/Pitch])
                translate([40, -Height/2+y*Pitch+Pitch/2, 0])
                cylinder(d=EmentalHole,h=Thiknes,center=true,$fn=10);

module
Vytvoření modulu se hodí pro části které se v modelu opakují. Např. kulatý roh, sloupek, atp.
Modul může mít několik parametrů. Z toho některé můžou mít výchozí hodnotu a pak není potřeba je vyplňovat.

module corner(x,y,z,r=90){
...
}
corner(10,10,10,180);

neděle 9. dubna 2017

WPF - lokalizace

Překlady řetězců ve WPF aplikaci do několika různých jazyků.

<Window
....
xmlns:translate="clr-namespace:MyApp.Translate;assembly=MyApp.Translate"
...
>

Zdroj:
https://www.tutorialspoint.com/wpf/wpf_localization.htm

středa 5. dubna 2017

Open SCAD - Parametrická krabička

Postup:
Vytvoříme si několik proměnných, které budeme u krabičky chtít měnit. Výšku, šířku, hloubku a tloušťku stěny.

V prvním kroku si vytvoříme pomocí funkce cube kvádr o zadaných rozměrech.
Následně vytvoříme kvádr, který bude o tloušťku stěny menší. Ten od původního odečteme ve funkci difference. Pokud necháme vše centrovat na počátek souřadnic stačí když menší kvádr posuneme jen o tloušťku stěny výš aby nám vzniklo dno krabičky.
Zdrojový kód pak může vypadat takto:

Width=70;
Height=50;
Depth=40;
WallThiknes=1.5;
difference(){
cube([Width, Height, Depth], center=true);
translate([0, 0, WallThiknes])
    cube([Width-2*WallThiknes, Height-2*WallThiknes, Depth-WallThiknes], center=true);
}


Pokud nebudeme používat centrování, pak musíme posunout vnitřní kvádr ve všech směrech, jak ukazuje zdrojový kód níže.

Width=70;
Height=50;
Depth=40;
WallThiknes=1.5; 
difference(){
cube([Width,Height,Depth]);
translate([WallThiknes, WallThiknes, WallThiknes])
    cube([Width-2*WallThiknes, Height-2*WallThiknes, Depth-WallThiknes]);
}

Zdroje:
http://www.openscad.org/ 

úterý 17. ledna 2017

Stimulsoft Reporting

ConnectionString

Bez hesla

Data Source=.\sqlExpress;Initial Catalog=AdventureWorks.EN;Integrated Security=True;Persist Security Info=True

S heslem 

Data Source=.\sqlexpress;Initial Catalog=AdventureWorks;Integrated Security=False;Persist Security Info=True;User ID=demo;Password=demo
Důležitý parametr je Persist Security Info=True bez něj se reporting k databázi nepřipojil.

Změna ConnextionString v XML

V XML šabloně je potřeba:
1. Najít všechny elementy s atributem type="Stimulsoft.Report.Dictionary.StiSqlDatabase"
2. Podle Alias najít ConnectionString který chceme upravit
3. Nahradit hodnotu tagu ConnectionString

Doporučení:Neměňte název Tagu pod rodičovským tagem Databases ani hodnotu tagu Name. Raději použijte Alias. Podle názvu se totiž na něj odkazuje tag DataSources.

 <DataSources isList="true" count="1">
      <Production_Product2 Ref="3" type="Stimulsoft.Report.Dictionary.StiSqlSource" isKey="true">
        <Alias>Production.Product2</Alias>
        <Columns isList="true" count="25">
          <value>ProductID,System.Int32</value>
         ...
        </Columns>
        <CommandTimeout>30</CommandTimeout>
        <Dictionary isRef="1" />
        <Name>Production.Product2</Name>        <NameInSource>sqlDataSource1</NameInSource>
    </Production_Product2>
 </DataSources>

Zašifrovaný ConnectionString

Pokud nechcete používat šifrovaný ConnectionString tak stačí v XML šabloně nahradit tag ConnectionStringEncrypted za ConnectionString

XSLT

XSLT

Práce s XSLT ve Visual Studiu
http://www.geekzone.co.nz/vs2008/6283

template mapuje šablonu na element určený XPath dotazem v parametru match

Časté chyby

Pokud match nedokáže vyhledat podle XPath element, který v XML dokumentu opravdu je. Problém bude nejspíše v chybějícím namespace.

http://stackoverflow.com/questions/1730875/xslt-transform-xml-with-namespaces

Šablona co se zacyklí

<xsl:template match="/">
<body>
<xsl:apply-templates select="."></xsl:apply-templates>
</body>
</xsl:template>

Zdroje:
http://zvon.org/xxl/XSLTutorial/Books/Output/contents.html

Raspbian na 4GB SD kartu

Na 4G micro SD kartu je možné nahrát asi jen 2015-05-05-raspbian-wheezy.zip Novější distribuce se na kartu prostě nevejdou.

pondělí 16. ledna 2017

Telerik reporting a běžné chyby


Chyba:
An error has occurred while processing Report 'BlankOneColumn':
Missing operator before 'Ternary operator requires 2 operators' operand.
Důvod:
Překlep ve  výrazu mapování polí.
  objectDataSource.CalculatedFields.Add(
                    new Telerik.Reporting.CalculatedField(
                        "FullName",
                        typeof(string),
                        "=Fields.TITLE + '   ' + year: Fields.YEAR"));
Oprava:
                        "=Fields.TITLE + '   year: ' +  Fields.YEAR"));

pátek 13. ledna 2017

Windows 10 IoT core pro Raspberry Pi 3 - strastiplná cesta

Jak dostat Win 10 IoT Core na RPI3 - těžko


  1. Založit si účet na MS insider
  2. Stáhnout image pro Insider preview (Insider Preview) https://developer.microsoft.com/cs-cz/windows/iot/Downloads 17134 (nebo https://www.microsoft.com/en-us/software-download/windowsiot 17763)
  3. mountnout image a spustit instalaci
  4. potom v IoT Dashboard vybrat custome a najít v PF ffd soubor a ten nechat nainstalovat na sd kartu

Přes NOOBS se mi to nepovedlo. Po vložení SD karty do Rpi se zobrazila chybová hláška o nějakém resizeingu oddílu nebo co ...


Mám ale podezření že opravdu hodně záleží jakou máte SD kartu.
A kupodivu nezáleží ani tak na značce jak na modelu karty v rámci i jedné značky jako je např.: Kingstone.

Zdroj:
https://developer.microsoft.com/en-us/windows/iot/Docs/GetStarted/rpi3/sdcard/insider/getstartedstep2


Micro SD karty na eBay
SanDisk-16GB
Adapter USB 2.0 Micro SD SDHC
Rpi Shop 16GB Kingstone

Diskuze:
https://www.raspberrypi.org/forums/viewtopic.php?t=184387

Formátovací Tool:
http://www.ridgecrop.demon.co.uk/index.htm?guiformat.htm

Závěr a řešení:
Na diskuzích zmiňují jako důvod nedostatečné napájení. Já to zkoušel s originál zdrojem, který dává 3A. Jakmile jsem vyměnil SD kartu a Windows 10 IoT Core nainstaloval na SanDisk edge 16GB micro SDHC UHS-I U1 A1 za cca 237,- Kč všechno bez problémů naběhlo.
Takže než strávit dlouhé hodiny nad laborováním a snažit se to nahrát na jinou kart (Kingston, Transcend, AData, ... ) tak je opravdu lepší jít ověřenou cestou.

DevExpress - Reporting

Designer

Reporty se vytváří pomocí designeru ve Visual Studiu. Nový report přidáte pohodlně pomocí kontextového menu DevExpress Report Wizard v Solution Exploreru
Designer má podle mě jednu dost důležitou část hodně dobře schovanou. A tou je menu, které Vám umožní uložit a načíst report z interního formátu *.repx, nebo i od konkurenčních firem jako např. Crystal Reports, Active reports, .... 

Schované menu s vlastnostmi reportu

Rozbalené "tajné" menu

Důležité menu je také v hlavním toolbaru Visual Studia XtraReports.
Zde se skrývá Report Explorer a Field List, které jsou docela podstatné.

Přidání parametru do Reportu

Zdroj:

neděle 8. ledna 2017

Fler.cz Api - zkušenost

PHP vs. C#

Než začnete využvat funkce api musíte nejdříve přeložit PHP funkci pro přihlášení k API do C#.
První věc co Vás vytrestá je funkce time() potom funkce hash_hmac()
Jak toto zvládnete musíte si dát pozor na to aby hlavička X-FLER-AUTHORIZATION obsahovala url a http metodu (Get, Post) stejnou jako posíláte request.

error_number je k ničemu

U parametru error_number jsem se v resultu nesetkal s jinou hodnotou než je 99999.

Chyby během přihlášení

Problém s TimeStamp
"error": "Platnost klíče vypršela"


Hodnota klíče je špatná
{
    "error": "Neznámý veřejný klíč",
    "error_number": 99999
}

Pokud máte třeba chybně url v podpisu
{
    "error": "Neplatná autorizace",
    "error_number": 99999,
    "http_code": 401
}

Chyby během vytváření zboží

Povinné parametry zboží

{
        public string category = "1";

        public string title = "pokus";
        public string description = "pokus";
        public decimal price = 12.45M;
        public string stock_unit = "piece";
        public int delivery = 1;
        public string colors = "1,2";

        public string photos_mode = "url"; 
        public string photos_data=   "http://copywriting.goneo.cz/img/10668-160-w-15576.jpg";
        public string photos_main_geom = "4"
}

"error": "Upload mode disabled- nevím co to znamená

Asi problém s nahráním povinné fotky
"error": {
        "invalid_fields": {
            "photos_main_geom": "Neplatný formát hodnoty: ^[0-9,]$"
        }
    },

    "error_number": 99999

Nevím co to chtělo dal jsem tam 4 a pak mi to už vrátilo toto:
Pozor! Vytvořený produkt je potřeba ale hledat v nedostupných položkách.


{
    "id": 8140101,
    "title": "pokus 2",
    "photo_s": "https://static2.flercdn.net/products/4/6/463270/1/0/1/8140101/cxndytyshnpxkd-s.jpg",
    "photo_m": "https://static2.flercdn.net/products/4/6/463270/1/0/1/8140101/cxndytyshnpxkd-m.jpg",
    "photo_b": "https://static2.flercdn.net/products/4/6/463270/1/0/1/8140101/cxndytyshnpxkd-b.jpg",
    "created_html": "
8140101
" }

Zdroje:
https://www.fler.cz/uzivatel/nastroje/flerapi?view=docs&section=intro