Odstranění položky ze seznamu při průchodu

Mějme následující seznam

List list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");

Zkusme z něj odstranit položku.

for (String item : list) {
	if (item.equals("a")) {
		list.remove(item);
	}
}

Jakýkoliv pokus o odsranění položky ze seznamu tímto způsobem vyhodí java.util.ConcurrentModificationException. Zkusme tedy použít klasický cyklus a přistoupit k položce pomocí indexu.

for (int i = 0; i < list.size(); i++) {
	if (list.get(i).equals("a")) {
		System.out.println("removing");
		list.remove(i);
	}
}

Výsledek je [b, c, d] což je správně a nedošlo k vyhození výjimky.

Zkusme ale odstranit „b“ a zároveň „c“.

for (int i = 0; i < list.size(); i++) {
	if (list.get(i).equals("b") || list.get(i).equals("c")) {
		System.out.println("removing");
		list.remove(i);
	}
}

K chybě nedošlo, ale výsledek je [a, c, d], což je špatně. Odstranili jsme „b“, seznam se zmenšil a „c“ se posunulo na index 1 (kde bylo původně „d“). Cyklus ale pokračoval na indexu 2. Pokud bychom chtěli správný výsledek, kód by vypadal následovně.

for (int i = 0; i < list.size(); i++) {
	if (list.get(i).equals("b") || list.get(i).equals("c")) {
		System.out.println("removing");
		list.remove(i);
		i--;
	}
}

Pro modifikaci seznamu je nejlepší použít iterátor.

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
	String item = iterator.next();
	if (item.equals("b") || item.equals("c")) {
		iterator.remove();
	}
}

Metoda s proměnným počtem argumentů v Ruby

Pro určení proměnného počtu argumentů v metodě se v Ruby používá znak hvězdičky (*).

Příklad

def myMethod(*arguments)
  arguments.each do |argument|
    puts argument
  end
end

myMethod
myMethod("a", "b", "c")

Výsledek

a
b
c

Další příklad

def myOtherMethod(arg1, arg2, *others)
  puts arg1
  puts arg2
  others.each do |other|
    puts other
  end
end

myOtherMethod(99, 1.123)
puts
myOtherMethod(123, "Ahoj", 24, 945612, "Nazdar")

Výsledek

99
1.123

123
Ahoj
24
945612
Nazdar

Význam otazníku v názvu Ruby metod

V programovacím jazyce Ruby je určitá zvyklost týkající se názvů metod a přidávání některých znaků na konec názvů metod. Velmi často se lze setkat s metodou, jejíž název končí otazníkem (?), jako např. u metody equal?. Otazník za názvem metody znamená, že metoda vrací datový typ Boolean (true nebo false).

Na příkladu jsou volány metody objektu Integer.

puts 1.equal?1
puts 2.even?
puts 3.odd?
puts 4.zero?
puts 5.between?(1, 10)
puts 6.integer?

Výsledek

true
true
true
false
true
true

Jak začít pracovat v IT

Nejjednodušším způsobem jak začít pracovat v IT je zkusit pozici testera. I pro tuto pozici jsou nutné určité znalosti, avšak pro juniorní žadatele jich není mnoho. Požadavky lze rozdělit na dvě skupiny. První jsou všeobecné předpoklady, v druhé jsou znalosti vyžadované právě pro pozici testera.

Všeobecné předpoklady pro práci v IT

  • Chuť učit se nové věci. IT je velmi dynamické odvětví a je třeba stále se vzdělávat.
  • Angličtina alespoň na mírně pokročilé úrovní. Je třeba porozumět odbornému anglickému textu (dokumentace, komentáře, zadání, …).
  • Dobrá uživatelská znalost operačního systému Windows (instalace a odinstalace programů, základní nastavení, …).
  • Znalost základních programů (textový a tabulkový editor, internetový prohlížeč, …).
  • Umět vyhledat informace na internetu. Na většinu řešení již někdo přišel. Stačí jen vědět, kde a jak hledat.

Znalosti pro pozici testera

Některé společnosti (např. Cleverlance nebo Unicorn) dokonce pořádají několika týdenní školení, během kterých si testery sami vychovají.

Naučte se anglicky s Duolingo

Pokud se chcete naučit anglicky, je zde pro vás web duolingo.

duolingo duolingo02

