Zásobník v Javě

Třída Stack (zásobník) je datová stuktura, která funguje na principu LIFO (Last In First Out). Jedná se o kolekci objektů, kdy poslední vložený objekt je vybírán jako první (a první vložený jako poslední).

Vytvoříme si zásobník obsahující čtyři objekty.

Stack<Integer> stack = new Stack<Integer>();
stack.push(5);
stack.push(7);
stack.push(2);
stack.push(7);

Jedná se o kolekci, takže je možné ji procházet.

for (Integer i : stack) {
	System.out.println(i);
}

Pro přidání objektu na konec zásobníku se používá metoda push(). Pro získání posledně přidaného objektu se používají metody peek() a pop().

peek()

System.out.println(stack.peek());
System.out.println(stack.peek());

Výsledek (pořád vrací poslení objekt)

7
7
7
7
7

pop()

System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());

Výsledek

7
2
7
5
Exception in thread "main" java.util.EmptyStackException

Čtvrté volání metody pop() vrátí poslední objekt (první přidaný) a zásobník je prázdný. Pokud zavoláme pop() ještě jednou (na prázdném zásobníku) dostaneme chybu EmptyStackException.

Spring jednoduše 1. díl

Spring je obrovský ekosystém pokrývající rozsáhlou oblast programování. Základní funkcionalitou frameworku je Inversion of Control, což jednoduše řečeno znamená, že objekty, které potřebují další objekty, si tyto objekty nevytváří pomocí klíčového slova new sami, ale přenechávají tuto činnost Springu (Spring kontejneru). Ten je pak zodpovědný za vytváření objektů (za celý životní cyklus objektu od vzniku po zánik). Důvod pro tuto činnost je ten, že díky Springu nejsou komponenty těsně se sebou svázány (a je např. jednodušší vyměnit jednu implementaci za druhou).

Zde je struktura jednoduchého Maven projektu, používajícího Spring.

spring01
│   .classpath
│   .project
│   pom.xml
│
├───.settings
│       org.eclipse.core.resources.prefs
│       org.eclipse.jdt.core.prefs
│       org.eclipse.m2e.core.prefs
│
└───src
    ├───main
    │   └───java
    │       └───cz
    │           └───vitfo
    │               └───spring01
    │                       Main.java
    │                       MyClass.java
    │
    ├───resources
    │       beans.xml
    │
    └───test

Pokud odmažu soubory a složky, které nejsou důležité, vypadá projekt následovně.

spring01
│   pom.xml
│
└───src
    ├───main
    │   └───java
    │       └───cz
    │           └───vitfo
    │               └───spring01
    │                       Main.java
    │                       MyClass.java
    │
    └───resources
            beans.xml

Skládá se z souboru pom.xml, který slouží Mavenu a jsou v něm definovány závislosti na knihovách na Springu.

&<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>cz.vito</groupId>
	<artifactId>spring01</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>spring01</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>4.2.3.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.2.3.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>4.2.3.RELEASE</version>
		</dependency>
	</dependencies>
</project>e

Druhým nezbytným souborem je beans.xml (na názvu nezáleží, ale je zvykem ho pojmenovávat beans.xml). Tento soubor slouží jako konfigurace Springu (Spring kontejneru) a je v něm definováno, jak a jaké objekty má Spring vytvářet. V tomto příkladu je definována jediná beana s názvem (id) ‚myClass‘, která bude instancí třídy cz.vitfo.spring01.MyClass.

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id="myClass" class="cz.vitfo.spring01.MyClass">
       <property name="message" value="Hello World!"/>
   </bean>

</beans>

Nakonec zde ještě máme třídu MyClass

package cz.vitfo.spring01;

public class MyClass {

	private String message;

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
}

a třídu s metodou main, která slouží jako vstupní bod programu.

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

package cz.vitfo.spring01;

public class Main 
{
    public static void main(String[] args) {
    	// beans.xml musí být na class path
		ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
		
		MyClass mc = (MyClass) context.getBean("myClass");
		
		System.out.println(mc.getMessage());
	}
}

Pokud program spustíte (run ve třídě s metodou main), dostanete následující výpis do konzole.

Čvc 01, 2016 3:48:51 ODP. org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1f17ae12: startup date [Fri Jul 01 15:48:51 CEST 2016]; root of context hierarchy
Čvc 01, 2016 3:48:51 ODP. org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [beans.xml]
Hello World!
Picked up JAVA_TOOL_OPTIONS: -Djava.vendor="Sun Microsystems Inc."

Pro nás nejdůležitější je řádek obsahující ‚Hello World!‘. Došlo ke spuštění programu a výpisu proměnné message Springem vytvořeného objektu mc.

Pokud jste dostali následující chybový výpis

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [beans.xml]; nested exception is java.io.FileNotFoundException: class path resource [beans.xml] cannot be opened because it does not exist

ujistěte se, že soubor beans.xml skutečně existuje, a že je umístěn na classpath (např. v package src/resources).

V případě této chyby

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'myClass' is defined

se ujistěte, že v beans.xml máte nadefinovánu beanu s id myClass a nedopustili jste se nějakého překlepu.

Jak zrušit varování Optional used as type for parameter v Idea IDE

Idea při commitu do gitu upozorňuje na to, že Optional<> je použit jako parameter metody.

idea_warnig_optional_used

Tohoto varování se můžete zbavit následujícím způsobem:
File -> Settings -> Editor -> Inspections -> rozbalit Java -> rozbalit Abstraction issues -> odčeknout ‚Optional‘ used as field or parameter type

