pondělí 22. prosince 2014

Recenze - Android 2 - Průvodce programováním mobilních aplikací

V knize se často opakují stejné nebo podobné informace. Hlavně v částech kde je popisováno rozhraní crud operaci které maji stejné vstupní parametry (uri, where, orderby).
Taky je docela škoda, že výpisech zdrojových kódů nejsou zvýrazněna místa o terých se zrovna píše. Například si musíte projít celý výpis souboru AndroidManifest.xml aby jste se podívali jak vypadá jeden řádek konfigurace (android:configChanges="KeyboardHidden|orientation") o které se píše v předchozím odstavci.
Dale mě na teto knize hrozně štvou názvy jednotlivých kapitol. Co vám řekne název kapitoly "Přihrávka přes plot", "Šlechta a poddaní"?

Na straně 213 pak máme klasickou ukázku toho co se stane když překládáme názvy v kódu. Jedna část textu mluví o 'tenký' a zbytek o 'thin'.

16 kapitola - rozepsat životní cyklus aplikace na pouhé 3 stránky mi přijde hodné málo. Navíc s odkazem na prostudování online dokumentace hned na první stránce.

Celá knížka mi připadá jako reklama na firmu CommonsWare a její knihu "The Busy Coder's Guide to Android Development". Jestli tato kniha má sloužit jen jako výtah z knihy která má 3000 stránek, tak si myslím, že to šlo ještě zkrátit.

Za 600,- Kč a 50 hodin času by byl asi lepší tréning Pluralsight.com