Můžete si zvolit, jak intenzivně se chcete jazyk učit. Dle toho vás bude program upozorňovat na splnění cílů a také vás bude odměňovat.

duolingo03

Pokud již máte nějaké základy, nemusíte začínat od začátku. Stačí udělat test a dle jeho výsledku program určí vaši úroveň.

duolingo04 duolingo05 duolingo06

Pokud se rozhodnete jít od začátku, čeká vás v každé lekci trocha teorie …

duolingo07

… a procvičování. V rámci cvičení si vyzkoušíte překlad z češtiny do angličtiny a obráceně a to nejen psaného textu, ale též textu mluveného. Program bude také kontrolovat vaši výslovnost (pokud mu to umožníte a povolíte mu přístup k mikrofonu).

duolingo08

Určitě doporučuji tuto webovou aplikaci vyzkoušet. Nic za to nedáte. Je to zdarma. Pokud již anglicky umíte, můžete se na duolingo učit další jazyky (a je jich celá řada).

OutOfMemoryError při testech

V případě, že dostanete následující chybu při Maven buildu (mvn clean install)

Tests run: 226, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 316.116 sec - in TestSuite
Exception in thread "main" Exception in thread "Thread-0" Picked up JAVA_TOOL_OPTIONS: -Djava.vendor="Sun Microsystems Inc."
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "Thread-0"

Results :

