Zobrazují se příspěvky se štítkemsoftware. Zobrazit všechny příspěvky
Zobrazují se příspěvky se štítkemsoftware. Zobrazit všechny příspěvky

2019-03-08

Používání SonarQube pro DevOps

Zprovozňoval jsem analytický nástroj SonarQube pro použití v Jenkins pipeline, nicméně jako standalone instanci tedy bez pluginu. K použití GetCodeflow s jehož autorem se znám jsem nedosal povolení od správce repozitáře, je potřeba tedy udělat analytiku lokálně. Kdybych náhodou instaloval nový server, píšu si následující poznámky.


Stažený instalátor SonarQube není instalátor. Složku je potřeba rozumně pojmenovat a někam permanentně umístit jako třeba C:\Program Files\sonarqube

Nejprve je nutné nainstalovat 64 bitovou Javu (JRE) a složku propojit s konfiguračním souborem C:\Program Files\sonarqube\conf\wrapper.conf, kam je třeba vložit řádek 
wrapper.java.command=C:\Program Files\Java\jre1.8.0_202\bin\java
Dále můžete vyzkoušet spuštění StartSonar.bat ze složky bin/windows-x86-64 přes command line (uvidíte případné chyby), pokud se načítá aplikace http://localhost:9000 (login admin/admin) je vše v pořádku. Kdyby byl větší problém, otevřete C:\Program Files\sonarqube\logs\sonar.log a koukněte na konec souboru co bylo příčinou pádu.
wrapper  | Waiting to start...
wrapper  | The SonarQube service was launched, but failed to start.
Před plným používáním je třeba doladit několik detailů. Zejména instalace samospouštěcí služby. Otevřete příkazový řádek v admin režimu, nalistujte C:\Program Files\sonarqube\bin\windows-x86-64\ a spusťte InstallNTService.bat, poté by se měla v systémových službách (services.msc) objevit služba SonarQube s automatickým startem.

V průběhu prvního testovacího buildu jsem se vinou obrovského solution (3 miliony řádku kódu ve 4,5 GB zdrojových kódů) potýkal s nedostatkem paměti, kterou bylo potřeba rozšířit. 32 bitová aplikace zvládá alokovat maximálně 2 GB paměti, proto je potřeba používat 64 bitovou. 
INFO: EXECUTION FAILURE
INFO: Final Memory: 15M/247M
ERROR: Error during SonarQube Scanner execution
ERROR: Java heap space
ERROR: The SonarQube Scanner did not complete successfully. Post-processing failed. Exit code: 1 
Nastavení se provádí v C:\Program Files\sonarqube\conf\sonar.properities. Hodnota sonar.web.javaOpts=-Xmx<číslo>m uvádí maximální možnou paměť a -Xms<číslo>m hodnotu při startu, rozpětí je tedy žádoucí velké.

Funkční nastavení: wrapper.conf
wrapper.java.additional.1=-Xms2048m
wrapper.java.additional.1=-Xmx%WRAPPER_SYSMEM_80.0%
Funkční nastavení: sonar.properties
sonar.web.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError
sonar.ce.javaOpts=-Xmx8192m -Xms1024m -XX:+HeapDumpOnOutOfMemoryError
Jak vystavit SonarQube do sítě? Na mém serveru běží také IIS, takže je potřeba rezervovat adresu v IIS a nastavit redirect podle návodu. Pro samotné přepnutí aplikace pak stačilo nastavit DNS záznamy a uvnitř v aplikaci položku sonar.core.serverBaseURL => Administration/Server base URL. Navíc je potřeba zvýšit limit pro uploadované soubory, jinak končí analýza chybou "ERROR: Failed to upload report - HTTP code 404: "

Jak mít permamentní výsledky v databázi? Je potřeba C:\Program Files\sonarqube\conf\sonar.properities propojit s DB serverem a to následujícím způsobem. V DB (MSSQL) vytvořit databázi (v options zvolit Collation = Latin1_General_CS_AS), vytvořit uživatele a přiřadit mu db_owner právo. (ideální je zkusit se připojit přes Microsoft SQL Server Management Studio). A vlastní konfigurace tedy
sonar.jdbc.username=sonarqube
sonar.jdbc.password=password

sonar.jdbc.url=jdbc:sqlserver://<IPorDNS>:1433;databaseName=sonarqube
A to je vše, restartovat službu SonarQube a nechat nástroj znovu načíst. Případné chyby jsou ve web.log.