Obsah knihy podle mě
1 [18"] - dodavatele obsahu, aktivity
2 [60"] - manifest
3 [13"] - aktivita tlačítko
4 [17"] - xml designer R.Layout.main
5 [25"] - TextView - popisek (Label), EditText - vstupní pole
6 [50"] - kontejnery - <LinearLayout >
7 [37"] - Widgety
8 [60"] - Adaptery
9 [60"] - Date a Time picker, dialog, zaĺožky
10 [15"] - IME = virtuální klávesnice
11 [25"] - XML definice menu a dub menu, kontextové menu
12 [9"] - fonty
13 [18"] - obálka nad HTML WebKit widget
14 [2"] - Toast - pop up zprávy
15 [51"] - vlákna
16 [21"] - Životní cyklus aktivity
17 [23"] - filtry záměrů -BroadcastReceiver
18 [23"] - spouštění aktivit a podaktivit
19 [36"] - Rotace android>screenOrientation = "{portrait, landscape, sensor}"
20 [39"] - Práce s prostředky - Texty (res/values-cs/strings.xml), obrázy (ImageView)
21 [19"] - Práce s nastavením a jeho ukládání
22 [30"] -SQLite databáze. Create, Insert Update, Delete
23 [10"] -Soubory, InputStrem, OutputStream
24 [18"] - Knihovny JAR
25 [16"] - HttpClient, Json
26 [21"] - URI
27 [40"]- str.271 metoda insert je napsána na pěst. Proč vytváří novou instanci ContentValues?
28 [19"] - Top-Sekrit že by preklep v překladu?
29 [28"] - Vytvoření služby
30 [8"] - Vyvolání služby
31 [10"] - Upozornění
32 [18"] - Určení polohy
33 [20"] - Mapy
34 [6"] - Telefonování
35 [20"] - Vývojové nástroje
36 [66"] - Různé velikosti obrázků
37 [14"] -
38 [13"] -
39 [3"] -

Celkový čas čtení knihy
50 hodin (čtu pomalu no)

Zdroj:

http://knihy.cpress.cz/android-2.html

úterý 16. prosince 2014

Upgrade Notebooku HP ProBook 6450b za 8.000,- Kč

Transcend 128GB SSD - 1.965,- Kč
Windows 8.1 - 2.777,- Kč
Eset Smart Security 8 - 3.174,- Kč (na 3 roky)
Visual Studio 2013 Comunity
Microsoft SQL Express 2014

A na to všechno je 35GB málo proto si založte systémový disk alespoň 50GB jinak budete muset velikosti oddílů šoupat pomocí tohoto návodu.
http://www.tweakhound.com/2013/01/02/how-to-resize-your-windows-8-partition/

Zabralo mi to asi 4 hodiny než se mi povedlo spustit projekt ve VisualStudiu a pokračovat v práci.

pondělí 15. prosince 2014

ASP.NET MVC - postup práce a časový odhad

Odhad pracnosti
Co myslíte? Jak dlouho Vám bude tohle všechno trvat ?

Nová entita v DAL
V databátové vrstvě založte novou Entitu pro požadovaný záznam

Repository pro entitu
Vytvořte CRUD repository které bude Vytvářet, Číst, Editovat a mazat.

Vytvořit Controller pro entitu
Vytvořte Controller který bude umožňovat práci s entitami. Zobrazí jejich seznam, Umožní vytvoření nové a editaci stávajících. Případně mazání a zobrazení záznamu pouze pro čtení.

Překlad Controller
Controller většinou neobsahuje moc textu. V assembly s překlady vytvoříme texty pro hlášky o stavu operace. Ty jsou ale většinou stejné pro více controllerů, tak je stačí vytvořit pouze jednou.

Vytvorit ViewModely pro UI - List, Edit
Vytvořte ViewModely pro seznam a editační formulář. ViewModel pro editační formulář může být stejný s formulářem pro vytvoření nového záznamu. Ale v seznamu budeme většinou zobrazovat méně podrobné informace.

Překlad ViewModelů
V assembly s překlady vytvoříme texty pro anotace ViewModelů pro seznam a Formulář.

Vytvořit pohledy UI - List, Edit, Create - Scafolding
Pomocí Scaffoldingu necháme vygenerovat views pro Index, Create, Update, Detail a Delete

Překlad View
Nakonec je potřeba vytvořit překlady pro nadpisy jednotlivých stránek (Index, Edit, Create, Detail, Delete)

Vytvořit Mapování Mapper
Do konfiguračního souboru AutoMapperu přidáme předpis pro mapování z Entity na ViewModel.

Notifikace o stavu operace
Controller musí informovat o stavu operace. Po uložení záznamu oznámí uživateli že byl záznam uložen. Pokud došlo k chybě, tak oznámí že data nejsou uložena a vypovídající informaci o důvodu chyby.

Validace vstupů
Před uložením dat se provede validace na straně kliena i na straně serveru. Pokud data nejsou platná, zobrazí se hlášení proč nění možné data uložit

Přidat navigaci do Menu
Doplnit do menu odkaz na nově vytvořený seznam záznamů. Doplnit logiku pro zobrazení tohoto seznamu. Např. pokud je uživatel v roly Administrátor.

Testy
UnitTesty Controllerů jestli vrací požadovaná data. Mockování repository.
Testování View pomocí Selenia

Tipy Triky
Překládejte aplikaci průbježně. Není pro programátora nic hroznějšího než 4hodiny v kuse kopírovat texty do Excelu a nahrazovat je za odkaz do Resource

pátek 28. listopadu 2014

Chrome Extension Quick Start Guide

Poplatek za developera 
5$ ~ 122,-Kč

Jednoduchý Chrome Extension se dá naprogramovat během 3 hodin.
Pokud by nákaldy na vývoj byly 1.000,- Pak při prodeji licence za 10 Kč by stačilo 100 prodaných kusů, aby se vrátily náklady.

Většinou se Extensions nabízejí zdarma jako podpora prodeje hlavního produktu.

Publish
Publikování vaší položky v Internetovém obchodě Chrome může trvat až 60 minut. V praxi se tam ale během 20-ti minut objeví.

Soubory je potřeba zabalit do ZIPu a nahrát přes panel vývojáře.
Častá chyba: pokud zabalíte do zipu *.CRX soubor tak Vám bude panel vývojáře hlásit, že nemůže najít manifest. Pokud přidáte do ZIPu i manifest tak Vám bude hlásit při instalaci, že nemůže najít javascripty atd.

Jak dlouho to trvá?
Za cca 4 hodiny se dá udělat prototyp, který bude dělat zhruba to co jste zamýšleli. Pokud to není mega složitá fíčurka

Panel vývojáře
https://chrome.google.com/webstore/developer/dashboard?hl=cs

Ikona

  • 128x128px

Snímek obrazovky:

  • 1280x800 nebo 640x400px

Video na Youtube
Propagační dlaždice: 

  • 440x280px 
  • 920x680px
  • 1400x560px

Jak na více jazyků ?
https://developer.chrome.com/webstore/i18n?hl=cs

InstallPage
http://stackoverflow.com/questions/5745822/open-a-help-page-after-chrome-extension-is-installed-first-time

Quikstart 
https://developer.chrome.com/extensions/getstarted

Samples 
https://github.com/GoogleChrome/chrome-app-samples/tree/master/samples
https://developer.chrome.com/extensions/samples

Tutorial
http://markashleybell.com/building-a-simple-google-chrome-extension.html

Context menu
http://tomoprogramming.blogspot.cz/2013/08/simple-tutorial-for-chrome-extension.html

https://developer.chrome.com/extensions/contextMenus

AddButton on Page
http://stackoverflow.com/questions/14068879/modify-html-of-loaded-pages-using-chrome-extensions

Match
https://developer.chrome.com/extensions/match_patterns

jQuery
Je důležité dodržet pořadí. Pokud pořadí scriptů prohodíte, nebude mít Váš script při jeho spuštění ještě dostupnou knihovnu jQuery.

"content_scripts": [

    {

      "matches": ["<all_urls>"],

       "js": ["jquery-2.1.1.js", "myscript.js"]

    }



],

http://carl-topham.com/theblog/post/creating-chrome-extension-uses-jquery-manipulate-dom-page/

Manifest Icons
https://developer.chrome.com/extensions/manifest/icons

Background Page
https://developer.chrome.com/extensions/background_pages

Event Page
https://developer.chrome.com/extensions/event_pages

Ostatní
http://stackoverflow.com/questions/5797661/replace-text-in-website-with-chrome-content-script-extension

https://developer.chrome.com/extensions/content_scripts

středa 26. listopadu 2014

Zachycení kláves CTRL + S ve webové stránce

<!doctype html>
<head>
<title>CTRL + S</title>
<script src="./jquery-2.1.1.js"></script>
</head>
<body>
<script>
$(window).keypress(function(event) {
    if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
    alert("Ctrl-S pressed");
    event.preventDefault();
    return false;
}); </script> </body> </html>

Zdroj: 
http://stackoverflow.com/questions/93695/best-cross-browser-method-to-capture-ctrls-with-jquery

středa 5. listopadu 2014

nUnit - DataDriven Test

  1. Do testovací metody doplníme parametry.
  2. Metodu odekorujeme namísto atributu Test atributem TestCase který obsahuje parametry pro jedem testovací scénář.
  3. V metodě použijeme jednotlivé parametry jako vstupní parametry testu nebo jako očekávané výsledky testu.

[TestCase(123, "FVBAN", "BP14", "17Ř00U", Payment.PaymentMethodType.bank, "BAN")]
        [TestCase(-123, "BANFP", "BV14", "17Ř00P", Payment.PaymentMethodType.bank, "BAN")]
        [TestCase(123, "FVBAN", "PP", "17Ř00U", Payment.PaymentMethodType.payU, "PAYU")]
        [TestCase(-123, "POPLBAN", "PV", "17Ř00P", Payment.PaymentMethodType.payU, "PAYU")]
        public void Map_Payment_To_BankDokl(
            int amount,
            string predkont, 
            string rada, 
            string cleneni, 
            Payment.PaymentMethodType method, 
            string methodCode)
        {
            // Arange           
            var date = DateTime.Parse("2014-04-11");

            var payment = new Payment()
            {
                Amount = amount,
                ConstantSymbol = "12345",
                CounterpartAccountBank = "0100",
                CounterpartAccountNumber = "1212121212",
                Date = date,
                Description = "Karel nese čaj",
                PaymentMethod = method,
                SpecificSymbol = "123456999",
                VariableSymbol = "999999",
            };

            var bankDokl = new BankDokl();

            // Act
            AutoMapper.Mapper.Map(payment, bankDokl);

            // Assert
            Assert.AreEqual(Math.Abs(payment.Amount), bankDokl.Amount);
            Assert.AreEqual(payment.ConstantSymbol, bankDokl.ConstantSymbol);
            Assert.AreEqual(payment.CounterpartAccountNumber, bankDokl.Ucet.Ucet);
            Assert.AreEqual(payment.CounterpartAccountBank, bankDokl.Ucet.BKod);

            Assert.AreEqual(payment.Date, bankDokl.DatPlat);
            Assert.AreEqual(payment.Description, bankDokl.Note);
            Assert.AreEqual(methodCode, bankDokl.Ucet.Zkrat);
            Assert.AreEqual(payment.SpecificSymbol, bankDokl.SpecificSymbol);
            Assert.AreEqual(payment.VariableSymbol, bankDokl.VariableSymbol);

            Assert.AreEqual(rada, bankDokl.DRada);
            Assert.AreEqual(cleneni, bankDokl.Cleneni);
            Assert.AreEqual(predkont, bankDokl.PrKont);
        }

Zdroj:
http://www.nunit.org/index.php?p=testCase&r=2.5

pondělí 6. října 2014

Vytvoření NuGet package

V první řadě je potřeba vytvořit soubor s definicá balíčku *.nuspec. To vygenerujeme pomocí příkazu
nuget spec
Který spustíme v pracovním adresáři projektu.

Není špatné si nainstalovat NuGet Package Explorer
NuGetPackageExplorer

Ve Visual Studiu pak nastavíme v properties projektu PostBuild Step

cd $(MSBuildProjectDirectory)
NuGet pack -Properties Configuration=Release
REM *** Release Confuguration ***
nuget pack -properties configuration=release -IncludeReferencedProjects
REM *** Release Confuguration ***
nuget pack -properties configuration=release -symbols -IncludeReferencedProjects
REM *** Push NuGet Package ***
NuGet.exe push -source \\pc-Zbynek\NuGetPackages\ My.Assembly.1.4.3.0.nupkg

středa 1. října 2014

Nuget server - neúplný návod

Co je potřeba udělat ?

  1. Vytvořit prázdný ASP web form projekt
  2. Nainstalovat z nugetu balíček Nuget.Server (Install-Package Nuget.Server)
  3. v App.configu vyplnit apiKey na libovolné heslo
  4. Vytvořit novou stránku na IIS a nastavit jí 
  5. Nastavi Publish profile na váš IIS server
  6. Vypublikovat aplikaci
  7. Nastavit složce Packages oprávnění zápisu pro uživatele IIS_IUSRS (nebo uživatele AppPoolu)
Práce na půl hodiny

Aby jsme mohli vytvořit vlastní balíčet. Následně je potřeba:
  1. Si stáhnout NuGet.exe z webu https://nuget.codeplex.com/releases
  2. vytvořit si příkaz pro vytvoření specifikace
  3. Balíčku
  4. Publish do NugetRepository
CreateSpec
c:\NugetCommand\NuGet.exe spec "lib\MyAssembly.dll"

CreatePack
c:\NugetCommand\NuGet.exe pack "lib\MyAssembly.dll.nuspec"

Deploy Command
nuget push MyAssembly.1.0.0.nupkg -source http://pc-zbynek/ -ApiKey NwoNugetKey


Podařilo se mi rozjet NugetServerAplikaci na lokálním serveru.

Na Win8 je potřeba povoli Internetovou informařní služnu a pomocí Platform instaleru doinstalovat podporu pro .NET 4.5

Stránce je potřeba nastavit applikační Pool na .NET v4.5 který jsme právě nainstalovali.

Ale potom jsem se dvě a půl hodiny snažil uploadovat balíček na server.


 Ve Visual Studiju si ale můžete nastavit Package source na lokální NuGet server ale balíčky do něj budete moc dostat pouze kopírováním do složky C:\inetpub\NugetServer\Packages





Failed to process request. 'Not Found'.
Vzdálený server vrátil chybu: (404) Nenalezeno..

https://nuget.codeplex.com/discussions/568792


Na Windows 7
Na Win 7 se mi server podařilo rozjed podstatně rychleji. Při Push příkazu mi vracel chybu

Failed to process request. 'Internal Server Error'.
Vzdálený server vrátil chybu: (500) Vnitřní chyba serveru..

Ale po nastavení oprávnění do složky Packages se balíčen na serveru objevil

Zdroj:
https://www.youtube.com/watch?v=KaEmsdf0oKU

středa 24. září 2014

Selenium RC

Selenium Server
Proč bych měl pouštět testy na svém počítači když to můžu nechat na nějakém jiném? Selenium umožňuje spouštět testy vzdáleně na Selenium serveru. Stačí na počítači nainstalovat Javu a ze stránek selenia stahneme aplikaci selenium server.

Pluralsight - Starting Selenium Server

Instalace:
Na počítači kde chceme selenium server spustit potřebujeme nainstalovat Javu. Instalátor získáme na adrese
http://www.oracle.com/technetwork/java/javase/downloads/jdk-netbeans-jsp-142931.html

Potom stáhneme samotný Selenium Server z adresy http://selenium-release.storage.googleapis.com/2.43/selenium-server-standalone-2.43.1.jar
Nakopírujeme ho do bin adresáře právě nainstalované Javy.
Pak už jen spustím server pomocí příkazu
java -jar selenium-server-standalone-2.43.1.jar

Na počítači musí být také nainstalovaný prohlížeš FireFox, pokud nechcete používat předinstalovaný Internet Explorer.

Ve zdrojovém kódu Selenium testů provedeme malou úpravu kde zaměníme

Instance = new FirefoxDriver();

za

Instance = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), DesiredCapabilities.Firefox());

V tomto kódu určíme adresu a port selenium serveru a všechny testy se budou provádět na právě nainstalovaném serveru.

Testovací metoda pak může vypadat nějak takto:

[TestMethod]
        public void TestMethod1()
        {
            var Instance = new RemoteWebDriver(new Uri("http://192.168.0.24:4444/wd/hub"), DesiredCapabilities.Firefox());
            var n = Instance.Navigate();
            n.GoToUrl("http://www.seznam.cz");
            var el = Instance.FindElement(By.Name("q"));
            el.SendKeys("Zbynek Sulc Blog");

            var btn = Instance.FindElement(By.Id("hledej"));
            btn.Click();
            Thread.Sleep(3000);
            Instance.Quit();
        }


Selenium Server Grid Mode
Několik instancí serveru umožňují spouštět servery paralelně na různých prohlížečích.

Android selenium server 
Jak testovat weové aplikace na platformě android se dočtete na tomto webu
https://code.google.com/p/selenium/wiki/AndroidDriver#Using_the_Remote_Server
Do mobilu je potřeba nainstalovat servrovou aplikaci
android-server-2.21.apkhttps://code.google.com/p/selenium/downloads/detail?name=android-server-2.21.0.apk

Tento projekt je již ale zastaralý a vystřídal ho projekt Selendroid
http://selendroid.io/mobileWeb.html

Zdroje:
  1. http://pluralsight.com/training/Player?author=john-sonmez&name=selenium-m5-server&mode=live&clip=0&course=selenium
  2. http://pluralsight.com/training/courses/TableOfContents?courseName=selenium&highlight=john-sonmez_selenium-m2-ide*4#selenium-m2-ide


úterý 16. září 2014

Active 24 a WebDeploy z Visual Studia

O kunfiguraci WebDeploy na hosting Active 24 jsem se nikde nic nedočetl ani se mi nepodařilo nic vygooglit. V zoufalství jsem se pokusil o deploy pomocí FTP, ale to z nějakého důvodu z Visual Studia nefungovalo. (soubory se na hostingu neobjevily). TotalCommandrem se mi povedlo přenést soubory z adresáře obj\Release\Package\PackageTmp a web zprovoznit.

Po několika mailech s technickou podporou se mi podařilo zjistit od administrátora, že hodnota Site/application je něco ve smyslu 24631 - v417815 (mezery kolem pomlčky jsou důležité)

Do té doby mi průvodce po stisknutí tlačítka [Validate Connection] vracel chybovou hlášku:
Web deployment task failed. (Connected to the destination computer ("www.seznam.cz") using the Web Management Service, but could not authorize. Make sure that you are using the correct user name and password, that the site you are connecting to exists, and that the credentials represent a user who has permissions to access the site.)
Pak vše začalo fungovat jak má.



Když jsem pro další projekt chtěl po helpdesku zjistit správný řetězec pro novou doménu, tak mi prozradil sladké tajemství ;)

Potřebné údaje jsou vždy po zřízení hostingu uloženy ve složce wwwrootu v souboru
web.PublishSettings

<?xml version="1.0" encoding="utf-8"?>
<publishData>
 <publishProfile
 profileName="MSDeploy"
 publishMethod="MSDeploy"
 publishUrl="pink.globenet.cz"
 msdeploySite="24631 - v417815"
 userName="v417815a"
 userPWD="HCRcpfOIqNc5"
 destinationAppUrl="http://seznam.cz.pink.globenet.cz/"
 controlPanelLink="http://centrum.active24.cz/" /> 
</publishData>

úterý 5. srpna 2014

Šablona domácí sítě

Vyhrazené IP adresy

Router (Brána) 192.168.0.1
Tiskána 192.168.0.3
SERVER 129.168.0.5

DHCP rez. 192.168.0.11
DHCP rez. 192.168.0.99

DHCP 192.168.0.100
DHCP 192.168.0.200

WiFi AP_2 192.168.0.253
WiFi AP_1 192.168.0.254

Barvy kabeláže v rozvodné skříni

Modem - Router červený 0.5m 1x
Router - Switch žlutý 0.5m 3x
Switch - PC 100M/s šedá 0.5m 8x
Switch - PC 1000M/s černá 0.5m 4x
Switch - WiFi AP modrá 1m 2x
Switch - Tiskárna zelený 3m 1x

pondělí 9. června 2014

Daň z nemovitosti 2014

Pokud Vám stejně jako mě nepřišla složenka na zaplacení daně z nemovitosti tak stačí zavolat na příslušný finanční úřad, kde Vám podle pčíjmení a rodného čísla řeknou kolik a kam zaplatit.

V mém případě je to:
Adresa: Příkop 819/25, Zábrdovice, 615 00 Brno
Telefon: 545 561 111
klapka: 360

středa 9. dubna 2014

Startovací stránka pro MVC

Jak se zbavit otevírání aktuálně zvolené stránky v Solution Exploreru při debugu MVC projektu?
V nastavení projektu přepněte Current Page na Specific Page. Tu ale nechte prázdnou.


Zdroj:
http://stackoverflow.com/questions/501059/debug-with-visual-studio-wrong-url-on-asp-net-mvc

čtvrtek 3. dubna 2014

TFS struktura

Moje struktura projektu v TFS Jako každý programátor si rád hraji s novýma technologiema. Takže ve složce PlayGround jsou uloženy první krůčky s novejma hračkama. Ve složce Release jsou pak odvětvené verze projektu po jejich publikování do produkčního prostředí. Složka Main je pak klasická hlavní větev no a nakonce složka FeatureBranch obsahuje odvětvení z mainu pro každého vývojáře pro danou funkčnost na které zrovna pracuje.
  • [ProjectName]
    • Main
      • Kolo
    • Release
      • Kolo - Ver1.0
      • Kolo - Ver1.5
      • Kolo - Ver2.0
    • FeatureBranch
      • Zbynek_WI#2548-Přihlášení uživatele
      • Karel_WI#3521-Řazení v hlavičkách gridu
  • Playground
    • Bootstrap
    • jQuery
    • EntityFramework
    • nUnit
    • Selenium

středa 26. března 2014

Transformace ConnectionStringu ve Web.Configu

Pokud se stejně jako já rozčilujete proč neproběhne transformace web.configu když máte všechno správně a pořád se vám používá ConnectionString ze souboru web.config a ne z web.release.config tak zkuste tuto úpravu:

  

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
  <add connectionstring="Data Source=.\SQLEXPRESS;Initial Catalog=databaze;Integrated Security=true" name="DefaultConnection" providername="System.Data.SqlClient" xdt:locator="Match(name)" xdt:transform="SetAttributes"/>
</connectionStrings>
</configuration>


Důležité je odkomentovaný Tag add obalit ještě tagem <connectionStrings> aby locator hledal shodu na správném místě které je "configuration/connectionStrings/add". Některé příklady od Microsoftu nejsou blbuvzdorné :) a pouhé odkomentování šablony nestačí.

Zdroje:

neděle 9. února 2014

Přejmenování projektu ve VS

Po přejmenování projektu je potřeba promazat složky bin a release protože po přejmenování ve složkách zůstanou PDB soubory s debug informacema a potom při debugu visual studio prohledává originální soubor, který se mu ale nepodaří najít.