Tests run: 226, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] CEB UMA Parent ..................................... SUCCESS [ 5.639 s]
[INFO] CEB UMA API ........................................ SUCCESS [ 15.656 s]
[INFO] CEB UMA Impl ....................................... FAILURE [05:37 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 05:59 min
[INFO] Finished at: 2016-03-29T15:08:52+02:00
[INFO] Final Memory: 43M/272M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.16:test (default-test) on project project_name: Execution de fault-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.16:test failed: The forked VM terminated without saying properly goodbye . VM crash or System.exit called ?

Zkuste změnit nastavení paměti určené pro surefire plugin.

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-surefire-plugin</artifactId>
 <configuration>
 <argLine>-Xmx4096m</argLine>
 </configuration>
</plugin>

Surefire plugin se používá pro spouštění testů v lifecycle default, fázi test a výše uvedená chyba může signalizovat nedostatek paměti. Volba -Xmx určuje maximální velikost paměti (maximální velikost Java heap). Java heap (halda) je paměť určená pro Java objekty.

Změna posledního komitu v Gitu

V případě, že jste provedli uložení změn (commit) do svého lokálního úložiště (repository), stále je možné v tomto komitu provést změny, či jej vrátit zpět.

Změna textu zprávy (message) v posledním komitu
git commit --amend
Otevře textový editor, do něž je možné zadat změněný text.

git commit --amend -m "nový text"
Provede změnu textu bez otevření editoru.

Vrácení posledního komitu
Všechny změny provedené v komitu vrátí do stavu před komitem (stanou se z nich opět změny, které mají být komitnuty – „to be commited“)
git reset --soft HEAD~1

Smazání posledního komitu a všech změn, které byly v daném komitu provedeny
git reset --hard HEAD~1

Základní názvosloví v Mavenu

Build life cycle
Build life cycle je přesně definovaná posloupnost fází. Build life cycle se skládá z několika úseků, kroků -> ty se nazývají fáze (phases). Maven má tři build life cycles: clean (smazání dočasných souborů, default (sestavení, zabalení a nasazení projektu) a složky target) a site.

Phase
Phase je část, která se provádí v rámci build life cyklu. Fáze může obsahovat jeden nebo více úkolů (goals) -> fáze je spojena s jedním nebo více cíli (goals).

Plugin
Plugin obsahuje jeden nebo více cílů (goals). Jednoduše řečeno je plugin seznam jednotlivých cílů. Programátorsky se jedná o projekt, který obsahuje jednotlivé třídy, ve kterých je definována funkcionalita určitého cíle (goal).

Goal vs MOJO
Mojo je zkratka (Maven Old Java Object). Je to slovní hříčka z POJO (Plain Old Java Object). Mojo je Java třída implementující goal. Plugin je Java projekt obsahující jeden či více cílů (goal) = jeden či více Mojo.

Build life cycle (maven má tři: clean, default, site) se skládá z fází (phases). Během každé fáze se provádí různé úkoly (goals). Cíle jsou definovány v pluginech a proto, aby se v určité fázi provedli, jsou tyto cíle (goals) přiřazeny jednotlivým fázím. Jinak řečeno, jednotlivým fázím jsou přiřazeny cíle (goals) a tyto cíle (goals) jsou definovány v pluginech. Programově každý goal představuje mojo a plugin je seznamem jednotlivých cílů (goals).


Zdroje:

Instalace Oracle 12c na Windows

V tomto příspěvku ukážu krok za krokem instalaci Oracle 12c Enterprise Editiona na Windows 10. Nejdříve je třeba z této stránky stáhnou dva zazipované soubory. K tomu je potřeba mít účet u Oracle (registrace je bezplatná) a přihlásit se (a samozřejmě souhlasit s licenčními podmínkami). Pro instalaci Oracle databáze 12c na Windows 10 je třeba použít minimálně verzi 12.1.0.2.

winx64_12102_database_1of2
winx64_12102_database_2of2

Oba stažené soubory je třeba rozbalit do stejného adresáře. To v tomto případě znamená rozbalit první zip (winx64_12102_database_1of2) a z rozbaleného druhého zipu (winx64_12102_database_2of2) překopírovat všechna data z ...\winx64_12102_database_2of2\database\stage\Components  do ...\winx64_12102_database_1of2\database\stage\Components. Pokud toto neprovedete, instalaci sice budete moci spustit, ale nebude úspěšná.

V ...\winx64_12102_database_1of2\database naleznete soubor setup.exe. Spusťe jej jako správce.

Oracle12c_instalace_01

Pokud nevyplníte email dostanete následující upozornění. Klikněte na „Yes“ pro pokračování.

Oracle12c_instalace_02

Zvolte vytvoření databáze.

Oracle12c_instalace_03

Zvolte desktop.

Oracle12c_instalace_04

Můžete vytvořit nového uživatele, použít existujícího či použít svůj Windows účet.

Oracle12c_instalace_05

Pokud zvolíte „User Windows Built-in Account, zobrazí se vám následující upozornění. Klikněte na „Yes“ pro pokračování.

Oracle12c_instalace_06

Zde je potřeba zadat heslo pro administraci.  To musí splňovat určitá kritéria, takže vám to nedovolí zadat zcela triviální heslo.

Tip: Pokud kliknete do textového pole, zobrazí se vám u něj ikona žárovičky. Když na ni nejedete myší, získáte podrobnější informace, týkající se daného textového pole.

Oracle12c_instalace_07

Zkontrolují se nastavení.

Oracle12c_instalace_08

A zobrazí se přehled změn. Pokud potvrdíte, začne instalace.

Oracle12c_instalace_09 Oracle12c_instalace_10 Oracle12c_instalace_11

Toto okno vás informuje o tom, že kromě účtů SYS a SYSTEM, jsou všechna ostatní zamčené. Pokud kliknete na „Password Management“, můžete je odemknout.

Oracle12c_instalace_12

Zde můžete odemknout jednotlivé účty.

Oracle12c_instalace_13

Databáze byla úspěšně nainstalována.

Oracle12c_instalace_14


Zdroje:

Omezení počtu vrácených záznamů pomocí LIMIT

Klíčové slovo LIMIT umožňuje omezit počet vrácených záznamů SQL dotazu. Dotaz s LIMIT vrátí určený počet záznamů nebo méně (pokud samotný dotaz vrací méně záznamů než je limit)

SELECT * FROM table_name LIMIT 10

Vrátí prvních deset záznamů.

SELECT * FROM table_name ORDER BY column_name ASC LIMIT 5

Vrátí prvních pět záznamů. Dotaz nejdříve nalezne všechny záznamy. Ty seřadí sestupně (ASC) a vrátí prvních pět.

S limitem se pojí další klíčové slovo a to OFFSET. To určuje, kolik nalezených záznamů se má přeskočit.

SELECT * FROM table_name LIMIT 5 OFFSET 10

Vrátí jedenáctý až patnáctý záznam četně. Prvních deset záznamů se přeskočí.

OFFSET je možné ale použít i samostatně bez LIMIT.

SELECT * FROM table_name OFFSET 10

Vrátí všechny záznamy od jedenáctého níže.