Jak propojit přihlášení do rozhraní SonarQube přes Active Directory? Předně je třeba vytvořit uživatele (?) ve zmíněné doméně, který bude sloužit pro přístup samotného SonarQube. Konfigurace v sonar.properities je pak následující
sonar.security.realm=LDAP
sonar.security.savePassword=true
#sonar.security.localUsers=admin
ldap.url=ldap://DOMAIN.local:389
ldap.bindDn=sonarqube@DOMAIN.local
ldap.bindPassword=PASSinPLAINTEXT
#ldap.bindPassword={aes}passhashed
ldap.user.baseDn=cn=users,dc=DOMAIN,dc=local
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail
ldap.group.baseDn=DC=inpulsetest,DC=local
ldap.group.request=(&(objectClass=group)(memberUid={uid}))
Není potřeba dalšího pluginu a přihlašování pak probíhá jen zadáním username bez domény. Pokud chcete mít z uživatelů administrátory, jde to snadno přes položku Administration/Security/Global permission a zaškrtnout příslušná oprávnění v sonar-users skupině.
 
Každopádně po této konfiguraci funguje nástroj v enterprise režimu a podporuje DevOps proces.

2019-02-01

Doporučená instalace softwaru a používání služeb

Affiliate sekce, aneb za doporučení výhody pro mě i pro vás.

Programy do počítače:

Služby:

Cestování
Obchody:
  • Alza.cz s návodem na poslání Alzáků
  • EuroOil při nákupu paliva nad 300 Kč a platbě Era platební kartou mi na pokladně přizná slevu 0,40 Kč / litr  

2018-11-23

Nastavení spouštění Jenkins úlohy na webhook z Gitu

Hrál jsem si s nastavováním automatického spouštění úlohy v Jenkins po commitu do GitHubu. Čistě teoreticky jde o triviální věc, kterou popisuje spousta videí, nicméně v praxi jsem narazil na několik problémů, které si tady odložím, abych to příště nemusel řešit. Třeba to pomůže i někomu dalšímu.

Na začátek hezké video, které popisuje úlohu bez nastavení tajného hesla:

Nejprve je třeba připravit Jenkins, předpokládám, že už vám joby a integrace s GitHubem funguje, jen pro informaci je třeba mít nainstalovaný plugin GitHubu.

Dále musí být dostupná adresa JENKINS_URL/github-webhook/ z veřejného internetu (nebo filtru podle GitHub IP adres), případně přenastavena na jinou v JENKINS_URL/configure sekce GitHub/Advanced (to druhé advanced) a políčko "Override Hook URL/Specify another hook URL for GitHub configuration" 

Manage webhooks zůstane nezaškrtnuto (sekce A.3) pro manuální instalaci webhooku na GitHubu.

Protože nechceme, aby každý, kdo se dostane k odkazu webhooku, spouštěl úlohu, je třeba nastavit heslo neboli "shared secret", respektive jej vytvořit v JENKINS_URL/credentials/add/secret text/system/ a pak nalinkovat "Shared secret". Nicméně je taky fajn to nejdříve vyzkoušet, že to funguje a secret přidat později (nezapomněout na to!).

Poté je třeba registrovat job, který se na webhook spustí. Zpátky na seznam úloh, rozklinout ho a možnost configure, pak checkbox GitHub project a do Project url vložit https://github.com/<user>/<repository>/ toto musí být uděláno manuálně.
Níže pak ještě zaškrtnout "GitHub hook trigger for GITScm polling", nebo to přidat do pipeline definice úlohy jako triggers{githubPush()}.

Poslední částí je nastavit URL webook na GitHubu, link: https://github.com/<user>/<repository>/settings/hooks/new, kde se vloží Payload URL: JENKINS_URL/github-webhook/ včetně lomítka na konci, content type jako application/json a secret je ten námi zvolený a uložený string.

Poté je výhodné udělat testovací ping a počkat na zelenou fajku, nicméně vlastní run jobu začně až po prvním commitu. Zejména na začátku nespěchtejte, občas to chce čas na reakci.


2018-11-19

Namespace Microsoft.SqlServer (are you missing an assembly reference?)

Chvíli jsem bojoval s chybovou hlášku u SW buildu na novém serveru, která se při sestavování stejného řešení na starším serveru neprojevovala, což bylo zjevně podezřelé. 