idea_warnig_optional_used_02

Zdroj: http://stackoverflow.com/…used-as-field-or-parameter-type-warning-in-intelli

Využití místa na disku ve Windows 10

Máte málo místa na disku a zajímalo by vás, které soubory a aplikace ho zabírají nejvíce?

Nastavení (nejjednodušeji se zde dostanete přes lupu, kdy do vyhledávání napíšete ‚nastavení‘.

misto_na_disku_ve_windows_10_01

Úložiště (nejjednodušeji jej naleznete přes vyhledávací textové pole – viz obrázek)

misto_na_disku_ve_windows_10_02 misto_na_disku_ve_windows_10_03

Vyberte úložiště, které vás zajímá. V tomto případě jsem zvolil disk C. Zobrazí se vám grafické znázornění využití místa na tomto disku.

misto_na_disku_ve_windows_10_04

Rozklikněte oblast, která vás zajímá.

misto_na_disku_ve_windows_10_05

Přidání sloupce v PostgreSQL

Pokud máte existující tabulku a potřebujete do ní přidat sloupec a nechcete celou tabulku dropnout a vytvořit znovu, protože byste přišli o data, existuje v postgre příkaz ALTER TABLE ADD COLUMN.

Vytvoříme pokusnou tabulku.

create table pok (
	id	serial		not null,
	jmeno	varchar(100)	not null,

	primary key (id)
);

Přidáme do ní sloupec z názvem prijmeni a omezením (contraint) not null.

alter table pok
add column prijmeni varchar(100) not null;

Vložíme do tabulky dva záznamy.

insert into pok (jmeno, prijmeni) values
	('František', 'Koudelka'),
	('Jana', 'Nová');

Přidáme do tabulky sloupec narozen, který může být null.

alter table pok
add column narozen date;

Přidáme do tabulky sloupec prezdivka a jako výchozí hodnotu (pro ty které jsou null) použijeme řetězec lama.

alter table pok
add column prezdivka varchar(20) not null default 'lama';

Vložíme do tabulky další záznam.

insert into pok (jmeno, prijmeni, prezdivka) values
	('Tomáš', 'Nový', 'jouda');

Výsledek.

postres_pridani_sloupce

Vrácení smazaného souboru v Idea IDE

Pokud v Idea IDE smažete soubor, můžete tuto akci vrátit zpět pomocí lokální historie. Pravým tlačítkem na projekt -> Local History -> Show History.

idea_local_history

V tomto případě jsem smazal soubor pokus.sql.

idea_local_history02

Pokud chceme soubor vrátit -> pravým tlačítkem na soubor -> Revert Selection nebo na akci a Revert.

idea_local_history03

Pokud vyberete File -> Invalidate Caches / Restart, přijdete o lokální historii a tím pádem i o tuto možnost vrácení smazaného souboru.

Vyhledání speciálního znaku v kódu v Idea IDE

Pokud v potřebujete ve svém projektu vyhledávat, v Idea IDE k tomu slouží klávesová zkratka Ctrl + Shift + F (Edit -> Find -> Find in Path …).

idea_vyhledavani

Problém nastává v případě, že chcete vyhledávat text obsahující speciální znaky např. [, *, $, ), … Řešením je přidat před speciální znak zpětné lomítko \.

Takto byste např. v projektu vyhledali výskyt pole int.
int\[\]

A takto všechny dotazy do databáze obsahující *.
select \*

Ikony na počítači s otazníkem

V případě, že se vám po instalaci či práci s Gitem (Git Bash), změní ikony v počítači tak, že obsahují otazník, je to pravděpodobně způsobeno složkou .git v adresáři uživatele (C:\Users\uzivatel). Složku .git stačí odstranit či přejmenovat a restartovat počítač.

Zdroj: stackoverflow.com…/git-for-windows-all-files-have-a-question-mark-on-the-icon

Jak na programování

Pokud byste se rádi naučili programovat, avšak nevíte, jak a kde začít, doporučuji podívat se na programovací jazyk Scratch. Tento jazyk a prostředí, ve kterém se programuje, je z velké části přeložen do češtiny a také k němu existuje velké množství výukových materiálů a jiných zdrojů. I na tomto webu naleznete tutoriál s vysvětleními, příklady a řešeními. Aktuálně má tento tutoriál dvanáct dílů a doufám, že ještě nějaké přibudou.

  1. Úvod
  2. První projekt
  3. Velikost postavy
  4. Cvičení 1
  5. Umístění postavy
  6. Pohyb
  7. Cvičení 2
  8. Události
  9. Cvičení 3
  10. Cykly
  11. Zvuky
  12. Cvičení 4

A co o Scratchi říká wiki?
Scratch je vizuální programovací jazyk, tzn. jazyk, který umožňuje vytvářet programy manipulací s grafickými programovými elementy a ne v textové podobě. Školáci, studenti, učitelé a rodiče ho mohou bezplatně používat jako multimediální autorský nástroj ke snadnému vytváření různých her a mít ho jako odrazový můstek do vyspělejšího světa počítačového programování. Je vhodný pro výuku i zábavu a byl použit v řadě různých projektů včetně simulací a vizualizací pokusů, k přípravě přednášek s animovanými prezentacemi, při tvorbě interaktivního umění, hudby a animovaných příběhů pro sociální vědy. Zdroj: cs.wikipedia.org/wiki/Scratch