Její znění:
error CS0234: The type or namespace name 'Management' does not exist in the 
namespace 'Microsoft.SqlServer' (are you missing an assembly reference?) 
[...Installer.csproj]
Nepomohlo ruční doinstalování přes Nuget, ani doinstalování Microsoft SQL Server Feature Packu, ale bylo potřeba přidat celý SQL Server 2017 Developer edition, který zjevně deplnil některou závislost do systému Windows Server.

Ještě zkusím i odinstalování...
 

2018-10-24

Jenkins stops pipeline from Powershell

When you realize inside some job that you want to terminate running job in Jenkins you need to find way, hot to pass message to proper level where is Jenkins actually able to terminate the job. I am using this way with calling authorized URL which is terminating the job.

Jenkinsfile pipline is calling powershell and passing there API token from credentials (manually inserted to Jenkins => Credentials)
script
{
    if(env.GIT_PREVIOUS_SUCCESSFUL_COMMIT !=  null)
    {
        withCredentials([string(credentialsId: 'JenkinsAPIcredentials', variable: 'apistring')])
        {
            echo 'checking number of changes and stopping job if nothing new happened'
            powershell 'powershell -File $env:WORKSPACE\\stop-script.ps1 -phrase "stop-job" -buildNumber $env:BUILD_NUMBER -gitprevious $env:GIT_PREVIOUS_SUCCESSFUL_COMMIT -gitcurrent $env:GIT_COMMIT -jenkinsUrl $env:JENKINS_URL -buildIDurl $env:BUILD_URL -apistring $env:apistring'
        }
    }
}
What is happening inside powershell script? There is needed to generate authorized POST call to Jenkins server, luckily is process few lines of code. Part of code is missing definition of parameters in Powershell.
if($phrase -eq "stop-job")
{       
    $commitsnumprevious = (git rev-list --count $gitprevious)
    $commitsnumactual = (git rev-list --count $gitcurrent)
    $difference =  $commitsnumactual-$commitsnumprevious

    if($difference -le 0)
    {
        $url = $buildIDurl+'stop'
        $Bytes = [System.Text.Encoding]::UTF8.GetBytes($apistring)
        $Base64bytes = [System.Convert]::ToBase64String($Bytes)
        $Headers = @{ "Authorization" = "Basic $Base64bytes"}
        $CrumbIssuer = "$jenkinsUrl/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,`":`",//crumb)"
        $Crumb = Invoke-WebRequest -UseBasicParsing $CrumbIssuer -Headers $Headers
        $Regex = '^Jenkins-Crumb:([A-Z0-9]*)'
        $Matches = @([regex]::matches($Crumb, $Regex, 'IgnoreCase'))
        $RegCrumb = $Matches.Groups[1].Value
        $Headers.Add("Jenkins-Crumb", "$RegCrumb")

        try
        {
            $response = Invoke-WebRequest -Uri $url -Headers $Headers -Method POST
        }
        catch
        {           
            Write-Error "Stopping of job failed! " $_.Exception.Response.StatusCode.Value__
        }       
    }
}
I hope this few lines of code can make your day easier.
 

2018-10-16

Jenkins checkout git by commit id parameter

Discussion forums on Internet are providing answers for your question "how to check out specific git hash in Jenkins" quite easily for a manual procedure, but if you want to do it programmatically inside pipeline defined in Jenkins file or even by parameter problems raise.


It makes sense to check out specific git hash because it's unique inside repository and if you add git sha in job configuration GUI (Branch Specifier (blank for 'any')) then you really get the specific version in your workspace, so where is the problem?


Inside pipeline, block checkout you need to echo this commit from the variable by only one syntax even there are at least 3 other different ways usually works for printing the variable.

checkout([$class: 'GitSCM', branches: [[name: "ECHO GIT SHA HERE"]], userRemoteConfigs: [[credentialsId: 'string', url: 'string']]])

So the only one correct way is to use:
  • branches: [[name: "${params.BRANCH_NAME}"]],

because this are not working (but they are still printing value):
  • branches: [[name: env.BRANCH_NAME]], 
  • branches: [[name: ${env.BRANCH_NAME}]], 
  • branches: [[name: "${BRANCH_NAME}"]],


So to solve this I burned many hours. The syntax of Groovy is not enough mature yet, anyway I hope this can help you and if you need to do more magic with parameters as git values, I can recommend this plugin.

2018-09-10

Jenkins pipeline if-else for null variable

I was struggling few days with solving scripting problem in Jenkins Pipeline job definition. Since my Powershell scripts are using parameters from Jenkins and accepting of zero lenght / null values is problem in command line. So how to secure the script?

It was about variable $env:GIT_PREVIOUS_SUCCESSFUL_COMMIT whis is empty unless first run was actually successful, but you need to think about it in script definition. It's about one ternary operation in any normal scripting language, but not in Groovy which is used in Jenkins pipeline.

So how to do? Option one is stage based:
stage('First-run')
{
when { environment name: 'GIT_PREVIOUS_SUCCESSFUL_COMMIT', value: ''
}
steps
{
echo 'There is no successful previous build, need to run completely.'
}
}

stage('Regular-run')
{
when { not { environment name: 'GIT_PREVIOUS_SUCCESSFUL_COMMIT', value: '' }}
steps
{
echo "Regular run with ${GIT_PREVIOUS_SUCCESSFUL_COMMIT}"
powershell 'powershell -File $env:WORKSPACE\\script.ps1 -phrase "start" -buildNumber $env:BUILD_NUMBER -gitprevious $env:GIT_PREVIOUS_SUCCESSFUL_COMMIT -gitcurrent $env:GIT_COMMIT -jenkinsUrl $env:JENKINS_URL'
}
}
There you see that variable is checked for step block and block is executed only when variable fits. This solution sometimes not fulfill all requirements of condition, so there is also another solution for inside if-else expression.

stage('Everytime-run')
{
steps
{
script
{
if(env.GIT_PREVIOUS_SUCCESSFUL_COMMIT !=  null)
{
echo "PREVIOUS COMMIT IS NOT NULL - ${GIT_PREVIOUS_SUCCESSFUL_COMMIT}"
powershell 'powershell -File $env:WORKSPACE\\script.ps1 -phrase "start" -buildNumber $env:BUILD_NUMBER -gitprevious $env:GIT_PREVIOUS_SUCCESSFUL_COMMIT -gitcurrent $env:GIT_COMMIT -jenkinsUrl $env:JENKINS_URL'
}
else
{
echo 'PREVIOUS COMMIT IS NULL'
}
}
}

}
Exploration of these constructions took me lot of time, so I hope you can solve it without issues.

2018-08-07

Jenkins pipeline calls cmd command

When you need to call cmd command from Jenkins pipeline script you can do it in following way. I am just storing that piece of code here.
steps
  {  
   script
    {
     env.GitCurrentHash=bat(returnStdout: true, script: "@echo off | git --git-dir=${WORKSPACE}\\.git rev-parse origin/${branch}").trim()
    }
  
echo "Current Git Hash: ${GitCurrentHash}"
   echo "Current Git Hash: ${GIT_COMMIT}"
  }
 Sub-command "@echo off |" is there to eliminate repetition of command to system output console, so we see only command result.

If you want to collect git hash from file level use construction:
env.gitcurrent=bat(returnStdout: true, script: "@echo off | git --git-dir=${WORKSPACE}\\.git rev-parse HEAD 2> nul || echo githash").trim()

If you want to know branch name from file level use construction:
env.gitbranch=bat(returnStdout: true, script: "@echo off | git --git-dir=${WORKSPACE}\\.git name-rev --name-only HEAD 2> nul || echo gitbranch").trim()

 That's all... 

2018-04-16

Přesměrování IIS stránky na localhost

Na testovacím Windows serveru s IIS beží aplikace, která používá Apache na lokálním portu 8080, jak zpřístupnit tuto webovou stránku uživatelům, kteří se nenacházejí na serveru lokálně?

Server IIS (ver 10) hostí nějaké testovací aplikace pro platformu .Net a je potřeba mít IIS server funkční, zároveň to znamená, že IIS přebije konfiguraci standalone aplikace s Apache a je tedy potřeba předávat požadavek z vnějšího rozhraní na localhost a zpátky. 

Tohoto je možné dosáhnout založením "site" webové aplikace v konfiguraci IIS. Pod jejím jménem, které by mělo být v DNS bude aplikace přístupná světu. Poté v konfiguraci nalezněte URL Rewrite => Add Rule(s) => Reverse Proxy. Příchozí pravidlo obsahuje místo, kam bude požadavek přesměrován, tedy na localhost:8080 bez http, odchozí pravidlo zůstane nevyplněno.

V případě, že editujete existující pravidlo je nastavení, "Matches the Pattern", "Regular Expressions" a Pattern "(.*)" - bez uvozovek. Rewrite URL tak bude "http://localhost:8080/{R:1}", zaškrknuto Append Query String a Stop Processing subsequent rules.

Případně to lze také zařídit konfiguračním souborem web.config v kořenovém adresáři této webové aplikace. Stránka localhost:8080 je ta lokální a veřejné jméno se v konfiguraci nevyskytuje.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:8080/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
Ověření konfigurace je prostým otevřením webovky. Objevuje-li se chyba 500 či obecně 5xx, pak je něco nakonfigurováno špatně na IIS, jde-li stránka na localhostu.

2018-03-15

Chyba Attempting to recover installation a oprava

Tak jako mnoha jiným uživatelům se na jednom notebooku o který se starám zobrazila hláška
Attempting to recover installation, Restoring your version of Windows
Kdy se počítač neustále restartuje, ale nic se neděje. Tato chyba se zobrazuje po pokusu o aktualizaci Windows 10 na verzi Creators Update vydání 16229. Aktualizace se jako všem zasekla na 33%. Všechny zajímá, jak se této hlášky zbavit:

Postupoval jsem vložením instačního média Windows 10 (USB Creation Tool) a nabootování z něj jsem zkoušel automatickou opravu, bod obnovené nebo návrat k předchozí verzi. Něco z toho musí zafungovat jinak je problém většího rázu. Podstatné je znovu spustit předchozí systém.

Jak se vyvarovat chyby znovu? U mě zafungovala aktualizace všech starých ovladačů ve Windows pomocí utility Lenovo System Update část Driver check - to bylo značně důležité. Taktéž jsem provedl kontrolu nástrojem DISM - příkazy v tomto odkazu část 12.

Poté již aktualizace proběhla bez obtíží a systém dále funguje.

2017-12-30

Aktualizace Windows 10 chybí ovladače

U staršího, ale vcelku obstojně fungujícího notebooku Toshiba proběhl automatický upgrade Windows 10 na aktuální verzi s podtitulem Fall Creators Update. 


Po dokončení aktualizace však přestaly fungovat téměř všechny periferie v počítači, zejména síťová rozhraní WiFi a Ethernet, čímž se stal počítač nepoužitelný.

Vložka: protože OS byl ještě z původních z Windows 7, podezříval jsem nějaký starý nepořádek, že dělá neplechu. Po reinstalaci na aktuální verzi W10 a opětovném doinstalování všech aktualizací se situace opakovala, takže chyba je zjevně softwarového charakteru na úrovni ovladačů, nicméně se nedá vyřešit přeinstalací driverů.


Řešení: je potřeba zapnout zámek PCI sběrnice. To se provede příkazy:

  • Spustit nebo klávesovou zkratkou Win + R
  • msconfig.exe
  • záložka Spouštění počítače
  • při vybrání výchozí položky (pokud je jich více) klepnout na Upřesnit možnosti
  • zvolit a zaškrtnout Uzamčení PCI
  • OK, OK, OK, restartovat



Po restartu již většina zařízení nepíše chybu "Zařízení se nepodařilo spustit (Kód 10)", zamykání PCI sběrnice totiž zajistí, že se při spouštění OS nezmění IRQ adresa a systém ví, kde daný hardware je. Hlavně, že to funguje...

2017-09-17

Intel HAXM is required to run this AVD a vůbec VT-x u Android Studia

Vyčerpané místo na disku mě donutilo reinstalovat Windows a s tím i všechny mé vývojářské nástroje, což je vždycky peklo, neboť po reinstalaci Visual Studia a Android Studia jsem byl opět téměř bez místa na disku (ach ten 128 GB oddíl kvůli SSD).


Při té příležitosti jsem si vzpomněl na 3 roky starý problém s během Android Virtual Device a vůbec virtuálních strojů pod Windows (10). První návod zní zapnout podporu VT-x (tedy běhu instrukcí pro virtualizaci na CPU) v BIOSu, ale to dělám standardně. Přesto se AVD stále nechtělo spustit a akci blokovalo s hláškou:
Intel HAXM is required to run this AVD. Enable VT-x in your BIOS security settings...
Rychlý test toho, že problém je na systémové úrovni se dá provést například pokusem o spuštění nějakého virtuálního počítače skrz VirtualBox, kde vyskakuje stejná hláška.


Nicméně fakt, že problém není HW charakteru, ověří utilita Intel HAXM (předpokládám, že jej máte nainstalovaný), kdy s pomocí příkazového řádku nalistujete do složky:
cd C:\Android\sdk\extras\intel\Hardware_Accelerated_Execution_Manager
a spustíte nástroj haxm_check.exe, viz obrázek.


Příčinu bychom měli diagnostikovánu, ale jak ji odstranit? V mém případě je na vině mnou doporučovaný antivir Avast, který instrukce VT-x blokuje z bezpečnostních důvodů. Jako důvod  je dobrý, ale hláška o takové akci by byla více než vhodná.

Je tedy nutné otevřít okno antiviru, klepnout na položku Nastavení (vlevo dole), přejít do části Řešení problémů a zaškrtnout položku "Povolit hardwarovou virtualizaci". 



Po restartu se problém s VirtualBoxem vyřeší, ale Android studio stále nespolupracuje, protože přišlo s druhou hláškou:
/dev/kvm not found
Tato zpráva je na Windows zařízení více než podezřelá, nicméně internetová fóra si s ní již umí poradit. 


Nutností je odstranit přes Ovládací panely předchozí instalaci Intel HAXM a nainstalovat ji ručně ze stránek Intelu. Po stáhnutí haxm-windows_v6_2_1 a úspěšné instalaci se již Android Emulator spouští bez komplikací a je možné se tedy vrátit k původní činnosti.


2017-05-31

CoolPad Porto E560 drivers & firmware

I get this phone for free from friend because it had broken screen but after some time I decide to use motherboard in another phone, so I have to turn device on but I found that phone is locked by pattern and I need to get rid off it. So how to remove forgotten lock gesture?



First I tried one of milion advices on the Internet but they didnt work especially "wipe data/factory reset" method, so I decided that I need to reflash firmware inside. You need to download driver + firmware package (mirror), marked also as Coolpad_Sky_Mini_E560 5.1.222.38.P1.151022.KMINI.ap. Password is www.firmwarelink.com

What to do next? Install driver from ZIP file. Basically it is same package as is located on phone virtual CD-ROM drive. It contains regular MTP driver, but also ADB and Bootrecord driver, so you need all of them. 

Next is instalation of YGDP tool. When is installed enter it by "password" 369. Then click to Config and select 5.1.222.38.P1.151022.KMINI.ap.CPB file from ZIP - no more selection needed. After this click on start and software starts to wait for phone in proper bootmode.

How to put device to right mode? First is nessesary to turn it off and start it with magic combination with holding VOLUME UP and POWER button until special menu is selected.

Usually it is enought on Android device to only press "wipe data/factory reset" and phone is correctly deleted with all user data but I dont know why but it didnt work on my CoolPad Porto E560.

So we are in recovery mode where you should go to option "Restart to bootloader mode" and wait until computer recognize correct driver. At the same time when is installed YGDP app starts to be ready for upload firmware file. 

In next step phone asks you for confirmation of flashing and after this it takes 10 minutes to upload to phone, install and restart. So this is all how to reinstall firmware on this already old phone. This step helped me to remove forgotten locking pattern.

Immediately when I connected device to internet it asked me for downloading OTA update, so I did it and phone is now in most updated version. I hope it helped you!

2017-05-20

Samsung NX 1000 a cloudové funkce

Pořídil jsem si bezzrcadlovku Samsung NX 1000 z druhé ruky a než mi ji stihli ukradnout, tak jsem zjistil, že přítomná WiFi je sice funkční, ale že nyní již nepodporované aplikace nefungují. 


Přesněji po spuštění, asi nejužitečnější utility, Skydrive vyškočí hláška:
Security Error: The server certificate could not be verified
Předpokládám, že jde o problém způsobený přejmenováním služby Skydrive na současný OneDrive a nedá se s tím nic udělat... Aktualizace firmware nepomůže a na jiný způsob update jsem nepřišel. Přítomný upload fotek na Facebook i přímo do telefonu funguje bez zvláštních obtíží...


2016-11-17

Počítač se nezapíná "watchdog initiation" error

Jednoho pěkného večera přistála v mém Messengeru žádost o záchranu: Počítač s Windows 10 se nespouští, točí se kolečko, ale místo přihlašovací obrazovky se objeví chyba "Phase 0: Starting Watch Dog Initiation", konkrétně tedy:
PHASE 0
- starting watch dog initialization
- loading configuration( root kernel, set up)
- pre initialization events
- creating watch dog dynamic key list
- sub systems initialization
- finished
Phase 1:
- Initialize Components
- starting reactor
- starting components
- starting internal subsystems
- starting command channels
- Srm start actions
- starting external subsystems- finished

Nicméně na konci se nestane nic a počítač je zamrzlý v tomto bodě. Co s tím? Předně odpojit všechny flešky, disky, karty a jiná paměťová média z počítače. Chybu způsobuje antivir od AVG, který na nich možná našel něco škodlivého. Pokud nic připojeného není nebo to nepomohlo, tak zkuste další způsob.



Vypněte počítač podržením zapínacího tlačítka > 4 vteřiny. Po vypnutí vytáhněte baterku (pokud jde o notebook) a znova zapněte pouze přes kabel bez akumulátoru. Ve chvíli kdy se objeví to Windowsácké spouštěcí kolečko vytáhněte šňůru napájení z notebooku / restartujte klasický počítač tlačítkem. Situaci opakujte 3x a poté by se mělo objevit tabulka s pokusem o automatickou opravu.


Po úspěšném spuštění Nástroje pro odstraňování chyb se počítač zeptá, zda-li jej chcete restartovat nebo pokračovat Pokročilou opravou, zvolte pokročilou, Oprava spouštění, něco zašramotí a počítač se zeptá na restartování. Poté počítač najede normálně a/nebo se zeptá na možnost Nouzového spuštění se sítí, zvolte tedy tento režim. 


Po nouzovém zapnutí počítač běžným způsobem restartujte a mělo by být po problému. V každém dalším jiném případě postup opakujte a zvolte jinou možnost v Nástroji pro odstraňování chyb. Poslední možností v Nouzovém režimu je odinstalace antiviru AVG nástrojem AVG remover.


Doufám, že to pomohlo. Zdroj inspirace k řešení v angličtině.

2016-08-27

How to set up Eduroam at University of Vaasa or elsewhere

I was lately moved from Czech republic to Finland when my exchange program starts. It was change of absolutely anythink in live. So one of these changes is group of people around me and their technical skills. This is reason why to publish first tutorial in English about putting work on Eduroam WiFi.


Eduroam is academic wireless network spreaded over majority of universities over the world. Principe is in idea, that you don't must to set up your connectivity on every place which you are visiting.  This is great option to get internet access on many parts of world or at least Europe.

Please folow several easy steps to have permanent access to this network:

1. First, connect Eduroam with your device


2. Next there will be showed page with technical issues or you must to call it manually.


3. Then you must change verification phase 2 to protocol MSCHAPv2.

4a. Fill your username (or login) followed with symbol @ and domain name of your home university (should be like website without www)


4b. Or you can also use local credentials with login@student.uwasa.fi


5. Anonymous indentity is not filled
6. To password field please insert your password.


So there are only few steps, but you will get many benefits of connecting to the academic world. Enjoy it! There is also possibility to set up VPN connection (tutorial in Czech with pictures)

If you need more help or you are try to connect from another type of device, try tutorials from University of Ostrava and just use another credentials.

2016-07-25

Asus EEE 1225c a Windows 10

Dostal se mi na stůl požadavek na přeinstalaci obstarožního netbooku Asus EEE PC 1225c. Vzhledem k tomu, že má legální licenci Windows 7, mě automaticky napadlo jej upgradovat na Windows 10 a prodloužit tak licenční život operačního systému, nicméně nedělejte to.

Zásadním problémem je totiž instalovaná grafická karta, resp. čipset, protože Intel GMA 3650 (obecně 3600 series) nemá podporu ovladačů pro novější systémy než Windows 7 a Intel prohlásil, že nikdy nebudou. Samotný Asus pak u tohoto modelu nepodporuje 64 bitové systémy.

Nejprve jsem totiž nainstaloval Windows 10 Pro x64 a zjistil, že ovladač grafického adaptéru neexistuje. Dobrá, udělal jsem reinstalaci na Windows 10 Pro x32 a zjistil, že ovladač grafického adaptéru nelze použít z Windows 7 x32 z oficiální distribuce, protože je nestabilní. 

Nakonec mě to hraní přestalo bavit a vrátil jsem do netbooku autentické Windows 7 x32, což pokud uvažujete o upgradu vřele doporučuji i vám, ušetříte si čas.

2016-06-15

GetSimple CMS na Wedosu

Při standardní instalaci redakčního systému GetSimple od verze 3.3.10+ na hosting Wedos nastane problém s chybou serveru díky kterému stránky nefungují.
Internal Server Error
Pri zpracovani pozadavku doslo k vnitrni chybe. Pravdepodobne se jedna o chybu v .htaccess souboru.
Ctete instrukce v nasi znalostni bazi: Chyba 500 - Internal Server Error

Pro prvotní zprovoznění je třeba zakomentovat křížkem v .htaccess souboru v kořenovém adresáři webu řádek
#Follow symbolink links, This is required for rewrites on some hosts

#Options +FollowSymLinks
Čímž dojde k oživení webu. Teď nastává už jen problém s přepisováním cesty, neboť GetSimple CMS detekuje, že jeho cesta k souborům na Wedosu je namísto
http://test.domain.tld/
taková
http://test.domain.tld/domains/test.domain.tld/
Tuto změnu proveďte přímo v administraci redakčního systému (test.domain.tld/admin), kde se nastavuje adresa webové prezentace.

Dále ve složce /data/uploads zakomentujte křížkem řádek SetHandler GS_DISABLED_SECURITY
#SetHandler GS_DISABLED_SECURITY
dojte tím k zprovoznění čtení souborů ze složky uploads

Dále jsem se dostal na neprůchozí hlášku:
Unable to open /data/web/virtuals/00000/virtual/www/domains/domain.tld/theme/
V tomto momentě se mi zobrazovala jenom bílá stránka bez chyby. Nedařilo se mi vytvořit novou stránku a to vše díky nedostupnosti souborů šablony ze složky /theme/, snažil jsem se to různě vyřešit, nakonec pomohlo až smazání všech souborů a jejich opětovné nahrání i se všemi výše uvedenými opravami.

Postupem času provádím další provozní vylepšení, pokud máte nějaký dotaz nebo chcete přispět svou troškou do mlýna, tak můžete v komentářích níže.

2016-05-19

Google Formulář: použití vzorce na nový řádek

Jako spolupořadateli Mistrovství ČR ve fyzické kondici mi připadl úkol provést automatizaci některých procesů v rámci kterých jsem použil dosud nevyzkoušené postupy.


Například jsem řešil, jak vypočítat v Tabulkách Google vzorec nad novou odpovědí z Google Formuláře. V čem je problém? Google Form totiž nové řádky vkládá (nepřepisuje) a tak se automaticky nerozkopíruje vzorec z buňky, která byla pouze roztažena dolů na prázdná pole.


Řešením je konstrukce se vzorcem ARRAYFORMULA (česky maticový vzorec), která funguje tím způsobem, že do ní vložený vzorec aplikuje na všechny následující řádky podle zadání. Například:
=ARRAYFORMULA(A2:A+B2:B25)
Provede sečtení všech hodnot ve sloupci A se všemi v poli B2 až B25, přičemž je tento vzorec umístěn pouze v jedné buňce C3. Toto není těžké pochopit. Problém nastává, pokud začnete vzorec krmit složitějšími daty, protože má různá omezení. Například neumí logickou konstrukci OR, případně provádění agregačních funkcí jako COUNT, SUM, atp. 

Můj problém spočíval v tom, že jsem potřeboval shlukovat soutěžící do kategorií podle pohlaví a věku, přičemž jsem musel minimalizovat použití složitějších logických funkcí, takže jsem nakonec vytvořil příšernou, leč funkční kaskádu podmínek IF.
ARRAYFORMULA(
IF(G2:G="";
        "";
        IF(G2:G = "Muž";
                IF(year(now()) - D2:D<20;
                        "junior";
                        IF(year(now()) - D2:D<50;
                                "hlavní";
                                IF(year(now()) - D2:D<100;
                                        "senior";
                                        "chyba věku")))));
                IF(year(now()) - D2:D<20;
                        "juniorka";
                         IF(year(now()) - D2:D<50;
                                "hlavní";
                                 IF(year(now()) - D2:D<100;
                                        "seniorka";
                                        "
chyba věku"))))))

Pro upřesnění v polích "G" jsou textově informace, zda-li je závodník Muž či Žena a v "D" má rok narození. Příklad uvádím proto, že je velmi pravděpodobné, že řešíte něco podobného a inspirace není od věci, proto koukněte třeba sem.

Zajímavost na závěr: Tato funkce není (alespoň doposud) implementována v MS Office, takže po stažení dokumentu v XLS souboru se =Arrayformula() sama přemění na pouhý vzorec nad buňkami. Mějte to na paměti, až se budete snažit uploadovat zpět do Google Docs dříve stažený soubor.