<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3086088571527626591</id><updated>2012-01-11T08:29:04.298-08:00</updated><title type='text'>Denná porcia IT</title><subtitle type='html'>Historky z podsvetia Javy, Androidu, práčok a čohokoľvek, čo beží na Linuxe a dostalo sa mi to do rúk.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default?start-index=101&amp;max-results=100'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>110</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6404378093662604726</id><published>2012-01-10T09:41:00.000-08:00</published><updated>2012-01-10T10:30:49.366-08:00</updated><title type='text'>Wicket, Guice, Hibernate, JPA a Maven, časť 3</title><content type='html'>Nastal čas prečítať si &lt;a href="http://code.google.com/p/google-guice/wiki/Motivation"&gt;niečo o Guice&lt;/a&gt;, aby ste na nasledovné nepozerali ako traktor na vyoranú myš. Aspoň po kapitolu Getting Started. Máte? Fit.&lt;br /&gt;&lt;p/&gt;Najprv do pom.xml pridáme dependency com.google.inject:guice:3.0 a vyrobíme Guice modul: classu GuiceModule v package com.example.jpatest, ktorá extenduje com.google.inject.AbstractModule a implementuje metódu configure(). Netbeans vie tú metódu vygenerovať - choďte kurzorom na meno triedy, podčiarknutej načerveno a stlačte ALT+Enter. Poďme riešiť naše problémy.&lt;p/&gt;Problém 1: potrebujeme "obaľovač", ktorý nám obalí volanie bla(); kódom menežujúcim tranzakcie. To sa volá interceptor, je to trieda a vyzerá takto (licencované pod licenciou &lt;a href="http://sam.zoy.org/wtfpl/"&gt;Do What The Fuck You Want To Public License&lt;/a&gt;):&lt;br /&gt;&lt;pre&gt;import java.lang.reflect.InvocationHandler;&lt;br /&gt;import java.lang.reflect.InvocationTargetException;&lt;br /&gt;import java.lang.reflect.Method;&lt;br /&gt;import java.lang.reflect.Proxy;&lt;br /&gt;import java.util.logging.Level;&lt;br /&gt;import java.util.logging.Logger;&lt;br /&gt;import javax.inject.Provider;&lt;br /&gt;import javax.persistence.EntityManager;&lt;br /&gt;import javax.persistence.EntityManagerFactory;&lt;br /&gt;import org.aopalliance.intercept.MethodInterceptor;&lt;br /&gt;import org.aopalliance.intercept.MethodInvocation;&lt;br /&gt;/**&lt;br /&gt; * Intercepts the transactional invocations and starts/commits/rollbacks transaction as necessary.&lt;br /&gt; * @author Martin Vysny, hlava pomazana.&lt;br /&gt; */&lt;br /&gt;public final class TransactionInterceptor implements MethodInterceptor {&lt;br /&gt;&lt;br /&gt;    private final ThreadLocal&lt;entitymanager&gt; tran = new ThreadLocal&lt;entitymanager&gt;();&lt;br /&gt;    private final EntityManagerFactory factory;&lt;br /&gt;&lt;br /&gt;    public TransactionInterceptor(EntityManagerFactory factory) {&lt;br /&gt;        this.factory = factory;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;      * Creates an EntityManager which delegates calls to a real entity manager stored in the {@link #tran} thread storage. If no such entity manager&lt;br /&gt;      * is available then we are not in a transaction and {@link IllegalStateException} is thrown.&lt;br /&gt;      * @return never null entity manager.&lt;br /&gt;      */&lt;br /&gt;    public EntityManager getEntityManager() {&lt;br /&gt;        return newDelegator(EntityManager.class, new Provider&lt;entitymanager&gt;() {&lt;br /&gt;&lt;br /&gt;            public EntityManager get() {&lt;br /&gt;                final EntityManager result = tran.get();&lt;br /&gt;                if (result == null) {&lt;br /&gt;                    throw new IllegalStateException("Transaction was not started. Use @Transactional annotation to start a transaction");&lt;br /&gt;                }&lt;br /&gt;                return result;&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Object invoke(MethodInvocation invocation) throws Throwable {&lt;br /&gt;        EntityManager em = tran.get();&lt;br /&gt;        if (em != null) {&lt;br /&gt;            // transaction already started, do nothing.&lt;br /&gt;            return invocation.proceed();&lt;br /&gt;        }&lt;br /&gt;        // handle the transaction lifecycle&lt;br /&gt;        em = factory.createEntityManager();&lt;br /&gt;        if (em == null) {&lt;br /&gt;            throw new RuntimeException("null em produced");&lt;br /&gt;        }&lt;br /&gt;        try {&lt;br /&gt;            tran.set(em);&lt;br /&gt;            em.getTransaction().begin();&lt;br /&gt;            try {&lt;br /&gt;                final Object result = invocation.proceed();&lt;br /&gt;                em.getTransaction().commit();&lt;br /&gt;                return result;&lt;br /&gt;            } catch (Throwable t) {&lt;br /&gt;                try {&lt;br /&gt;                    em.getTransaction().rollback();&lt;br /&gt;                } catch (Exception ex) {&lt;br /&gt;                    LOG.log(Level.SEVERE, "Failed to rollback a transaction", ex);&lt;br /&gt;                }&lt;br /&gt;                throw t;&lt;br /&gt;            }&lt;br /&gt;        } finally {&lt;br /&gt;            tran.set(null);&lt;br /&gt;            closeQuietly(em);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void closeQuietly(EntityManager em) {&lt;br /&gt;        try {&lt;br /&gt;            em.close();&lt;br /&gt;        } catch (Exception ex) {&lt;br /&gt;            LOG.log(Level.WARNING, "Failed to close an entity manager", ex);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    private static final Logger LOG = Logger.getLogger(TransactionInterceptor.class.getName());&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;  * Creates a delegator instance which delegates all calls to given delegate.&lt;br /&gt;  * @param &lt;t&gt; the interface type, must not be null&lt;br /&gt;  * @param intf the interface type, must not be null.&lt;br /&gt;  * @param delegate provides delegate instances&lt;br /&gt;  * @return non-null delegator&lt;br /&gt;  */&lt;br /&gt;public static &lt;t&gt; T newDelegator(final Class&lt;t&gt; intf, final Provider&lt;t&gt; delegate) {&lt;br /&gt;    return intf.cast(Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class&lt;?&gt;[]{intf}, new InvocationHandler() {&lt;br /&gt;&lt;br /&gt;        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {&lt;br /&gt;            try {&lt;br /&gt;                return method.invoke(delegate.get(), args);&lt;br /&gt;            } catch (InvocationTargetException ex) {&lt;br /&gt;                throw ex.getCause();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }));&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Vyzerá to hrozivo. Našťastie, vy tú triedu nemáte pochopiť (zatiaľ), vy ju máte použiť. Vytvorte teda triedu TransactionInterceptor v com.example.jpatest a jej črevá nahraďte vyššieuvedeným.&lt;br /&gt;&lt;p/&gt;Otázka: vidím, že existuje projekt guice-persist, nedal by sa použiť ten? Nie, nedal. Nakódili ho naši indickí bratia a má nasledovné chyby:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Rollbackuje iba RuntimeExceptions - checked Exceptions nie sú rollbackované. Ja osobne toto správanie neznášam - exception rovná sa chyba rovná sa rollback a hotovo.&lt;/li&gt;&lt;li&gt;Ak by som zabudol štartnúť tranzakciu, indický bazmek urobí jednu z nasledovných troch vecí: buď select vykoná, alebo ho nevykoná a nepovie nič, alebo ho nevykoná a throwne exception. Nemám rád nedeterministické správanie - môj kód vždy throwne exception a basta. Aj vy sa naučíte nedeterministické správanie nenávidieť&lt;/li&gt;&lt;li&gt;Ááále, proste to majú Indi dojebané.&lt;/li&gt;&lt;/ul&gt;Späť ku GuiceModule. Do metódy configure() vložte nasledovné riadky:&lt;br /&gt;&lt;pre&gt;final EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpatest_pu");&lt;br /&gt;final TransactionInterceptor transactionInterceptor = new TransactionInterceptor(factory);&lt;br /&gt;bindInterceptor(Matchers.annotatedWith(Transactional.class), Matchers.any(), transactionInterceptor);&lt;br /&gt;bindInterceptor(Matchers.any(), Matchers.annotatedWith(Transactional.class), transactionInterceptor);&lt;br /&gt;bind(EntityManager.class).toInstance(transactionInterceptor.getEntityManager());&lt;br /&gt;&lt;/pre&gt;Čo to pre kristove nohy je? Prvý riadok poznáme, ďaľšie riadky "omotajú" interceptor okolo všetkých metód a tried anotovaných anotáciou @Transactional, a posledný riadok zabezpečí "injectovanie" EntityManagera do fieldov. Aha, chýba anotácia. Vyrobte si triedu v package com.google.inject.persist s názvom Transactional a nasledovnými črevami:&lt;br /&gt;&lt;pre&gt;@Target({ ElementType.METHOD, ElementType.TYPE })&lt;br /&gt;@Retention(RetentionPolicy.RUNTIME)&lt;br /&gt;@Inherited&lt;br /&gt;public @interface Transactional {&lt;br /&gt;}&lt;/pre&gt;Guice konfiguráciu máme hotovú, ako to celé použiť? Vari stačí pridať anotáciu @Transactional k main() metóde a hotovo? Nie. Všetky triedy, ktoré budú mať anotáciu Transactional, musí vyrobiť Guice, nemôžte ich vyrobiť vy cez new App() a tváriť sa šalamúnsky, pretože tá anotácia sama osebe nič nerobí, len tam tak nejak je (od slova byť, nie od slova žrať). Gory details for future study: ako presne fungujú Guice interceptory? Guice volanie interceptorov (obaľovanie) implementuje tak, že za behu vyrobí novú triedu, ktorá našu milú triedu extendne, overridne všetky interceptnuté metódy, najprv zavolá interceptor a až potom super metódu. Túto novú triedu nám vráti, namiesto našej pôvodnej. Z toho vyplýva, že metóda s @Transactional musí byť aspoň protected (private metódy nefungujú!). Takisto tá metóda (a ani trieda) nesmie byť final. V prípade interfaces sa to robí inak - Guice spraví obyčajného delegáta.&lt;br /&gt;&lt;p/&gt;Logiku teda presunieme do novej triedy, AreaService:&lt;br /&gt;&lt;pre&gt;import com.google.inject.persist.Transactional;&lt;br /&gt;import java.util.List;&lt;br /&gt;import javax.inject.Inject;&lt;br /&gt;import javax.persistence.EntityManager;&lt;br /&gt;&lt;br /&gt;public class AreaService {&lt;br /&gt;&lt;br /&gt;    @Inject&lt;br /&gt;    private EntityManager em;&lt;br /&gt;&lt;br /&gt;    @Transactional&lt;br /&gt;    public void addArea(String name) {&lt;br /&gt;        final Area a = new Area();&lt;br /&gt;        a.setName("blabla");&lt;br /&gt;        em.persist(a);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Transactional&lt;br /&gt;    public List&lt;area&gt; findAreas() {&lt;br /&gt;        return em.createQuery("SELECT a FROM Area a", Area.class).getResultList();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Z triedy App metódy main zmažeme všetko za Liquibase, vrátane vytvárania EntityManagerFactory, a dáme tam nasledovné:&lt;br /&gt;&lt;pre&gt;final Injector injector = Guice.createInjector(new GuiceModule());&lt;br /&gt;final AreaService service = injector.getInstance(AreaService.class);&lt;br /&gt;service.addArea("blabla");&lt;br /&gt;System.out.println(service.findAreas());&lt;br /&gt;&lt;/pre&gt;Prvý riadok vyrobí Injector - Guice trieda, konštruujúca naše triedy. V druhom riadku si vypýtame inštanciu nášho servisu. Guice vidí, že v triede je anotácia @Inject, takže tam nastaví správnu hodnotu. Guice vidí, že metódy sú anotované, a preto ich interceptne. A hotovo!&lt;br /&gt;Skúste si thrownúť exception v addArea(), aby ste videli stacktrace a nové Guice triedy, aj aby ste videli, že funguje rollback, atď.&lt;br /&gt;&lt;p/&gt;No a to teraz si budem musieť všade prenášať injector? Nie. Ale o tom nabudúce, keď zapojíme do hry už aj Wicket.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6404378093662604726?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6404378093662604726/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6404378093662604726' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6404378093662604726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6404378093662604726'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2012/01/wicket-guice-hibernate-jpa-maven-cast-3.html' title='Wicket, Guice, Hibernate, JPA a Maven, časť 3'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-1932110021677306799</id><published>2012-01-10T08:50:00.000-08:00</published><updated>2012-01-10T08:58:57.451-08:00</updated><title type='text'>Wicket, Guice, Hibernate, JPA a Maven, časť 2</title><content type='html'>Máme vyrobenú databázu, poďme nastaviť Hibernate. Najprv pridáme entitu: right-click na com.example.jpatest, New / Class, Area, Finish:&lt;br /&gt;&lt;pre&gt;package com.example.jpatest;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import javax.persistence.*;&lt;br /&gt;&lt;br /&gt;@Entity()&lt;br /&gt;@Table(name="AREAS")&lt;br /&gt;public class Area implements Serializable {&lt;br /&gt;    @Id&lt;br /&gt;    @GeneratedValue()&lt;br /&gt;    private Long id;&lt;br /&gt;    @Column(name="NAME", nullable=false)&lt;br /&gt;    private String name;&lt;br /&gt;&lt;br /&gt;    public Long getId() {&lt;br /&gt;        return id;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setId(Long id) {&lt;br /&gt;        this.id = id;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getName() {&lt;br /&gt;        return name;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setName(String name) {&lt;br /&gt;        this.name = name;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public String toString() {&lt;br /&gt;        return "Area{#" + id + ", name=" + name + '}';&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Len tak bokom: gettery a settery vie Netbeans vygenerovať, stlačte Alt+Insert, Generate Getters and Setters, označte všetky fieldy. Len tak bokom 2, pre Rubystov: a my máme auto-completion databázových stĺpcov v entite, a vy nie.&lt;br /&gt;&lt;p/&gt;Základná trieda JPA je EntityManager, poďme ho vyrobiť. V triede App, za kód s Liquibase (za blok finally {...}) pridajte nasledovné riadky:&lt;br /&gt;&lt;pre&gt;final EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpatest_pu");&lt;br /&gt;final EntityManager em = factory.createEntityManager();&lt;br /&gt;em.getTransaction().begin();&lt;br /&gt;final Area a = new Area();&lt;br /&gt;a.setName("blabla");&lt;br /&gt;em.persist(a);&lt;br /&gt;em.getTransaction().commit();&lt;br /&gt;em.getTransaction().begin();&lt;br /&gt;System.out.println(em.createQuery("SELECT a FROM Area a", Area.class).getResultList());&lt;br /&gt;em.getTransaction().commit();&lt;br /&gt;&lt;/pre&gt;EntityManagerFactory má svoje konfiguračné XML, persistence.xml:&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;persistence xmlns="http://java.sun.com/xml/ns/persistence"&lt;br /&gt; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt; xsi:schemaLocation="http://java.sun.com/xml/ns/persistence&lt;br /&gt;        http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"&lt;br /&gt; version="1.0"&amp;gt;&lt;br /&gt;  &amp;lt;persistence-unit name="jpatest_pu" transaction-type="RESOURCE_LOCAL"&amp;gt;&lt;br /&gt;    &amp;lt;provider&amp;gt;org.hibernate.ejb.HibernatePersistence&amp;lt;/provider&amp;gt;&lt;br /&gt;    &amp;lt;properties&amp;gt;&lt;br /&gt;      &amp;lt;property name="hibernate.connection.url" value="jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1"/&amp;gt;&lt;br /&gt;      &amp;lt;property name="hibernate.connection.driver_class" value="org.h2.Driver"/&amp;gt;&lt;br /&gt;      &amp;lt;property name="hibernate.connection.username" value="sa"/&amp;gt;&lt;br /&gt;      &amp;lt;property name="hibernate.connection.password" value=""/&amp;gt;&lt;br /&gt;      &amp;lt;property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/&amp;gt;&lt;br /&gt;    &amp;lt;/properties&amp;gt;&lt;br /&gt;  &amp;lt;/persistence-unit&amp;gt;&lt;br /&gt;&amp;lt;/persistence&amp;gt;&lt;br /&gt;&lt;/pre&gt;To capneme do src/main/resources/META-INF, ale Netbeans nám nedovolí vyrobiť package s menom META-INF, musíme to vyrobiť ako adresár. Tu je hlavne nastavený provider (trieda, ktorá poskytuje implementáciu JPA EntityManager, v tomto prípade Hibernate), a nastavenia pre Hibernate. Pre iného JPA providera by boli nastavenia iné.&lt;p/&gt;Jebo Netbeans bude štrajkovať a neuloží persistence.xml, treba to spraviť ručne externým textovým editorom. Každopádne, keď spustíme program App, vypíše to našu novú entitu! Radosť veliká, schladená tým, že nevidíme logy Hibernate. Hibernate totiž nepoužíva interný logging systém Javy, ale SLF4J. Pridáme teda pre SLF4J backend - do pom.xml pridáme dependency org.slf4j:slf4j-jdk14:1.6.1, SLF4J si ho autodetekne a použije. Hneď je Hibernát viac ukecaný. Domáca úloha: donútiť Hibernate, aby vypisoval SQL. Riešenie: do persistence.xml pridáme property hibernate.show_sql s hodnotou true.&lt;br /&gt;&lt;p/&gt;Megašitfak, ako by povedal Judáš. To znamená, že skvele, keby ste nevedeli. Máme teda JPA, a to úplne bez JavaEE. Keď sa však pozrieme na App.java, pochopíme jednu nepríjemnú vec. A síce, že ak budeme ručne menežovať transakcie, tak:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Budeme vyzerať ako z minulého tisícročia (čo nemusí byť a priori zlá vec, Rubysti chcú byť silou mocou in a miesto toho vyzerajú ako dementi, aj s tou ich nestabilnou platformou)&lt;/li&gt;&lt;li&gt;Budeme mať náš kód plný nasledovného chlievu: final EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); try { bla(); em.getTransaction().commit(); } catch (Exception ex) { em.getTransaction().rollback(); throw ex; }&lt;/li&gt;&lt;li&gt;Budeme si musieť nejak prenášať do vnorených metód inštanciu EntityManagera, buď ako parameter do každej metódy (debilný nápad), alebo v ThreadLocal (to je už lepšie, ale načo, keď existuje tretia cesta?)&lt;/li&gt;&lt;/ul&gt;Dámy a páni, tretia cesta skutočne existuje! A volá sa dependency injection. Prečo si EntityManager prácne získavať, keď nám ho niekto môže setnúť do fieldu? A prečo dokolečka opakovať kód menežujúci tranzakcie, keď na to máme nástroje, ktorým môžeme povedať, počuj, kámo, obaľ mi volanie bla(); tuná týmto? A prečo Guice, a nie Spring?&lt;br /&gt;&lt;p/&gt;Spring je strašne chlpatý, rieši milión vecí a nechce sa mi ho študovať. Oproti nemu Guice nerieši skoro nič, a to doslova, dokonca ani tranzakcie, budeme si ich musieť urobiť sami. A to sa vyplatí! Goto tretia časť.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-1932110021677306799?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/1932110021677306799/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=1932110021677306799' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/1932110021677306799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/1932110021677306799'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2012/01/wicket-guice-hibernate-jpa-maven-cast-2.html' title='Wicket, Guice, Hibernate, JPA a Maven, časť 2'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-5164875869578056030</id><published>2012-01-10T05:39:00.000-08:00</published><updated>2012-01-11T08:29:04.477-08:00</updated><title type='text'>Wicket, Guice, Hibernate, JPA a Maven, časť 1</title><content type='html'>Na počiatku bolo slovo. Čo jedno, hneď celá veta: "Keď sa ti nepáči Ruby on Rails, ukáž mi, ako by to vyzeralo v Jave". A prečo nie? Tak tu je teda tutorial k ... čomu vlastne? Rails je niečo, čo umožňuje (vraj) ľahko programovať webové stránky a prepájať to s databázou. Spravme teda taký "javovský Rails" - zlúčime Hibernate s Wicketom tak, aby sa v tom ľahko programovalo.&lt;br /&gt;&lt;p/&gt;Tutorial bude pomerne divný. Rails sa učí tak, že tu máte Rails, a takto sa to používa. My si náš Rails vyskladáme. Ha! A prečo práve z týchto komponentov?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Wicket - komponentový webový framework, kód je dobre udržiavateľný, proste mäso&lt;/li&gt;&lt;li&gt;JPA2 - Je to štandard, je v JavaEE, a je dobrý&lt;/li&gt;&lt;li&gt;Hibernate - Funkčná a stabilná implementácia JPA2&lt;/li&gt;&lt;li&gt;Maven - udržuje celý projekt pokope, robí raketový nástup setupu celého projektu, automaticky ťahá knižnice a zdrojáky k nim&lt;/li&gt;&lt;li&gt;Liquibase - robí databazový versioning cez changesety&lt;/li&gt;&lt;li&gt;Guice - jednoduchý framework, ktorý to celé zlepí dohromady&lt;/li&gt;&lt;/ul&gt;Samozrejme, nebudeme všetko programovať odznovu ako blbci. Takisto ja nebudem vysvetľovať, ako sa píšu selecty v JPA, ako funguje Maven a čo je to Wicket - verím, že ctený čitateľ ovláda Google. Ale je dobré vedieť, ako to funguje "pod kapotou". Takže začneme perzistenciou a JPA, bez Wicketu, aby nás neplietol.&lt;br /&gt;&lt;p/&gt;&lt;a href="http://netbeans.org/downloads/"&gt;Stiahnite si Netbeans 7.1&lt;/a&gt; a nainštalujte, ja používam Java EE verziu, a pri inštalácii si nedám nainštalovať Glassfish, nebudeme ho potrebovať. Kto používate niečo iné, máte smolu. Spusťte Netbeans, v menu File / New Project, Maven, Java Application (Netbeans má Maven v sebe), vypíšte čo chcete (čojaviem Project name: jpatest, Group id: com.example.jpatest, Version: 1.0-SNAPSHOT, Package: com.example.jpatest). Test, či všetko funguje: stlačte F6, vyberte App.java a malo by to vypísať Hello World!&lt;br /&gt;&lt;p/&gt;Tučné. Čo teraz? Rozbaľte Project Files a opravte verziu junitu na 4.8.1, preboha, veď tá pôvodná je snáď z časov, keď Mojžiš šaškoval s riekami. Dôležitejšie je ale pridať Hibernate: do elementu &lt;code&gt;dependencies&lt;/code&gt; pridajte dependency: napíšte &lt;code&gt;dep&lt;/code&gt;, stlačte TAB, a povpisujte hodnoty do elementov:&lt;br /&gt;&lt;pre&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;hibernate-entitymanager&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;3.6.8.Final&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;/pre&gt;Right-click na projekt, Clean and Build, Netbeans pustí Maven a ten by mal stiahnuť všetky potrebné jar súbory. Toto nezabúdať robiť po každom pridaní dependency do pom.xml, ináč Netbeans ten jar nebude vidieť, ani s jeho triedami, a nebude sa vám dať nič skompilovať.&lt;br /&gt;&lt;p/&gt;Ak chceme rozumný autocompletion v Jave, potrebujeme zdrojáky ku knižniciam. Netbeans to zvládne, right-click na Dependencies, Download Sources.&lt;br /&gt;&lt;p/&gt;Tučné. Teraz potrebujeme nejakú databázu, samozrejme. Predbežne poslúži in-memory H2 databáza, lebo sa mi nechce písať návod na postgres alebo na iné databázy :). Do pom.xml pridáme ďalšiu dependency: com.h2database:h2:1.3.159 (to prvé je groupId, druhé artifactId, tretie verzia) (Všimnite si, že Netbeans má krásne autocompletion pre Maven artefakty - ak nemá, Netbeans ešte ťahá zoznam všetkých artefaktov, treba počkať). To nám stiahne h2.jar, čo je JDBC driver aj samotná databáza. A ešte potrebujeme vyrobiť databázovú tabuľku, aby sme mali kam jebať dáta. Použijeme Liquibase (niečo ako Rails migrácie): do pom.xml pridáme ... čo? Nepamätám si meno Maven artefaktu. Ľahká pomoc: v menu Window / Other / Maven Repository Browser, kliknem na malý grafický button Find, napíšem liquibase a našlo to niečo. Potrebujeme org.liquibase:liquibase-core, rozklikneme to, rightclick na verziu čojaviem 2.0.3, Add As Dependency..., jpatest.&lt;br /&gt;&lt;p/&gt;Do Other Sources treba pridať nasledovný liquibase skript na vyrobenie tabuľky:&lt;br /&gt;&lt;pre&gt;&amp;lt;databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"&lt;br /&gt; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt; xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog&lt;br /&gt;         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd"&amp;gt;&lt;br /&gt;&amp;lt;changeSet author="Jozef Mak" id="1.0-1"&amp;gt;&lt;br /&gt;&amp;lt;createTable tableName="AREAS"&amp;gt;&lt;br /&gt;&amp;lt;column autoIncrement="true" name="ID" type="BIGINT"&amp;gt;&lt;br /&gt;&amp;lt;constraints nullable="false" primaryKey="true"/&amp;gt;&lt;br /&gt;&amp;lt;/column&amp;gt;&lt;br /&gt;&amp;lt;column name="NAME" type="java.sql.Types.VARCHAR(100)"&amp;gt;&lt;br /&gt;&amp;lt;constraints nullable="false"/&amp;gt;&lt;br /&gt;&amp;lt;/column&amp;gt;&lt;br /&gt;&amp;lt;/createTable&amp;gt;&lt;br /&gt;&amp;lt;/changeSet&amp;gt;&lt;br /&gt;&amp;lt;/databaseChangeLog&amp;gt;&lt;br /&gt;&lt;/pre&gt;Netbeans je trošku dementný a nezobrazí chýbajúci adresár resources, prepnite sa do záložky files, rozkliknite jpatest / src / main a vyrobte adresár resources, potom späť do záložky Project niečo, rozbaľte Other Sources, rightclick na src/main/resources, New Java Package, com.example.jpatest.liquibase, rightclick na tento package, New, Other, Other, Empty File, Next, database.changelog.xml, Finish. Uff.&lt;br /&gt;Do App.java dáme nasledovný kód:&lt;br /&gt;&lt;pre&gt;final String jdbc = "jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1";&lt;br /&gt;final Connection conn = DriverManager.getConnection(jdbc, "sa", "");&lt;br /&gt;try {&lt;br /&gt;  final DatabaseFactory dbFactory = DatabaseFactory.getInstance();&lt;br /&gt;  final Database db = dbFactory.findCorrectDatabaseImplementation(new JdbcConnection(conn));&lt;br /&gt;  final Liquibase liquibase = new Liquibase("com/example/jpatest/liquibase/database.changelog.xml", new ClassLoaderResourceAccessor(), db);&lt;br /&gt;  liquibase.update(null);&lt;br /&gt;} finally {&lt;br /&gt;  closeQuietly(conn);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;A pridáme metódu:&lt;br /&gt;&lt;pre&gt;public static void closeQuietly(Connection conn) {&lt;br /&gt;  try {&lt;br /&gt;    conn.close();&lt;br /&gt;  } catch (Exception ex) {&lt;br /&gt;    log.log(Level.WARNING, "Failed to close " + conn.getClass(), ex);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;private final static Logger log = Logger.getLogger(App.class.getName());&lt;br /&gt;&lt;/pre&gt;(importy fixneme stlačením CTRL+i, vyberte liquibase.database.Database, liquibase.database.jvm.JdbcConnection, java.sql.Connection a java.util.logging.Logger)&lt;br /&gt;&lt;p/&gt;Po spustení by to malo vypísať niečo o tom, že Liquibase nám spustil jeden changeset, ak máme šťastie. Ak máme smolu, idiotský editor v blogspote mi zase zmenil všetky písmená na malé a Liquibase nezvaliduje XML. Zvyšok v druhej časti.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-5164875869578056030?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/5164875869578056030/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=5164875869578056030' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5164875869578056030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5164875869578056030'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2012/01/wicket-guice-hibernate-jpa-maven-cast-1.html' title='Wicket, Guice, Hibernate, JPA a Maven, časť 1'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-881583580593767514</id><published>2012-01-10T00:00:00.000-08:00</published><updated>2012-01-10T01:33:46.729-08:00</updated><title type='text'>mysql sucks</title><content type='html'>&lt;ul&gt;&lt;li&gt;Mená tabuliek sú case-sensitive, mená stĺpcov sú case-insensitive&lt;/li&gt;&lt;li&gt;Maximálny počet desatinných miest je 5, viac desatinných miest mysql potichu odreže. Ja tomu hovorím tiché poškodzovanie dát&lt;/li&gt;&lt;li&gt;Náhodné problémy s encodingom stĺpcov. Unicode existuje už pár rokov, mysql si to asi ešte nevšimli. Nevadí, aj rubysti a phpčkári si to všimli len prednedávnom.&lt;/li&gt;&lt;li&gt;DDL skripty sa nerollbackujú&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-881583580593767514?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/881583580593767514/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=881583580593767514' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/881583580593767514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/881583580593767514'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2012/01/mysql-sucks.html' title='mysql sucks'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-1035349678152804061</id><published>2011-12-22T09:04:00.000-08:00</published><updated>2011-12-22T09:06:16.851-08:00</updated><title type='text'>Rubysti</title><content type='html'>&lt;img src="https://img.skitch.com/20090904-fyqnyu8pcr36ahe91er9x28bhi.png" alt="Rubysti"/&gt;&lt;p/&gt;Toto sú Rubysti. Obchádzať opatrne.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-1035349678152804061?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/1035349678152804061/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=1035349678152804061' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/1035349678152804061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/1035349678152804061'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/12/rubysti.html' title='Rubysti'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-230471556970801436</id><published>2011-12-14T00:51:00.000-08:00</published><updated>2011-12-14T03:10:00.411-08:00</updated><title type='text'>Ako získať prvý removable device/USB stick vo Windows v Jave</title><content type='html'>&lt;pre&gt;try {&lt;br /&gt;  final ActiveXComponent axWMI = new ActiveXComponent("winmgmts://");&lt;br /&gt;  try {&lt;br /&gt;    final Variant devices = axWMI.invoke("ExecQuery", new Variant("Select DeviceID from Win32_LogicalDisk where DriveType = 2"));&lt;br /&gt;    final EnumVariant deviceList = new EnumVariant(devices.toDispatch());&lt;br /&gt;    while (deviceList.hasMoreElements()) {&lt;br /&gt;      final Dispatch item = deviceList.nextElement().toDispatch();&lt;br /&gt;      final String drive = Dispatch.call(item, "DeviceID").toString().toUpperCase();&lt;br /&gt;      final File file = new File(drive + "/");&lt;br /&gt;      if (file.exists()) {&lt;br /&gt;        log.info("Found removable drive - drive " + drive);&lt;br /&gt;        return file;&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    log.info("No valid removable drives found");&lt;br /&gt;    return null;&lt;br /&gt;  } finally {&lt;br /&gt;    closeQuietly(axWMI);&lt;br /&gt;  }&lt;br /&gt;} catch (Exception ex) {&lt;br /&gt;  log.log(Level.WARNING, "Enumerating removable drives failed, reverting back to simple approach", ex);&lt;br /&gt;  for (int drive = 'Z'; drive &gt; 'C'; drive--) {&lt;br /&gt;    final File file = new File((char) drive + ":/");&lt;br /&gt;    if (file.exists()) {&lt;br /&gt;      log.info("Found removable drive - drive " + drive);&lt;br /&gt;      return file;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  log.info("No valid removable drives found");&lt;br /&gt;  return null;&lt;br /&gt;}&lt;/pre&gt;V JRuby:&lt;pre&gt;begin&lt;br /&gt;  wmi = WIN32OLE.connect("winmgmts://")&lt;br /&gt;  volumes = wmi.ExecQuery("Select DeviceID from Win32_LogicalDisk where DriveType = 2")&lt;br /&gt;  drives = []&lt;br /&gt;  volumes.each do |volume|&lt;br /&gt;    drive = volume.DeviceID.upcase&lt;br /&gt;    drives &lt;&lt; drive if drive != 'A:' &amp;&amp; drive != 'B:'&lt;br /&gt;  end&lt;br /&gt;  return "#{drives[0]}/" if !drives.empty?&lt;br /&gt;  return nil&lt;br /&gt;rescue Exception =&gt; e&lt;br /&gt;  puts "WIN32OLE.connect(\"winmgmts://\") failed: #{e.class}: #{e}"&lt;br /&gt;  # On some Windows systems the previous approach may fail with:&lt;br /&gt;  # failed to parse display name of moniker `winmgmts://' HRESULT error code:0x800401e4&lt;br /&gt;  # Use a simple dumb algorithm.&lt;br /&gt;  drives = []&lt;br /&gt;  ('d'.upto 'z').to_a.reverse.each do |volume|&lt;br /&gt;    drive = "#{volume}:"&lt;br /&gt;    drives &lt;&lt; drive if File.exist? drive&lt;br /&gt;  end&lt;br /&gt;  return "#{drives[0]}/" if !drives.empty?&lt;br /&gt;  return nil&lt;br /&gt;end&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-230471556970801436?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/230471556970801436/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=230471556970801436' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/230471556970801436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/230471556970801436'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/12/ako-ziskat-prvy-removable-deviceusb.html' title='Ako získať prvý removable device/USB stick vo Windows v Jave'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8849773614601140844</id><published>2011-12-07T05:45:00.001-08:00</published><updated>2011-12-07T06:19:22.500-08:00</updated><title type='text'>Celé komplet naruby</title><content type='html'>Že tá marha nevie zdochnúť, napísal by klasik a majster pera. Chcem spočítať digitálny podpis súboru v ruby. Na prvý pohľad pekné:&lt;br /&gt;&lt;blockquote&gt;key = OpenSSL::PKey::RSA.new(File.read("/bla/bla/bla"))key.sign(OpenSSL::Digest::SHA1.new, message)&lt;/blockquote&gt;Na druhý pohľad háčik: čo sa stane, keď message má 2 gb? No nič, iba to, že Ruby to natiahne do pamäte a vyalokuje si 2 gb. Skvelé. Musí tam byť niečo, čo to vie robiť po blokoch. Pozrieme zdrojáky, keďže podľa rubystov sú zdrojáky dokumentácia (dementi rubystickí: kód je aktuálnejší ako dokumentácia, ergo presnejší - čo je to za kokotina??? A čo keď je v ňom bug? Či ruby kód je svätý, On sám uzná za vhodné, čo spraví, a ty sa klaňaj, pes neveriaci). So zdrojákov vieme aj tak prd, všetky metódy majú telo nasledovného znenia:&lt;br /&gt;&lt;blockquote&gt;# This is just a stub for a builtin Ruby method.# See the top of this file for more info.&lt;/blockquote&gt;Navyše, metóda sign kompletne chýba, super.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Kalvária "Ruby Smrdí", Zastavenie 1: Zdrojáky nie sú dokumentácia.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Kalvária "Ruby Smrdí", Zastavenie 2: Ruby je pomalé, a preto Ruby nie je primárne napísané v Ruby, ale v C.&lt;/li&gt;&lt;/ul&gt;&lt;code&gt;key.methods&lt;/code&gt; samozrejme vyhodí kopu nepoužiteľného bordelu:&lt;br /&gt;&lt;blockquote&gt;[:public?, :private?, :to_text, :export, :to_pem, :to_s, :to_der, :public_key, :public_encrypt, :public_decrypt, :private_encrypt, :private_decrypt, :n, :n=, :e, :e=, :d, :d=, :p, :p=, :q, :q=, :dmp1, :dmp1=, :dmq1, :dmq1=, :iqmp, :iqmp=, :params, :sign, :verify, :nil?, :===, :=~, :!~, :eql?, :hash, :&amp;lt;=&amp;gt;, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :inspect, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :__id__, :object_id, :to_enum, :enum_for, :==, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__]&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;Kalvária "Ruby Smrdí", Zastavenie 3: Metóda pokus-omyl nie je správny spôsob vývoja.&lt;/li&gt;&lt;/ul&gt;Šéf hovorí, vyskúšaj! Skúšať môžeš do istej veľkosti aplikácie, sakra. Ale skúsim.&lt;br /&gt;&lt;blockquote&gt;key.sign(OpenSSL::Digest::SHA1.new, File.new('/bla/bla/bla'))TypeError: can't convert File into String from (irb):6:in `sign' from (irb):6 from /home/vyzivus/.rvm/rubies/ruby-1.9.2-p136/bin/irb:16:in `&lt;main&gt;'&lt;/main&gt;&lt;/blockquote&gt;Bodaj ťa stislo, a kde je kvák typing, na ktorý sú rubysti tak nesmierne hrdí? Však mal zavolať metódu čojaviem read(int) pre blokové čítanie a spočítať podpis tak, a nie type castingom popierať zmysel dynamických a prototypových jazykov. Čistý paradox je to, že toto popretie kvák typingu sa deje priamo v built-in triede Ruby VM - asi to vyvíjajú systémom Vyskúšaj.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Kalvária "Ruby Smrdí", Zastavenie 4: Kvák typing v praxi nefunguje a tak ho nepoužívajú ani autori Ruby.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Kalvária "Ruby Smrdí", Posledné Zastavenie: Ruby smrdí.&lt;/li&gt;&lt;/ul&gt;QED&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8849773614601140844?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8849773614601140844/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8849773614601140844' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8849773614601140844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8849773614601140844'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/12/cele-komplet-naruby.html' title='Celé komplet naruby'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-5352735758155623123</id><published>2011-11-21T08:59:00.001-08:00</published><updated>2011-11-21T08:59:10.739-08:00</updated><title type='text'>linux wireless</title><content type='html'>Ak nepojde zapnut wireless v linuxe, &lt;a href="http://ubuntuforums.org/showthread.php?t=1795205"&gt;tu je navod&lt;/a&gt;. V kocke:&lt;blockquote&gt;sudo rfkill unblock all&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-5352735758155623123?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/5352735758155623123/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=5352735758155623123' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5352735758155623123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5352735758155623123'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/11/linux-wireless.html' title='linux wireless'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-3997973644323813513</id><published>2011-11-08T00:24:00.000-08:00</published><updated>2011-11-08T00:34:50.071-08:00</updated><title type='text'>Jabko</title><content type='html'>Ako používateľovi Windows a Linux je mi úplne jasné, že obe tieto veci majú kopu chýb - Unity sem-tam zmrzne, zblbne, prestane fungovať myš, včera Vista po zapnutí zo suspendu rovno hodila BSOD, radosti kopec. A vždy som tak tajne poškuľoval po Apple a čakal, kedy ma win/lin naserie ultimátne, prestane ma baviť byť sám sebe adminom a s radosťou prejdem na Mac. Nemohol som sa mýliť viac.&lt;p/&gt;Kde by som začal. Bolo-nebolo, mám aplikáciu v súbore IPA a rád by som ju nahodil na telefón a spripomienkoval. Na Androide, easy-peasy:&lt;ol&gt;&lt;li&gt;Nahoď APK na telefón, buď cez adb install hu.apk, alebo to nahraj na net a nainštaluj browserom. Keďže APK požaduje Android 2.1, pôjde na 99% telefónov&lt;/li&gt;&lt;/ol&gt;IPhone, vot výkvet vedy a techniky:&lt;ol&gt;&lt;li&gt;Nainštaluj iTunes, buď na Mac alebo Windows (ó, svätá možnosť voľby). Prečo iTunes (obchod s hudbou) inštaluje aplikácie do telefónu, je nad môj pochop. Ale určite to tak má byť a je to tak správne.&lt;/li&gt;&lt;li&gt;Pre prepojenie s počítačom samozrejme treba svätý USB kábel, ktorý stojí originál určite aspoň 25$. Ale určite to tak má byť a je to tak správne.&lt;/li&gt;&lt;li&gt;Aplikácia samozrejme vyžaduje iOS 4, zatiaľčo na vašom telefóne je iOS 3.1.2. Dozvieme sa, že sa dá zadarmo upgradnúť. To je asi tak posledná vec, ktorú dostanete od Jablka zadarmo&lt;/li&gt;&lt;li&gt;Upgrade vyžaduje, aby som nejak previazal iTunes s iPhone, takže nadávajúc zisťujem heslo a zadávam ho do iTunes. Dozvedám sa, že toto je posledný z piatich počítačov, s ktorými je možné telefón synchronizovať, takže keď si preinštalujem Windows, som v riti. Ale určite to tak má byť a je to tak správne.&lt;/li&gt;&lt;li&gt;Upgrade z iOS 3.1.2 samozrejme zmaže všetky mp3-ky, lebo iPhone nemá SD kartu. Ale určite to tak má byť a je to tak správne&lt;/li&gt;&lt;li&gt;mp3-ky z iPhone sa nedajú zálohovať inak ako cez iPhone, a to ich musíte mať kúpené cez iTunes, alebo nahrané v iTunes alebo čojaviem. Kliknem na synchronizovať, a iTunes sa ma opýta, či skutočne chcem zmazať všetky mp3ky z telefónu. Asi sa sekli pri preklade do slovenčiny, aj keď nechápem, ako sa dá seknúť pri preklade slova synchronize. Ale určite to tak má byť a je to tak správne.&lt;/li&gt;&lt;li&gt;Update na iOS 4.2 trvá asi hodinu a potom sa nedá nazad nahrať 4 z 5 aplikácií, čiže síce nie úplne čistý, ale aspoň 80% FAIL. Asi boli cracknuté alebo čojaviem.&lt;/li&gt;&lt;li&gt;Dostávam hlášku iTunes could not connect to the iPhone because the pairing record is missing. Pochopil som, že aj Jablko potrebuje sem-tam vystúpiť a nastúpiť (reštartnúť telefón aj iTunes).&lt;/li&gt;&lt;li&gt;Update zrušil jailbreak či unlock či čo, ale ja to robiť nebudem. To iSvinstvo cíti moju nenávisť a hnev a odpor. Určite by sa to zablokovalo.&lt;/li&gt;&lt;li&gt;Mám aplikáciu v súbore IPA a rád by som ju nahodil na telefón a spripomienkoval. Nahrám ju do iTunes, a aplikácia sa nepodarí nainštalovať, lebo medveď. Dozvedám sa, že musí mať nejaký provisioning profile či čo, a to mi musí vyrobiť v xcode, ktoré funguje len na Appli. Provisioning profile nemôžem dostať, pretože sa ich dá vygenerovať len obmedzené množstvo... WTF?&lt;/li&gt;&lt;/ol&gt;Výsledok: mám telefón, ktorý už nie je unlocknutý, nejde tam 4 z piatich aplikácií, nie sú tam žiadne mp3-ky, a čo ešte.... AHA, NEJDE TAM ANI APLIKÁCIA, KVÔLI KTOREJ JE CELÝ TEN HUMBUK. Chalan ma zabije. Ale určite to tak má byť a je to tak správne, vám povedia iOvce, ktoré skutočne existujú. Neveril som, ale áno. Keď niečo nejde, tak to má tak byť. iSekta.&lt;p/&gt;Idem sa pozrieť ku kamošovi, ktorý vyvíja iPhone aplikáciu, že reku nájdi 5 rozdielov. Android:&lt;ol&gt;&lt;li&gt;Kliknem nová aplikácia, vyplním formulár, nahrám ikonky, nahrám APK, aplikácia je na Markete&lt;/li&gt;&lt;/ol&gt;Svätý iCárach:&lt;ol&gt;&lt;li&gt;Nakloním sa cez plece kamarátovo, a kochám sa chlievom s názvom Objective C, ktoré s C nemá nič spoločné, pretože metóda sa tam volá asi nasledovne: [jezis maria]@jozef och #kurva. WTF? Android má javu a nemá segfaulty.&lt;/li&gt;&lt;li&gt;Zakladám developerské konto. Ako developer Applu do Ameriky musím odfaxovať nejaký vyplnený formulár, asi chcú vidieť môj krasopis. Konto stojí 100$ ročne. Oproti tomu Android konto stojí jednorazovo 25$&lt;/lI&gt;&lt;li&gt;Čakám asi hodinu, kým sa kamarátovi applistovi podarí vyplniť všetky webové formuláre, vyrobiť všetky profily a ďaľšie kokotiny v takom šťastnom poradí, aby aplikácia mohla ísť do Apple na review&lt;/li&gt;&lt;li&gt;Ozvali sa z review teamu! Chcú video, ako aplikácia funguje, pretože aplikácia je po slovensky a oni tomu nerozumejú. Nič na tom nemení fakt, že aplikácia nie je pre Američanov, posielame video.&lt;/li&gt;&lt;li&gt;Ešte malá oprava segfaultu, a aplikácia je konečne na Apple Store&lt;/li&gt;&lt;/ol&gt;Ale určite to tak má byť a je to tak správne. Jebať. Od firmy Apple si nekúpim už nikdy nič. Ani iGumičku do gatí.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-3997973644323813513?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/3997973644323813513/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=3997973644323813513' title='2 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3997973644323813513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3997973644323813513'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/11/jabko.html' title='Jabko'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-7217155794833815961</id><published>2011-10-26T03:21:00.001-07:00</published><updated>2011-10-26T03:21:58.223-07:00</updated><title type='text'>Apple</title><content type='html'>&lt;a href="http://kecy.roumen.cz/roumingShow.php?file=How_is_Mac_OS_X.jpg"&gt;How is Mac OS X&lt;/a&gt;Viac nie je čo dodať.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-7217155794833815961?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/7217155794833815961/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=7217155794833815961' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7217155794833815961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7217155794833815961'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/10/apple.html' title='Apple'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-3826195037698950716</id><published>2011-09-07T02:09:00.000-07:00</published><updated>2011-09-07T02:09:50.703-07:00</updated><title type='text'>Ruby a spätná kompatibilita</title><content type='html'>Ak chcem vyrobiť viac adresárov naraz, tak musím prosím pekne zisťovať, v akom Ruby bežím. Lebo v Ruby 1.8 sa adresáre vytvárajú inak ako v Ruby 1.9. Milé, nie? Žiadna spätná kompatibilita, z čoho vyplýva, že tento produkt japonských majstrov nie je vhodné na nič väčšie.&lt;p/&gt;Ak teda chcete vytvoriť tie adresáre, tu je návod, ako na to:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;if RUBY_VERSION =~ /^1.8/&lt;br /&gt;require 'ftools'&lt;br /&gt;File.makedirs(tmp)&lt;br /&gt;elsif RUBY_VERSION =~ /^1.9/&lt;br /&gt;require 'fileutils'&lt;br /&gt;FileUtils.mkdir_p(tmp)&lt;br /&gt;else&lt;br /&gt;raise "Unsupported Ruby version #{RUBY_VERSION}"&lt;br /&gt;end&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-3826195037698950716?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/3826195037698950716/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=3826195037698950716' title='1 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3826195037698950716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3826195037698950716'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/09/ruby-spatna-kompatibilita.html' title='Ruby a spätná kompatibilita'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-2747638841635501252</id><published>2011-08-26T00:49:00.000-07:00</published><updated>2011-08-26T00:49:25.423-07:00</updated><title type='text'>Don't anger the Ruby on Rails kids!</title><content type='html'>Chlapík &lt;a href="http://chillenious.wordpress.com/2008/01/14/take-that-ruby-on-rails/"&gt;zistil&lt;/a&gt;, že vývoj s Wicketom produkuje menší bordel ako vývoj s Ruby on Rails, a hneď bol downvoutnutý. Aké pozorné od Ruby on Rails komunity.&lt;p/&gt;Alebo: na Heroku bol pridaný &lt;a href="http://blog.heroku.com/archives/2011/8/25/java/"&gt;support pre Javu&lt;/a&gt;. Polovica článku návod, polovica pičung na Javu. Takže, rubysti, opakujte po mne: J2EE 1.4 je zgrc z XML a JSP/JSF. JavaEE+Wicket je lepší pre veľké projekty ako RoR, nehovoriac o tom, že máte aplikačný server, takže si nemusíte písať ďábelské skripty v Capistrane na update aplikácie na clusteri, navyše ja mám load-balancer, ktorý beží na všetkých OS, vy máte ... nginx. wow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-2747638841635501252?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/2747638841635501252/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=2747638841635501252' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2747638841635501252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2747638841635501252'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/08/dont-anger-ruby-on-rails-kids.html' title='Don&apos;t anger the Ruby on Rails kids!'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-3757005398657360682</id><published>2011-08-24T00:16:00.000-07:00</published><updated>2011-08-24T00:16:12.745-07:00</updated><title type='text'>Fails</title><content type='html'>&lt;img src="http://farm4.static.flickr.com/3184/2861098256_5124e48f76.jpg"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-3757005398657360682?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/3757005398657360682/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=3757005398657360682' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3757005398657360682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3757005398657360682'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/08/fails.html' title='Fails'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3184/2861098256_5124e48f76_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-5112669606144646179</id><published>2011-08-19T01:43:00.000-07:00</published><updated>2011-08-19T01:43:32.053-07:00</updated><title type='text'>Re: C++11 and the Return of the native code</title><content type='html'>Na Slashdote vyšla &lt;a href="http://developers.slashdot.org/story/11/08/18/187231/C-2011-and-the-Return-of-Native-Code"&gt;krátka správička&lt;/a&gt; o C++ 2011, a keďže najzaujímavejšie na takýchto správičkách sú diskusie, šups pozrieť, čo je nové. Tentokrát máme požehnanú úrodu dementov.&lt;p/&gt;&lt;blockquote&gt;For instance, Java takes forever to understand as compared to C++, and no playing around with pointers either&lt;/blockquote&gt;Takže tento exemplár asi masturbuje nad vecami ako &lt;code&gt;char *( *(**fp [][100]) () )[];&lt;/code&gt; (fp is an array of an array of 100 of pointers to pointers to functions that return an array of pointers to char) - WTF? V Jave nemám pointre, preto vraciam dobre zdokumentované objekty, takže je kód čitateľný, nemusím ich uvoľnovať, lebo mám garbage collector. Ale keď má niekto mozog zoskratovaný céčkom, prosím. Ale potom šup nazad do blázinca.&lt;p/&gt;&lt;blockquote&gt;It is a good concept. Unfortunately, several studies (at least one was covered here on slashdot) indicate the vast majority of Java development runs on the same platform on which it was written. Furthermore, the vast majority of this Java software can not run anywhere without additional code changes because of programmer short sightedness or just simple mistakes.&lt;br /&gt;&lt;br /&gt;So while its a nice "have", pragmatically speaking, it doesn't apply to most Java software.&lt;br /&gt;&lt;br /&gt;Which means, at the end of the day, your development cycle of something like Java vs C++ isn't all too entirely different for code which actually is, "Write-one, Run-Almost-Anywhere."&lt;/blockquote&gt;Môj zlatý, choď preč a vráť sa, keď C++ bude mať multiplatformový widget systém a keď bude mať threading model s dobre definovanými pamäťovými efektami (happens-before).&lt;p/&gt;&lt;blockquote&gt;Managed code has been the single biggest disaster at least where I work, stalls, huge memory consumption, unpredictable.. the dreaded 'garbage collection', I am glad we are out of it.. and if you fear crashes then you could use C++ exceptions, then you can divide by zero or do other bad stuff and never experience a hard crash... or even better, use the complete threaded sandbox (see Chromium sandbox). that means C++ is totally safe and the fastest at the same time - best of both worlds; that is why C++ is used internally by Google, Ebay, Oracle.. etc.&lt;/blockquote&gt;Požehnaný buď garbage collection, lebo kód môj kratší jest, ba elegantnejší, skoro žiadneho try{}finally{o.free} tam niet. A ak sa bojíš segfaultov, môžeš použiť C++ exceptions, ale bude ti to prd platné, aj so sandboxom. Aký krásny exemplár blbca. Ešteže na záver prišiel človek, čo má rozhľad a všetkých päť pohromade:&lt;br /&gt;&lt;blockquote&gt;C++: Incredibly complex, lots of bug opportunities, very verbose, very fast, suitable for system programming&lt;br /&gt;D: Some complex, some bug opportunities, some verbose, very fast, suitable for system programming&lt;br /&gt;Objective C: Some complex, some bug opportunities, some verbose, fast, suitable for system programming&lt;br /&gt;C#: Some complex, some bug opportunities, some verbose, fast, suitable for system programming&lt;br /&gt;Java: Some complex, some bug opportunities, some verbose, fast, not suitable for system programming&lt;br /&gt;Scala: Very complex, few bug opportunities, not at all verbose, fast, not suitable for system programming&lt;br /&gt;Python: Fairly simple, some bug opportunities, not at all verbose, slow, not suitable for system programming&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-5112669606144646179?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/5112669606144646179/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=5112669606144646179' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5112669606144646179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5112669606144646179'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/08/re-c11-and-return-of-native-code.html' title='Re: C++11 and the Return of the native code'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8730390658151852222</id><published>2011-08-19T01:18:00.000-07:00</published><updated>2011-08-26T00:28:31.324-07:00</updated><title type='text'>JavaEE Hosting</title><content type='html'>Vďaka RedHatu máme krásny JavaEE hosting zadarmo, pozrite si &lt;a href="http://www.adam-bien.com/roller/abien/entry/how_to_push_java_ee"&gt;návod, ako začať&lt;/a&gt;.&lt;p/&gt;Akurát vyzerá, že tam nie je databáza...&lt;p/&gt;Edit: &lt;a href="https://www.redhat.com/openshift/blogs/whats-new-in-express-mysql-multiple-apps-and-server-side-bundling"&gt;pridali MySql&lt;/a&gt; (&lt;a href="https://www.redhat.com/openshift/forums/express/mysql-db-name"&gt;ako vyrobiť databázu&lt;/a&gt;).&lt;br /&gt;Edit 2: &lt;a href="http://blog.heroku.com/archives/2011/8/25/java/"&gt;Java na Heroku&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8730390658151852222?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8730390658151852222/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8730390658151852222' title='3 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8730390658151852222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8730390658151852222'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/08/war-hosting.html' title='JavaEE Hosting'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8871846711590530967</id><published>2011-08-10T05:17:00.000-07:00</published><updated>2011-08-10T05:17:09.019-07:00</updated><title type='text'>Mozilla sucks 2</title><content type='html'>Ďaľší príklad, aká je Mozilla banda amatérov. Silent installer: tu &lt;a href="https://wiki.mozilla.org/Installer:Command_Line_Arguments"&gt;máme návod&lt;/a&gt;, ktorý je nielenže absolútne nepresný (-ms funguje od Firefox 3.5, nie od 4), ale aj úplne debilný:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;-ms nainštaluje Firefox&lt;/li&gt;&lt;li&gt;Ale nie, od Firefox 4 nainštaluje -ms&lt;/li&gt;&lt;li&gt;/INI silent nainštaluje, s parametrami&lt;/li&gt;&lt;/ul&gt;Takže -ms nainštaluje Firefox pred 4, 4, aj po 4. Som rád, že to je takto exaktne, z vety "-ms nainštaluje Firefox v silent móde" by som bol fakt zmätený. Skvelý je prepínač /INI, kde vôbec nie je jasné, od ktorej verzie má fungovať, ale hlavne nefunguje snáď so žiadnou verziou.&lt;/p&gt;Pardón, klamem, funguje s 5.0.1, a to v presne nasledovnej forme:&lt;br /&gt;&lt;blockquote&gt;"Firefox Setup 5.0.1.exe" /INI="c:\debiliny\firefox.ini"&lt;/blockquote&gt;Nič z nasledovného nefunguje:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"Firefox Setup 3.6.19.exe" /INI firefox.ini&lt;/li&gt;&lt;li&gt;"Firefox Setup 3.6.19.exe" /INI=firefox.ini&lt;/li&gt;&lt;li&gt;"Firefox Setup 5.0.1.exe" /INI=firefox.ini&lt;/li&gt;&lt;li&gt;"Firefox Setup 5.0.1.exe" "/INI=c:\debiliny\firefox.ini"&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8871846711590530967?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8871846711590530967/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8871846711590530967' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8871846711590530967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8871846711590530967'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/08/mozilla-sucks-2.html' title='Mozilla sucks 2'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-7137870301528395529</id><published>2011-08-10T02:41:00.000-07:00</published><updated>2011-08-10T04:29:55.958-07:00</updated><title type='text'>Mozilla a kiosk mód</title><content type='html'>Predstavme si, že máme aplikáciu v Rails (fuj) a chceme to používateľovi prezentovať ako desktopovú aplikáciu. Ideálne by bolo spustiť túto Rails aplikáciu ako service (odporúčam &lt;a href="https://iain.cx/src/nssm/"&gt;NSSM&lt;/a&gt;, jednoduché a funkčné), a mať nejaký exe file, ktorému povieme, že otvor stránku na localhost:3000, a on bez reptania vyrenderuje danú stránku v okne, v ktorom nie je žiadny firefoxový balast, ani URL bar, ani refresh button, nič. Máme problém, skúsime použiť produkt firmy Mozilla, a ...&lt;p/&gt;... máme problémov hneď niekoľko. Mozilla, to je taká firma, ktorá robí celkom fajn browsery. Celkom fajn, pokiaľ je človek na používateľskej strane - jediné, čo chce, je pozrieť si, kto sa s kým vyspal. Akonáhle chce človek browser programovo ovládať, je koniec. Celá user-friendlyness padá a donaha sa odhaľuje, čo sa diabolský koktejl XML, javascriptu a C++ vlastne ten Firefox je. Úplné šialenstvo. Takže poporiadku:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Obyčajný firefox - ten má v sebe kopu nepotrebnej funkcionality - nadbytočné GUI ako menu, URL bar, a otravnej funkcionality - milión upozornení na offline mód, na to, že nie je default browser, atď. Kiosk plugin nefunguje v Linuxe.&lt;/li&gt;&lt;li&gt;Prism - to je exe, ktorému dáme URL a on ju zobrazí. Super, až na to, že to tak vlastne nie je, treba mu dať nejaké podivné deskriptory akože pre webovú aplikáciu, a on ju zobrazí. Super, až na to, že Prism nefunguje, keď ho spúšťa user, ktorý nemá práva zapísať do adresára, kde je Prism rozbalený.&lt;/li&gt;&lt;li&gt;XULRunner - kto nevidel XPCOM, nepozná hĺbku pravého a nefalšovaného šialenstva&lt;/li&gt;&lt;li&gt;WebRunner - nasledovník Prismu, až na to, že to nie je exe fajl, ale plugin do Firefoxu, čo tak trochu neguje význam celého WebRunnera&lt;/li&gt;&lt;li&gt;Firefox Portable - nedá sa zbaviť otravnej hlášky, že je v read-only adresári, ale na rozdiel od Prismu je schopný tento fakt aspoň rozchodiť a fungovať.&lt;/li&gt;&lt;li&gt;JRex - mrzne, a má takú, nazvime to svojskú stránku: je tam veľký &lt;a href="http://jrex.mozdev.org/"&gt;prd&lt;/a&gt;&lt;/li&gt;&lt;li&gt;DJNativeSwing - pekné, ale mrzne&lt;/li&gt;&lt;li&gt;K-meleon - beží z read-only adresára, ale verzia 1.5.x padá na XP, 1.6.x a 1.7.x po zavretí ostávajú v pamäti, takže ďaľší k-meleon sa odmieta spustiť&lt;/li&gt;&lt;/ul&gt;To fakt nikde na svete nie je jedna blbá binárka, ktorej dám URL ako parameter, a ona mi tú URL proste bez remcania otvorí?&lt;p/&gt;Edit: je:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;iexplore.exe -k www.huhu.com&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-7137870301528395529?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/7137870301528395529/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=7137870301528395529' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7137870301528395529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7137870301528395529'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/08/mozilla-kiosk-mod.html' title='Mozilla a kiosk mód'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8579640065836588000</id><published>2011-08-09T05:40:00.000-07:00</published><updated>2011-08-09T05:43:22.397-07:00</updated><title type='text'>Nullsoft Installer</title><content type='html'>Preboha! Vyhnite sa širokým oblúkom NSIS, avoid NSIS, it fucking sucks (aby sa mu vyhli aj anglicky hovoriaci bratia)! To ešte aj Ruby je lepšie ako tento kus legacy hrôzy. Skúmať skriptovanie v tomto odpade je ako skúmať vývoj dinosaura - je to tam všetko, celá genéza, od kriedy po narodenie Ježiša. Hneď vysvetlím. Napríklad porovnanie stringov po starom:&lt;br /&gt;&lt;blockquote&gt;StrCmp "Co" "S cim" "rovnake" "rozne"&lt;br /&gt;:rovnake&lt;br /&gt;MessageBox MB_OK|MB_ICONEXCLAMATION "Rovnake" /SD IDOK&lt;br /&gt;Abort&lt;br /&gt;:rozne&lt;br /&gt;MessageBox MB_OK|MB_ICONEXCLAMATION "Rozne" /SD IDOK&lt;/blockquote&gt;Áno, goto programovanie, welcome back. Po novom:&lt;br /&gt;&lt;blockquote&gt;${If} $Hu == 0&lt;br /&gt;MessageBox MB_OK|MB_ICONEXCLAMATION "Hu" /SD IDOK&lt;br /&gt;${Else}&lt;br /&gt;MessageBox MB_OK|MB_ICONEXCLAMATION "Ha" /SD IDOK&lt;br /&gt;${EndIf}&lt;/blockquote&gt;Mix nového a tradičného, čo v prípade Nullsoft Installera znamená bloky spolu s parametrami oddelovanými medzerou a začínajúcimi lomítkom (WTF???). Alebo len medzerou, bez lomítka (to je našťastie častejší prípad).&lt;p/&gt;Ako sa invokuje funkcia? Cez &lt;code&gt;Call MenoFunkcie&lt;/code&gt;, mmmm, starý dobrý .bat. Parametre funkcie? Čo tak ich napushovať na stack?&lt;br /&gt;&lt;blockquote&gt;Function Haha&lt;br /&gt;Pop $0&lt;br /&gt;MessageBox MB_OK|MB_ICONEXCLAMATION "Ha: $0"&lt;br /&gt;EndFunction&lt;br /&gt;Push "hu"   # parameter 1&lt;br /&gt;Call Haha&lt;br /&gt;&lt;/blockquote&gt;Premenné? Len globálne, alebo podivnosti nazývané $0-$9 a $R0-$R15, čo sú vlastne tiež globálne premenné, a môže ich meniť ktokoľvek, aj knižnice. Aby sa knižnice tomuto vyhli, zálohujeme premenné kam? No predsa na stack!&lt;br /&gt;&lt;blockquote&gt;Function Svina&lt;br /&gt;Push $0&lt;br /&gt;Push $1&lt;br /&gt;Push $2&lt;br /&gt;Push $3&lt;br /&gt;Push $4&lt;br /&gt;Push $5&lt;br /&gt;....&lt;br /&gt;Pop $5&lt;br /&gt;Pop $4&lt;br /&gt;Pop $3&lt;br /&gt;Pop $2&lt;br /&gt;Pop $1&lt;br /&gt;Pop $0&lt;br /&gt;EndFunction&lt;/blockquote&gt;NSIS na prvý pohľad vyzerá, ako keby to vymýšľal assemblerista, ktorý chcel urobiť najhorší jazyk sveta, a tak doňho narval všetky anti-patterny. V skutočnosti chlapci z Nullsoft začali nejakým .bat inštalátorom (kvôli Call a lomítkam), a na túto úžasnú kostru nalepili všetko, čo ich napadlo - stačí, že to vymysleli zhúlení alebo namol najebaní. Toľko ku genéze NSIS.&lt;p/&gt;Samozrejme, snáď žiadne návody na webe nefungujú, či už sa to týka replace stringu (áno, NSIS nevie replacovať substring v stringu, nedajbože v súbore, po skúsení 4 rôznych návodov som sa spoľahol na sed.exe. Všetky návody majú spoločného menovateľa: autora, hrdého na svoj výlučok, so všetkými znakmi amatéra: ascii grafikou v zdrojákoch, básničky, vzletné pomenovania a podobné debiliny).&lt;p/&gt;Poučenia do budúcna:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Nepoužívať NSIS&lt;/li&gt;&lt;li&gt;NSIS je škandál&lt;/li&gt;&lt;li&gt;Kto neodstraňuje starý bordel, bude vyzerať ako NSIS. Kto odstraňuje starý bordel príliš horlivo, skončí ako Ruby&lt;/li&gt;&lt;li&gt;Nepoužívať NSIS&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8579640065836588000?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8579640065836588000/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8579640065836588000' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8579640065836588000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8579640065836588000'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/08/nullsoft-installer.html' title='Nullsoft Installer'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-9125376864359965978</id><published>2011-07-26T03:02:00.000-07:00</published><updated>2011-07-26T03:02:22.744-07:00</updated><title type='text'>Vymazanie súboru pod Windows</title><content type='html'>Určite sa vám stalo, že sa nejaký súbor alebo adresár nedal zmazať a Total Commander lakonicky zahlási "cannot delete folder". Ak zadáte do google "windows cannot delete folder", dostanete &lt;a href="http://winhlp.com/node/39"&gt;úžasný návod&lt;/a&gt;, ktorý je vlastne esenciou všetkých návodov riešenia problémov pod Windows. Hneď prvá rada znie samozrejme Reboot. Piata rada ma fakt dostala - nechýbalo veľa a začal by som sa váľať na koberci. Tá rada znie Reboot Again.&lt;p/&gt;Keby sa náhodou ten návod stratil v pr...epadlisku času, tu je destilát tých úchvatných rád:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Reboot&lt;/li&gt;&lt;li&gt;DEL or RMDIR (povšimnite si, že hneď druhá rada radí liezť do konzoly, čo podľa tých, čo radi pindajú do linuxu, nie je nikdy treba)&lt;/li&gt;&lt;li&gt;Kill explorer.exe - wow&lt;/li&gt;&lt;li&gt;Log off&lt;/li&gt;&lt;li&gt;Reboot again - ROFL&lt;/li&gt;&lt;li&gt;Delete containing folder&lt;/li&gt;&lt;li&gt;Use RMDIR on containing folder&lt;/li&gt;&lt;li&gt;Use short name&lt;/li&gt;&lt;li&gt;Boot into Safe mode - stále kvôli vymazaniu jedného blbého fajlu. Čím ďalej, tým lepšie&lt;/li&gt;&lt;li&gt;Stop program - a ktorý? To nám zistí &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx"&gt;Process Monitor&lt;/a&gt;: v menu Find / Find Handle or DLL, a v dialógu napíšte meno adresára alebo súboru, ktorý nejde zmazať&lt;/li&gt;&lt;li&gt;Rename or move during next boot - tak už lezieme do registrov, husté :-)&lt;/li&gt;&lt;li&gt;Use another operating system - WOW O_O&lt;/li&gt;&lt;li&gt;Connect hard disk to other computer&lt;/li&gt;&lt;li&gt;Use unlock utility - prvá normálna rada&lt;/li&gt;&lt;li&gt;Shorten names&lt;/li&gt;&lt;li&gt;Deal with hidden or system files&lt;/li&gt;&lt;li&gt;Access rights&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-9125376864359965978?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/9125376864359965978/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=9125376864359965978' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/9125376864359965978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/9125376864359965978'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/07/vymazanie-suboru-pod-windows.html' title='Vymazanie súboru pod Windows'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-4277706691815907577</id><published>2011-07-23T05:35:00.000-07:00</published><updated>2011-07-25T00:36:58.021-07:00</updated><title type='text'>Nekupujte Zelmer Galaxy 2</title><content type='html'>Teraz poruším svoju zásadu písať na tomto blogu len o IT a budem sa venovať téme prízemnejšej, a to sú vysavače. V podstate by stačilo zvolanie Nikdy nekupujte Zelmer Galaxy 2, a všeobecne žiadny bezsáčkový vysavač, ale to by ste mi, drahí čitatelia, asi len tak nezožrali. Takže pekne poporiadku.&lt;p/&gt;Kde bolo, tam bolo, bol jeden vysavač. Spočiatku fungoval a všetko bolo tip-top. Časom však začal slabo ťahať (sila asi tak komárieho dychu, v podstate sa vysávaním len zvíril prach v izbe). Podujal som sa ho vyčistiť a tam sa to všetko posralo. Od tohto bodu sa v nádobke, kde sa má zhromažďovať prach, zhromažďoval veľký prd, všetko sa zachytávalo už skôr na filtri, určenom na zachytávanie veľkého odpadu. Ten sa zapchal hneď, takže v podstate pred každým veľkým vysávaním bolo treba nadávajúc vybrať celý modul a ísť ho vysypať. Po pol roku aj toto prestalo pomáhať, pretože sa upchal HEPA filter. Tu máme pár možností:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ísť ho vyčistiť von. To znamená zobrať ten krám a &lt;a href="http://www.youtube.com/watch?v=maaZ7y5BMqo"&gt;jebať s ním desať minút o smetiak&lt;/a&gt;, čím spoľahlivo naseriete celé sídlisko hlukom a prachom, nehovoriac o tom, že po tomto type čistenia sa tá malá mrcha zapchá po mesiaci&lt;/li&gt;&lt;li&gt;Ísť ho vyčistiť pod vodou, po čom celý vysavač asi tak rok smrdí ako zdochnutý pes&lt;/li&gt;&lt;li&gt;Ísť kúpiť nový. Tu podotýkam, že všetky HEPA filtre majú síce rovnaký princíp, ale asi tak milión rôznych tvarov, takže HEPA filter pre môj vysavač som nakoniec zohnal v zapadnutom kráme kdesi v riti v Rači, a stál 30 euro.&lt;/li&gt;&lt;/ul&gt;Áno, presne tak, ten kúsok papiera a plastu stojí 30 euro. Vy nie ste kompletný, hovorím predavačovi. On, že čo sa čudujem, keď som si kúpil vysavač za 60 eur, že som si mal kúpiť za 300 a nemal by som problém. To si radšej kúpim rumbu za 500 eur a bude to vysávať samo, ty dement. Nehovoriac o tom, že všetky bezsáčkové vysavače majú HEPA filter, ktorý treba buď meniť alebo čistiť, čo je neporovnateľne väčšia otrava, ako jebnúť sáčok do smetí.&lt;p/&gt;Nastal čas na nový vysavač. So sáčkom.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-4277706691815907577?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/4277706691815907577/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=4277706691815907577' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4277706691815907577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4277706691815907577'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/07/nekupujte-zelmer-galaxy-2.html' title='Nekupujte Zelmer Galaxy 2'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-2298732231259824534</id><published>2011-06-24T01:29:00.000-07:00</published><updated>2011-06-24T01:30:29.563-07:00</updated><title type='text'>Java Packages</title><content type='html'>Pri hraní s Java Package classou som prišiel na zaujímavú vec. Root package (alebo default package, proste package, do ktorého patrí trieda, ktorá nemá definovaný žiadny package a je hodená priamo v adresári so zdrojákmi) vlastne neexistuje!&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;Package.getPackage("")&lt;/code&gt; == &lt;code&gt;null&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Package.getPackage(null)&lt;/code&gt; vyhodí &lt;code&gt;NullPointerException&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Class.forName("DummyClass").getPackage()&lt;/code&gt; == &lt;code&gt;null&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;Čo je ešte zaujímavejšie, &lt;code&gt;Thread.currentThread().getContextClassLoader().getResource("")&lt;/code&gt; vráti platnú URL, ktorú keď prečítame, dostaneme zoznam hlavných balíkov v našom JAR súbore, oddelených novým riadkom. Napríklad, ak máme jednu classu v package &lt;code&gt;sk.bla.superapp&lt;/code&gt;, vráti to "sk". Divné je, že v tomto zozname nie sú Java balíky ako "java", "javax" a "org". Ide o nedokumentované chovanie, pretože v Javadoce sa nepíše nič o tom, čo má getResource() robiť v prípade balíčkov. Skúsme ďaľšie balíky:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;getResource("java")&lt;/code&gt; vráti &lt;code&gt;null&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;getResource("sk")&lt;/code&gt; vráti "bla"&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-2298732231259824534?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/2298732231259824534/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=2298732231259824534' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2298732231259824534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2298732231259824534'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/06/java-packages.html' title='Java Packages'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-285432644210677972</id><published>2011-06-23T04:29:00.000-07:00</published><updated>2011-06-23T04:29:11.874-07:00</updated><title type='text'>Polopatistické vysvetlenie pointrov</title><content type='html'>Krásne jednoduché vysvetlenie toho, aké sú pointre nebezpečné: &lt;a href="http://stackoverflow.com/questions/6441218/local-variables-memory-can-be-accessed-outside-its-scope/6445794#6445794"&gt;stackoverflow&lt;/a&gt;. A krásna veta na záver:&lt;br /&gt;&lt;blockquote&gt;That C++ is not memory safe is simply a fact. It's not "bashing" anything. Had I said, for example, "C++ is a horrid mishmash of under-specified, overly-complex features piled on top of a brittle, dangerous memory model and I am thankful every day I no longer work in it for my own sanity", that would be bashing C++. Pointing out that it's not memory safe is explaining why the original poster is seeing this issue; it's answering the question, not editorializing.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-285432644210677972?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/285432644210677972/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=285432644210677972' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/285432644210677972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/285432644210677972'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/06/polopatisticke-vysvetlenie-pointrov.html' title='Polopatistické vysvetlenie pointrov'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6393542942127560617</id><published>2011-06-07T05:00:00.000-07:00</published><updated>2011-06-07T05:00:25.000-07:00</updated><title type='text'>Ruby</title><content type='html'>Pokúšal som sa dnes nainštalovať jruby do rvm. Hľadám &lt;a href="http://beginrescueend.com/interpreters/jruby/"&gt;návod&lt;/a&gt;, stránka nefunguje. Naslepo píšem &lt;code&gt;rvm install jruby-1.6.2&lt;/code&gt;, a inštalácia failuje, lebo nevie stiahnuť gemy z &lt;a href="http://rubygems.org"&gt;rubygems.org&lt;/a&gt;, lebo stránka nefunguje. Asi bežia na Ruby.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6393542942127560617?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6393542942127560617/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6393542942127560617' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6393542942127560617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6393542942127560617'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/06/ruby.html' title='Ruby'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-3037159661296819093</id><published>2011-06-02T00:24:00.000-07:00</published><updated>2011-06-02T01:05:35.998-07:00</updated><title type='text'>O hardware</title><content type='html'>Je až neuveriteľné, koľko problémov je s hardvérom. Od &lt;a href="http://mjg59.dreamwidth.org/3561.html"&gt;problémov s obyčajným rebootom&lt;/a&gt; cez problémy so signature padu nemenovaného &lt;a href="http://www.signotec.com"&gt;výrobcu&lt;/a&gt;, keď po zavolaní &lt;code&gt;setImage()&lt;/code&gt; pad v polovici prípadov zmrzne, po wifi, ktorá sama od seba prestane fungovať (Asus EEE PC s Ubuntu Natty). Sčasti za to môže C, jazyk, v ktorom polovica kódu je o alokácii, dealokácii a realokácii pamäti, druhá polovica o testovaní na error kódy (teda v tom lepšom prípade, keď sa autor vôbec obťažuje error kódy testovať). Navyše, ak chcete liezť na hardvér z Javy, potrebujete komunikovať s nejakou knižnicou cez JNA (JNI je nepoužiteľné), takže si musíte napísať wrapper, modliť sa, že to nesegfaultne, a distribuovať binárky pre všetky možné OS.&lt;p/&gt;Je to dobré pripomenutie toho, že nech si človek váži toho vyššieho jazyka, ktorý má, kde autori poriešili všetky tieto low-level sprostosti za vás a funguje to na všetkých OS rovnako (čiže nie Ruby ani c#).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-3037159661296819093?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/3037159661296819093/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=3037159661296819093' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3037159661296819093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3037159661296819093'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/06/o-hardware.html' title='O hardware'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-2392816188306276510</id><published>2011-06-01T00:25:00.000-07:00</published><updated>2011-06-01T00:31:17.205-07:00</updated><title type='text'>Rails Sucks Definitely 2</title><content type='html'>V robote máme zaujímavý problém: používame imagemagick na šaškovanie s obrázkami. Keďže inštalátor má fungovať offline, musíme pribaliť imagemagick deby pre Ubuntu 10.04. Tie deby samozrejme nefungujú s Ubuntu 10.04.1 (kvôli iným verziám knižníc) a už vôbec nefungujú s Windows, takže buď urobíme tri inštalátory pre Ubuntu 10.04, 10.04.1 a Windows, alebo sa odpútame od platformy a spravíme si to v multiplatformovom jazyku. A keďže imagemagick na Windows pre Ruby vlastne nefunguje, a robiť čokoľvek s obrázkami v čistom Ruby je čisté šialenstvo, pretože:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;to je pomalé (Ruby je 500x pomalšie ako Java)&lt;/li&gt;&lt;li&gt;žiadny framework na prácu s obrázkami v Ruby neexistuje&lt;/li&gt;&lt;li&gt;a aj keby existoval, držať si obrázok ako String (keďže Ruby nemá byte[] ) je proste zvrhlé&lt;/li&gt;&lt;/ul&gt;Z tejto lekcie si treba zobrať nasledovné ponaučenia:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Obmedziť závislosť na platforme na absolútne minimum, na úplne štandardné veci, ktoré sú štandardné na každej platforme, a&lt;/li&gt;&lt;li&gt;&lt;strong&gt;treba proste normálny rýchly multiplatformový jazyk, a to je Java.&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;Sorry, Rubysti, možno váš jazyk je elegantný (aj to dosť pochybujem, keď sa človek rozkokoší a začne používať preťažovanie operátorov, bloky a iterátory, vznikne tzv. write-only kód), ale Java je funkčná a to je to, čo sa počíta. A to už nehovorím o bundleri, kde je v podstate nemožné spackagovať aplikáciu tak, aby fungovala offline pod Ruby aj JRuby, v Linuxe aj vo Windowse (teda, v JRuby to možné je, pretože je to Java).&lt;p/&gt;Odporúčam prečkať tento Rails hype, kým nepominie, a potom sa vrátiť k normálnej práci.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-2392816188306276510?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/2392816188306276510/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=2392816188306276510' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2392816188306276510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2392816188306276510'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/06/rails-sucks-definitely-2.html' title='Rails Sucks Definitely 2'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8382637456388733364</id><published>2011-04-26T04:15:00.000-07:00</published><updated>2011-04-26T04:22:29.323-07:00</updated><title type='text'>Java SE Embedded</title><content type='html'>Až teraz som si všimol, že Oracle poskytuje aj Java SE Embedded, pre ARM, PPC a x86. Najprv som si myslel, že ide o nejakú okresanú verziu SE, dokonca na stránke bola naznačená spojitosť s hrôzou s názvom Java ME. Našťastie, zvládne toho pomerne dosť: dokáže to spustiť server používajúci Hibernate, Wicket a Guice. Nerobil som žiadne benchmarky, iba jediný: koľko pamäte to žerie po spustení servera a poskytnutí úvodnej stránky. Sun Java6 JRE 1.6.0_24 žerie okolo 137mb, EJRE (asi Embedded JRE) 1.6.0.25 žerie len 57mb - dosť slušný rozdiel. Kde je háčik, či to je pomalšie ako JRE, netuším.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8382637456388733364?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8382637456388733364/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8382637456388733364' title='2 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8382637456388733364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8382637456388733364'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/04/java-se-embedded.html' title='Java SE Embedded'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-7781682944405701139</id><published>2011-04-17T04:57:00.000-07:00</published><updated>2011-12-23T02:26:44.339-08:00</updated><title type='text'>Rýchly fileserver cez http</title><content type='html'>Ak chcete vysharovať adresár so súbormi cez HTTP, nie je problém:&lt;br /&gt;&lt;blockquote&gt;gem install sinatra&lt;br /&gt;ruby -e "require 'sinatra';set :port, 51414;set :public, '.'"&lt;/blockquote&gt;Druhá strana môže ťahať cez http://pocitac:51414/meno_suboru. Malá vec, kde je Ruby celkom šikovné :)&lt;p/&gt;Ak chcete server na testovanie, ktorý dokáže POST:&lt;br /&gt;&lt;blockquote&gt;ruby -e 'require "sinatra";set :port, 51414;post "/" do; request.body.rewind; File.open("post.bin", "wb") do |f|; f.write request.body.read;end;end'&lt;/blockquote&gt;Každý POST request na http://localhost:51414/ sa zapíše do súboru &lt;code&gt;post.bin&lt;/code&gt;.&lt;p/&gt;EDIT: &lt;code&gt;ruby -e 'require "sinatra";set :port, 51410;get %r{/(.*)} do;f=params[:captures].first;fn=File.expand_path(f);if File.directory?(fn);"&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;#{fn}&amp;lt;/h1&amp;gt;#{(Dir.entries(fn)-["."]).collect{|e|"#{File.directory?("#{fn}/#{e}")?"/":""}&amp;lt;a href=\"#{f}/#{e}\"&amp;gt;#{e}&amp;lt;/a&amp;gt;"}.sort.join("&amp;lt;br&amp;gt;")}&amp;lt;/body&amp;gt;";elsif File.exists?(fn);send_file fn;else;halt 404;end;end'&lt;/code&gt;&lt;br /&gt;a máme aj výpis adresárov :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-7781682944405701139?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/7781682944405701139/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=7781682944405701139' title='3 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7781682944405701139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7781682944405701139'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/04/rychly-fileserver-cez-http.html' title='Rýchly fileserver cez http'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-310655703566627950</id><published>2011-04-13T10:34:00.000-07:00</published><updated>2011-04-13T10:34:40.160-07:00</updated><title type='text'>Java a SSL</title><content type='html'>Dávnejšie som &lt;a href="http://vyzivus.blogspot.com/2009/08/ssl-https-java.html"&gt;písal&lt;/a&gt; &lt;a href="http://vyzivus.blogspot.com/2009/08/ssl-https-java-simplified.html"&gt;články&lt;/a&gt; o HTTPS v Jave. Návody v oných článkoch síce fungovali, ale v podstate človek mohol akurát tak opísať príkazy v nich obsiahnuté a modliť sa, aby idiotský tool openssl nespadol so zhovadilosťami ako&lt;br /&gt;&lt;blockquote&gt;3982:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1316:&lt;br /&gt;3982:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:828:&lt;br /&gt;3982:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:748:Field=version, Type=PKCS12&lt;/blockquote&gt;Miesto openssl odporúčam použiť &lt;a href="http://portecle.sourceforge.net/"&gt;Portecle&lt;/a&gt;, skvelý nástroj, pri ktorého používaní nemusíte poznať naspamäť dvesto prepínačov, a môžete si byť istí, že keystore obsahuje len certifikát, a nie privátny kľúč. A hlavne vie vygenerovať bouncycastle BKS keystore, čo je skvelé, keďže Android nežerie tradičný JKS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-310655703566627950?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/310655703566627950/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=310655703566627950' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/310655703566627950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/310655703566627950'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/04/java-ssl.html' title='Java a SSL'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-5846572196604802134</id><published>2011-04-08T07:09:00.000-07:00</published><updated>2011-07-20T08:54:43.288-07:00</updated><title type='text'>Java a JPG/JPEG 2000</title><content type='html'>Za prvé, čítanie obrázkov. ImageIO vie čítať obrázky, ale má problémy s animovanými GIFmi. Riešenie:&lt;br /&gt;&lt;blockquote&gt;Image img = fileName.endsWith(".gif") ? Toolkit.getDefaultToolkit().getImage(in) : ImageIO.read(in);&lt;br /&gt;img = new ImageIcon(img).getImage();&lt;/blockquote&gt;Druhý riadok donúti obrázok sa kompletne načítať. Neviem už síce, na čo som to potreboval, môžete vyskúšať a napísať komentár :-)&lt;p/&gt;Za druhé, písanie JPEGu s nastavením kompresie:&lt;br /&gt;&lt;blockquote&gt;final ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();&lt;br /&gt;writer.setOutput(ImageIO.createImageOutputStream(out));&lt;br /&gt;final ImageWriteParam iwparam = new JPEGImageWriteParam(Locale.getDefault());&lt;br /&gt;iwparam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);&lt;br /&gt;iwparam.setCompressionQuality(quality);&lt;br /&gt;writer.write(null, new IIOImage(toRenderedImage(image), null, null), iwparam)&lt;/blockquote&gt;Za tretie, JPEG 2000. Existuje knižnica JAI (Java Advanced Imaging), ale linka na JAI Image/IO nefunguje a bez toho to nevie pracovať s JPEG 2000. JAI celkovo vyžaduje nejaké natívne knižnice, na ktoré som po práci (a hlavne po kope segfaultov) s céčkovými drivermi na všemožný hardware alergický. &lt;a href="http://code.google.com/p/jj2000/"&gt;jj2000&lt;/a&gt; je úplný chaos, vie to konvertovať iba nejaké prapodivné formáty a celkovo mi to nejak smrdí. Našťastie to &lt;a href="http://www.jpedal.org/PDFblog/2011/03/java-jai-image-io-jpeg2000-memory-leak-fix/"&gt;Daniel vyskúmal&lt;/a&gt; za nás: na classpath pridáme &lt;a href="http://www.jpedal.org/jai_imageio_idrsolutionsBuild.jar"&gt;JAI Image IO knižnicu&lt;/a&gt; (len tak mimochodom používa jj2000 ako backend), načítanie obrázku funguje automaticky cez ImageIO.read(), zápis:&lt;br /&gt;&lt;blockquote&gt;ImageIO.write(img, "jpeg2000", new File("image_out.jp2"));&lt;/blockquote&gt;Na vyšpecifikovanie kvality výsledného obrázku som skúsil použiť niečo ako&lt;br /&gt;&lt;blockquote&gt;final ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg2000").next();&lt;br /&gt;final J2KImageWriteParam iwparam = new J2KImageWriteParam(Locale.getDefault());&lt;br /&gt;iwparam.setLossless(false);&lt;br /&gt;iwparam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);&lt;br /&gt;iwparam.setCompressionType("JPEG2000");&lt;br /&gt;iwparam.setCompressionQuality(0.1f);&lt;br /&gt;writer.setOutput(ImageIO.createImageOutputStream(new File("image_out2.jp2")));&lt;br /&gt;writer.write(null, new IIOImage(img, null, null), iwparam);&lt;/blockquote&gt;ale nič to nerobí, ignoruje to moje nastavenia. Ak máte nejaké riešenie, podeľte sa so mnou v príspevku.&lt;p/&gt;EDIT: &lt;code&gt;iwparam.setEncodingRate(0.1f);&lt;/code&gt; funguje, ale len vtedy, ak je zdrojový obrázok BMP alebo PNG; keď zdrojový obrázok vyrobíme cez &lt;code&gt;BufferedImage img = new BufferedImage(640, 480, BufferedImage.TYPE_INT_RGB);&lt;/code&gt;, nefunguje to, ak ho načítame z .jp2, funguje to asi len vtedy, ak zdrojový obrázok nie je lossless. Úplná divočina je, že niekedy neprepíše výstupný obrázok, takže ho musíme zmazať ručne.&lt;p/&gt;EDIT2: &lt;code&gt;BufferedImage img = new BufferedImage(640, 480, BufferedImage.TYPE_INT_ARGB);&lt;/code&gt; funguje! Zrejme to bude niečo s ColorModel alebo ColorSpace...&lt;p/&gt;EDIT3: Takže aj TYPE_INT_ARGB funguje. Vyzerá to tak, že obrázok s modelom &lt;code&gt;IndexColorModel&lt;/code&gt; proste jj2000 nevie poriadne spakovať a použije lossless kompresiu.&lt;p/&gt;EDIT4: Ďaľší bug: jj2000 nevie písať na OutputStream, takže nie je možné použiť &lt;code&gt;ImageIO.createImageOutputStream(new FileOutputStream("bla"))&lt;/code&gt;.&lt;br /&gt;&lt;p/&gt;EDIT5: &lt;code&gt;BufferedImage.TYPE_INT_RGB&lt;/code&gt; ani &lt;code&gt;BufferedImage.TYPE_INT_ARGB&lt;/code&gt; nefunguje, obrázok má rozhasené farby. Treba použiť &lt;code&gt;BufferedImage.TYPE_3BYTE_BGR&lt;/code&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-5846572196604802134?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/5846572196604802134/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=5846572196604802134' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5846572196604802134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5846572196604802134'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/04/java-jpgjpeg-2000.html' title='Java a JPG/JPEG 2000'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-3939866381626099539</id><published>2011-04-08T06:55:00.000-07:00</published><updated>2011-04-08T06:57:11.475-07:00</updated><title type='text'>Rails Sucks Definitely</title><content type='html'>Na infantilné &lt;a href="http://www.youtube.com/watch?v=91C7ax0UAAc"&gt;pesničky&lt;/a&gt; a &lt;a href="http://www.youtube.com/watch?v=PQbuyKUaKFo"&gt;reklamy&lt;/a&gt; sme si už zvykli, takže len krátka reakcia: C is for Controller, V is for view, and all your view layouts are defined in a controller, logické. Dementi. Čo sa týka reklamy, ActiveScaffold neumožňuje joinovať tabulky, ActiveRecord nemá podporu pre foreign kľúče, a neexistuje HQL/EJBQL, takže SQL selekty sa píšu pekne natívne, všetci dúfame, že nebudeme musieť podporovať viac typov databáz.&lt;p/&gt;Najhoršie na Rails nie je paradoxne to, že v tom musím v práci robiť (čo je pravda dosť zlé), ale že to je v podstate premaľované PHP s trochu lepším jazykom. Navyše, Rails vôbec nie je objektový! Áno, controller je objekt, model je objekt, view je asi objekt (v skutočnosti je to HTML s kusmi ruby kódu), ale tam to končí. Chcete novú funkcionalitu? Pridajte metódu do helpera, controllera alebo do kerej márie. MVC celého frameworku končí na úrovni Page, ďalej je to obyčajné procedurálne programovanie, na rozdiel od Wicketu, kde každá komponenta je objekt sám o sebe, s princípmi MVC. Nie, Rails nemá GUI komponenty ako ComboBox, treba zavolať metódu helpera, ktorá vygeneruje nejaký HTML kód a nabinduje to na políčko v modeli. Nie, Rails nemá AutoCompletionTextBox, treba si to ručne spraviť cez AJAX a JavaScript. Fuj. Nečudujem sa, že Twitter posiela celý Rails do prdele.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-3939866381626099539?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/3939866381626099539/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=3939866381626099539' title='2 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3939866381626099539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3939866381626099539'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/04/rails-sucks-definitely.html' title='Rails Sucks Definitely'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-902266198180245620</id><published>2011-03-27T03:03:00.000-07:00</published><updated>2011-03-27T03:03:36.148-07:00</updated><title type='text'>Ako zmeniť tému KDE v Ubuntu</title><content type='html'>Jednoducho: &lt;code&gt;sudo apt-get install qt4-qtconfig&lt;/code&gt;, a potom &lt;code&gt;qtconfig-qt4&lt;/code&gt;, zvolíme GTK alebo Cleanlooks, a hurá - všetky aplikácie konečne vyzerajú rovnako.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-902266198180245620?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/902266198180245620/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=902266198180245620' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/902266198180245620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/902266198180245620'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/03/ako-zmenit-temu-kde-v-ubuntu.html' title='Ako zmeniť tému KDE v Ubuntu'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-3418821826469629630</id><published>2011-03-21T05:17:00.000-07:00</published><updated>2011-03-21T05:28:19.237-07:00</updated><title type='text'>Dynamicky typové jazyky sú špeciálny prípad staticky typových jazykov</title><content type='html'>&lt;a href="http://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/"&gt;Krásny príspevok&lt;/a&gt; o dynamických jazykoch:&lt;br /&gt;&lt;blockquote&gt;Dynamic typing is but a special case of static typing, one that limits, rather than liberates, one that shuts down opportunities, rather than opening up new vistas.  Need I say it?  Something can hardly be opposed to that of which it is but a trivial special case.&lt;/blockquote&gt;Ako ma dynamické jazyky obmedzujú:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dynamický jazyk mi znemožňuje špecifikovať požadovaný typ ako vstupný parameter v metóde, alebo ako field&lt;/li&gt;&lt;li&gt;Dynamický jazyk mi znemožňuje robiť plnohodnotný refactoring&lt;/li&gt;&lt;li&gt;Dynamický jazyk ma núti testovať všetko, aby som zistil preklepy&lt;/li&gt;&lt;/ul&gt;Na druhej strane, stavím sa, že zástancovia dynamických jazykov by vedeli podobné desatoro obmedzení napísať aj o Jave :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-3418821826469629630?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/3418821826469629630/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=3418821826469629630' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3418821826469629630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3418821826469629630'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/03/dynamicky-typove-jazyky-su-specialny.html' title='Dynamicky typové jazyky sú špeciálny prípad staticky typových jazykov'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-9034380303701112543</id><published>2011-03-16T07:36:00.000-07:00</published><updated>2011-03-21T05:19:26.688-07:00</updated><title type='text'>Ruby Sucks 5</title><content type='html'>Modelový príklad nepoužiteľnosti sveta s názvom Ruby na čokoľvek seriózne.&lt;p/&gt;Majme knižnicu Stomp pre Ruby. Aby sa zapla podpora autentifikácie SSL serverovského kľúča, treba odkomentovať štyry riadky v zdrojáku. Áno, čítate dobre, to je dynamický jazyk, takže odkomentovať pár riadkov v knižnici Rubystom nerobí problém. No nič, hajde špekulovať, ako SSL knižnici v Ruby nastavíme heslo na keystore. Keďže tradične nemáme zoznam metód, ktoré sú v OpenSSL::X509::Store, skúsime &lt;a href="http://ruby-doc.org/ruby-1.9/classes/OpenSSL/X509/Store.html"&gt;dokumentáciu&lt;/a&gt;. Tam nájdeme štandardnú Ruby dokumentáciu, čiže úplné hovno s makom a pretlakom. Rezignovane otvoríme irb, require 'openssl' a zistíme si zoznam metód príkazom OpenSSL::X509::Store.new.methods. Nenájdeme samozrejme žiadnu metódu, ktorá by mala niečo do činenia s heslom, v ružovom a teplom Ruby svete sa asi dvere nezamykajú. Možno store.add_file má nejaký tajný parameter? Ako zistíme parametre metódy add_file? &lt;a href="http://eigenclass.org/hiki/method+arguments+via+introspection"&gt;Skriptom na 200 riadkov&lt;/a&gt;. What the Fucking Fuck? Jasný dôkaz, že Rubysti fungujú na drogách! A ešte prvý komentár je že Very Nice?!?!? V Jave to mám na 2 riadky, vy feťáci.&lt;p/&gt;No nič, zavoláme s.add_file "client.ks", "password" a dozvieme sa, že add_file žerie len jeden parameter. A sme došli, stará mama. Zazvonil zvoniec, a rozprávke je koniec.&lt;p/&gt;Edit: Zistenie počtu parametrov metódy sa robí pomocou&lt;br /&gt;OpenSSL::X509::Store.new.method(:add_file).arity. Nie zlé, otázka je, čo keď mám overloadnutú metódu? A počet parametrov je nám aj tak naprd, lebo Rubysti mimoriadne obľubujú posielať do metód tučný Hash.&lt;p/&gt;Edit2: Sága má šťastný záver: keď som miesto Java keystore použil PEM kľúč, celý krám začal fungovať. A PEM certifikáty nemajú heslo... Som dement. Pomýlilo ma, že v Stomp example bol súbor nazvaný client.ts. To ale vo finále nič nemení na nevyzretosti Ruby platformy, na ktorú ukazuje aj tento príspevok.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-9034380303701112543?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/9034380303701112543/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=9034380303701112543' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/9034380303701112543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/9034380303701112543'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/03/ruby-sucks-5.html' title='Ruby Sucks 5'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8384433815919383961</id><published>2011-03-16T06:26:00.000-07:00</published><updated>2011-03-16T06:30:18.539-07:00</updated><title type='text'>Ruby sucks 4</title><content type='html'>Je Array v Ruby thread-safe? Malé googlenie odhalí &lt;a href="http://www.ruby-forum.com/topic/174086"&gt;zaujímavú skutočnosť&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;[This] question can ultimately *only* be answered by a formal Ruby Specification or more specifically a formal Ruby Memory Model.&lt;br /&gt;Until we have such a specification, the C source code of MRI or YARV is considered to be the "specfication".&lt;/blockquote&gt;Čo sa týka špecifikácie pamäťového modelu, je Ruby tam, kde Java pred Java5. Čo sa týka špecifikácie jazyka, to myslím už nepotrebuje žiadny komentár. Ako niekto môže seriózne používať takýto "jazyk"??? &lt;a href="http://glyphobet.net/blog/essay/228"&gt;Ani Pythonisti nechápu&lt;/a&gt;. Nuž, čo sa dá čakať od jazyka, ktorý navrhoval Céčkar programujúci bash skripty. Snáď len koľajnicový framework, ktorý programoval bývalý phpčkár.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8384433815919383961?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8384433815919383961/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8384433815919383961' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8384433815919383961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8384433815919383961'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/03/ruby-sucks-4.html' title='Ruby sucks 4'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6603295303843857849</id><published>2011-03-16T04:09:00.000-07:00</published><updated>2011-03-16T04:09:39.019-07:00</updated><title type='text'>Porovnanie Java IDE</title><content type='html'>&lt;a href="http://www.itnews.sk/spravy/produkty/2011-03-16/c138748-najlepsie-nastroje-na-programovanie-v-jave"&gt;Pekný článok&lt;/a&gt;, porovnávajúci Java IDE. Kultivovane napísané to, čo &lt;a href="http://vyzivus.blogspot.com/2009/01/de-primnej-sstrasti.html"&gt;tvrdím aj ja :-)&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6603295303843857849?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6603295303843857849/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6603295303843857849' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6603295303843857849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6603295303843857849'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/03/porovnanie-java-ide.html' title='Porovnanie Java IDE'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-4084381758311440661</id><published>2011-03-14T06:11:00.000-07:00</published><updated>2011-03-14T06:11:43.510-07:00</updated><title type='text'>JavaEE Clustering</title><content type='html'>Asi najjednoduchší návod, aký som videl, ako rozbehať clustering s load balancingom na JavaEE: &lt;a href="http://torquebox.org/news/2011/01/04/clustering-torquebox/"&gt;JBoss Clustering&lt;/a&gt;. Konečne rozumný cluster pre Ruby :-)&lt;p/&gt;Clustering Glassfish 3.1 je tiež veľmi jednoduchý - v GUI konfigurátore sa proste klikaním vyrobia nody a spustia sa. Load balancer by sa &lt;a href="http://tiainen.sertik.net/2011/03/load-balancing-with-glassfish-31-and.html"&gt;mal dať nainštalovať tiež jednoducho&lt;/a&gt;, ale to som ešte nerobil. Otázka znie, ako sa daný cluster bude správať v praxi - ako bude reagovať load balancer na padajúce nody, ako funguje HA HornetQ - uvidíme.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-4084381758311440661?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/4084381758311440661/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=4084381758311440661' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4084381758311440661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4084381758311440661'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/03/javaee-clustering.html' title='JavaEE Clustering'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-3797909714554754190</id><published>2011-03-08T05:41:00.000-08:00</published><updated>2011-03-08T06:22:52.799-08:00</updated><title type='text'>Ruby sucks 3</title><content type='html'>Vážení diváci, pre mimoriadny úspech prinášame tretí článok o tom, ako Ruby saje. Tentokrát Ruby a Rails na Windows.&lt;br /&gt;&lt;blockquote&gt;Varovanie ministerstva zdravotníctva: Rubín na Koľajniciach na Oknách dvíha krvný tlak a spôsobuje predmety zapichnuté v kolegoch.&lt;/blockquote&gt;Rubín na Koľajniciach 3.0.3 prekvapivo nefunguje dobre na Windowsoch. Ó, aké prekvapivé. Nielen že routing system úplne nepochopiteľne odmietne routovať niektoré controllery (v ťažkých chvíľach pomáha pridať riadok &lt;code&gt;match '/:controller/:action' =&amp;gt; '#'&lt;/code&gt; do routes.rb), ale ten dementný interpreter ruby.exe 1.9.2-p180 padá a padá, ej ale som rada, bude segfault, ej ale som rád. Ešteže existuje JRuby, ktorou síce rubíni (to je od slova rabín, ja viem, nič moc :) zvysoka pohŕdajú, ale ako jediná je schopná utiahnuť ten ich výkvet vedy a techniky na Windows bez pádov. Ale ani tá nie je schopná spustiť tú grču kódu v rozumnom čase. Na Atome, kde Wicket na Jetty štartuje 8 sekúnd (a to do toho počítam aj spustenie mavenu cez mvn jetty:start), tam koľajnica štartuje tak 45 sekúnd, fú. No nič, Ruby s Windows nie je kamarát.&lt;p/&gt;Kvôli JRuby je treba samozrejme pomeniť gemy v bundleri, lebo JRuby fičí na vlastnom jruby-openssl a JDBC driveroch. Chystal som sa spustiť na túto "feature" riadny prúd nadávok, lebo to je ako keby ste pod SUN-JRE a OpenJDK potrebovali rôzne jary, ale prekvapivo budem nadávať na čosi úplne iné. Používanie JDBC driverov je vlastne dobrá vec, lebo Ruby drivery na databázu vo Windows sú v podstate nefunkčné, napríklad taký postgresql driver: sú asi 3, z toho 2 nefungujú vo Windows, lebo sa tam kompilujú natívne C sračky. Ten posledný je v čistom Ruby, takže je pomalý ako riť a samozrejme nepodporuje polku vecí, ako napríklad BLOBy.&lt;p/&gt;Z vyššie uvedeného vyplýva, že Koľajnica saje, QED. Ale čo, poviete si, však keď sa tento neutešený stav zlepší, možno aj tá Koľajnica bude použiteľná. Nie. Zoberme na pomoc terminológiu fantasy. Java je terranská technológia - kopa komponentov, polka z nich nefunguje, ale keď viete, ktoré si vybrať, postavíte si tank a keď sa niečo dodrbe, kúpite novú komponentu a prizvárate to namiesto starej, hotovo. Rails je elfská technológia - krásne, veľké, vznešené, ale škaredo sa na to pozri a prestane to fungovať. Keď sa to pokúsite rozobrať, dostanete ničnehovoriace veci a vôbec sa nedá rozumieť, ako mohli spolu fungovať. Asi ako v idiotskej adventúre, kde keď skombinujete kladivo a železo, dostanete karburátor.&lt;p/&gt;Ruby je fajn na malé skripty, ale absencia statických typov, interfaces a nemožnosť definovania kontraktov medzi komponentami ho dopredu diskvalifikuje z väčších projektov.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-3797909714554754190?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/3797909714554754190/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=3797909714554754190' title='2 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3797909714554754190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3797909714554754190'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/03/ruby-sucks-3.html' title='Ruby sucks 3'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6302314769663753380</id><published>2011-02-16T02:21:00.000-08:00</published><updated>2011-02-16T02:21:33.301-08:00</updated><title type='text'>ActiveMQ a PostgreSQL</title><content type='html'>ActiveMQ 5.4.2 spadne s PostgreSQL (&lt;a href="https://issues.apache.org/jira/browse/AMQ-3075"&gt;viac o chybe&lt;/a&gt;). Riešenie je na PostgreSQL databáze spustiť nasledovné skripty:&lt;br /&gt;&lt;pre&gt;CREATE TABLE ACTIVEMQ_MSGS(ID BIGINT NOT NULL, CONTAINER VARCHAR(250), MSGID_PROD VARCHAR(250), MSGID_SEQ BIGINT, EXPIRATION BIGINT, MSG BYTEA, PRIMARY KEY ( ID ) )&lt;br /&gt;CREATE INDEX ACTIVEMQ_MSGS_MIDX ON ACTIVEMQ_MSGS (MSGID_PROD,MSGID_SEQ)&lt;br /&gt;CREATE INDEX ACTIVEMQ_MSGS_CIDX ON ACTIVEMQ_MSGS (CONTAINER)&lt;br /&gt;CREATE INDEX ACTIVEMQ_MSGS_EIDX ON ACTIVEMQ_MSGS (EXPIRATION)&lt;br /&gt;CREATE TABLE ACTIVEMQ_ACKS(CONTAINER VARCHAR(250) NOT NULL, SUB_DEST VARCHAR(250), CLIENT_ID VARCHAR(250) NOT NULL, SUB_NAME VARCHAR(250) NOT NULL, SELECTOR VARCHAR(250), LAST_ACKED_ID BIGINT, PRIMARY KEY ( CONTAINER, CLIENT_ID, SUB_NAME))&lt;br /&gt;CREATE TABLE ACTIVEMQ_LOCK( ID BIGINT NOT NULL, TIME BIGINT, BROKER_NAME VARCHAR(250), PRIMARY KEY (ID) )&lt;br /&gt;INSERT INTO ACTIVEMQ_LOCK(ID) VALUES (1)&lt;br /&gt;ALTER TABLE ACTIVEMQ_MSGS ADD PRIORITY BIGINT&lt;br /&gt;CREATE INDEX ACTIVEMQ_MSGS_PIDX ON ACTIVEMQ_MSGS (PRIORITY)&lt;br /&gt;ALTER TABLE ACTIVEMQ_ACKS ADD PRIORITY BIGINT DEFAULT 5 NOT NULL&lt;br /&gt;ALTER TABLE activemq_acks drop constraint activemq_acks_pkey&lt;br /&gt;ALTER TABLE ACTIVEMQ_ACKS ADD PRIMARY KEY (CONTAINER, CLIENT_ID, SUB_NAME, PRIORITY)&lt;/pre&gt;Do &lt;code&gt;activemq.xml&lt;/code&gt; potom pridajte nasledovný persistence adapter:&lt;br /&gt;&lt;pre&gt;&amp;lt;persistenceadapter&gt;&lt;br /&gt;  &amp;lt;jdbcpersistenceadapter datasource="#my-ds" usedatabaselock="false"&gt;&lt;br /&gt;    &amp;lt;statements&gt;&lt;br /&gt;      &amp;lt;statements&gt;&lt;br /&gt;        &amp;lt;property name="createSchemaStatements" xmlns="http://www.springframework.org/schema/beans"&gt;&lt;br /&gt;          &amp;lt;list&gt;&lt;br /&gt;          &amp;lt;/list&gt;&lt;br /&gt;        &amp;lt;/property&gt;&lt;br /&gt;      &amp;lt;/statements&gt;&lt;br /&gt;    &amp;lt;/statements&gt;&lt;br /&gt;  &amp;lt;/jdbcpersistenceadapter&gt;&lt;br /&gt;&amp;lt;/persistenceadapter&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6302314769663753380?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6302314769663753380/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6302314769663753380' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6302314769663753380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6302314769663753380'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/02/activemq-postgresql.html' title='ActiveMQ a PostgreSQL'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-2710907984758548585</id><published>2011-02-04T04:43:00.000-08:00</published><updated>2011-02-04T04:49:21.054-08:00</updated><title type='text'>Ruby sucks 2</title><content type='html'>Ďaľší z narcistických príspevkov typu &lt;a href="http://www.reddit.com/r/programming/comments/ff4wj/ruby_19_brought_forth_some_very_nice_and/"&gt;Ruby 1.9 je úplne super&lt;/a&gt;. Poďme pekne poporiadku:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Stringy majú encoding. Konečne, akurát že encoding by mal mať string serializer, a nie string samotný. Čistý fail, polka metód vracia veci s encodingom, druhá polka vracia akoby zoserializovaný string&lt;/li&gt;&lt;li&gt;Nekompatibilné zmeny, Rubysti evidentne nepoznajú @Deprecated (Hash#select)&lt;/li&gt;&lt;li&gt;Rubysti stále nemajú Set&lt;/li&gt;&lt;li&gt;Zvyšok je v podstate syntactic sugar. O čom sa autor samozrejme nezmienil, je, že Ruby 1.9 majú konečne okrem green threadov aj natívne thready.&lt;/li&gt;&lt;/ul&gt;Natívne thready v Ruby 1.9 je jeden ťažký kameňák, jeden by sa smial do popuku, keby to tí Rubysti nebrali tak vážne. Kto čakal, že Ruby bude konečne schopné vyťažiť viac ako jedno jadro, je na omyle. Na vine je Ruby Global Lock, ktorý dovoľuje naraz bežať len jednému threadu - asi kvôli tomu, že Matz nepochopil, na čo je volatile a pamäťový model. Natívne thready sú teda v Ruby prosím pekne kvôli IO - Ruby samozrejme nevie switchnúť green thread, kým ten sa zajebáva kdesi v kerneli na blocking IO volaní. Takže natívny thread uvoľní global lock pred vstupom do IO, čo umožní inému threadu global lock získať a pokračovať v celom tom cirkuse. Keďže global lock môže naraz získať len jeden thread a ostatné čakajú, máme maximálny možný počet jadier, ktoré vie Ruby naraz využiť, a to je prosím pekne 1 (slovom jedna).&lt;p/&gt;Java má síce cca 2x vyšší memory footprint ako Ruby (subjektívne 25mb Ruby on Rails VS 70mb Wicket/Jetty), ale beží tak 500x rýchlejšie, a vie využiť všetky dostupné jadrá. Aby Ruby vyťažilo CPU na max, treba spustiť toľko inštancií Ruby, koľko máme jadier, čo pri 10tich jadrách máme 250mb, vysoko prevyšujúce 70mb potrebných na beh Javy.&lt;p/&gt;Čo furt tí ľudia na tom Rails vidia...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-2710907984758548585?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/2710907984758548585/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=2710907984758548585' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2710907984758548585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2710907984758548585'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/02/ruby-sucks-2.html' title='Ruby sucks 2'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-7874658427329086607</id><published>2011-02-04T00:22:00.000-08:00</published><updated>2011-02-04T00:22:27.472-08:00</updated><title type='text'>Ruby sucks!</title><content type='html'>Som príliš nasrdený, aby som písal príspevok so správnou štruktúrou - najprv malý úvodík, potom gradácia, vyvrcholenie a rozuzlenie. Nie, dnes to bude heslovité.&lt;p/&gt;- prechod na Rails 3 ukázal v plnej kráse debilitu duck typing - pri uploade súboru v Rails 2 ste dostali Tempfile, ktorému bolo treba volať metódu close. V Rails 3 dostanete iný objekt, ktorý metódu close vôbec nemá! Dokumentácia nikde, takže ani neviete, čo sa stalo, či sa zmenilo API či čo (aj keď je vlastne absurdné pri duck typingu hovoriť o nejakom API). If it closes like an asshole, then it is an asshole.&lt;p/&gt;- rubysti sú banda smradľavých narcisov. &lt;a href="http://gembundler.com/"&gt;The best way to manage your application's dependencies??&lt;/a&gt; Tak za á: v Ruby sa nepíšu aplikácie, ale skripty, pretože Ruby je nevhodné na väčšie projekty. Za bé: bundler je náplasť na to, že Ruby skripty bez správnych gemov nainštalovaných v systéme nespustíte (čiže Rubysti bundlerom dostali v podstate jar súbory, hurá), za cé: bundler nerieši konflikty verzií. Ó áno, vie to stiahnuť tranzitívne dependencie, je to určite the best way. Alebo &lt;a href="http://god.rubyforge.org/"&gt;God&lt;/a&gt; - A BETTER WAY TO MONITOR - monitor WHAT, moju chladničku??? Nie, iba procesy, a milý boh aj tu robí len základnú prácu. Žiadna história, CPU usage, nič. Takže úplne základný tool, ktorý navyše padá, pretože Ruby leakuje pamäť, čiže treba setupnúť druhého goda a nechať ich sledovať sa navzájom. Konfigurák v Ruby - no comment.&lt;p/&gt;Návody na čokoľvek v Ruby majú jedného spoločného menovateľa - nefungujú. Príklad: &lt;a href="http://stackoverflow.com/questions/1706120/sinatra-bundler"&gt;Sinatra a Bundler&lt;/a&gt;. Spusťte &lt;code&gt;gem bundle&lt;/code&gt;? gem vyhlási, že taký príkaz nepozná, takže &lt;code&gt;bundle install --path=vendor/gems&lt;/code&gt;, ale to zase nikde nevyrobí súbor environment.rb! Čiže návod nefunkčný. Nie, nemôžeme to urobiť jednoduché ako &lt;code&gt;java -cp jar1;jar2;jar3 mainclass&lt;/code&gt;, kdeže, musíme buď zasrať systém gemami, alebo urobiť nefunkčný bundler. Spomínal som už, že bundler spackaguje len linux verziu sqlite3 drivera, takže na Windowse to potom nefunguje?&lt;p/&gt;Ruby je super na skripty, na malý http server, na jednoduchú sajtu. Tam nech aj pekne ostane. Ale nech sa mi nesere do väčších vecí, kde je treba spätnú kompatibilitu - tú Rubysti zrejme považujú za prekážku v rozvoji, asi to nevedia premyslieť na prvý šup.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-7874658427329086607?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/7874658427329086607/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=7874658427329086607' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7874658427329086607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7874658427329086607'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2011/02/ruby-sucks.html' title='Ruby sucks!'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-2813815947891365033</id><published>2010-12-14T02:08:00.000-08:00</published><updated>2010-12-14T02:08:03.757-08:00</updated><title type='text'>Vtip</title><content type='html'>Starý, ale jarý.&lt;br /&gt;&lt;pre&gt;Knock knock.&lt;br /&gt;Who's there?&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;&lt;br /&gt;sudo gem install bundler -v 1.0.5&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-2813815947891365033?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/2813815947891365033/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=2813815947891365033' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2813815947891365033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2813815947891365033'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/12/vtip.html' title='Vtip'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8140390123197662377</id><published>2010-12-14T01:23:00.000-08:00</published><updated>2011-03-26T03:06:31.040-07:00</updated><title type='text'>Ktorý jazyk neznášate?</title><content type='html'>Už dlho sa mi otvára nožík vo vrecku pri čítaní blogov, kde Rubysti, Pythonisti a celá tá dynamická banda svorne vzdychá, aká je Java na hovno. Posledná kvapka v sude bol blog, ktorý hlása, že &lt;a href="http://programmers.stackexchange.com/questions/2846/which-programming-language-do-you-really-hate"&gt;Java je tretí najnenávidenejší programovací jazyk&lt;/a&gt;. Vopred upozorňujem, že sa nebudem hrať na dobrého deduška "right language for the right job" a že tento text je absolútne neobjektívny a obsahuje vety ako "Rubysti, trhnite si nohou". No a čo. Rubysti, trhnite si nohou :-)&lt;p/&gt;Aby bolo jasné: neznášam Rails. S miliónom helper metód, bez zmysluplného autocompletion, bez refactoringu (skúste premenovať controller a potom ručne prepisovať URL vo viewoch), s absolútnym bordelom s názvom Active Scaffold (ktorý neumožňuje zobraziť join dvoch tabuliek). Choďte do prdele s vašimi gemami (nápad je to skvelý, ale polka gemov vyžaduje nejaké natívne sračky, takže je to prakticky neprenosné). Prečo nemá Mongrel load-balancing? Kde je podpora pre jednoduchý redeployment aplikácie na clusteri (overwrite a reštart? Na 50 nodoch? Nedajte sa vysmiať)? Áno, Ruby je super - pre linuxáka, ktorého znudil bash. Ale keď chcem postaviť riešenie, ktoré bez problémov dokáže resizovať obrázky na Windowsoch, som v prdeli. A to mám Linux radšej ako Windows.&lt;p/&gt;&lt;a href="http://vyzivus.blogspot.com/2011/02/ruby-sucks.html"&gt;Keďže&lt;/a&gt; už &lt;a href="http://vyzivus.blogspot.com/2011/02/ruby-sucks-2.html"&gt;vieme&lt;/a&gt;, že &lt;a href="http://vyzivus.blogspot.com/2011/03/ruby-sucks-3.html"&gt;Rails&lt;/a&gt; &lt;a href="http://vyzivus.blogspot.com/2011/03/ruby-sucks-4.html"&gt;je na&lt;/a&gt; &lt;a href="http://vyzivus.blogspot.com/2011/03/ruby-sucks-5.html"&gt;hovno&lt;/a&gt;, pozrime sa na Javu. Viem si predstaviť ľudí, ktorí boli nútení programovať v Struts/JSP/JSF/J2EE4, potom objavili Rails a odvtedy dštia síru a oheň na Javu. Ale, vážení: to, že Struts, JSP, JSF a J2EE4 je príšerný odpad neznamená, že Java je naprd. Java, to je aj JVM, ktoré je tak cca 700x rýchlejšie ako Ruby; to je aj funkčný autocompletion - Railsista, ktorý dostane amnéziu, v podstate skončil. Tiež chápem frustráciu linuxáka, ktorý v spánku clusteruje PHP a Rails s použitím svojich ultracool linux nástrojov, a potom príde nejaká Java, ktorá to má celé úplne inak, alebo nedajbože WebSphere (Apache satanas). Ale, malá drobnosť - Javovský clustering funguje aj na Windows. (Až na WebSphere. To je taká mordorská technológia, ktorá po kontakte mení ľudí na škretov)&lt;p/&gt;Majme teda normálny softwarový stack Wicket a JavaEE5. Nielen že sa veľký projekt, postavený na takomto základe, ťažšie zvrhne na Big Ball of Mud ako Rails, ale trúfam si povedať, že sa aj rýchlejšie developuje. Jasné že všetko závisí od externých faktorov ako kvalita programátorov, termíny, či je šéf úplný alebo len polovičný chuj atď. Ale pri rovnakých podmienkach je imho Wicket+JavaEE5 óóóveľa produktívnejšie, howgh.&lt;p/&gt;Späť k holy wars. Začneme hneď zostra:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Checked exceptions are cancer - súhlas :-)&lt;/li&gt;&lt;li&gt;Also you have to wait on the jvm to wake up. Lenže potom to beží 700x rýchlejšie ako Ruby, čo znamená, že nemusím každú pičovinu písať natívne v C, ale môžem použiť napríklad multiplatformové H2 miesto sqlite (inak: nemusím použiť imagemagick na blbé resizovanie obrázkov)&lt;/li&gt;&lt;li&gt;The simplest crash results in the most bizarre 25 level deep stack traces. Tiež pozri: Rails backtraces.&lt;/li&gt;&lt;li&gt;Not to mention you're trapped in Java land and doing anything interesting always seems to require native methods. Čítaj: rekompiluješ ako blbec pre každý OS. A čo, kurva, znamená "anything interesting"? Pre mňa je interesting, že mám multiplatformovú databázu H2, čo Ruby nemá (sqlite sa nepočíta, nie je v Ruby a nie je ľahko prenositeľná)&lt;/li&gt;&lt;/ul&gt;Tie ďaľšie komenty nestoja ani za fajku močky, jedine snáď že Swing je fakt naprd, lebo nevyzerá natívne a je pomalý. SWT je síce rýchle a natívne, ale je bugové a naprd :)&lt;p/&gt;Suma sumárum, Ruby je fakt lepší bash, ale to neznamená, že v tom budem robiť weby. Šťastné a veselé.&lt;br /&gt;&lt;blockquote&gt;“There are only two kinds of languages: the ones people complain about and the ones nobody uses.” — Bjarne Stroustrup&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8140390123197662377?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8140390123197662377/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8140390123197662377' title='5 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8140390123197662377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8140390123197662377'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/12/ktor%C3%BD-jazyk-nezn%C3%A1%C5%A1ate.html' title='Ktorý jazyk neznášate?'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6777095191354076455</id><published>2010-08-14T02:31:00.000-07:00</published><updated>2010-08-14T02:31:56.726-07:00</updated><title type='text'>Dynamické jazyky 2</title><content type='html'>Ako tak čítam blog o &lt;a href="http://www.coderoshi.com/2007/09/5-reasons-static-typing-sucks.html"&gt;tom, ako statické typovanie saje&lt;/a&gt;, začínam mať dojem, že ten blog mohol končiť vetou:&lt;blockquote&gt;In my opinion type safety has one shining virtue: to solidify APIs.&lt;/blockquote&gt;Táto veta sumarizuje to, čo statické typovanie má, a kvák typing mať nemôže. No, you can't have a pony.&lt;p/&gt;Venn, tu máš odpoveď:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;But I maintain that a real type-safe system would have no need for ClassCastException): majme objekt Producer&lt;R, P&gt; s jednou metódou &lt;code&gt;P produce(R)&lt;/code&gt;, kde typ P závisí od typu R, čojaviem &lt;code&gt;P=f(R)&lt;/code&gt;. Tá funkcia f môže byť ľubovoľne zložitá, čím by sa do typového systému zaniesla zbytočná komplexita. Takže, v rozumne jednoduchom typovom systéme nemôžme pokryť všetky možnosti, musíme niekedy použiť Object a castovať. No a čo. If it works well in 90% of cases and is simple enough, it's good.&lt;/li&gt;&lt;li&gt;Keyboard typing is a bad thing: Duby a Scala má type inference. Java je viac ukecaná ako Ruby, to je pravda.&lt;/li&gt;&lt;li&gt;Wrestling with type system: možno by si sa mal pozrieť na typový systém aspektom "dobrý sluha": dokáže nájsť hlúpe chyby, máš auto-completion v IDE, máš kvalitný refactoring. Nehovor mi, že Rubysti sú úbermenši a nepotrebujú refactoring. A ten, kto tvrdí, že nepotrebuje IDE, je prvé tri roky zahrabaný v dokumentácii, kým sa nenaučí mená najpoužívanejších metód.&lt;/li&gt;&lt;li&gt;2. Static types are unreal. Jednoduchá odpoveď: dynamické interfaces (Scala). Objektu sa dá za behu prifariť interface, ktorý nemá v implements klauzule, musí ale mať všetky potrebné metódy aj so správnymi parametrami. Hop, a máš dynamický jazyk s funkčným auto-completion, čo kvák typingu rozhodne chýba. Plus, drahý Vann, ak si taký ultradynamický, skús nepoužívať instance_of v Ruby :-)&lt;/li&gt;&lt;li&gt;3. Static typing requires you to know the future? Omyl. Máš proste zlý objektový návrh. Nepočítal si s RugbyBall, musíš robiť refactoring. Jáj, ty máš dynamický jazyk? No... tak držím palce :-)&lt;/li&gt;&lt;li&gt;5. Valid logic is rejectable: použi Number. Alebo dynamické interfaces.&lt;/li&gt;&lt;/ul&gt;Vann má ale pravdu, ak hovorí o jazyku bez dynamických interfaces (zrejme hovorí o Jave, aj keď to nikde explicitne neuviedol).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6777095191354076455?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6777095191354076455/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6777095191354076455' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6777095191354076455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6777095191354076455'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/08/dynamicke-jazyky-2.html' title='Dynamické jazyky 2'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-3236541536967832310</id><published>2010-08-13T06:27:00.000-07:00</published><updated>2010-08-13T23:52:46.376-07:00</updated><title type='text'>Dynamické jazyky</title><content type='html'>&lt;small&gt;alebo čo sa stane, keď začne skalný Javista a zástanca silne typových jazykov programovať v Ruby.&lt;/small&gt;&lt;p/&gt;Nechápte ma zle: dynamické jazyky majú svoje pevné miesto, napríklad pri jednoduchom skriptovaní. Neviem si predstaviť, že by napríklad Bash otravoval s typmi. Preto Javu na skriptovanie nepoužívam, aj keď by sa teoreticky dala (Beanshell). Veď ani motykou sa neškrabem po zadku, ako hovorievala babka. Na druhej strane, Ruby sadne na skriptovanie ako zadok na šerbeľ. V podstate môžem zabudnúť awk, sed (to nebude problém, sed som nikdy nevedel :-) a veselo skriptovať v Ruby - je to jednoduchý a mocný nástroj.&lt;p/&gt;Čo sa však stane, keď niekto chytí Ruby a spácha v tom kompletný webový framework (Rails), s tranzakciami, O/R mapovaním, podporou na testy? Na prvý pohľad paráda - všetko je pripravené, dá sa to rýchlo spustiť, po opatrnom oťukávaní radostné zistenie, že server netreba reštartovať po každej kravine, čistá paráda, kruci to už je 8 ráno? Do prdele.&lt;br /&gt;&lt;h4&gt;Čistá paráda&lt;/h4&gt;Človek skáče od nadšenia ako koza po tráve, vývoj ide rýchlo a prakticky sám. Zisťujem, čo mi vlastne z Javy vôbec nechýba: nemusím písať všade &lt;code&gt;throws&lt;/code&gt; ako magor, konštrukcie ako &lt;blockquote&gt;raise "&amp;gt;=0" if x&amp;lt;0&lt;/blockquote&gt;prekvapivo zjednodušujú a sprehladňujú kód. Oproti Jave je treba asi tak 20x menej blokov {}. Geniálny nápad je &lt;code&gt;freeze&lt;/code&gt; - objekt zmrazí a spraví z neho immutable; Builder pattern (napr. StringBuilder) je nepotrebný.&lt;p/&gt;Mám pocit, že vývoj je zábavnejší - classy sa tak nejak ľahšie definujú, preto sa lepšie používajú. V Jave som sa niekedy prichytil, ako sa bránim vyrobeniu novej triedy - keď som si predstavil všetku tu mentálnu námahu našpecifikovať kompletný workflow, popísať javadocy, premyslieť typy, no čo budem hovoriť, radšej som šiel na pivo a nechal to na pondelok.&lt;br /&gt;&lt;h4&gt;A do prdele&lt;/h4&gt;Pravdepodobne nie som sám, komu sa nechce všetko prešpekulovať do posledného detailu, kým to vypustí medzi ľudí. Človek na to príde vtedy, keď sa pokúsi takúto vec použiť, je to miestami nedotiahnuté, až sa to bráni normálnemu použitiu ako znásilňovaný pes (nie že by bolo normálne znásilňovať psa of course). Nič nie je lepšie ako príklad: máme aplikáciu v Rails 2.3.8, ktorá nefunguje na Enterprise Ruby, lebo medveď (a &lt;code&gt;mongrel start&lt;/code&gt;) spadne. Rails 2.3.5 beží s Enterprise Ruby, ale už nie s vašou aplikáciou. Správne, výpustky nie sú korektne kompatibilné. No čo už, však na Ruby 1.8.7_p249 to beží, kým nebudem upgradovať, som v tučnej pohode.&lt;p/&gt;Testy: testy sú od prirodzenia v každej Rails aplikácii, pretože tam byť musia. Kvôli absencii typov musím testovať aj úplné hovadiny, ktoré by mi odchytil aj kompiler, zbúchaný v rámci hodinového cvičenia postihnutých detí.&lt;p/&gt;&lt;h4&gt;Absencia typov&lt;/h4&gt;Zmiešané pocity. Na jednej strane mi z Javy vôbec nechýba throws, takže sa definitívne prikláňam k prúdu "všetky exceptions sú Runtime, nebudem brať throws nadarmo do úst!". Aj orgazmus z Javáckych Generics prechádza pri pohľade na &lt;code&gt;Map&amp;lt;Integer, List&amp;lt;Producer&amp;lt;? extends Callable&amp;lt;List&amp;lt;String&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt; (mám tam dosť uzatváracích zobákov, alebo tam ešte zo šesť naložím?).&lt;p/&gt;Na strane druhej, niekto uploaduje súbor na vašu Rails aplikáciu. Nikde nie je napísané, aký objekt vám príde, takže to treba spustiť a zistiť v rutime. Je to lietadlo? Je to superman? Je to &lt;code&gt;Tempfile&lt;/code&gt;, great. Čo s ním? V dokumentácii Rails nič také nie je.  Na http://apidock.com/ruby/ je zoznam metod, sexi! Ako sa zisťuje meno toho fajlu? V dokumentácii nič, dám si teda metódy v runtime vypísať cez &lt;code&gt;.methods&lt;/code&gt;, zasa nič, potom mi kolega prezradí, že cez &lt;code&gt;.original_filename&lt;/code&gt;. Kurva a to mám odkiaľ zobrať? V dokumentácii ani v zozname metód tá mrcha nie je, napriek tomu funguje! Čo to je tajomstvo predávané z pokolenia na pokolenie, v žiadnom historickom ani inom anále ani zmienka!&lt;p/&gt;Fajn, neriešim, sejvnime to do databázy, nech je pokoj. Videl som tam metódu &lt;code&gt;read&lt;/code&gt;, tá funguje super. Problém je, že tá to celé načíta do pamäte, čo zrovna nie je trikrát fit. Čo tak &lt;code&gt;copy&lt;/code&gt;? Super, funguje, o týždeň ale prestáva. Čo je? Po urputnom bádaní zistím, že keď ide o súbor menší ako 15Kb, zrazu to nie je Tempfile ale nejaká iná trieda, ktorá nemá copy! Kvák typing v praxi, veru hej, oslavujem do druhej, boha. Ešteže ani auto-completion nefunguje poriadne (lebo nemôže).&lt;p/&gt;Momentálne ako riešenie mi vychádza voliteľné typy, kľudne aj len ako anotácie, napríklad ako v novom Pythone. Aspoň bude autocompletion, keď už nič iné.&lt;p/&gt;Ruby je fajn, ale dokáže nasrať. Ešte sa k tomu niekedy vrátim :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-3236541536967832310?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/3236541536967832310/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=3236541536967832310' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3236541536967832310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3236541536967832310'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/08/dynamicke-jazyky.html' title='Dynamické jazyky'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-3348970662352809844</id><published>2010-07-08T08:04:00.000-07:00</published><updated>2010-12-14T01:30:30.853-08:00</updated><title type='text'>Init skripty v Linuxe</title><content type='html'>Máme jednoduchý problém: server, ktorý nie je daemon (beží v konzole a čosi píše, až kým ho nezabijete CTRL+C), treba spustiť pri boote Linuxu, čiže treba napísať init skript. Je neuveriteľné, aké zložité je takúto kravinu spraviť poriadne. Takže poporadí:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;daemon - nedokáže zmeniť cwd&lt;/li&gt;&lt;li&gt;start-stop-daemon - nedokáže robiť redirect stdout&lt;/li&gt;&lt;li&gt;&lt;a href="http://god.rubyforge.org/"&gt;god&lt;/a&gt; - to je snáď jediný program na štartovanie a stopnutie procesov, ktorý má &lt;a href="http://blog.bradgessler.com/use-monit-with-rails-not-god"&gt;problém so štartovaním a stopovaním procesov&lt;/a&gt;, navyše sám padá, kvôli memory leakom v Ruby. Absurdné.&lt;/li&gt;&lt;/ul&gt;Našťastie Gábor zasiahol v pravý čas a zoznámil ma so &lt;code&gt;supervisor&lt;/code&gt;-om, ktorý proste funguje a aj sa ľahko konfiguruje. Odporúčam.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-3348970662352809844?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/3348970662352809844/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=3348970662352809844' title='2 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3348970662352809844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3348970662352809844'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/07/init-skripty-v-linuxe.html' title='Init skripty v Linuxe'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8766165842570951750</id><published>2010-06-08T00:04:00.000-07:00</published><updated>2010-06-08T00:04:36.830-07:00</updated><title type='text'>Android tips</title><content type='html'>Ever encountered?&lt;br /&gt;&lt;blockquote&gt;java.lang.RuntimeException: Unable to start activity ComponentInfo{sk.baka.aedict/sk.baka.aedict.NotepadActivity}: java.lang.NullPointerException&lt;br /&gt;  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401)&lt;br /&gt;  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)&lt;br /&gt;  at android.app.ActivityThread.access$2100(ActivityThread.java:116)&lt;br /&gt;  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)&lt;br /&gt;  at android.os.Handler.dispatchMessage(Handler.java:99)&lt;br /&gt;  at android.os.Looper.loop(Looper.java:123)&lt;br /&gt;  at android.app.ActivityThread.main(ActivityThread.java:4203)&lt;br /&gt;  at java.lang.reflect.Method.invokeNative(Native Method)&lt;br /&gt;  at java.lang.reflect.Method.invoke(Method.java:521)&lt;br /&gt;  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)&lt;br /&gt;  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)&lt;br /&gt;  at dalvik.system.NativeStart.main(Native Method)&lt;br /&gt;Caused by: java.lang.NullPointerException&lt;br /&gt;  at android.widget.TabHost.addTab(TabHost.java:206)&lt;br /&gt;  at sk.baka.aedict.NotepadActivity.onCreate(NotepadActivity.java:118)&lt;br /&gt;  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)&lt;br /&gt;  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)&lt;br /&gt;... 11 more&lt;/blockquote&gt;This meaningless NullPointerException (GOOGLE, PLEASE PROVIDE SOURCES IN SDK DOWNLOAD) says that you forgot to call TabHost.setup() before adding tabs. Nice, isn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8766165842570951750?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8766165842570951750/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8766165842570951750' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8766165842570951750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8766165842570951750'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/06/android-tips.html' title='Android tips'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-7252604627176007888</id><published>2010-06-06T05:28:00.000-07:00</published><updated>2010-06-06T05:28:31.680-07:00</updated><title type='text'>Determinate ProgressBar on Android</title><content type='html'>This is surprisingly hard to find out, so I'm publishing it here. To switch the ProgressBar from indeterminate to determinate mode, it is not sufficient to set &lt;code&gt;android:indeterminate=false&lt;/code&gt; - you have to add a &lt;code&gt;style="?android:attr/progressBarStyleHorizontal"&lt;/code&gt; attribute:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;progressbar android:id="@+id/progress" android:layout_width="fill_parent" android:layout_height="wrap_content"&lt;br /&gt;style="?android:attr/progressBarStyleHorizontal" android:progress="0" android:max="100"/&amp;gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-7252604627176007888?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/7252604627176007888/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=7252604627176007888' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7252604627176007888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7252604627176007888'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/06/determinate-progressbar-on-android.html' title='Determinate ProgressBar on Android'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-2651092364771789787</id><published>2010-05-28T05:47:00.000-07:00</published><updated>2010-05-28T05:47:27.423-07:00</updated><title type='text'>Btrfs bude v Maverick Meerkat!</title><content type='html'>&lt;a href="https://blueprints.launchpad.net/ubuntu/+spec/foundations-m-btrfs-support"&gt;Tučné! :-)&lt;/a&gt;. &lt;a href="http://oubiwann.blogspot.com/2010/05/ubuntu-foundations-and-maverick-meerkat.html"&gt;Na čo nové sa môžeme tešiť&lt;/a&gt; v Ubuntu 10.10 Maverick Meerkat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-2651092364771789787?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/2651092364771789787/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=2651092364771789787' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2651092364771789787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2651092364771789787'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/05/btrfs-bude-v-maverick-meerkat.html' title='Btrfs bude v Maverick Meerkat!'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6642494263517752199</id><published>2010-05-04T00:56:00.000-07:00</published><updated>2010-05-26T01:37:04.097-07:00</updated><title type='text'>Eclair na HTC Magic!</title><content type='html'>Trikrát hurá! Po tradičnej ignorácii od firmy HTC zobrali spravodlivosť do vlastných rúk chalani z &lt;a href="http://www.cyanogenmod.com/"&gt;Cyanogen&lt;/a&gt; a priniesli funkčný Android 2.1 na HTC Magic. Je momentálne v testovacej fáze, ale je stabilný a subjektívne rýchlejší ako 1.6. Tak hajde &lt;a href="http://wiki.cyanogenmod.com/index.php/Upgrading_From_CM_4.2_or_other_rooted_ROMS_to_5.0.x(Dream/Sapphire)"&gt;upgradovať&lt;/a&gt;!&lt;br /&gt;Edit: Jedna &lt;a href="http://code.google.com/p/cyanogenmod/issues/detail?id=1337"&gt;mucha&lt;/a&gt; sa predsa len našla, ale už je opravená.&lt;p/&gt;Edit 2: &lt;a href="http://www.cyanogenmod.com/home/cyanogenmod-5-0-7-for-dream-and-magic"&gt;Vyšla finálna 5.0.7!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6642494263517752199?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6642494263517752199/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6642494263517752199' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6642494263517752199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6642494263517752199'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/05/eclair-na-htc-magic.html' title='Eclair na HTC Magic!'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6666709123136263959</id><published>2010-04-19T04:22:00.000-07:00</published><updated>2010-04-19T10:46:04.860-07:00</updated><title type='text'>Flash a Apple</title><content type='html'>Rovno a bez okolkov sa priznám, že na Flash sa pozerám s &lt;a href="/2009/09/flash.html"&gt;veľkou nechuťou&lt;/a&gt;. Je to &lt;a href="http://www.flickr.com/photos/adriannier/4275358738/"&gt;pomalé&lt;/a&gt; neohrabané padavé monštrum, &lt;a href="http://www.networkworld.com/news/2009/121409-adobe-flashs-security-woes-how.html"&gt;deravé&lt;/a&gt; ako babkin cedník, a často použité &lt;a href="http://flashsucks.org/"&gt;nesprávne&lt;/a&gt;. V podstate Flash používam len na youtube, ináč je blokovaný - stalo sa mi, že flashové reklamy vyťažili komplet celý procesor a o hodinu bolo po baterke. Keď webové stránky budú vedieť prehrávať videá cez html5 (po vyriešení vojny Vorbis-H264; istá nádej spočíva v Googli a jeho kodeku VP8, ktorý je už síce &lt;a href="http://newteevee.com/2010/04/12/google-to-open-source-vp8-for-html5-video/"&gt;open-source&lt;/a&gt;, otázne je, ako je to s patentami), celý flash plugin slávnostne poletí zo všetkých mojich počítačov.&lt;br /&gt;&lt;p/&gt;Preto sa v spore &lt;a href="http://daringfireball.net/2010/01/apple_adobe_flash"&gt;Apple-Adobe&lt;/a&gt; hrdo staviam na stranu Apple, pretože hlavne vďaka Applu &lt;a href="http://www.reddit.com/r/programming/comments/bszpk/android_vs_iphone/c0oez02"&gt;prechádzajú&lt;/a&gt; portály z binárneho svinstva menom Flash na hardvérovo akcelerované html5 prehrávanie videa.&lt;br /&gt;&lt;p/&gt;Edit: na Lupe vyšlo veľmi pekné &lt;a href="http://www.lupa.cz/clanky/apple-a-adobe-valka-o-mobilni-platformu/"&gt;zhrnutie&lt;/a&gt; tejto vojny, a ja len odcitujem krásnu vetu:&lt;br /&gt;&lt;blockquote&gt;mobilní platformy nemají tolik výkonnostních rezerv, aby si mohly dovolit Adobe produkty&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6666709123136263959?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6666709123136263959/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6666709123136263959' title='2 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6666709123136263959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6666709123136263959'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/04/flash-apple.html' title='Flash a Apple'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-4339159035208454795</id><published>2010-04-19T00:40:00.000-07:00</published><updated>2010-04-19T00:40:34.888-07:00</updated><title type='text'>Odstraňovanie funkcionality z Gnome 2.30</title><content type='html'>Ak sa pokúšate nájsť konfiguračnú voľbu "Menus &amp;amp; Toolbars" v Properties, hľadáte márne - Gnome chlapci usúdili, že editovateľné klávesové skratky na položky v menu sú vlastne zbytočné. Predpokladám, že ide o súčasť čistiacich prác pre Gnome 3.0, kde bolo zistené, že samotné menu ako také je príliš komplikované a bude odstránené, v súlade s &lt;a href="http://www.osnews.com/permalink?416407"&gt;očakávanými&lt;/a&gt; zjednodušeniami v Nautilus.&lt;br /&gt;&lt;br /&gt;Okej, ja viem, že už nie je prvý apríl, ale nedalo mi trochu si zavŕtať :-) Zjednodušenia GUI vítam, na druhej strane teraz im za obeť padla funkcionalita, ktorá mi bude chýbať.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-4339159035208454795?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/4339159035208454795/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=4339159035208454795' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4339159035208454795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4339159035208454795'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/04/odstranovanie-funkcionality-z-gnome-230.html' title='Odstraňovanie funkcionality z Gnome 2.30'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-3931342550553746260</id><published>2010-04-18T04:07:00.000-07:00</published><updated>2010-04-18T04:07:44.587-07:00</updated><title type='text'>Lucid Lynx a Evolution 2.30</title><content type='html'>Keďže Evolution 2.30 &lt;a href="http://chenthill.wordpress.com/2010/04/02/evolution-2-30-released/"&gt;bol okrem iného prečistený&lt;/a&gt; od použitia &lt;a href="http://www.advogato.org/person/mathrick/diary/26.html"&gt;zlej, zlej corby&lt;/a&gt;, podujal som sa ho vyskúšať na svojom experimentálnom Lucid Lynx. Keďže vo finálnom Lynx &lt;a href="http://ubuntuforums.org/showthread.php?t=1445897"&gt;bude staršia 2.28&lt;/a&gt;, bolo treba použiť &lt;a href="https://launchpad.net/~francesco-marella/+archive/unstable-evolution"&gt;PPA&lt;/a&gt;. A tu nastal problém: Evolution 2.30 mi proste padá. Otázka znie, ako bezbolestne a jednoducho downgradnúť naspäť na 2.28? apk utility to neumožňujú, a odinštalácia by odstránila kopu iných balíkov. Riešením je použiť skript &lt;a href="https://launchpad.net/~xorg-edgers/+archive/ppa/+packages"&gt;PPA purge&lt;/a&gt; - netreba ani inštalovať DEB, stačí rozbaliť tgz a v ňom už skript nájdete.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-3931342550553746260?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/3931342550553746260/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=3931342550553746260' title='2 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3931342550553746260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3931342550553746260'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/04/lucid-lynx-evolution-230.html' title='Lucid Lynx a Evolution 2.30'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-7722528050758720283</id><published>2010-04-14T06:45:00.000-07:00</published><updated>2010-04-14T06:46:11.307-07:00</updated><title type='text'>SSD disk na Lucid Lynx</title><content type='html'>Zasa som raz neodolal chuti na nový hardware a kúpil som si novú nádheru: &lt;a href="http://www.alza.sk/intel-x25-v-40gb-ssd-d154448.htm"&gt;40gb SSD Intel X25-V&lt;/a&gt;. Namontovať disk do desktopu bola hračka, keďže Intel pribaľuje montážny kit na 3,5" šachty. Prekopírovať systém zo starého disku na nový bolo tiež jednoduché, až na inštaláciu GRUBu, ktorý tradične vzdorovito odmietal nabootovať. Keď sa mu to však konečne podarilo, mohol som sa oprieť do kresla a vychutnať si brutálne zrýchlenie systému. Boot sa zrýchlil na 11 sekúnd, a hdparm hlási sexi read speed 188MB/s:&lt;br /&gt;&lt;blockquote&gt;# hdparm -Tt /dev/sda&lt;br /&gt;&lt;br /&gt;/dev/sda:&lt;br /&gt;Timing cached reads:   4488 MB in  2.00 seconds = 2244.09 MB/sec&lt;br /&gt;Timing buffered disk reads:  566 MB in  3.01 seconds = 188.26 MB/sec&lt;/blockquote&gt;Počítač je navyše oveľa tichší, to tak trochu súvisí s tým, že starý disk vrčal ako pes - bol to podľa mňa suverénne najhlučnejší disk z cenníka.&lt;p/&gt;Okej, máme tučný disk, čo teraz? Rozumy môžeme zobrať z &lt;a href="http://www.ocztechnologyforum.com/forum/showthread.php?54379-Linux-Tips-tweaks-and-alignment"&gt;OCZ fóra&lt;/a&gt;, v podstate sú dva: scheduler a TRIM. Nastaviť scheduler z &lt;code&gt;rc.local&lt;/code&gt; mi nefungovalo, takže sa išlo na vec cez grub: v &lt;code&gt;/etc/default/grub&lt;/code&gt; treba zmeniť jeden riadok na &lt;code&gt;GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=deadline"&lt;/code&gt; a spustiť &lt;code&gt;update-grub&lt;/code&gt;.&lt;p/&gt;TRIM, to je iná káva. V prvom rade treba updatnúť firmware disku aspoň na 02HD, pretože pôvodný verzie 02HB má TRIM vypnutý. Verziu zistíme cez&lt;br /&gt;&lt;blockquote&gt;$ dmesg|grep "INTEL SSD"&lt;br /&gt;[    1.620245] ata1.00: ATA-7: INTEL SSDSA2M040G2GC, 2CV102HB, max UDMA/133&lt;/blockquote&gt;Firmvér sa updatuje jednoducho, &lt;a href="http://www.intel.com/go/ssdfirmware/"&gt;zo stránky Intelu&lt;/a&gt; stiahneme ISO image CD, vypálime a nabootujeme z neho. Zapnutie TRIM overíme cez hdparm:&lt;blockquote&gt;$ sudo hdparm -I /dev/sda|grep -i trim&lt;br /&gt;* Data Set Management determinate TRIM supported&lt;/blockquote&gt;ext4 filesystém podporuje TRIM až od kernelu 2.6.33, takže ho musíme nainštalovať (&lt;a href="http://www.khattam.info/2010/02/06/installing-kernel-2-6-33-to-lucid-lynx-ubuntu-10-04-without-compiling/"&gt;návod&lt;/a&gt;) a zapnúť: do &lt;code&gt;/etc/fstab&lt;/code&gt; treba pridať flag &lt;code&gt;discard&lt;/code&gt;:&lt;br /&gt;&lt;blockquote&gt;UUID=blablabla /               ext4    defaults,noatime,nodiratime,discard  0       1&lt;/blockquote&gt;Funkčnosť TRIM môžeme overiť podľa &lt;a href="http://forums.gentoo.org/viewtopic-p-6228590.html?sid=c667264eed2adc8f163cab29fa869c6e#6228590"&gt;tohto návodu&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-7722528050758720283?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/7722528050758720283/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=7722528050758720283' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7722528050758720283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7722528050758720283'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/04/ssd-disk-na-lucid-lynx.html' title='SSD disk na Lucid Lynx'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-7943855053912197493</id><published>2010-03-24T12:18:00.000-07:00</published><updated>2010-03-24T12:28:12.442-07:00</updated><title type='text'>And now for something completely different</title><content type='html'>&lt;a href="http://stahovak.nova.cz/clanek/reklamy/arnoldovy-japonske-reklamy.html"&gt;Arnold Schwarzenegger doing Japanese commercials&lt;/a&gt;.&lt;p/&gt;Did I mentioned how easy is to &lt;a href="http://www.enemieslist.net/japanese/"&gt;learn Japanese&lt;/a&gt; (&lt;a href="http://www.manga.szm.com/Ucit_japonsky_fejton.htm"&gt;Slovak version&lt;/a&gt;)?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-7943855053912197493?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/7943855053912197493/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=7943855053912197493' title='1 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7943855053912197493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7943855053912197493'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/03/and-now-for-something-completely.html' title='And now for something completely different'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-4825782548069795630</id><published>2010-03-07T04:32:00.000-08:00</published><updated>2010-03-07T04:32:28.302-08:00</updated><title type='text'>Windows XP</title><content type='html'>Z nejakého podivného dôvodu má podľa štatistík až 65% počítačov nainštalovaný starý Windows XP. Nechápem, či ide o nejakú formu masochizmu ľudskej populácie, pretože je to podľa mňa momentálne suverénne najhorší OS.&lt;p/&gt;Za prvé, je najpomalší (na rozumne silnom stroji s 512MB a viac pamäte). Tento paradox mi vždy unikal - keďže Windows XP má nižšie nároky na hardvér, mal by s novým hardvérom bežať rýchlejšie, nie? Nie celkom. Windows XP má totiž tak mizerne spravenú správu pamäte, že swapuje a lezie na disk, aj keď vôbec nemusí, čím zdržiava od práce. Riešenie je hodiť swap do ramdisku, ale to je proste absurdné.&lt;p/&gt;Za druhé, XP nemajú virtuálne desktopy. Existujú síce nejaké riešenia, tie majú ale vždy nejakú chybu a kvalitou sa nevyrovnajú virtuálnym desktopom v Linuxe.&lt;p/&gt;Za tretie, funkcia Show Desktop funguje veľmi pokútne a náhodne vykoná jednu z nasledovných vecí:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ukáže desktop (to je fajn :-)&lt;/li&gt;&lt;li&gt;Ukáže desktop a schová taskbar&lt;/li&gt;&lt;li&gt;Neurobí vôbec nič&lt;/li&gt;&lt;li&gt;Taskbar zmrzne&lt;/li&gt;&lt;/ul&gt;Za štvrté, cmd.exe je najdebilnejší terminál na svete, v podstate sa dá povedať, že ten istý cmd.exe z Windows 2000 je aj vo Windows 7. Nedá sa horizontálne resizovať, selektovanie do štvorca je nebetyčná blbosť, atď.&lt;p/&gt;Za piate, vírusy, spyware, pravidelné bluescreeny, ...&lt;p/&gt;Kopa diskutérov sa oháňa tvrdením, že Windows je lepší, lebo sa v ňom dá strihať video a &lt;a href="http://ekonomika.sme.sk/diskusie/1647377/2/12422997/Windows-7-je-najrychlejsie-predavany-operacny-system.html#12422997"&gt;beží tam nejaký "seriózny grafický program"&lt;/a&gt;. Predstavte si, že existujú ľudia, ktorí nepotrebujú strihať video a nechýbajú im seriózne grafické programy. Naopak mne vadia vyššie uvedené body. &lt;a href="http://ekonomika.sme.sk/diskusie/dpl/12425191/Windows-7-je-najrychlejsie-predavany-operacny-system.html"&gt;Môj črep&lt;/a&gt; je Core 2 Quad s 8GB RAM. Vadí mi, že XP mi hádže chybové hlášky, ktoré sa nedajú vygoogliť (napríklad po náhodnom časovom intervale prestane fungovať WiFi karta a XP sa odmietajú pripojiť na router s krásnou hláškou Cannot connect).&lt;p/&gt;&lt;blockquote&gt;Windows is for those, who don't want to know why their compuer does not work. &lt;br /&gt;Mac is for those, who don't want to know why their computer works. &lt;br /&gt;Linux is for those, who want to know why their computer works&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-4825782548069795630?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/4825782548069795630/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=4825782548069795630' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4825782548069795630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4825782548069795630'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/03/windows-xp.html' title='Windows XP'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-2541212603820918127</id><published>2010-02-27T02:22:00.000-08:00</published><updated>2010-02-27T02:22:46.274-08:00</updated><title type='text'>Looking for a graphic designer for the Aedict application</title><content type='html'>I am looking for a graphic designer to provide nice, simple and clean design for the application. The design should be:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fast - no sexi transparent background slowing down the scrolling&lt;/li&gt;&lt;li&gt;Clean - control components must be clearly visible and easily clickable&lt;/li&gt;&lt;li&gt;Simple - no extravagant graphics taking up a half of screen. The application has to retain a simple look.&lt;/li&gt;&lt;/ul&gt;Some &lt;a href="http://www.mrbass.org/iphone/japanese/dictionary/"&gt;examples&lt;/a&gt; - the Kotoba! dictionary looks very nice. Please feel free to &lt;a href="mailto:aedict@baka.sk"&gt;contact me&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-2541212603820918127?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/2541212603820918127/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=2541212603820918127' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2541212603820918127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2541212603820918127'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/02/looking-for-graphic-designer-for-aedict.html' title='Looking for a graphic designer for the Aedict application'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-1452539004291600530</id><published>2010-02-02T10:08:00.000-08:00</published><updated>2010-02-02T10:08:40.394-08:00</updated><title type='text'>Kenai is dead</title><content type='html'>Okay so it is now official: Oracle will kill Kenai in the near future. I was a bit hoping that there will be a free Hudson service running on Kenai someday... Well, not every dream necessarily come true :) Oh, and by the way, the WebVM project was renamed to WebMon and &lt;a href="http://code.google.com/p/webmon"&gt;moved to Google Code&lt;/a&gt; site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-1452539004291600530?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/1452539004291600530/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=1452539004291600530' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/1452539004291600530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/1452539004291600530'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/02/kenai-is-dead.html' title='Kenai is dead'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-4562366522625388493</id><published>2010-01-30T08:16:00.000-08:00</published><updated>2010-01-30T08:16:51.820-08:00</updated><title type='text'>Ultimate LiveCD</title><content type='html'>Predstavte si, že máte LiveCD, ktoré sem-tam použijete na záchranu dát. Na LiveCD je blbé to, že je read-only: neustále si nastavovať farbičky a shortcuty je otravné. Túto časť síce rieši LiveUSB pomocou writable home, ale to je len čiastočné riešenie. Niekedy zvyknú chýbať programy, ktoré človek sem-tam potrebuje, keď je fakt zle (gparted, btrfs-tools, ...). A, navyše, USB je pomalé. Tak čo s tým?&lt;p/&gt;Nápad za sto bodov a tri zlaté: čo tak miesto USB kľúča použiť USB harddisk a miesto babrania sa s USB Creatorom, nainštalovať tam úplne normálne a regulérne Ubuntu? Podľa &lt;a href="http://www.pendrivelinux.com/installing-ubuntu-to-a-usb-hard-drive/"&gt;návodov na nete&lt;/a&gt; by to malo byť možné, aj keď je to podľa mňa kravina: bootovateľné CD a USB predsa majú inú štruktúru ako disky, predsa tam nemajú MBR... No uvidíme.&lt;p/&gt;Takže, tradične nabootujeme z Karmic LiveCD, pripojíme USB harddisk a hajde inštalovať. V inštalátore ešte na drzovku vyrobíme swap a root partíciu. V polovici inštalácie sa pomodlíme, nech sa GRUB nainštaluje na USB harddisk, a nie na harddisk kompu. Našťastie, GRUB ide poslušne na USB harddisk. Nadšene dáme bootovať z USB, a vychutnáme si hrozivý root filesystem not found error. Juj či som krepý, ako by ho aj mohol nájsť, keď nemá loadnutú podporu pre usb-storage. Fajn, znovu do LiveCD, a&lt;br /&gt;&lt;pre&gt;sudo mount /dev/sdxy /mnt/root&lt;br /&gt;sudo mount --bind /dev /mnt/root/dev&lt;br /&gt;sudo mount -t proc none /mnt/root/proc&lt;br /&gt;sudo chroot /mnt/root /bin/bash&lt;br /&gt;echo "usb_storage" &gt;&gt;/etc/initramfs-tools/modules&lt;br /&gt;echo "ums_cypress" &gt;&gt;/etc/initramfs-tools/modules&lt;br /&gt;update-initramfs -u&lt;/pre&gt;Reboot, a ... haluz! Ono to fakt nabootuje! Prekopčíme home z domáceho kompu, doinštalujeme aplikácie, a zrazu sme v dôverne známom prostredí. Výhody si len pomaly začínam uvedomovať - v podstate si stačí so sebou brať harddisk, strčiť ho do cudzieho kompu a sme doma, môžeme robiť kľudne aj s internetbankingom. Alebo ak máte doma viac kompov, čojaviem jeden výkonný na prácu, a jeden tichý na hudbu a domáce kino, môžete Ubuntu nahodiť na rýchly tichý SSD disk a zahodiť hlučné staré harddisky z oboch kompov. Nemusíte synchronizovať dáta medzi kompami - všetko je na jednom disku, ktorý treba maximálne sem-tam zálohovať. Alebo sa chcete zahrať hru, ale na dostupnom kompe nie je nainštalovaná? Nahoďte ju do Ubuntu na disku, nabootujte z neho a hrajte! No čistý hip-hop!&lt;p/&gt;Na čo si treba dať pozor: keď updatujete balíček grub, automaticky sa nainštaluje do MBR na disk. Tento disk však nie je vybraný podľa UUID, ale podľa dev mena. Tu sa skrýva jedna veľká zákernosť, ktorú vysvetlím na príklade: ak ste toto LiveHDD (dočasný pracovný názov) vyrobili na kompe s jedným harddiskom, grub sa bude natvrdo prepisovať na /dev/sdb. Ak updatnete grub na systéme s dvoma harddiskami, grub sa veselo nainštaluje na druhý interný harddisk a váś admin vás zderie z kože. Updaty kernelu a grubu ešte stále sledujem so stisnutým zadkom, aj keď doteraz sa Linux interného harddisku ani nedotkol.&lt;p/&gt;Ďaľší malý much: LiveHDD nebootuje na systéme s iným počtom diskov, na akom bol nainštalovaný :-). Zoberme predošlý prípad: problém je, že grub sa pokúša bootnuť z disku (hd1,2), ale LiveHDD je na (hd2,2) (je ako tretí harddisk, disky sú číslované od nuly. Dosť hlúpe je, že partície sú číslované od 1 - fakt úchvatný nápad). Nie je nič ľahšie ako zeditovať GRUB boot entry, opraviť správne riadok &lt;code&gt;set root=(hd1,2)&lt;/code&gt; a nabootovať cez CTRL+X.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-4562366522625388493?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/4562366522625388493/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=4562366522625388493' title='1 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4562366522625388493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4562366522625388493'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2010/01/ultimate-livecd.html' title='Ultimate LiveCD'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6809429846366600771</id><published>2009-12-27T10:39:00.000-08:00</published><updated>2009-12-27T10:39:49.355-08:00</updated><title type='text'>MHD v Bratislave strikes back</title><content type='html'>Asi pred mesiacom (konkrétne 29.11.2009) som sa pána Freša mailom opýtal, ako to teda myslí s MHD v Bratislave, keď je to, jeho slovami, "najpálčivejší problém":&lt;br /&gt;&lt;blockquote&gt;Vazeny pan Freso,&lt;br /&gt;  gratulujem k vitazstvu :) Chcem sa vas opytat, co konkretne planujete zmenit v MHD (kombinacia nadzemnej alebo podzemnej dopravy). Rad by som vedel, ci zmeny skoncia pri TEN-T, alebo sa pojde aj dalej a eventualne bude metrom alebo vlakom spojena aj Karlovka alebo Dubravka.&lt;br /&gt;Vdaka a drzim palce,&lt;br /&gt;Martin Vysny&lt;/blockquote&gt;Odpovede nikde, pár informácií, vyhrabateľných z &lt;a href="http://spravy.pravda.sk/odpovede.asp?t=FREO&amp;amp;strana=1"&gt;rozhovoru v Pravde&lt;/a&gt; sú:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Som za to, aby doprava v budúcnosti bola pod zemou. Je to však vízia, ktorej základy teraz položíme, ale realizovať sa bude až v budúcnosti.&lt;/li&gt;&lt;li&gt;Rekonštrukcia Hlavnej stanice je potrebná&lt;/li&gt;&lt;/ul&gt;To je síce fajn, ale opäť nič konkrétne - nevieme, či sa ten hnus s názvom Hlavná Stanica teda bude rekonštruovať alebo nie, a či "základy vízie dopravy pod zemou" siahajú nad rámec projektu TEN-T. Pán Frešo je ale županom len 4 dni, dajme mu teda ešte nejaký čas a uvidíme :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6809429846366600771?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6809429846366600771/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6809429846366600771' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6809429846366600771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6809429846366600771'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/12/mhd-v-bratislave-strikes-back.html' title='MHD v Bratislave strikes back'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-7579899144586398153</id><published>2009-12-14T05:31:00.000-08:00</published><updated>2009-12-14T05:34:26.627-08:00</updated><title type='text'>The S stands for Simple</title><content type='html'>&lt;small&gt;(Tento text dokonale vyjadruje, o čom sú celé slávne SOAP. Je síce trochu dlhší, ale rozhodne kratší ako celý SOAP-related cirkus. Pôvodný server už nefunguje a &lt;a href="http://209.85.129.132/search?q=cache:9hFvOZHL7NwJ:www.wanderingbarque.com/nonintersecting/2006/11/15/the-s-stands-for-simple/+%3C%3Chttp://72.249.21.88/nonintersecting/2006/11/15/the-s-stands-for-simple/&amp;amp;hl=sv&amp;amp;gl=se&amp;amp;strip=1"&gt;linka do internet cache&lt;/a&gt; je dlhšia ako moje nohy dokopy, preto to tu - ehm - copy-pastnem, s láskavou nevedomosťou autora Petea Laceyho)&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;There has been a long running debate in the Application Platform Services Group here at Burton Group between the REST people on one side and the SOAP people on the other. For the most part it mirrors the external debate. In one recent exchange, while discussing the complexity of SOAP and the web services framework, the SOAP side said, “Before all of the WS-* stuff, SOAP was actually simple. That’s what the ‘S’ stood for.”&lt;br /&gt;&lt;br /&gt;And now a history lesson. It’s the year 2000, a harried developer has a problem&lt;br /&gt;&lt;br /&gt;Developer: So, my boss was playing golf this weekend, and now I have to ‘quote, unquote’ SOAP-enable the enterprise, but I don’t know what SOAP is. Can you help, SOAP Guy?&lt;br /&gt;&lt;br /&gt;SOAP Guy: Sure thing. First, SOAP stands for Simple Object Access Protocol.&lt;br /&gt;&lt;br /&gt;Dev: So it’s simple?&lt;br /&gt;&lt;br /&gt;SG: Simple as Sunday, my friend.&lt;br /&gt;&lt;br /&gt;Dev: Okay, lay it on me.&lt;br /&gt;&lt;br /&gt;SG: Well, just like it says in the name, SOAP is used for accessing remote objects.&lt;br /&gt;&lt;br /&gt;Dev: Like CORBA?&lt;br /&gt;&lt;br /&gt;SG: Exactly like CORBA, only simpler. Instead of some complex transport protocol that no one will let traverse a firewall, we use HTTP. And instead of some binary message format we use XML.&lt;br /&gt;&lt;br /&gt;Dev: I’m intrigued. Show me how it works.&lt;br /&gt;&lt;br /&gt;SG: Sure thing. First ther’s the SOAP envelope. It’s pretty simple. It’s just an XML document consisting of a header and a body. And in the body you make your RPC call.&lt;br /&gt;&lt;br /&gt;Dev: So this is all about RPCs?&lt;br /&gt;&lt;br /&gt;SG: Absolutely. As I was saying, you make your RPC call by putting the method name and its arguments in the body. The method name is the outermost element and each sub-element is a parameter. And all the parameters can be typed as specified right here in Section 5 of the specification.&lt;br /&gt;&lt;br /&gt;Dev: (reads Section 5) Okay, that’s not too bad.&lt;br /&gt;&lt;br /&gt;SG: Now, when your service is deployed, you specify the endpoint.&lt;br /&gt;&lt;br /&gt;Dev: Endpoint?&lt;br /&gt;&lt;br /&gt;SG: Endpoint, the address of the service. You POST your SOAP envelope to the endpoint’s URL.&lt;br /&gt;&lt;br /&gt;Dev: What happens if I GET the endpoint’s URL?&lt;br /&gt;&lt;br /&gt;SG: Don’t know. Using GET is undefined.&lt;br /&gt;&lt;br /&gt;Dev: Hrrm. And what happens if I move the service to a different endpoint? Do I get a 301 back?&lt;br /&gt;&lt;br /&gt;SG: No. SOAP doesn’t really use HTTP response codes.&lt;br /&gt;&lt;br /&gt;Dev: So, when you said SOAP uses HTTP, what you meant to say is SOAP tunnels over HTTP.&lt;br /&gt;&lt;br /&gt;SG: Well, ‘tunnel’ is such an ugly word. We prefer to say SOAP is transport agnostic.&lt;br /&gt;&lt;br /&gt;Dev: But HTTP isn’t a transport, it’s an application protocol. Anyway, what other “transports” does SOAP support?&lt;br /&gt;&lt;br /&gt;SG: Well, officially none. But you can potentially support any of ‘em. And there’s lots of platforms that support JMS, and FTP, and SMTP.&lt;br /&gt;&lt;br /&gt;Dev: Does anyone actually use these other transports?&lt;br /&gt;&lt;br /&gt;SG: Uhm, no. But the point is you can.&lt;br /&gt;&lt;br /&gt;Dev: Fine. How ’bout this SOAPAction HTTP header, what’s that for?&lt;br /&gt;&lt;br /&gt;SG: To be honest, no one’s really sure.&lt;br /&gt;&lt;br /&gt;Dev: And these ‘actor’ and ‘mustUnderstand’ attributes, does anyone use those?&lt;br /&gt;&lt;br /&gt;SG: No. Not really. Just ignore those.&lt;br /&gt;&lt;br /&gt;Dev: All right, let me give it a shot.&lt;br /&gt;&lt;br /&gt;(time passes)&lt;br /&gt;&lt;br /&gt;Dev: Well, I could mostly make things work, but only if I stick with one SOAP stack. Also, I can’t say I like the idea of remote procedure calls and serializing objects.&lt;br /&gt;&lt;br /&gt;SG: Remote procedure calls! Serialized objects! Where did you get the impression that SOAP was about RPCs? SOAP is all about document-based message passing, my friend.&lt;br /&gt;&lt;br /&gt;Dev: But you just said –&lt;br /&gt;&lt;br /&gt;SG: Forget what I said. From here on in we pass around coarse-grained messages — you like that term, ‘coarse-grained?’ Messages that conform to an XML Schema. We call the new style Document/Literal and the old style RPC/Encoded.&lt;br /&gt;&lt;br /&gt;Dev: XML Schema?&lt;br /&gt;&lt;br /&gt;SG: Oh, it’s all the rage. Next big thing. Take a look.&lt;br /&gt;&lt;br /&gt;Dev: (Reads XML Schema spec). Saints preserve us! Alexander the Great couldn’t unravel that.&lt;br /&gt;&lt;br /&gt;SG: Don’t worry about it. Your tools will create the schema for you. Really, its all about the tooling.&lt;br /&gt;&lt;br /&gt;Dev: How are the tools gonna do that?&lt;br /&gt;&lt;br /&gt;SG: Well, they will reflect on your code (if possible) and autogenerate a compliant schema.&lt;br /&gt;&lt;br /&gt;Dev: Reflect on my code? I thought it was all about documents, not serialized objects.&lt;br /&gt;&lt;br /&gt;SG: Didn’t you hear me? It’s all about the tools. Anyway, we can’t expect you to write XML Schema and WSDL by hand. Besides, its just plumbing. You don’t need to see it.&lt;br /&gt;&lt;br /&gt;Dev: Whoa, back up. What was that word? Wizzdle?&lt;br /&gt;&lt;br /&gt;SG: Oh, haven’t I mentioned WSDL? W-S-D-L. Web Services Description Language. It’s how you specify the data types, parameter lists, operation names, transport bindings, and the endpoint URI, so that client developers can access your service. Check it out.&lt;br /&gt;&lt;br /&gt;Dev: (Reads WSDL spec). I trust that the guys who wrote this have been shot. It’s not even internally consistent. And what’s with all this HTTP GET bindings. I thought GET was undefined.&lt;br /&gt;&lt;br /&gt;SG: Don’t worry about that. Nobody uses that. Anyway, your tools will generate a WSDL, and in the WSDL will be the schema.&lt;br /&gt;&lt;br /&gt;Dev: But shouldn’t it be the other way ’round? Shouldn’t I design the contract first and then generate the code?&lt;br /&gt;&lt;br /&gt;SG: Well, yeah, I guess that sounds right in principle. But that’s not so easy to do, and very few SOAP stacks support WSDL-first development. Just let the tools worry about it.&lt;br /&gt;&lt;br /&gt;Dev: One more question. If we’re now passing around XML Schema compliant messages, where do you specify the operation name?&lt;br /&gt;&lt;br /&gt;SG: Well, remember that SOAPAction HTTP header? Most people are putting it there.&lt;br /&gt;&lt;br /&gt;Dev: Most people?&lt;br /&gt;&lt;br /&gt;SG: Well, this new style isn’t actually written down anywhere.&lt;br /&gt;&lt;br /&gt;Dev: I’ll also note that your entire industry is built around ambiguous, sometimes erroneous, and definitely not standardized specifications. In fact, the SOAP and WSDL specs are just W3C Notes, not even working drafts.&lt;br /&gt;&lt;br /&gt;SG: We’re working on that.&lt;br /&gt;&lt;br /&gt;Dev: Will this give me the interoperability I’ve been promised?&lt;br /&gt;&lt;br /&gt;SG: Absolutely.&lt;br /&gt;&lt;br /&gt;Dev: I’ll try it out.&lt;br /&gt;&lt;br /&gt;(Time passes)&lt;br /&gt;&lt;br /&gt;Dev: This is getting ugly. The WSDL my tools generated can’t be consumed by the tools my partners use. Not only that, the schemas it generates are impenetrable and can’t be reused. And no tool seems to have agreed on how best to handle the SOAPAction header.&lt;br /&gt;&lt;br /&gt;SG: Sorry to hear that, buddy. On the bright side, nobody uses the Doc/Lit style anymore. In order to get transport independence back we’re all using wrapped-doc/lit now. Doesn’t that sound cool: wrapped-doc/lit?&lt;br /&gt;&lt;br /&gt;Dev: What’s that?&lt;br /&gt;&lt;br /&gt;SG: Well, it’s just like Doc/Lit, but you take the whole message and wrap it in an element that has the same name as the operation. Now the operation name is back in the message where it belongs.&lt;br /&gt;&lt;br /&gt;Dev: Okay, where’s the spec on this?&lt;br /&gt;&lt;br /&gt;SG: Oh, there is no spec. This is just what Microsoft seems to be doing. Looked like a good idea, so now all the cool kids are doing it. However, there is this new thing. I think you’re gonna like it. It’s called the Web Services Interoperability Group, or the WS-I. What they’re doing is trying to remove a lot of the ambiguity in the SOAP and WSDL specs. I know how you like specs.&lt;br /&gt;&lt;br /&gt;Dev: So, in other words, the specs were so bad you need a standards body to standardize the standards. Lord. Well, will this solve my interoperability problems?&lt;br /&gt;&lt;br /&gt;SG: Oh, yeah. So long as you use a WS-I compliant SOAP stack, avoid using 8/10ths of XML Schema, don’t use any unusual data types, and don’t count on working with WebSphere and Apache Axis.&lt;br /&gt;&lt;br /&gt;Dev: And is wrapped-doc/lit explained in there?&lt;br /&gt;&lt;br /&gt;SG: Ermm, no. But that’s okay, you’re tools understand it. Most of them, anyway.&lt;br /&gt;&lt;br /&gt;Dev: Let me sum up. The definition of SOAP is in constant flux, SOAP is anything but simple, and it is no longer meant for accessing objects-even though that’s what all the tools still do.&lt;br /&gt;&lt;br /&gt;SG: That’s about right, but we’re way ahead of you on this. We’ve deprecated the meaning of the SOAP acronym.&lt;br /&gt;&lt;br /&gt;Dev: Really! What does it stand for now?&lt;br /&gt;&lt;br /&gt;SG: Nothing.&lt;br /&gt;&lt;br /&gt;Dev: (blink)&lt;br /&gt;&lt;br /&gt;SG: Let me tell you about UDDI.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-7579899144586398153?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/7579899144586398153/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=7579899144586398153' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7579899144586398153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7579899144586398153'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/12/s-stands-for-simple.html' title='The S stands for Simple'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6474975153102693026</id><published>2009-12-11T07:14:00.000-08:00</published><updated>2009-12-11T07:16:06.605-08:00</updated><title type='text'>btrfs po tretie</title><content type='html'>Vyšiel Lucid Lynx Alpha 1 a moja chuť premigrovať na btrfs sa prejavila znovu. Tentokrát našťastie úspešne :-) Ako teda prejsť? Rozumy som bral &lt;a href="http://www.howtoforge.com/boot-on-btrfs-with-debian#comment-15153"&gt;z návodu&lt;/a&gt;, takže sa nebudem zdržiavať vysvetľovaním a prejdem rovno k veci. Pri inštalácii Lynxa treba vytvoriť špeciálnu partíciu pre /boot. Stačí, ak bude mať 128mb. Po inštalácii rovno skonvertujeme root FS:&lt;br /&gt;&lt;pre&gt;sudo btrfs-convert /dev/sda2&lt;/pre&gt;Optional: Tu je možno lepšie celý filesystem starovať, zmazať, naformátovať ako btrfs, mountnúť s compress a rozbaliť ho späť, tak aspoň zabezpečíme, že všetky fajly sú uložené skomprimovane.&lt;br /&gt;&lt;br /&gt;Chrootneme sa:&lt;br /&gt;&lt;pre&gt;sudo mkdir /mnt/root&lt;br /&gt;sudo mount /dev/sda2 /mnt/root&lt;br /&gt;sudo mount /dev/sda1 /mnt/root/boot&lt;br /&gt;sudo mount none -t proc /mnt/root/proc&lt;br /&gt;sudo mount --bind /dev /mnt/root/dev&lt;br /&gt;sudo chroot /mnt/root /bin/bash&lt;/pre&gt;Zeditujeme /etc/initramfs-tools/modules a pridáme moduly&lt;br /&gt;&lt;pre&gt;btrfs&lt;br /&gt;libcrc32c&lt;br /&gt;zlib_deflate&lt;br /&gt;crc32c&lt;/pre&gt;Potom spustíme&lt;br /&gt;&lt;pre&gt;update-initramfs -u&lt;/pre&gt;Ďalej treba upraviť fstab. Najprv zistíme nový UUID disku:&lt;br /&gt;&lt;pre&gt;ls -la /dev/disk/by-uuid|grep sda2&lt;/pre&gt;zeditujeme &lt;code&gt;/etc/fstab&lt;/code&gt;, v ktorom treba zmeniť UUID pre root, typ filesystému (btrfs) a flagy (miesto &lt;code&gt;errors=remount-ro&lt;/code&gt; tam dajme trebárs &lt;code&gt;compress&lt;/code&gt;)&lt;br /&gt;&lt;br /&gt;Musíme ešte fixnúť grub, ten má totiž problémy s btrfs a &lt;code&gt;update-grub&lt;/code&gt; skript nezbehne. To by robilo problémy neskôr pri update kernelu, takže radšej zeditujeme &lt;code&gt;/usr/sbin/grub-mkconfig&lt;/code&gt;, okolo riadku 124 sa setujú premenné ako GRUB_DEVICE. Riadky&lt;br /&gt;&lt;pre&gt;GRUB_DEVICE=blabla&lt;br /&gt;GRUB_DEVICE_UUID=blabla&lt;br /&gt;GRUB_FS=blabla&lt;/pre&gt;treba zakomentovať a miesto nich treba dať&lt;br /&gt;&lt;pre&gt;GRUB_DEVICE=/dev/sda2&lt;br /&gt;GRUB_DEVICE_UUID=nové UUID disku&lt;br /&gt;GRUB_FS=btrfs&lt;/pre&gt;Do &lt;code&gt;/etc/default/grub&lt;/code&gt; treba pridať riadok&lt;br /&gt;&lt;pre&gt;GRUB_DISABLE_LINUX_UUID=true&lt;/pre&gt;Teraz by už grub mal byť schopný správne si vygenerovať konfigurák:&lt;br /&gt;&lt;pre&gt;update-grub&lt;/pre&gt;Exitneme chroot a unmountneme filesystémy:&lt;br /&gt;&lt;pre&gt;exit&lt;br /&gt;sudo umount /mnt/root/boot /mnt/root/proc /mnt/root/dev /mnt/root&lt;/pre&gt;A už len stačí nabootovať :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6474975153102693026?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6474975153102693026/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6474975153102693026' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6474975153102693026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6474975153102693026'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/12/btrfs-po-tretie.html' title='btrfs po tretie'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-2856030048803364728</id><published>2009-11-26T04:18:00.000-08:00</published><updated>2009-11-26T04:18:43.776-08:00</updated><title type='text'>Fujtejbl</title><content type='html'>Pre obrovský komerčný úspech hit-shit tabuľky sme sa rozhodli vydať jej pokračovanie, fujtable:&lt;br /&gt;&lt;table border="1"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Shit&lt;/th&gt;&lt;th&gt;Neutrálna pôda&lt;/th&gt;&lt;th&gt;Hit&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://blog.loxal.net/2009/02/eclipse-sucks-so-use-netbeans.html"&gt;Eclipse&lt;/a&gt;&lt;br/&gt;zlá usabilita&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IDEA, NetBeans&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Struts, JSP, PHP&lt;br/&gt;Veľké projekty sú neudržiavateľné&lt;/td&gt;&lt;td&gt;JSF&lt;/td&gt;&lt;td&gt;Wicket&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://webspheresucks.com"&gt;WebSphere&lt;/a&gt;&lt;br/&gt;Ultimátna forma prekomplikovanosti&lt;/td&gt;&lt;td&gt;OpenEJB&lt;/td&gt;&lt;td&gt;Glassfish&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DB2, &lt;a href="http://en.newinstance.it/2007/06/01/ora-12519-tnsno-appropriate-service-handler-found/"&gt;Oracle&lt;/a&gt;&lt;br/&gt;Generátory debilných chýb&lt;/td&gt;&lt;td&gt;PostgreSQL, MySQL, HSQLDB&lt;/td&gt;&lt;td&gt;H2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CVS&lt;br/&gt;Nemá atomické commity a globálne revízie&lt;/td&gt;&lt;td&gt;SVN&lt;/td&gt;&lt;td&gt;Mercurial&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://vyzivus.blogspot.com/2009/09/ibm-java.html"&gt;WebSphere MQ&lt;/a&gt;&lt;/td&gt;&lt;td/&gt;&lt;td/&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-2856030048803364728?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/2856030048803364728/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=2856030048803364728' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2856030048803364728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2856030048803364728'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/11/fujtejbl.html' title='Fujtejbl'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8397944583630803425</id><published>2009-11-21T13:22:00.000-08:00</published><updated>2010-11-01T11:36:13.443-07:00</updated><title type='text'>720p na netbooku</title><content type='html'>Ak &lt;code&gt;mplayer&lt;/code&gt; nestíha prehrávať 720p h264 video, skúste použiť &lt;code&gt;mplayer -lavdopts skiploopfilter=all:fast=1&lt;/code&gt; - zrýchlenie je citeľné a v niektorých prípadoch môže zo slideshow spraviť znovu video.&lt;p/&gt;Ďaľšia možnosť je hodiť dekódovanie videa na grafickú kartu. Štandardy sú štyry: VAAPI, XvBA od AMD, VDPAU od Nvidie, XVMC od Intelu. Budúcnosť asi patrí VAAPI, ten ale mplayer zatiaľ nepodporuje. Ak máte NVidiu, skúste &lt;code&gt;mplayer -vo vdpau&lt;/code&gt;, ak máte Intel alebo VIA, skúste &lt;code&gt;mplayer -vo xvmc&lt;/code&gt;.&lt;p/&gt;Edit: ešte jedna možnosť je &lt;a href="http://lglinux.blogspot.com/2010/03/multi-threaded-mplayer-for-faster-720p.html"&gt;skompilovať mplayer s podporou viacerých jadier&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8397944583630803425?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8397944583630803425/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8397944583630803425' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8397944583630803425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8397944583630803425'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/11/720p-na-netbooku.html' title='720p na netbooku'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-1553333066567175649</id><published>2009-11-21T11:03:00.000-08:00</published><updated>2009-11-21T11:03:14.862-08:00</updated><title type='text'>Karmic a Btrfs po druhé</title><content type='html'>Keďže btrfs mi stále vŕtal v hlave a nedával zaspať, musel som ho vyskúšať naostro, konkrétne s Ubuntu Karmic Koala. Dopadlo to zle :)&lt;br /&gt;&lt;h4&gt;Neúspech 1&lt;/h4&gt;GRUB2 nenabootoval z btrfs (to som aj očakával)&lt;br /&gt;&lt;h4&gt;Neúspech 2&lt;/h4&gt;GRUB2 nabootoval z ext4, ale nevedel čítať z btrfs (zabudol som pridať potrebné moduly do kernel initrd)&lt;br /&gt;&lt;h4&gt;Neúspech 3&lt;/h4&gt;GRUB2 nabootoval z ext4, ale nevedel čítať z btrfs RAID-0 (asi to momentálne proste nejde)&lt;br /&gt;&lt;h4&gt;Neúspech 4&lt;/h4&gt;GRUB2 nabootoval z ext4 a natiahol systém z btrfs, hurá! Hurá však skončilo hneď, ako som upgradol systém a reštartol: systém ostal v podivnom stave, polovica balíčkov bola nainštalovaná napoly apod. Či je na vine btrfs alebo niečo iné, netuším.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-1553333066567175649?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/1553333066567175649/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=1553333066567175649' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/1553333066567175649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/1553333066567175649'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/11/karmic-btrfs-po-druhe.html' title='Karmic a Btrfs po druhé'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-7191111287570351937</id><published>2009-11-07T13:40:00.000-08:00</published><updated>2009-11-07T14:01:24.309-08:00</updated><title type='text'>Doprava v Bratislave</title><content type='html'>Doprava v Bratislave je na smiech. Autobusy a električky sú pomalé ako výletné vláčiky a dostať sa z jednej strany Bratislavy na druhú si vyžaduje pevné nervy a &lt;a href="http://imhd.zoznam.sk/ba/index.php?w=3023ef2f302523ea&amp;l=5&amp;x=524288159762"&gt;hodinu času&lt;/a&gt; (ak človek neprestupuje). Električky už rýchlejšie nebudú - to by na trati nesmeli byť zákruty do pravého uhla, kade sa ten šrot plazí 20 km/h max (inak by sa vykoľajil), a križovatky. Bratislava proste potrebuje trate, kde súpravy nebudú stáť alebo spomaľovať každých 20 metrov - potrebuje normálne, rýchle metro. Komu to jasné nie je, nech sa ide pozrieť do normálnej európskej metropoly s fungujúcou MHD.&lt;p/&gt;O metre sa už hovorí 30 rokov a spravila sa akurát jedna stanica v Petržalke, ktorá sa nevyužitá pomaly premieňa na dungeon (kostry a undead included). Prognóza je teda chmúrna: vyzerá to tak, že o ďaľších 30 rokov budeme mať prd makový miesto metra. Našťastie je tu projekt &lt;a href="http://www.asb.sk/?gallery=2729&amp;image=18783"&gt;TEN-T&lt;/a&gt;, ktorý je síce drahý a spája akurát tak Petržalku s Račou, ale niekde už zúfalo treba začať. Predbežne sa má začať kopať v 2011 a všetko má byť pripravené v 2016, kedy Bratislava konečne bude mať zárodok civilizovanej dopravy.&lt;p/&gt;V rámci otvorenia tejto dopravy by sa mohla začať úplne nová etapa bratislavskej MHD, v ktorej by:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;neboli vypatlaní revízori, ale slušní sprievodcovia - napríklad ako vo vlakoch&lt;/li&gt;&lt;li&gt;neboli smradľaví bezdomovci, ktorých revízori ignorujú a buzerujú radšej obyčajných ľudí, pretože z bezdomovca peniaze nedostanú&lt;/li&gt;&lt;li&gt;neboli električky dočmárané ako v hiphop shope. Tu však musí zapracovať aj slovenský genofond a musí prestať produkovať vypatlané hiphop opice. A ďalej, každý prichytený vrájter by musel napríklad v rámci verejnoprospešných prác svoje "prejavy inej kultúry" zadarmo odstrániť.&lt;/li&gt;&lt;/ul&gt;Kde na to zobrať? Sčasti to financuje EU, sčasti Slovensko. Pindajúci mimobratislavčania, polibte si prdel, za bratislavské peniaze sa vám stavajú diaľnice. Keď sa vám nepáči, kde končia vaše peniaze, začnite bojovať proti korupcii. Za ušetrené peniaze si môžete napríklad postaviť metro :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-7191111287570351937?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/7191111287570351937/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=7191111287570351937' title='1 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7191111287570351937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7191111287570351937'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/11/doprava-v-bratislave.html' title='Doprava v Bratislave'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-7652268675753337170</id><published>2009-11-07T10:41:00.000-08:00</published><updated>2009-11-07T10:43:23.800-08:00</updated><title type='text'>Rýchla a nenáročná virtuálna mašina</title><content type='html'>Na Linux existuje kopa tradičných virtualizačných riešení: VMWare, KVM, VirtualBox atď. Čo mi na týchto tradičných riešeniach vadí:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hypervisor natvrdo predalokuje pamäť, ktorú má potom proste host k dispozícii, a väčšinou ju nevyužíva všetku&lt;/li&gt;&lt;li&gt;Ak ju aj využíva, používa ju na disk cache, ktorá je zbytočne v pamäti 2x&lt;/li&gt;&lt;/ul&gt;Našťastie existujú aj iné riešenia, napríklad &lt;a href="http://lxc.sourceforge.net/"&gt;LXC&lt;/a&gt;. Je to niečo ako advanced chroot: procesy guesta sú spúšťané ako natívne procesy hosta, guest dokonca ani nebeží svoj kernel, ale používa hostovský. Výhody sú natívna rýchlosť a efektívne využitie pamäte, nevýhoda je, že to funguje len Linux-on-Linux.&lt;p/&gt;Ako na to? Kompletný návod je uverejnený &lt;a href="http://www.stgraber.org/2009/11/06/lxc-containers-or-extremely-fast-virtualization"&gt;na blogu&lt;/a&gt;, ja spravím malý výcuc. Predpokladajme, že bežíte Karmic amd64:&lt;br /&gt;&lt;pre&gt;sudo add-apt-repository ppa:stgraber&lt;br /&gt;sudo mkdir -p /var/lib/lxc/&lt;br /&gt;wget http://www.stgraber.org/download/lxc-ubuntu-8.04-amd64.tar.gz&lt;br /&gt;sudo tar -xvzf lxc-ubuntu-8.04-amd64.tar.gz -C /var/lib/lxc/&lt;br /&gt;sudo mkdir /dev/cgroup&lt;br /&gt;sudo mount -t cgroup none /dev/cgroup&lt;br /&gt;sudo brctl addbr br0&lt;br /&gt;sudo ifconfig br0 192.168.2.1&lt;br /&gt;sudo lxc-start -d -n ubuntu&lt;br /&gt;ssh root@192.168.2.2  (root password is "password")&lt;/pre&gt;Aby sa VM dostala na sieť, môžeme buď pridať eth1 do bridge:&lt;br /&gt;&lt;pre&gt;brctl addif br0 eth1&lt;br /&gt;ifconfig br0 "ip_adresa_eth1" promisc up&lt;br /&gt;ifconfig eth1 0.0.0.0 up&lt;br /&gt;route add -net default gw 192.168.1.1 br0&lt;/pre&gt;V tomto bode mi to ale chcíplo s kryptickou hláškou &lt;code&gt;SIOCADDRT: No such process&lt;/code&gt;, asi kvôli bežiacemu network manageru. Rozhodol som sa preto pre menej invazívne riešenie, NAT:&lt;br /&gt;&lt;pre&gt;iptables -F&lt;br /&gt;iptables -t nat -F&lt;br /&gt;iptables -P INPUT ACCEPT&lt;br /&gt;iptables -P OUTPUT ACCEPT&lt;br /&gt;iptables -P FORWARD DROP&lt;br /&gt;export LAN=br0&lt;br /&gt;export WAN=eth1&lt;br /&gt;iptables -A INPUT -p TCP -i ${WAN} -j ACCEPT&lt;br /&gt;iptables -I FORWARD -i ${LAN} -d 192.168.2.0/255.255.255.0 -j DROP&lt;br /&gt;iptables -A FORWARD -i ${LAN} -s 192.168.2.0/255.255.255.0 -j ACCEPT&lt;br /&gt;iptables -A FORWARD -i ${WAN} -d 192.168.2.0/255.255.255.0 -j ACCEPT&lt;br /&gt;iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE&lt;br /&gt;echo 1 &gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 &gt; $f ; done&lt;br /&gt;iptables -t nat -I PREROUTING -p tcp --dport 8080 -i ${WAN} -j DNAT --to 192.168.2.2:8080&lt;/pre&gt;Tu mi ale zase nefungovalo port-forwarding. No čo, nič nie je dokonalé.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-7652268675753337170?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/7652268675753337170/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=7652268675753337170' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7652268675753337170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7652268675753337170'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/11/rychla-nenarocna-virtualna-masina.html' title='Rýchla a nenáročná virtuálna mašina'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6290269372276894715</id><published>2009-10-15T04:14:00.000-07:00</published><updated>2009-10-15T04:14:23.987-07:00</updated><title type='text'>O programovaní</title><content type='html'>Štyri základné články o tom, čo sú programátori a ako to s nimi funguje:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;O firme&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.randsinrepose.com/archives/2003/07/10/nadd.html"&gt;O programátoroch&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.randsinrepose.com/archives/2007/11/11/the_nerd_handbo.html"&gt;O programátoroch 2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.joelonsoftware.com/articles/fog0000000067.html"&gt;O testovaní&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Keby firmy fungovali na základe týchto článkov, aké by bolo všetko jednoduchšie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6290269372276894715?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6290269372276894715/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6290269372276894715' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6290269372276894715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6290269372276894715'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/10/o-programovani.html' title='O programovaní'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8053103316306767391</id><published>2009-10-12T14:44:00.000-07:00</published><updated>2009-10-12T14:45:12.548-07:00</updated><title type='text'>Googlenie vlastného mena</title><content type='html'>Googlenie vlastného mena je vcelku zábavná činnosť, je celkom zaujímavé zistiť, čo o vás Google vie. Nie celkom zábavné už je, keď zistíte, že máte menovca, ktorý &lt;a href="http://mesto.sk/prispevky_velke/banska_bystrica/zavydieraniespoluv1133636520.phtml"&gt;má záznam v trestnom registri&lt;/a&gt; za šikanu spoluväzňov. Podľa článku&lt;blockquote&gt;Reindl a Vyšný najprv bitkou nútili obete vzájomne sa biť. Neskôr jeden z nich musel masturbovať a druhý musel vypiť ejakulát zmiešaný s mydlom, čistiacim prostriedkom, zubnou pastou a močom. Spoluväzňov prinútili aj k orálnemu sexu.&lt;/blockquote&gt;Nechutné.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8053103316306767391?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8053103316306767391/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8053103316306767391' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8053103316306767391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8053103316306767391'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/10/googlenie-vlastneho-mena.html' title='Googlenie vlastného mena'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-126503508378457867</id><published>2009-09-08T01:31:00.001-07:00</published><updated>2009-09-08T02:04:54.976-07:00</updated><title type='text'>IBM a Java</title><content type='html'>IBM robí s Javou. Môžeme s tým nesúhlasiť, môže sa nám to nepáčiť, ale musíme to prijať ako fakt. Nuž, nie všetko je ideálne v tomto svete; nájdu sa ľudia, ktorí kúpia predražené produkty od IBM, a ja to potom musím podporovať vo svojom software. Týmto blogom sa snažím na ľudí apelovať, aby neblbli a nekupovali od IBM.&lt;p/&gt;O čo ide? O tom, že WebSphere, DB2 a Eclipse sú úplné shity, som už písal. Najnovšie som mal tú česť s WebSphere MQ, MQ Series, či ako sa ten sprostý krám volá - je vidno, že ani v IBM tomu na meno prísť nevedia. Keď sa nám to podarí nainštalovať, vyvstane otázka: čo s tým? Nie je to žiadny dobre vychovaný server, ktorý po inštalácii hneď naštartuje, ani init skript to nevyrobí, proste nič, len to tam kvasí ako ropucha. Možno bude nejaká binárka, ktorá to celé štartuje, povie si Augiáš a zamieri do &lt;code&gt;/opt/mqm/bin&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;$ ls&lt;br /&gt;amqcctca    amqpcard                  amqzdmaa  dltmqbrk  endmqcsv     runmqchl&lt;br /&gt;amqcctca_r  amqpcsea                  amqzfuma  dltmqlnk  endmqlsr     runmqdlq&lt;br /&gt;amqcltca    amqrcmla                  amqzlaa0  dltmqm    endmqm       runmqlsr&lt;br /&gt;amqcltca_r  amqrdbgm                  amqzllp0  dmpmqaut  endmqtrc     runmqsc&lt;br /&gt;amqcrsta    amqrfdm                   amqzlsa0  dmpmqlog  ffstsummary  runmqtmc&lt;br /&gt;amqfcxba    amqrmppa                  amqzlwa0  dspmq     migmbbrk     runmqtrm&lt;br /&gt;amqfqpub    amqrrmfa                  amqzmgr0  dspmqaut  mqrc         runpcard&lt;br /&gt;amqharmx    amqsstop                  amqzmuc0  dspmqcsv  mqsh         setmqaut&lt;br /&gt;amqhasmx    amqwCleanSideQueue.sh     amqzmuf0  dspmqfls  mqver        setmqprd&lt;br /&gt;amqicdir    amqwclientConfig.sh       amqzmur0  dspmqras  rcdmqimg     strmqbrk&lt;br /&gt;amqiclen    amqwclientTransport.wsdd  amqzslf0  dspmqrte  rcrmqobj     strmqcsv&lt;br /&gt;amqldmpa    amqwdeployWMQService.sh   amqzxma0  dspmqtrc  rsvmqtrn     strmqm&lt;br /&gt;amqltmc0    amqwsetcp.sh              crtmqcvx  dspmqtrn  rundefconf   strmqtrc&lt;br /&gt;amqmgse     amqwstartwin.sh           crtmqlnk  dspmqver  runmqbrk&lt;br /&gt;amqoamd     amqxmsg0                  crtmqm    endmqbrk  runmqchi&lt;/pre&gt;&lt;br /&gt;WTF??? Čo to je? Na čo to je? Jak môže niekto pomenovať binárku &lt;code&gt;amqrrfma&lt;/code&gt;? A prečo to má všetko 8 znakov? Čo použili password generator z DOSu boha? To tú firmu fakt niekto rozmrazil po 20 rokoch, oni uvideli konzolu a s výkrikom "Jééj DOS" sa nadšene pustili do práce? A čo robí &lt;code&gt;amqrrfma&lt;/code&gt;?&lt;br /&gt;&lt;pre&gt;./amqrrfma -h&lt;br /&gt;Logic Error&lt;/pre&gt;&lt;br /&gt;Áno, presne tak, vypíše to "Logic Error". Úchvatné, epochálne, čo-ti-už-načisto-jebe hviezdometné. Hovorí sa, že génius nájde jednoduché riešenie. Ee, to nie je IBM. IBM, to je banda ľudí, ktorí sa navzájom o seba potkýňajú a nadšeným hýkaním oslavujú každý nový skvelý nápad ako "urobme tool s názvom amqrrfma vypisujúci Logic Error". A to nie je náhoda!&lt;br /&gt;&lt;blockquote&gt;To, že IBM robí dodrbaný softvér, nie je náhoda, to je business stratégia: neborákovi používateľovi sa dá totiž hneď predať support&lt;/blockquote&gt;&lt;br /&gt;A to je nič. Keď sa na to chcem konektnúť z JNDI, to nemôže ísť priamo na server, kdeže: najprv treba vyrobiť nejaký podivný fajl na filesystéme (niečo ako symlinka na server) a na ten sa konektnúť z JNDI. Cítite ten biznis? V tomto duchu sa nesie aj tool JMSAdmin:&lt;pre&gt;InitCtx&gt; def q(Q2) queue(Q2) qmanager (QM2)&lt;br /&gt;Lexical error&lt;br /&gt;&lt;br /&gt;InitCtx&gt;&lt;/pre&gt;Ako prednasraná babka, na ktorú sa škaredo pozriete a vynadá vám za všetky svoje životné neúspechy, pričom vôbec neviete, čo sa deje. Lexical error.&lt;p/&gt;Vyhlasujem akciu "Osvieťte zákazníka". Každý si zoberie jedného zákazníka a trpezlivo mu vysvetlí, že IBM je fuj. Ktovie, možno to zaberie ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-126503508378457867?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/126503508378457867/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=126503508378457867' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/126503508378457867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/126503508378457867'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/09/ibm-java.html' title='IBM a Java'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6400994323496242777</id><published>2009-09-06T01:44:00.000-07:00</published><updated>2009-09-06T02:09:43.988-07:00</updated><title type='text'>Flash</title><content type='html'>Existuje istá vec od Microsoftu s názvom ActiveX. Je samozrejme iba pre x86 a IE/Windows a bol to klasický pokus Microsoftu dostať dynamický internet pod svoju neohrabanú kontrolu. Čudovať sa zákernosti tejto firmy je ako čudovať sa, že voda je mokrá, ale čo to má spoločné s Flash-om?&lt;p/&gt;Chcel by som napísať, že Flash je kus binárneho trusu, ktorý narušuje platformovú nezávislosť netu. Je tu ale istý rozdiel, presnejšie tri, kvôli ktorým je to viac-menej jedno:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Existuje verzia pre Linux a MacOSX, takže žiadny OS lock-in,&lt;/li&gt;&lt;li&gt;Neexistuje vedomá snaha narušiť nezávislosť netu - programátori Macromedie sú proste babráci&lt;/li&gt;&lt;li&gt;A hlavne - nemusím to používať: vo Flashi sú urobené len nedôležité veci, zábava: youtube a hry&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;História Flashu potvrdzuje neschopnosť jeho vývojárov:&lt;ul&gt;&lt;li&gt;Flash pre Linux bol dlho nestabilný, padal a zhodil spolu so sebou aj browser. Prečo si myslíte, že Chrome má záložky v rôznych procesoch? Jo. Aby pád Flashu ovplyvnil len jeden tab, a nie celý browser.&lt;/li&gt;&lt;li&gt;Dlhá absencia 64bitovej verzie dala vznik rôznym wrapperom, ktoré čiernou mágiou dostanú 32bitový plugin do 64bitového Firefoxu&lt;/li&gt;&lt;li&gt;Flash je potencionálna bezpečnostná diera.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;blockquote&gt;Flash sucks everywhere, just to varying degrees depending on platform. Go watch the fun in the netbook space as the Intel Atom is being unfairly blamed by clueless pundits for the inability of netbooks with the newer 1280x720 and 1388x768 displays to play full screen Flash video (on Windows XP btw.). We nerds on slashdot know better of course, the problem is Adobe being mindless idiots who can't figure out how to properly use a scaled video surface.&lt;br /&gt;&lt;br /&gt;I'd like some green group to calculate how many YouTube videos have been played and how many GigaWatt Hours of electricity have been wasted on software colorspace conversion and scaling because Adobe can't figure out how to use well documented and commonly available features on every video card made in the last fifteen years.&lt;/blockquote&gt;&lt;br /&gt;Zdroj: &lt;a href="http://linux.slashdot.org/story/09/09/05/161230/Kernel-2631-To-Speed-Up-Linux-Desktop?from=rss"&gt;Slashdot&lt;/a&gt;. A to je v kocke všetko, prečo nemám rád Flash.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6400994323496242777?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6400994323496242777/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6400994323496242777' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6400994323496242777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6400994323496242777'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/09/flash.html' title='Flash'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8913515533984180287</id><published>2009-09-02T13:12:00.000-07:00</published><updated>2009-09-02T13:43:31.591-07:00</updated><title type='text'>Ubuntu Karmic a Btrfs</title><content type='html'>Btrfs ako next-gen filesystem je nesmierne zaujímavý počin. Podľa jednej z autoriek ZFS Valerie Aurora je Btrfs dokonca &lt;a href="http://lwn.net/Articles/342892/"&gt;naimplementovaný efektívnejšie a jednoduchšie&lt;/a&gt; ako ZFS. Zopár praktických výhod:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Automatický checksum dát (detekcia poškodených dát) - ideálne na USB kľúč a prenosný disk, kde môže dôjsť k malým nenápadným zmenám dát pri prenose&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Snapshoty - zachytenie stavu filesystému v čase. V podstate umožňuje funkcionalitu Time Machine z MacOSX. Výborné na jednoduché zálohovanie a verzionovanie práce&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Tučné, a tak som si podľa &lt;a href="http://www.howtoforge.com/boot-on-btrfs-with-debian#comment-15153"&gt;návodu&lt;/a&gt; pokusne skúsil rozbehať Btrfs na Ubuntu Karmic vo VirtualBoxe. Konverzia z ext4 (s extents) pomocou &lt;code&gt;btrfs-convert&lt;/code&gt; prebehla úspešne, aj keď na disku ostalo málo voľného miesta - konverzia zachováva ext4 dáta, asi aby bolo možné konvertovať späť. V mojom prípade skonvertovanie 3,5 GB disku trvalo pár minút a výsledný filesystém hlásil 5,5GB obsadeného miesta. Na filesystéme vznikol nový adresár ext4-niečo, možno jeho zmazaním by sa tých 2GB uvoľnilo. Ďaľšie pokusy sa nekonali - systém už nenabootoval. Evidentne GRUB2 zatiaľ nepodporuje bootovanie z Btrfs. Riešením je poslúchnuť návod a vyrobiť bootovaciu partíciu s ext4. Alebo počkať na podporu Btrfs v GRUB2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8913515533984180287?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8913515533984180287/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8913515533984180287' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8913515533984180287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8913515533984180287'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/09/ubuntu-karmic-btrfs.html' title='Ubuntu Karmic a Btrfs'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8297237733111060915</id><published>2009-08-25T14:04:00.000-07:00</published><updated>2009-09-06T01:36:56.060-07:00</updated><title type='text'>MSI GX623X-0W3CZ</title><content type='html'>I just bought &lt;a href="http://www.alza.sk/msi-gx623x-0w3cz-d134497.htm"&gt;this neat piece of hardware&lt;/a&gt; and installed Ubuntu 9.04 Jaunty on it. I was really impressed - everything worked right out of the box.&lt;br /&gt;lspci:&lt;br /&gt;&lt;pre&gt;00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)&lt;br /&gt;00:01.0 PCI bridge: Intel Corporation Mobile 4 Series Chipset PCI Express Graphics Port (rev 07)&lt;br /&gt;00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)&lt;br /&gt;00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)&lt;br /&gt;00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)&lt;br /&gt;00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)&lt;br /&gt;00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)&lt;br /&gt;00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)&lt;br /&gt;00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)&lt;br /&gt;00:1c.2 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 3 (rev 03)&lt;br /&gt;00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)&lt;br /&gt;00:1c.5 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 6 (rev 03)&lt;br /&gt;00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)&lt;br /&gt;00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)&lt;br /&gt;00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)&lt;br /&gt;00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)&lt;br /&gt;00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)&lt;br /&gt;00:1f.0 ISA bridge: Intel Corporation ICH9M LPC Interface Controller (rev 03)&lt;br /&gt;00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)&lt;br /&gt;00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)&lt;br /&gt;02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 01)&lt;br /&gt;06:00.0 Network controller: Intel Corporation Wireless WiFi Link 5100&lt;br /&gt;07:00.0 FireWire (IEEE 1394): JMicron Technologies, Inc. IEEE 1394 Host Controller&lt;br /&gt;07:00.1 System peripheral: JMicron Technologies, Inc. SD/MMC Host Controller&lt;br /&gt;07:00.2 SD Host controller: JMicron Technologies, Inc. Standard SD Host Controller&lt;br /&gt;07:00.3 System peripheral: JMicron Technologies, Inc. MS Host Controller&lt;br /&gt;07:00.4 System peripheral: JMicron Technologies, Inc. xD Host Controller&lt;br /&gt;08:00.0 VGA compatible controller: ATI Technologies Inc Device 9488&lt;br /&gt;08:00.1 Audio device: ATI Technologies Inc R700 Audio Device [Radeon HD 4000 Series]&lt;/pre&gt;&lt;br /&gt;Notes:&lt;table border="1"&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;C2D P7350&lt;/td&gt;&lt;td&gt;Works, supports frequency scaling: 800, 1600 and 2000 MHz&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Graphics&lt;/td&gt;&lt;td&gt;ATI Mobility Radeon HD 4670&lt;/td&gt;&lt;td&gt;Surprise: the display resolution is 1680x1050 instead of 1280x800 as stated in the specification. The OSS driver could however only display 1440x900 for some reason. glxinfo stated that the 3d rendering is enabled so I tried glxgears but it gave only 170 or so fps. I then installed the proprietary driver which worked out-of-the-box (4815 fps :)&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Sound&lt;/td&gt;&lt;td&gt;Intel HDA&lt;/td&gt;&lt;td&gt;Works, but only stereo by default. To enable 5.1 you'll need to add &lt;code&gt;options snd_hda_intel model=3stack-6ch&lt;/code&gt; to &lt;code&gt;/etc/modprobe.d/alsa-base.conf&lt;/code&gt; and &lt;code&gt;default-sample-channels=6&lt;/code&gt; to &lt;code&gt;/etc/pulse/daemon.conf&lt;/code&gt; and reboot. 7.1 support untested&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;WIFI&lt;/td&gt;&lt;td&gt;Intel WiFi Link 5100&lt;/td&gt;&lt;td&gt;WiFi must be turned on before Linux boots otherwise no networks are detected.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Bluetooth&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;Can be turned on and is detected. I haven't tested it further though.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Multimedia keys&lt;/td&gt;&lt;td/&gt;&lt;td&gt;Volume up/down/mute works. Next/prev song/play/pause works.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Suspend&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Untested&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Card reader&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Untested&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Turbo and Eco buttons&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Does not seem to work but I don't need them anyway as frequency scaling works&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Sensors&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Harddisk temp sensor worked, however CPU sensors just shows 0&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;Gotchas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The keyboard rarely emits the +- sign and fails to detect a keyup event - perhaps a bug in ACPI or something&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8297237733111060915?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8297237733111060915/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8297237733111060915' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8297237733111060915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8297237733111060915'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/08/msi-gx623x-0w3cz.html' title='MSI GX623X-0W3CZ'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-3091963330137901376</id><published>2009-08-24T03:12:00.000-07:00</published><updated>2009-09-06T01:43:52.170-07:00</updated><title type='text'>Ubuntu neupdatuje kernel v grub</title><content type='html'>Z nejakeho prapodivno-historického dôvodu sa jedna z inštalácií Ubuntu rozhodla, že nebude bootovať nový, čerstvo upečený kernel, ale ostane pri starom. Neviem, čo jej preletelo popod nos, ale opraví sa to pomerne jednoducho: do &lt;code&gt;/etc/kernel-img.conf&lt;/code&gt; treba pridať nasledovné riadky, ak chýbajú:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;postinst_hook = update-grub&lt;br /&gt;postrm_hook   = update-grub&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Voilà :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-3091963330137901376?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/3091963330137901376/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=3091963330137901376' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3091963330137901376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3091963330137901376'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/08/ubuntu-neupdatuje-kernel-v-grub.html' title='Ubuntu neupdatuje kernel v grub'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8131773263496627121</id><published>2009-08-19T06:46:00.000-07:00</published><updated>2009-08-19T06:59:20.816-07:00</updated><title type='text'>SSL, HTTPS a Java: Simplified</title><content type='html'>(Nadväzuje na &lt;a href="http://vyzivus.blogspot.com/2009/08/ssl-https-java.html"&gt;SSL, HTTPS a Java&lt;/a&gt;)&lt;p/&gt;&lt;br /&gt;Ak sa vám nechce vyrábať tri kľúče, pretože nepotrebujete overovanie klientským certifikátom, stačí vám vygenerovať jeden kľúč:&lt;br /&gt;&lt;pre&gt;openssl genrsa -des3 -out jetty.key 1024&lt;br /&gt;openssl req -new -x509 -days 3650 -key jetty.key -out jetty.crt&lt;br /&gt;openssl pkcs12 -export -in jetty.crt -inkey jetty.key -name "Test Jetty key" -out jetty.p12&lt;br /&gt;keytool -importkeystore -srckeystore jetty.p12 -srcstoretype PKCS12 -destkeystore keystore.jetty&lt;br /&gt;keytool -keystore keystore.client -import -alias jetty -file jetty.crt&lt;/pre&gt;&lt;br /&gt;(Dajte "password" ako heslo). A potom:&lt;br /&gt;&lt;pre&gt;// jednoduchy servlet pre Jetty server&lt;br /&gt;public static class SimpleServlet extends HttpServlet {&lt;br /&gt;  @Override&lt;br /&gt;  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {&lt;br /&gt;    resp.getWriter().append("HAHAHAAAAA");&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// start Jetty servera&lt;br /&gt;server = new Server(40000);&lt;br /&gt;final SslSocketConnector c = new SslSocketConnector();&lt;br /&gt;c.setPort(40001);&lt;br /&gt;c.setMaxIdleTime(30000);&lt;br /&gt;c.setKeystore("keystore.jetty");&lt;br /&gt;c.setKeyPassword("password");&lt;br /&gt;c.setTruststore("keystore.jetty");&lt;br /&gt;c.setTrustPassword("password");&lt;br /&gt;server.addConnector(c);&lt;br /&gt;final ServletHandler h = new ServletHandler();&lt;br /&gt;h.addServletWithMapping(SimpleServlet.class, "/");&lt;br /&gt;server.addHandler(h);&lt;br /&gt;server.start();&lt;br /&gt;&lt;br /&gt;// inicializacia klienta&lt;br /&gt;System.setProperty("javax.net.ssl.trustStore", "keystore.client");&lt;br /&gt;System.setProperty("javax.net.ssl.trustStorePassword", "password");&lt;br /&gt;System.setProperty("javax.net.ssl.keyStore", "keystore.client");&lt;br /&gt;System.setProperty("javax.net.ssl.keyStorePassword", "password");&lt;br /&gt;&lt;br /&gt;// volanie z klienta&lt;br /&gt;new URL("https://localhost:40001/foo").openStream().close();&lt;br /&gt;&lt;br /&gt;// stop Jetty&lt;br /&gt;server.stop();&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8131773263496627121?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8131773263496627121/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8131773263496627121' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8131773263496627121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8131773263496627121'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/08/ssl-https-java-simplified.html' title='SSL, HTTPS a Java: Simplified'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-185709793028228170</id><published>2009-08-19T01:52:00.000-07:00</published><updated>2009-08-19T03:37:33.101-07:00</updated><title type='text'>WebServices: Judgement Day</title><content type='html'>Bolo nebolo, chcel som si napísať malý mock webservice server na automatizované JUnit testovanie webservice klienta. Samozrejme ide o starý záprdok menom SOAP webservice - mladšie REST webservisy sú pekné, jednoduché a funkčné. Tento príbeh mal očakávaný priebeh: dobre som sa nasral, deň v prdeli, našťastie happyend na konci. Podelím sa s vami, čo som sa naučil.&lt;p/&gt;&lt;br /&gt;Za prvé, webservices stack v Java5 je zúfalý. CXF a Axis2 sú prekomplikované gebuziny, ktoré mi nikdy poriadne nefungovali. Nikdy som vlastne nepochopil, prečo CXF poňali ako nejaký podivný server, v ktorom je podpora webservices len ako plugin do onoho servera. Žiarivý príklad over-engineeringu, niečo ako Eclipse a OSGi. XFire ako server ma sklamal na celej čiare, keď odmietol validné SOAP requesty. Touto metódou postupnej eliminácie embedded webservice frameworkov (veľmi náročnej na nervy moje a mojich kolegov) mi vyšlo, že jediný použiteľný framework je staručký Axis1: má funkčný Maven2 plugin a vie robiť obstojne klient aj server. Je tu síce ešte JAX-WS a referenčná implementácia od Sun-u, ale možnosť ďaľšieho sexuálneho styku s webservismi zvážim až vtedy, keď zlyhá Axis1. Alebo skúsim celibát - to znie ako sakra dobrý nápad.&lt;p/&gt;&lt;br /&gt;Vygenerovaniu klienta v Axis1 som sa venoval &lt;a href="http://vyzivus.blogspot.com/2008/08/webservices-v-jave-as-1-wtf.html"&gt;už dávnejšie&lt;/a&gt;, túto časť teda preskočím a len dodám, že v rámci kroku s dobou môžete použiť axistools-maven-plugin verziu 1.3. Takže server. Rovno vzdajte pokusy rozbehať http server embednutý v axis1 - tam čaká malé sklamanie, že to nefunguje. Na vec treba ísť komplexne (ako hovorí zmrdský newspeak) a preto musíme komplikovane deploynúť WAR do Jetty. Pomodlite sa a ideme na vec:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Treba WSDD súbor. Je to proste tak a treba sa s tým zmieriť. Našťastie axistools maven plugin nám jeden (nefunkčný) vygeneroval (&lt;code&gt;target/generated-sources/*/deploy.wsdd&lt;/code&gt;), opravíme ho púhopúhym pridaním nasledovných elementov ako prvých do root &amp;lt;deployment&amp;gt; elementu:&lt;br /&gt;&lt;pre&gt;&amp;lt;handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/&amp;gt;&lt;br /&gt;&amp;lt;handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/&amp;gt;&lt;br /&gt;&amp;lt;transport name="http"&amp;gt;&lt;br /&gt;  &amp;lt;requestFlow&amp;gt;&lt;br /&gt;   &amp;lt;handler type="URLMapper"/&amp;gt;&lt;br /&gt;   &amp;lt;handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/&amp;gt;&lt;br /&gt;  &amp;lt;/requestFlow&amp;gt;&lt;br /&gt;&amp;lt;/transport&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Class-name našej mock implementácie servera zaregistrujeme do parametra &lt;code&gt;classname&lt;/code&gt; v elemente &lt;code&gt;service&lt;/code&gt; vo wsdd súbore. Základ tejto triedy vie vygenerovať axistools plugin, treba zapnúť generovanie server classov a vygenerovanú classu &lt;code&gt;*DummyImpl.java&lt;/code&gt; niekam skopírovať a upraviť.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Treba vyrobiť web aplikáciu. Do src/test/webapp/WEB-INF vložíme WSDD súbor pomenovaný ako &lt;code&gt;server-config.wsdd&lt;/code&gt; a priložíme nasledovný web.xml:&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="ISO-8859-1"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web&lt;br /&gt;Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"&amp;gt;&lt;br /&gt;&amp;lt;web-app&amp;gt;&lt;br /&gt;  &amp;lt;display-name&amp;gt;Apache-Axis&amp;lt;/display-name&amp;gt;&lt;br /&gt;    &amp;lt;listener&amp;gt;&lt;br /&gt;        &amp;lt;listener-class&amp;gt;org.apache.axis.transport.http.AxisHTTPSessionListener&amp;lt;/listener-class&amp;gt;&lt;br /&gt;    &amp;lt;/listener&amp;gt;&lt;br /&gt;  &amp;lt;servlet&amp;gt;&lt;br /&gt;    &amp;lt;servlet-name&amp;gt;AxisServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;    &amp;lt;display-name&amp;gt;Apache-Axis Servlet&amp;lt;/display-name&amp;gt;&lt;br /&gt;    &amp;lt;servlet-class&amp;gt;org.apache.axis.transport.http.AxisServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;  &amp;lt;/servlet&amp;gt;&lt;br /&gt;  &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;    &amp;lt;servlet-name&amp;gt;AxisServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;    &amp;lt;url-pattern&amp;gt;/services/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;    &amp;lt;session-config&amp;gt;&lt;br /&gt;        &amp;lt;!-- Default to 5 minute session timeouts --&amp;gt;&lt;br /&gt;        &amp;lt;session-timeout&amp;gt;5&amp;lt;/session-timeout&amp;gt;&lt;br /&gt;    &amp;lt;/session-config&amp;gt;&lt;br /&gt;    &amp;lt;!-- currently the W3C havent settled on a media type for WSDL;&lt;br /&gt;    http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft&lt;br /&gt;    for now we go with the basic 'it's XML' response --&amp;gt;&lt;br /&gt;  &amp;lt;mime-mapping&amp;gt;&lt;br /&gt;    &amp;lt;extension&amp;gt;wsdl&amp;lt;/extension&amp;gt;&lt;br /&gt;     &amp;lt;mime-type&amp;gt;text/xml&amp;lt;/mime-type&amp;gt;&lt;br /&gt;  &amp;lt;/mime-mapping&amp;gt;&lt;br /&gt;  &amp;lt;mime-mapping&amp;gt;&lt;br /&gt;    &amp;lt;extension&amp;gt;xsd&amp;lt;/extension&amp;gt;&lt;br /&gt;    &amp;lt;mime-type&amp;gt;text/xml&amp;lt;/mime-type&amp;gt;&lt;br /&gt;  &amp;lt;/mime-mapping&amp;gt;&lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Naštartujeme Jetty (7.0.0.pre5):&lt;br /&gt;&lt;pre&gt;Server server = new Server(TEST_PORT);&lt;br /&gt;final WebAppContext axis = new WebAppContext("src/test/webapp", "/");&lt;br /&gt;server.addHandler(axis);&lt;br /&gt;server.start();&lt;/pre&gt;&lt;br /&gt;a po testoch ho zase stopneme:&lt;br /&gt;&lt;pre&gt;server.stop();&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Aké jednoduché :-/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-185709793028228170?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/185709793028228170/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=185709793028228170' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/185709793028228170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/185709793028228170'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/08/webservices-judgement-day.html' title='WebServices: Judgement Day'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8633692949262878937</id><published>2009-08-19T01:48:00.000-07:00</published><updated>2009-08-19T05:45:11.014-07:00</updated><title type='text'>SSL, HTTPS a Java</title><content type='html'>Predstavte si na chvíľu, že máte úlohu otestovať HTTPS klienta v Jave, bez akéhokoľvek environmentu (žiadne kľúče, žiadny server atď). Existuje &lt;a href="http://www.vanemery.com/Linux/Apache/apache-SSL.html"&gt;výborný návod&lt;/a&gt;, ako setupnúť Apache server pre SSL a odskúšať ho v browseri. Ako sa teraz dostať na Apache z Javy?&lt;p/&gt;&lt;br /&gt;Musíme vykonať nasledovné kroky:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Importnúť SSL kľúče do Java keystore&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Dokopať Javu, aby tento keystore použila a konektnúť sa na server&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ako vždy, ľahko sa povie, ťažšie sa spraví. Importnúť .crt public key nie je problém:&lt;br /&gt;&lt;pre&gt;keytool -keystore /home/foo/temp/keystore -import -alias jetty -file my-ca.crt&lt;/pre&gt;&lt;br /&gt;(Tento krok treba vykonať, aby Java SSL klient vedel overiť platnosť certifikátu servera. Ak máte kľúč od CA ako Verisign alebo Thawte, tento krok môžete vynechať). Teraz už len stačí:&lt;br /&gt;&lt;pre&gt;final URL url = new URL("https://localhost/doc/acpi-support/README");&lt;br /&gt;System.setProperty("javax.net.ssl.trustStore", "/home/foo/temp/keystore");&lt;br /&gt;System.setProperty("javax.net.ssl.trustStorePassword", "PASSWORD");&lt;br /&gt;System.setProperty("javax.net.ssl.keyStore", "/home/foo/temp/keystore");&lt;br /&gt;System.setProperty("javax.net.ssl.keyStorePassword", "PASSWORD");&lt;br /&gt;// ak treba HTTP autentifikaciu:&lt;br /&gt;Authenticator.setDefault(new Authenticator {&lt;br /&gt;  public PasswordAuthentication getPasswordAuthentication () {&lt;br /&gt;    return new PasswordAuthentication ("user", "pass1".toCharArray());&lt;br /&gt;  }&lt;br /&gt;});&lt;br /&gt;url.openStream().close();&lt;br /&gt;System.out.println("HA!");&lt;/pre&gt;&lt;br /&gt;Bližší popis &lt;a href="http://download.java.net/jdk7/docs/technotes/guides/net/http-auth.html"&gt;http autentifikácie pre javu je tu&lt;/a&gt;. Tá autentifikácia je na hlavu postavená - singleton autentifikátor pre celú VM?!? Lepšia cesta je použiť &lt;a href="http://hc.apache.org/httpclient-3.x/authentication.html"&gt;httpclient&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;HttpClient client = new HttpClient();&lt;br /&gt;client.getParams().setAuthenticationPreemptive(true);&lt;br /&gt;Credentials defaultcreds = new UsernamePasswordCredentials("username", "password");&lt;br /&gt;client.getState().setCredentials(AuthScope.ANY, defaultcreds);&lt;br /&gt;HttpMethod m = new GetMethod("https://localhost/doc/acpi-support/README");&lt;br /&gt;client.executeMethod(m);&lt;br /&gt;System.out.println(m.getResponseBodyAsString());&lt;/pre&gt;&lt;br /&gt;Namiesto username-password autentifikácie je možné použiť aj autentifikáciu client certifikátom (van-c). Otázka znie, ako importnúť private key do keystore. Ak máte Java 6, &lt;code&gt;keytool&lt;/code&gt; vie priamo importnúť PKCS12 kľúče:&lt;br /&gt;&lt;pre&gt;keytool -importkeystore -srckeystore van-c.p12 -srcstoretype PKCS12 -destkeystore /home/foo/temp/keystore&lt;/pre&gt;&lt;br /&gt;Ak nie, použite Jetty tool:&lt;br /&gt;&lt;pre&gt;java -classpath $JETTY_HOME/lib/jetty-util-6.1-SNAPSHOT.jar:$JETTY_HOME/lib/jetty-6.1-SNAPSHOT.jar org.mortbay.jetty.security.PKCS12Import van-c.p12 /home/foo/temp/keystore&lt;/pre&gt;&lt;br /&gt;(Zobrané z &lt;a href="http://docs.codehaus.org/display/JETTY/How+to+configure+SSL"&gt;návodu pre SSL v Jetty, step 3b&lt;/a&gt;).&lt;p/&gt;&lt;br /&gt;Ako obyčajne, nášho klienta chceme testovať automatizovane (Jetty). Vyrobíme keystore pre Jetty s privátnym kľúčom (v tomto keystore musí byť len jeden kľúč - ak je ich tam viac, Jetty si proste podľa nejakeho algoritmu vyberie jeden. Skúšal som kľúč uložiť pod aliasom jetty, ale nezabralo):&lt;br /&gt;&lt;pre&gt;openssl pkcs12 -export -in mars-server.crt -inkey mars-server.key -name "Mars Server" -out mars-server.p12&lt;br /&gt;keytool -importkeystore -srckeystore mars-server.p12 -srcstoretype PKCS12 -destkeystore /home/foo/temp/keystore.jetty&lt;/pre&gt;&lt;br /&gt;Naštartujeme Jetty:&lt;br /&gt;&lt;pre&gt;public static class SimpleServlet extends HttpServlet {&lt;br /&gt;  @Override&lt;br /&gt;  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {&lt;br /&gt;    resp.getWriter().append("HAHAHAAAAA");&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;server = new Server(40000);&lt;br /&gt;final SslSocketConnector c = new SslSocketConnector();&lt;br /&gt;c.setPort(40001);&lt;br /&gt;c.setMaxIdleTime(30000);&lt;br /&gt;c.setKeystore("/home/foo/temp/keystore.jetty");&lt;br /&gt;c.setKeyPassword("PASSWORD");&lt;br /&gt;c.setTruststore("/home/foo/temp/keystore.jetty");&lt;br /&gt;c.setTrustPassword("PASSWORD");&lt;br /&gt;server.addConnector(c);&lt;br /&gt;final ServletHandler h = new ServletHandler();&lt;br /&gt;h.addServletWithMapping(SimpleServlet.class, "/");&lt;br /&gt;server.addHandler(h);&lt;br /&gt;server.start();&lt;/pre&gt;&lt;br /&gt;a klientom ideme na &lt;a href="https://localhost:40001/foo"&gt;https://localhost:40001/foo&lt;/a&gt;.&lt;br /&gt;Ak chceme použiť klientske certifikáty s Jetty, rovno sa priznám, že neviem, ako na to. Teoreticky treba zapnúť vyžadovanie certifikátov:&lt;br /&gt;&lt;pre&gt;c.setWantClientAuth(true);&lt;/pre&gt;&lt;br /&gt;a v servlete treba prejsť všetky certifikáty:&lt;br /&gt;&lt;pre&gt;X509Certificate[] certs = (java.security.cert.X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");&lt;/pre&gt;&lt;br /&gt;Moje pokusy ale skončili tým, že &lt;code&gt;certs&lt;/code&gt; bolo proste &lt;code&gt;null&lt;/code&gt; a hotovo. Nechávam to zatiaľ otvorené.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8633692949262878937?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8633692949262878937/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8633692949262878937' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8633692949262878937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8633692949262878937'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/08/ssl-https-java.html' title='SSL, HTTPS a Java'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-4991743610930103706</id><published>2009-06-22T00:45:00.000-07:00</published><updated>2009-06-22T01:11:00.000-07:00</updated><title type='text'>Výhody monopolu</title><content type='html'>Predstavme si na chvíľu, že máme netbook, ktorý vydrží na batérii 11 hodín a stojí 170€. Nepotrebuje ventilátor, takže sa hodí aj do prašného prostredia. Týmito parametrami hravo strčí do vrecka Atom od Intelu, procesor, pri ktorom sa mobilný trh čudoval, či sa Intel nesekol v desatinnej čiarke pri udávanej spotrebe. Trh by mal takýto produkt vyslovene zožrať aj s navijakom, nie? &lt;a href="http://www.semiaccurate.com/2009/06/12/ms-steps-snapdragon/"&gt;Nie, na trh sa nedostane&lt;/a&gt;. Takže, výhoda monopolu je, že si môžeme kúpiť drahší netbook, ktorý má nižšiu výdrž na baterky a dostaneme k nemu OS, ktorý nechceme. Huge Success!&lt;p/&gt;&lt;br /&gt;A prečo dostávame niečo, čo nechceme a za čo musíme platiť? &lt;a href="http://blogs.zdnet.com/open-source/?p=4311#more-4311"&gt;Li Chang, Taipei Computer Association&lt;/a&gt;: Chceme podporovať Linux. Ak ale začnete od PC, bojíte sa Microsoftu. [Microsoft] chce znovu začať [robiť svoju monopolnú politiku] na smart-phone/PDA. Groklaw tú celú krásu &lt;a href="http://www.groklaw.net/article.php?story=20090619161307529"&gt;popisuje&lt;/a&gt;.&lt;p/&gt;&lt;br /&gt;Existuje taká otázka: mám kupovať dobrý chlieb od pekára, o ktorom sa vie, že je zlý (zlý v zmysle morálne zlý, podvodník, poslanec, spáva s vašou ženou a dĺži vám desať pív už 5 rokov, ale radšej nech si ich nechá, kto by s takým lotrom šiel na pivo)? Ako vidno, všetci majú vlastnosti pekára na háku a kupujú chleba. A potom sa čudujú, že existuje len jeden pekár a predáva drahý chlieb. A nadávajú na ľudí, ktorým ten chlieb nechutí ale musia si ho kupovať, lebo ho zadarmo dostávajú k električenke :-/&lt;p/&gt;&lt;br /&gt;Ujeté.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-4991743610930103706?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/4991743610930103706/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=4991743610930103706' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4991743610930103706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4991743610930103706'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/06/vyhody-monopolu.html' title='Výhody monopolu'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-934605134707398152</id><published>2009-06-21T09:25:00.001-07:00</published><updated>2009-06-21T10:58:52.561-07:00</updated><title type='text'>Bundlovanie Windows po druhé</title><content type='html'>Rok sa z rokom zišiel a znovu čas nadišiel, aby som sa obul do mojej obľúbenej firmy. Už dávnejšie som sa &lt;a href="http://vyzivus.blogspot.com/2008/11/hlasovanie-o-finanne-najvhodnejie-it.html"&gt;rozčuľoval&lt;/a&gt; nad bundlovaním&lt;br /&gt;Windows do notebookov. Ohľadne tohto som aj napísal do SOI:&lt;br /&gt;&lt;blockquote&gt;Dobrý deň,&lt;br /&gt;  v posledných rokoch sa u predajcov notebookov stalo bežné predávať notebooky s predinštalovaným Windows. Windows nie je možné z objednávky odobrať a je nutné ho kúpiť spolu s výrobkom, pričom nie je možné vrátiť len Windows a žiadať refundáciu. Chcem sa opýtať, či toto umelé preväzovanie dvoch rôznych produktov je právne v poriadku. Mnohí predajci taktiež neuvádzajú osobitne cenu notebooku a cenu Windows, čím môžu uviesť zákazníka v omyl, že Windows sú zadarmo a zákazník platí len za notebook. Keďže toto konanie sa mi taktiež nezdá správne, chcem sa vás opýtať, či je v súlade so zákonom.&lt;/blockquote&gt;&lt;br /&gt;hneď na druhý deň prišla odpoveď:&lt;br /&gt;&lt;blockquote&gt;Vážený spotrebiteľ,&lt;br /&gt;V súlade so zákonom o ochrane spotrebiteľa č. 250/2007 Z. z. v platnom znení predávajúci nesmie viazať predaj výrobku alebo poskytnutie služby na predaj iného výrobku alebo služby, pričom za viazanie predaja sa nepovažuje ak dochádza k predaju aj samostatne alebo ak viazanie predaja je podmienené technickou nemožnosťou samostatného predaja výrobkov alebo služieb. Predmetné skutočnosti je potrebné preverovať individuálne u konkrétneho predávajúceho v závislosti od prevádzkových podmienok predaja. Požadované skutočnosti je predávajúci preukázať.&lt;/blockquote&gt;&lt;br /&gt;Je bundlovanie Windows porušenie zákona 250/2007? Podľa mňa áno:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;K samostatnému predaju toho istého notebooku bez Windows nedochádza (nie je to v cenníku a predajca to neumožňuje)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Je technicky možné predávať notebook a Windows samostatne&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Z toho mi ale vyplýva, že zákon 250/2007 porušujú vlastne všetci predajcovia počítačov a aj všetky veľkosklady. A teraz mám poslať zoznam všetkých predajcov SOIke, nech ich preveria? To asi nie :) Ale dať podnet len na jedného predajcu je podľa mňa podraz. Hneď vysvetlím, prečo.&lt;p/&gt;&lt;br /&gt;Predstavme si, že podám podnet na firmu Q. SOI príde do firmy Q, nebude jej umožnená kúpa notebooku bez Windows, zistí sa porušenie zákona a bude zjednaná náprava, prípadne aj nejaká pokutka. Firma Q teda začne predávať notebooky bez Windows, a bude umožňovať samostatnú kúpu CD s OEM Windows. Na pokutu doplatí spotrebiteľ. Na to jej Microsoft zvýši cenu Windows, veď predsa dohoda je jasná, všetky notebooky strednej a vyššej triedy musia obsahovať Windows, čo znamená ďaľšie zvýšenie ceny. Tým sa firma Q znevýhodní na trhu, čo ju môže proste potopiť. Pikantné na tomto príbehu je, že firma Q za to v podstate nemôže a skutočný vinník, Microsoft, ostane nepotrestaný.&lt;p/&gt;&lt;br /&gt;Ako dať teda Microsoftu cez prsty? &lt;a href="http://ec.europa.eu/idabc/en/document/7228"&gt;Existuje iniciatíva EK&lt;/a&gt;, akurát je už dosť stará, a vyzerá byť mŕtva. Tudy cesta nevede, jedine ak podnet na EK. Ako jediné použiteľné východisko mi skutočne pripadá masová previerka IT firiem. To be continued...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-934605134707398152?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/934605134707398152/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=934605134707398152' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/934605134707398152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/934605134707398152'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/06/bundlovanie-windows-po-druhe.html' title='Bundlovanie Windows po druhé'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-2423279513628676903</id><published>2009-06-19T06:18:00.000-07:00</published><updated>2009-06-19T07:41:25.439-07:00</updated><title type='text'>Zistite si fakty!</title><content type='html'>Po úspešnej komediálnej akcii Get The Facts sa nás Microsoft pokúša rozosmiať znova. Dámy a páni, potlesk, prichádza &lt;a href="http://www.microsoft.com/windows/internet-explorer/get-the-facts/browser-comparison.aspx"&gt;IE8: Get The Facts&lt;/a&gt;. Haha, bavíte sa? Nie? Aha, ono to MS zase myslí vážne! Hmmmmm....&lt;p/&gt;&lt;br /&gt;Ale ono to je fakt vtipné! Napríklad MS si fakt myslí, že má lepšiu security ako Firefox a Chrome. Asi by to mali vysvetliť tým miliónom neborákov, ktorí dostali vírus práve cez IE. Určite to bude minimálne tak kvalitný matroš ako Windows Firewall:&lt;p/&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8PWqDMzitsY/SjuW5_drS8I/AAAAAAAAAA4/tRxh77XoJPo/s1600-h/microsoft-windows-xp-with-firewall.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 252px;" src="http://4.bp.blogspot.com/_8PWqDMzitsY/SjuW5_drS8I/AAAAAAAAAA4/tRxh77XoJPo/s320/microsoft-windows-xp-with-firewall.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5349034905465211842" /&gt;&lt;/a&gt;&lt;br /&gt;Privacy už má aj Chrome, pre Firefox existuje extension. K Easy of Use sa vyjadrovať nebudem, lebo FF aj Chrome mi plne vyhovuje, a pristavím sa pri kolonke Web Standards. Toto už smiešne nie je, je to skôr trápne, frustrujúce, je to výsmech do tváre všetkým chudákom, ktorí museli optimalizovať stránky pre IE6 a IE7 javascriptom&lt;br /&gt;&lt;blockquote&gt;if(IE){ do tons of fucked up shit } else { everybody else's predictable behavior }&lt;/blockquote&gt;&lt;br /&gt;Je to asi ako keby Čína zrazu prehlásila, že dodržuje ľudské práva, pretože už nevyrezáva ľudom orgány zaživa. Rozdiel je ten, že Číne na takú hovadinu skočia akurát tak súdruhovia z KĽDR a nejakí prežívajúci komunisti, Microsoftu to ale všetci veselo žerú. O výsledkoch &lt;a href="http://www.zive.sk/Bleskovky/Internet-Explorer-8-a-ACID3-test/sc-4-a-281895/default.aspx"&gt;ACID 3&lt;/a&gt; radšej pomlčím.&lt;p/&gt;&lt;br /&gt;Poďme ďalej. Developer tools: pre Firefox existuje FireBug a keď MS zbadá, čo kuchtí Google, fajka pri tomto bode im od hanby zmizne sama. Reliability: to, čo ponúka FF a Chrome, mi plne stačí. Customizability: úžasné, MS konečne pozná taby, a hneď sa nafukuje ako ropucha. Compability: ďaľší výsmech, ktorý naštve o to viac, že je pravdivý. Terajšia situácia je totiž výsledok klasickej Microsoftej taktiky &lt;a href="http://en.wikipedia.org/wiki/Embrace,_extend_and_extinguish"&gt;EEE&lt;/a&gt;, ktorou sa odvážia v tom pamflete ešte chváliť.&lt;p/&gt;&lt;br /&gt;Zaujímavý bod je Manageability: vie mi niekto vysvetliť, čo konkrétne je Guidance a Enterprise tools? Pripadá mi to ako reklamy na predaj lešteného prdu vo forme Máme [BUZZWORD] a dáme vám k tomu zadarmo WS sadu na brúsenie nožov. Na záver performance. Neviem síce, čo merali (linka na nejaké relevantné výsledky samozrejme nikde nie je), ale &lt;a href="http://www.zive.sk/Bleskovky/Internet-Explorer-8-a-ACID3-test/sc-4-a-281895/default.aspx"&gt;javascript to určite nebol&lt;/a&gt;.&lt;p/&gt;&lt;br /&gt;Keby mi takúto paranormálnu štúdiu ukázal nejaký kravaťák, tak sa na tom tak maximálne zasmejem, ale keď to so všetkou vážnosťou tvrdí najväčšia IT firma, dostávam pocit, že realita okolo mňa sa krúti a prispôsobuje tomu pamfletu, až tomu nakoniec veria všetci. To, že na nete je milión stránok, ktoré ako pomník ukazujú IE-related quirks je irelevantné. Nevadí. Najprv vás ignorujú, potom s vami bojujú a potom sa na nich všetci vyserú :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-2423279513628676903?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/2423279513628676903/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=2423279513628676903' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2423279513628676903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2423279513628676903'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/06/zistite-si-fakty.html' title='Zistite si fakty!'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_8PWqDMzitsY/SjuW5_drS8I/AAAAAAAAAA4/tRxh77XoJPo/s72-c/microsoft-windows-xp-with-firewall.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-7783210738769109070</id><published>2009-06-09T00:28:00.001-07:00</published><updated>2009-06-09T00:34:20.833-07:00</updated><title type='text'>Japanese audio in JRPGs sold in Western countries</title><content type='html'>This is a petition to let Square-Enix know that Japanese voice acting is much, much better than the English dub, often made very poorly and we'd very much like the Japanese audio to be included in JRPGs along with English dub. Often the English dub is so poor that the essence and enjoyability of the game is basically destroyed (Persona 3 FES, Persona 4). &lt;a href="http://www.petitiononline.com/ff13ja/petition.html"&gt;So, Square-Enix, include Japanese voice acting in FF13!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-7783210738769109070?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/7783210738769109070/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=7783210738769109070' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7783210738769109070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7783210738769109070'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/06/japanese-audio-in-jrpgs-sold-in-western.html' title='Japanese audio in JRPGs sold in Western countries'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6040459638444992385</id><published>2009-05-29T06:43:00.000-07:00</published><updated>2009-05-29T07:04:09.682-07:00</updated><title type='text'>Java a logovanie</title><content type='html'>Kde bolo, tam bolo, bola jedna Java a tá logovala cez log4j. Nakonfigurovať log4j nebolo zrovna jednoduché, bolo to trochu zložité, vlastne to bola Štátna Skúška Z Log4j, a nikto si to nikdy nevedel poriadne zapamätať. Vymlátiť z log4j, prečo na náš konfigurák prdí, je skoro nemožné, a tak je konfigurácia Java loggera stále pútavá skupinová hra s názvom Hádaj, Prečo To Nefunguje.&lt;p/&gt;Tak by to ale byť nemuselo, riekli si Slneční ľudia, však logovanie je vec, ktorá mala predsa byť v Jave, a nie v nejakom externom jar! Svetlo sveta teda uzrelo java.util.logging, ktorého konfigurácia je tak jednoduchá, že je až nepoužiteľná. Celý ten zázrak sa konfiguruje cez systémové properties, čo je gebuzina sama o sebe. Najlepšie ale na tom celom je, že mená týchto properties sú asi tajné, lebo sú tak dômyselne ukryté, že nájsť ich vyžaduje polhodinovú konzultáciu s ujom Gúglom. V snahe dať ten bordel dokopy predkladám jednoduchú tabuľku v nádeji, že s jej pomocou bude konfigurácia loggerov iba 10minútová záležitosť.&lt;br /&gt;&lt;table border="1"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Frejmvork&lt;/th&gt;&lt;th&gt;Kde je konfigurák&lt;/th&gt;&lt;th&gt;Príklad konfiguráku&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;log4j&lt;/td&gt;&lt;td&gt;&lt;a href="http://logging.apache.org/log4j/1.2/manual.html#defaultInit"&gt;Default initialization procedure&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://logging.apache.org/log4j/1.2/manual.html#defaultInit"&gt;Kúsok nad Default initialization procedure :-)&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;java.util.logging&lt;/td&gt;&lt;td&gt;&lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/LogManager.html"&gt;Javadoc k LogManageru!&lt;/a&gt; WTF? Prečo to sakra nie je v manuáli?&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.exampledepot.com/egs/java.util.logging/Props.html"&gt;Java Almanac&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6040459638444992385?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6040459638444992385/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6040459638444992385' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6040459638444992385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6040459638444992385'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/05/java-logovanie.html' title='Java a logovanie'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-3293400451749073412</id><published>2009-04-23T04:44:00.000-07:00</published><updated>2009-04-23T05:01:24.613-07:00</updated><title type='text'>JasperReports a auto-boxing</title><content type='html'>Keďže písať do reportov výrazy typu &lt;code&gt;Boolean.valueOf($F{id}.intValue() != 0)&lt;/code&gt; je pekne otravné, prečo nevyužiť auto-boxing v Java5 a použiť zápis &lt;code&gt;$F{id} != 0&lt;/code&gt;? Nikde na nete som takýto návod nenašiel, a pritom je to úplne jednoduché: v JasperReports stačí nastaviť kompilátor na podporu 1.5. Ako? Nastavenia pre kompilátor sa vyrábajú v metóde JRJdtCompiler.getJdtSettings(). Tam sa dozvieme, že properties sa čítajú dvoma spôsobmi:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;zo súboru &lt;code&gt;jasperreports.properties&lt;/code&gt; (dá sa zmeniť systémovou property &lt;code&gt;net.sf.jasperreports.properties&lt;/code&gt;). Presnejšie, Jasper najprv skúsi otvoriť &lt;code&gt;jasperreports.properties&lt;/code&gt; ako resource, potom ako súbor, a nakoniec ako URL&lt;/li&gt;&lt;br /&gt;&lt;li&gt;súčasne sa berú do úvahy systémové properties začínajúce &lt;code&gt;org.eclipse.jdt.core.*&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Čo z toho vyplýva?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pre zapnutie autoboxingu v iReports stačí dať súbor &lt;code&gt;jasperreports.properties&lt;/code&gt; do adresára &lt;code&gt;bin/&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Pre zapnutie autoboxingu v samotnej knižnici stačí dať súbor &lt;code&gt;jasperreports.properties&lt;/code&gt; do rootu nejakeho jar súboru ako resource.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;code&gt;jasperreports.properties&lt;/code&gt;:&lt;pre&gt;org.eclipse.jdt.core.compiler.compliance=1.5&lt;br /&gt;org.eclipse.jdt.core.compiler.source=1.5&lt;br /&gt;org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-3293400451749073412?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/3293400451749073412/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=3293400451749073412' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3293400451749073412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3293400451749073412'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/04/jasperreports-auto-boxing.html' title='JasperReports a auto-boxing'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-4257686434177962071</id><published>2009-04-10T10:21:00.000-07:00</published><updated>2009-04-10T10:46:02.831-07:00</updated><title type='text'>JavaVM monitoring</title><content type='html'>Určite sa vám párkrát stalo, že JavaEE server zrazu prestal fungovať správne, alebo začal byť neskutočne pomalý (hlavne keď Hudson vyžral všetku pamäť :). Ak sa chcete pozrieť problému na zúbok, máte v podstate tri možnosti:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Použiť monitoring JavaEE servera&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JMX a JConsole&lt;/li&gt;&lt;br /&gt;&lt;li&gt;jstatd a VisualVM&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ak JavaEE server má dobrú podporu monitoringu - funkčnú (že, WebSphere?) a nie je to komplikované ako sviňa, takže sa to dá používať aj untermenschmi (že, WebSphere?), tak ďalej ani nemusíte čítať, choďte si monitorovať :-p . My, obdarení podpriemerným alebo chýbajúcim monitoringom, sa pokúsime natipovať päť JVM parametrov, aby Java zapla remote JMX prístup. To v kombinácii s neskutočne debilnými chybovými hláškami z JConsoly typu "Nepodarilo sa mi konektnúť" nemusí ísť dvakrát hladko. Znechutení vyskúšame VisualVM, čo je síce super nástroj, ale remote funguje len ak máte Java6 aj na klientovi aj na serveri. Presnejšie, po spustení jstatd na Java5 mi to hádzalo zaujímavé chybové hlášky, po ktorých pôvode som radšej nepátral.&lt;p/&gt;&lt;br /&gt;Nezúfajte! Na svete existujú ľudia, ktorých tento stav pekne nasral (napríklad ja) a zbúchali jednoduchý remote monitoring. Netreba nič nastavovať, stačí deploynúť jednu WAR aplikáciu do aplikačného servera a sme hotoví - celý monitoring funguje na pozadí a front-end je priamo v aplikácii: prachobyčajné http. Heslo dňa bolo jednoduchosť a tak aplikácia nemá žiadnu security ani nevyžaduje žiadny komplikovaný setup - ako šampón Deploy'n'Go. Samozrejme, dávať túto aplikáciu na produkčný server bez zabezpečenia je ako sadnúť si do ohňa a čakať, že zhoria len chlpy na zadku - tu musí prístup k aplikácii obmedziť admin. Pri setupe cluster+loadbalancer sa to môže správať dosť zaujímavo - v podstate sa pri každom refreshi môže zobraziť štatistika náhodnej nody v clusteri :-) Nuž, nič nie je dokonalé.&lt;p/&gt;&lt;br /&gt;Projekt sa volá WebVM, screenshoty a download linky nájdete na &lt;a href="http://baka.sk/webvm"&gt;stránkach projektu&lt;/a&gt;, dúfam, že vám bude chutiť.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-4257686434177962071?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/4257686434177962071/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=4257686434177962071' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4257686434177962071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4257686434177962071'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/04/javavm-monitoring.html' title='JavaVM monitoring'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8384682089517814015</id><published>2009-04-04T07:05:00.000-07:00</published><updated>2009-04-04T07:19:22.258-07:00</updated><title type='text'>Sociálne siete</title><content type='html'>Celý tento humbuk ohľadne sociálnych sietí ma úplne obišiel. Vôbec nechápem, prečo by mala polka sveta vedieť (a načo to tej polke sveta bude), že som práve ožraný. Zdá sa mi, že Xichtoknihu vymysleli emovia pre emov, aby sa mohli navzájom uisťovať, že sa práve cítia táááákto smutne. Neviem, či si uvedomujú, že sociálne siete sú mokrým snom ŠTB - občania sami a dobrovoľne vydávajú ľahko a rýchlo kategorizovateľné a dostupné informácie o tom, ako sa cítia a s kým sa stýkajú. Miesto čítania kopy nezmyselných správ, notifikácií a hrania Mafie radšej poďme offline na pivo :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8384682089517814015?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8384682089517814015/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8384682089517814015' title='1 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8384682089517814015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8384682089517814015'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/04/socialne-siete.html' title='Sociálne siete'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-1555371539864413024</id><published>2009-04-04T06:56:00.000-07:00</published><updated>2009-04-04T07:44:36.327-07:00</updated><title type='text'>Napaľovanie a Gaffitter</title><content type='html'>Určite ste sa už pokúšali napchať čo najviac dát na DVD, a iste uznáte, že robiť ručne je to pekná otrava. Dnes, po družnej e-debate, sa Quax vytasil s &lt;a href="http://gaffitter.sourceforge.net/"&gt;Gaffitterom&lt;/a&gt; a ručné napasovávanie súborov na DVD je minulosť:&lt;br /&gt;&lt;blockquote&gt;Genetic Algorithm File Fitter (gaffitter) is a command-line software written in C++ that extracts --via genetic algorithm-- subsets of an input list of files/directories that best fit the given volume size (target), such as CD, DVD and others.&lt;/blockquote&gt;&lt;br /&gt;Čo tento zázrak genetického inžinierstva vie? Jednoducho povedané, efektívne rozhádzať súbory na viacero rovnako veľkých volume. Napríklad, máme tonu mp3 albumov a chceme ich napáliť na DVD:&lt;br /&gt;&lt;pre&gt;$ gaffitter -t 4480m --bs 2048 *&lt;br /&gt;Album1&lt;br /&gt;Album2&lt;br /&gt;...&lt;br /&gt;Album5&lt;br /&gt;&lt;br /&gt;[1] Sum: 4.38GiB of 68.65GiB, Diff: 0Bytes, Files: 5/7&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Čiže gaffitter vypíše zoznam albumov (adresárov) pre každé DVD. Keďže manuálne prepisovať tento zoznam do napaľovacieho softu je trochu hlúpe, stiahneme si skript pre Brasero &lt;code&gt;gaff-brasero&lt;/code&gt; (&lt;code&gt;gaff-k3b&lt;/code&gt; existuje tiež, ale nefungoval mi až tak dobre):&lt;br /&gt;&lt;pre&gt;$ gaff-brasero --dvd *&lt;/pre&gt;&lt;br /&gt;Ak chceme napaľovať veľké adresáre s veľkými súbormi (čojaviem, seriály, anime), musíme skript trochu premasírovať - v opačnom prípade by všetky adresáre ignoroval ako príliš veľké. Ak nevadí, že časti seriálu budú náhodne rozhádzané po DVDčkach, môžeme použiť:&lt;br /&gt;&lt;pre&gt;$ find * -print0|xargs -0 gaff-brasero --dvd&lt;/pre&gt;&lt;br /&gt;Pozor, gaffitter urobí jednu nepríjemnú vec - podadresáre sú v Brasero projekte "presunuté" do rootu projektu. Ako toto obísť, zatiaľ neviem.&lt;p/&gt;&lt;br /&gt;Ak chceme mať čo najviac častí z jedného seriálu na jednom DVD, za cenu väčšieho strateného miesta môžeme použiť&lt;br /&gt;&lt;pre&gt;$ find * -print0|sort -z|xargs -0 gaff-brasero --dvd --split&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-1555371539864413024?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/1555371539864413024/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=1555371539864413024' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/1555371539864413024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/1555371539864413024'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/04/napalovanie-gaffitter.html' title='Napaľovanie a Gaffitter'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-7328053959499930402</id><published>2009-03-30T11:04:00.000-07:00</published><updated>2009-09-02T13:48:21.380-07:00</updated><title type='text'>Zmena rebríčka linuxových grafických driverov</title><content type='html'>Keďže intel xorg driver sa preukázal ako nesmierne mizerný driver, mením poradie shitnoty na:&lt;br /&gt;&lt;table border="1"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Hit&lt;/th&gt;&lt;th&gt;&lt;br /&gt;&lt;/th&gt;&lt;th&gt;&lt;br /&gt;&lt;/th&gt;&lt;th&gt;&lt;br /&gt;&lt;/th&gt;&lt;th&gt;Shit&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;NVidia binary&lt;/td&gt;&lt;td&gt;ATI OSS&lt;/td&gt;&lt;td&gt;ATI binary&lt;/td&gt;&lt;td&gt;NVidia OSS&lt;/td&gt;&lt;td&gt;Intel OSS&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;+ Grafické klikátko&lt;br/&gt;+ Nemrzne&lt;br/&gt;- Nepodporuje xrandr&lt;/td&gt;&lt;td&gt;+ xrandr, just works&lt;br/&gt;- Niekedy (zriedkakedy) sa rozsype celý obraz a treba switchnúť do konzoly a späť&lt;/td&gt;&lt;td&gt;+ Má xrandr aj grafické klikátko&lt;br/&gt;- nepodporuje staršie Radeony (9550)&lt;br/&gt;+ nepadá&lt;/td&gt;&lt;td&gt;- Nemá 3D&lt;/td&gt;&lt;td&gt;- Mrzne (zriedkavo pri 2D, často pri 3D, Compiz a videu)&lt;br/&gt;+ xrandr, 3D&lt;/td&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Edit: táto tabuľka už dávno neplatí, všetko sa totiž na dobré obrátilo a Intel driver je už pekne stabilný. Naopak, prepad by zažil ATI binary driver, keďže pri fullscreen prehrávaní youtube videa sa kompletne rozsype obraz. Nuž, nemôžeš mať všetko :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-7328053959499930402?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/7328053959499930402/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=7328053959499930402' title='3 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7328053959499930402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/7328053959499930402'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/03/zmena-rebricka-linuxovych-grafickych.html' title='Zmena rebríčka linuxových grafických driverov'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-2419111484433420612</id><published>2009-03-27T06:20:00.000-07:00</published><updated>2009-03-29T06:30:35.243-07:00</updated><title type='text'>Slovenské rozloženie klávesnice</title><content type='html'>Počiatok Slovenského rozloženia klávesnice sa datuje do roku 1850, keď Ďuro, vracavší sa z Ameriky, nesie hrdo prvý písací stroj cez Dunaj. Cestou sa potkne a všetky tlačítka okrem písmen mu vypadnú. Keďže si vôbec nepamätá pôvodné rozloženie, tak ich dá nazad v náhodnom poradí. Pred dedinou ho ešte napadne: ak tam nebude mäkčeň a dĺžeň, tak ho hentá opilecká trojka Štúr-Hurban-Hodža vysmeje! Vyhodí teda plus a rovná sa, šak gdo potrebuje plus a hentú rovnú krepovinu. Šak oni budú čumieť, zastrája sa Ďuro, vymení z a y, a hajde do krčmy. A preto si, milé deti, teraz musíme zvyknúť, že výkričník je úplne v prdeli na opačnej strane klávesnice a kopa znakov chýba. Blbé, ale naše. Dobrú noc!&lt;p/&gt;&lt;br /&gt;Výborný nápad je zrušiť čísla a dať tam miesto nich úplne nesúvisiace písmená. Chladné! Ako vystrihnuté z návodu Urobme veci nepoužiteľné. Musím uznať, že to mohlo byť horšie: nezabúdajme na frantíkov a ich nebetučné azerty. Alebo Nemci - nepamätám sa síce na ten layout, ale viem, že som nebol schopný napísať ani blbé priradenie.&lt;p/&gt;&lt;br /&gt;Rád by som ešte poznal to hovädo, čo si myslí, že mi zvýši produktivitu, keď mi vyhne klávesnicu, zgrupuje funkčné klávesy po tri, úplne prehádže onú šesticu Insert, Home atď, a navyše ju posunie nižšie, takže miesto Home je Power Off. Ak sa niečo zväčšilo, tak to bol počet rebootov. Mám chuť založiť Nadáciu proti SK layoutu a bazmekových klávesníc, prispejte nám dvomi percentami, ďakujeme! Výťažok pôjde na vraždy ľudí, ktorí vymýšľajú túto a podobné voloviny.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-2419111484433420612?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/2419111484433420612/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=2419111484433420612' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2419111484433420612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2419111484433420612'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/03/slovenske-rozlozenie-klavesnice.html' title='Slovenské rozloženie klávesnice'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-4018336335444400733</id><published>2009-03-27T06:01:00.000-07:00</published><updated>2009-03-30T11:03:17.335-07:00</updated><title type='text'>Čaro Linuxu</title><content type='html'>Linux je ako zlá žena - začne strečkovať v najnevhodnejší moment. Človek sa v pohodičke skydne do postele, otvorí pivo s úmyslom pustiť si seriál, zapne spoľahlivý mplayer, a - nejde zvuk. Nič, nada, null. Pustím Amarok, spadne. Pustím Rhythmbox, tvári sa, že hrá, ale nič nepočuť. Nadávajúc zabijem pulseaudio a po jeho piatich reštartoch zrazu zvuk magicky naskočí. Sakra, to čo sme, späť na Windows?!? Mimochodom, viete čo majú spoločné Eclipse, Windows a Ubuntu alpha? Po každom update si môžete/musíte zahrať hru Program, Vráť Sa Späť Do Funkčného Stavu.&lt;p/&gt;&lt;br /&gt;No nič, nadávajúc zaleziem do postele, len aby som v polovici druhej časti zase vyliezol, pretože &lt;a href="https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/327844"&gt;zmrzne intel driver aj s celým xorgom&lt;/a&gt;. S povzdychom to reštartnem cez trojhmat Alt+Sysrq+S U B a zaujmem pozíciu v posteli. Časť 6 - MPlayer crashed by bad usage of CPU/FPU/RAM. Pohoda, na to sme pripravení už od minula, VLC a tvrdé drogy (pivo, šak je to alkohol) zachraňujú situáciu a ja idem pozerať ďalej, v napätí, čo ešte spadne. Dám vám vedieť.&lt;p/&gt;&lt;br /&gt;Úprava: 7. časť - od začiatku bolo počuť len &lt;a href="https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/340631"&gt;pískanie, praskanie a chrchlanie&lt;/a&gt; - treba počkať, kým sa milosťpán pulseaudio zabije a znovu vstane z popola. Prebojoval som sa do ôsmej časti, kde pre zmenu spadol intel driver, dokonca dva krát. Všetko zlé je na niečo dobré - po tvrdom reštarte aspoň &lt;a href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/315809"&gt;zvuk naskočí v poriadku&lt;/a&gt;. Zapísať si za uši: &lt;ul&gt;&lt;li&gt;keď si chcem odskočiť na hajzeľ, &lt;a href="https://bugs.launchpad.net/ubuntu/+source/mplayer/+bug/212493"&gt;nepauzujem mplayer&lt;/a&gt;!&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Keď zmrzne xorg a nefunguje klávesnica, možno sa dá zabiť pomocou &lt;a href="http://en.wikipedia.org/wiki/Magic_SysRq_key"&gt;Alt+SysRq+R&lt;/a&gt; a Ctrl+Alt+Backspace&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Úprava 2: Nedá. Ale aspoň som zistil, ako čisto zabiť linux: Alt+SysRq+REISUB.&lt;p/&gt;&lt;br /&gt;Úprava 3: Vďaka opraveniu &lt;a href="https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/330814"&gt;bugu 330814&lt;/a&gt; je konečne PulseAudio pomerne stabilné.&lt;p/&gt;&lt;br /&gt;Úprava 4: Dnes mi intel xorg driver zmrzol asi 10x (je to čipset G45, onboard grafika GMA X4500HD). Je nesmierne pútavé sledovať film, ktorého prehrávanie v polovici zmrzne, a po reboote to zmrzne skôr, než doseekujete na inkriminovanú pozíciu. Takže, ak chcete od grafickej karty viac ako "Jéj, vieš čo, vykresli mi tuná červený štvorček", od intelu ruky preč! Mrzne proste všetko okrem 2D: 3D, prehrávanie videa. Pripomína mi to jeden starý príbeh: Prešiel som všetkým: DOS, Windows 95, W98, W2000, WXP, Ubuntu, Gentoo, Fedoru, a na staré kolená chcem mať svätý pokoj, a tak mám Mac. Možno je na to čas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-4018336335444400733?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/4018336335444400733/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=4018336335444400733' title='2 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4018336335444400733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/4018336335444400733'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/03/caro-linuxu.html' title='Čaro Linuxu'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-5787636031112162817</id><published>2009-03-25T11:08:00.000-07:00</published><updated>2009-03-25T11:48:49.544-07:00</updated><title type='text'>A máme mobilný flat</title><content type='html'>Pri duopole dvoch nemenovaných operátorov a Palackovom zrušenom tendri bol mobilný flat buď mokrý sen, alebo sakra drahá záležitosť. Najmladší operátor však rúca absurdity ako 10mb za 4€ a sebavedome predstavuje nový dátový balíček. Najprv nevýhody: nemožnosť použiť T-Mobile vykrývače (z čoho vyplýva možné nižšie pokrytie), a pomerne malá prenosovú rýchlosť. Výsledky podľa &lt;a href="http://www.speedtest.net/"&gt;speedtest.net&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ping: 1400ms&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Download: 110kbps (13,7kb/s)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Upload: 40kbps (5kb/s)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Tak, nevýhody sme si zhrnuli, a teraz sa na nich schuti zasmejeme, pretože je to FLAT, 6€ je jeho cena a môžete si ho kúpiť aj na prepaid kartu. Dža. (Mokrý) sen sa napĺňa, Muad-Dib!&lt;p/&gt;&lt;br /&gt;Aktivovať sa tento zázrak dá jednoducho, stačí zavolať tete operátorke. V mobile stačí nastaviť APN na o2internet, žiadny login ani password, všetko vypnúť, okrem kompresie. Nastaviť notebook je triviálne, pripojíme telefón na komp a Network Manager sám ponúkne wizarda na nové broadband pripojenie. Vyberieme sk/orange, uložíme ho a zeditujeme: Number je *99***1#, user/pass nie je žiadny, APN je o2internet a v IPv4 Settings vyberieme metódu Automatic (PPP). Nevyberajte Automatic (PPP) Adresses Only, inak vám nenastaví DNS. A je to! Konečne sme pripravení na Android ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-5787636031112162817?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/5787636031112162817/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=5787636031112162817' title='2 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5787636031112162817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5787636031112162817'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/03/mame-mobilny-flat.html' title='A máme mobilný flat'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8940909245699391565</id><published>2009-03-18T05:46:00.000-07:00</published><updated>2009-03-18T07:39:01.182-07:00</updated><title type='text'>GlassFish2.1 a DB2</title><content type='html'>Ja viem, ja viem! Je to príšerná kombinácia neba a pekla, ale - také sú requirementy. A pred všemocnými requirementami sa dá len vzdychnúť, zohnúť sa v páse a roztiahnuť anál s vedomím, že to nebude krátke. Neviem síce prečo, ale pri použití čohokoľvek od IBM sa zrazu všetko začína ukrutne komplikovať, to bude asi nejaký fyzikálny zákon alebo čo.&lt;p/&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;strong&gt;Varovanie ministerstva zdravotníctva:&lt;/strong&gt; pred akoukoľvek prácou s DB2 odporúčame zrušiť pokladničky za nadávky.&lt;/blockquote&gt;&lt;br /&gt;Takže, máme GlassFish, DB2 a odpor k DB2. Informácia, že &lt;a href="http://docs.sun.com/app/docs/doc/820-4495/ghhvc?a=view"&gt;Sun má vlastné drivery&lt;/a&gt;, pôsobí ako blahodárna spŕška. Blahodárna spŕška sa ale rýchlo mení na úplne obyčajnú a sakra studenú sprchu po chybe&lt;br /&gt;&lt;pre&gt;Caused by: java.sql.SQLException: [sunm][DB2 JDBC Driver]This driver is locked for use with embedded applications.&lt;br /&gt;        at com.sun.sql.jdbc.base.BaseExceptions.createException(Unknown Source)&lt;br /&gt;        at com.sun.sql.jdbc.base.BaseExceptions.getException(Unknown Source)&lt;br /&gt;        at com.sun.sql.jdbc.base.BaseConnection.prepareStatement(Unknown Source)&lt;/pre&gt;&lt;br /&gt;Ušetrím vás detailov o sťahovaní a rozbaľovaní RPM balíčkov: svätá trojica &lt;code&gt;smbase.jar&lt;/code&gt;, &lt;code&gt;smdb2.jar&lt;/code&gt; a &lt;code&gt;smutil.jar&lt;/code&gt; proste nefunguje.&lt;p/&gt;&lt;br /&gt;Oficiálny driver samozrejme potrebuje kopu debilných natívnych knižníc, ktoré sa nedajú stiahnuť len tak, pretože by to nedajbože mohlo byť jednoduché. Nie. Najprv pekne stiahneme nejaký DB2 klient, čo má 530mb a je v ňom prd. Pauza na okienko vulgárnej slovenčiny. Stiahneme &lt;code&gt;db2exc_952_LNX_x86_64.tar.gz&lt;/code&gt; (proste celú DB2 express, napodiv je menšia ako onen DB2 klient). Tam nájdeme vytúžené libky v adresári expc/db2/linuxamd64/FILES/:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JAVA_SUPPORT_9.5.0.2_linuxamd64_x86_64.tar.gz/lib64/&lt;/li&gt;&lt;br /&gt;&lt;li&gt;BASE_CLIENT_9.5.0.2_linuxamd64_x86_64.tar.gz/lib64/&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Niekam ich skopčíme a GlassFish nastavíme &lt;a href="http://it-conservations.blogspot.com/2008/06/glassfish-configuration-for-db2.html"&gt;podľa tohto návodu&lt;/a&gt;. To ale samozrejme nestačí, treba ešte nastaviť LD_LIBRARY_PATH (najlepšie v ~/.bashrc) aby ukazovala do adresára s tými smradľavými knižnicami. Reštartnúť GlassFish, a! Chýba &lt;code&gt;libstdc++.so.5&lt;/code&gt;. Brainfuck pokračuje, prečo do kosmu nemohli súdruhovia z IBM spraviť driver ako jedno blbé jarko, že, vy spolok kreténov? &lt;code&gt;sudo apt-get install libstdc++5&lt;/code&gt;, reštart a ...&lt;p/&gt;&lt;br /&gt;Hovno! Posraté svinské špinavé hovno sa stane, prosím pekne, process s chudákom GlassFishom proste zdochne hneď ako sa pokúsi vyinštancovať ten všivavý vyjebaný DB2 driver. Jeden by sa z týchto sračiek zbláznil, fúú, fúú, brekeke, &lt;a href="http://www.youtube.com/watch?v=rfuMDM6yMwM&amp;feature=related"&gt;čú čú lavli muni muni mura muráá&lt;/a&gt;. No výborne, IBM, skvelá práca!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8940909245699391565?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8940909245699391565/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8940909245699391565' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8940909245699391565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8940909245699391565'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/03/glassfish21-db2.html' title='GlassFish2.1 a DB2'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6692169558358564320</id><published>2009-03-18T05:39:00.000-07:00</published><updated>2009-03-18T11:51:12.966-07:00</updated><title type='text'>Zbohom, Svet!</title><content type='html'>Sun zrejme dosť ťažko zasiahla finančná kríza a tak sa pokúša zachrániť predaním sa. Predstavme si na chvíľu, že ho &lt;a href="http://online.wsj.com/article/SB123735970806267921.html"&gt;kúpi IBM&lt;/a&gt;. Predstavme si, že GlassFish bude stopnutý alebo prerobený na obraz WebSphere, to isté NetBeans+Eclipse a MySQL+DB2. Predstavme si dokumentáciu ku GlassFish vo formáte a kvalite IBM dokumentácie - až ma striaslo. Doriti aj s IBM, to radšej spravme nadáciu na záchranu Sunu! Alebo keby ich zrazu koopilo Google ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6692169558358564320?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6692169558358564320/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6692169558358564320' title='5 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6692169558358564320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6692169558358564320'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/03/zbohom-svet.html' title='Zbohom, Svet!'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-917749579973338945</id><published>2009-02-28T05:23:00.000-08:00</published><updated>2009-02-28T05:50:46.892-08:00</updated><title type='text'>USB boot disk</title><content type='html'>Ja viem, som sto rokov za opicami, ale aj tak mi to nedá: USB boot disk je proste geniálny :-p  Nielen že sa z neho bootuje rýchlejšie, ako z CDčka, ale má jednu obrovskú výhodu: je zapisovateľný, takže si môžete vyladiť GUI po svojom a nastavenia vám ostanú, môžete si nahrať nové programy, atď. Proste úžasné, ako z telešopinku.&lt;p/&gt;&lt;br /&gt;Ako také niečo rozbehať? Ubuntu má program &lt;code&gt;usb-creator&lt;/code&gt;, ktorý to zvládne. Verzia v Jaunty je momentálne nefunkčná, nainštalujte &lt;a href="http://packages.ubuntu.com/intrepid/all/usb-creator/download"&gt;usb-creator-0.10&lt;/a&gt;. Ten vyžaduje, aby USB kľúč mal partition, tú môžeme vytvoriť napríklad pomocou gparted, alebo fdisk:&lt;br /&gt;&lt;pre&gt;sudo fdisk /dev/sdf&lt;/pre&gt;&lt;br /&gt;Najprv pomocou 'd' zmažeme všetky partície, potom pomocou 'n' jednu vyrobíme (Primary, 1, Enter). Potom spustíme &lt;code&gt;sudo usb-creator&lt;/code&gt;, zvolíme ISO image Ubuntu (ja som mal Jaunty Desktop alpha-5), usb disk (nástroj si ho sformátuje sám, stačí kliknúť na Format) a vybrať prvú možnosť (Stored in reserved extra space, stačí 128mb).&lt;p/&gt;&lt;br /&gt;Nástroj vyrobí jednu veľkú bootovateľnú FAT partíciu, na ktorú si môžete normálne ukladať dáta a je prístupná aj z LiveUSB v /cdrom. Ak nemáte radi FAT, alebo vám prekážajú súbory LiveUbuntu, cez gparted túto partíciu zmenšite, napríklad na veľkosť 1GB (voľba "Round to Cylinders" musí byť nezaškrtnutá, ináč vám to nenabootuje!) a vyrobte si novú partíciu, napríklad ext3. Hotovo! Už stačí len nezabudnúť, že všetky nastavenia a súbory mimo &lt;code&gt;/home/ubuntu&lt;/code&gt; budú po reboote stratené.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-917749579973338945?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/917749579973338945/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=917749579973338945' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/917749579973338945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/917749579973338945'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/02/usb-boot-disk.html' title='USB boot disk'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-5827535045812647426</id><published>2009-02-22T04:34:00.000-08:00</published><updated>2009-03-18T04:38:09.793-07:00</updated><title type='text'>Cesta z Mordoru</title><content type='html'>Horská lúčka, lemovaná vysokými voňavými jedľami, vtáci spevom oslavujú krásnu, slnkom zaliatu jar. Rozkoš vnímania celej tej krásy a dýchať čistý vzduch je neopísateľná.&lt;p&gt;&lt;br /&gt;Atď, atď, žiaľ, nie som básnik, a tak vám to musím vyrozprávať sedliackymi slovami. Nie, ešte mi nepreskočilo - len vám chcem povedať, že sa mi podarilo dostať z Mordoru. Stalo sa niečo, v čo som už vôbec nedúfal, že sa stane - pochytila ma radosť z programovania. A pritom to bolo tak smiešne jednoduché. Proste zmena.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Najprv zmena IDE, krok od Eclipse môže byť jedine správnym krokom. Prvý pokus: IDEA. IDEA je síce vynikajúca, ale nesadla mi - príliš dlho sa spúšťala a neskutočne dlho otvárala projekt (išlo síce o 80-modulový Maven2 projekt, ale 5 minút je jednoducho veľa). A tak som skúsil NetBeans a rovno som pri ňom ostal. Priama podpora Maven2 (jednoducho otvoríte pom.xml ako projekt, to je celé), šikovné XML a HTML editory bez nutnosti inštalovania kopy gebuzín, jednoduchá a funkčná inštalácia a update pluginov - dokonca sa vám to nerozhasí so 40% pravdepodobnosťou na rozdiel od Eclipse. Vidno, že vývojári pluginov do NetBeans nestrávia polovicu času integrovaním sa do šialene podrobného (ba priam až vysoko granulárneho) API Eclipse a OSGi.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Krok dva: zbaviť sa OpenEJB a WebSphere. Kým OpenEJB je bugový preto, lebo jeho vývojári nestíhajú (inak, sú to veľmi milí a ochotní ľudia), WebSphere je bugová proste preto, lebo je to obchodná stratégia IBM. Tudy tedy cesta nevede, a tak som skúsil Glassfish, bundlovaný s NetBeans. Trefa do čierneho! Jednoduché nastavenie, rýchly, funkčný, podporuje všetko, čo som od neho potreboval - EJB3, JPA, jednoduchý hot-redeployment, jednoduché debugovanie, škola opäť hrou, ako by povedal EmSí Komenský. Ešte ostáva posledná mordorská colnica, a síce...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;JSF. Nie že by JSF bolo a priori zlé alebo čo, len sa dosť ťažko učí (človeku, nezasvätenému do JSP, Struts a ostatných hi-tech vedeckých frameworkov), má tonu xml konfigurákov a vďaka tomu je jeho "developerská prítulnosť" dosť nízka. Developerská prítulnosť je terminus technicus, odvádza sa od existencie jednoduchých a funkčných tutoriálov a rýchlosti rozbehania examplov, a je nepriamo úmerná vedeckosti danej veci. Keď je núdza najvyššia, pomoc boha najbližšia, a tak ma kolega oboznámil s vysoko priľnavým mačiatkom s názvom Wicket. A bolo to. Vo vlasoch som opäť cítil vietor, nesúci na svojich krídlach... ehm, vlastne, chcel som povedať, že programovať vo Wicket je opäť zábava (ak teda môže byť zábava niečo, čo vás živí. Stotožniť sa s touto vetou je však ako nasadnúť na priamy spoj do Mordoru, preto si ju radšej nevšímajme).&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Na záver urobím politicky nekorektné zhrnutie. Je úplne jednoduché, vitajte v Sieni slávy a hanby:&lt;br /&gt;&lt;table border="1"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Smer Mordor&lt;/th&gt;&lt;th&gt;Neutrálna pôda&lt;/th&gt;&lt;th&gt;Smer Roklinka&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Eclipse&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IDEA, NetBeans&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Struts, JSP&lt;/td&gt;&lt;td&gt;JSF&lt;/td&gt;&lt;td&gt;Wicket&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;WebSphere&lt;/td&gt;&lt;td&gt;OpenEJB&lt;/td&gt;&lt;td&gt;Glassfish&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;DB2&lt;/td&gt;&lt;td&gt;PostgreSQL, MySQL, HSQLDB&lt;/td&gt;&lt;td&gt;H2&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;CVS&lt;/td&gt;&lt;td&gt;SVN&lt;/td&gt;&lt;td&gt;Mercurial&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-5827535045812647426?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/5827535045812647426/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=5827535045812647426' title='2 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5827535045812647426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5827535045812647426'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/02/cesta-z-mordoru.html' title='Cesta z Mordoru'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-2620884457756107567</id><published>2009-01-22T09:28:00.000-08:00</published><updated>2009-01-22T09:40:13.775-08:00</updated><title type='text'>OpenMoko a Android po tretie</title><content type='html'>Malý update: &lt;a href="http://freerunner.android.koolu.com/"&gt;Koolu.com vydal&lt;/a&gt; beta2 verziu Androidu pre Freerunner. Funkčne je tento release totožný s releasom od Michaela, má ale menší kernel, takže nevyžaduje cvičenie s u-boot. To je tá dobrá správa, horšie správy sú:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Z ničoho nič telefón nehrá hudbu - je tichý ako partizán. Riešenie: reboot&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Niekedy sa nepreberie zo spánku. V lepšom prípade ticho ťukne a zaspí, opakovaným šťuchaním sa ale dá prebrať k životu (asi ako vysokoškolák o desiatej ráno). V horšom prípade sa však nepreberie, a jediné riešenie je vybrať baterku. Niekedy sa nepreberie ani pri prichádzajúcom hovore - vtedy volajúci buď počuje nekonečný vyzváňací tón, alebo mu rovno teta oznámi, že treba volanému rebootnuť telefón.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Na ostré používanie teda FreeRunner ešte stále nie je, ale ako &lt;a href="http://ambientmp.sourceforge.net/"&gt;MP3 prehrávač&lt;/a&gt; je celkom fajn :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-2620884457756107567?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/2620884457756107567/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=2620884457756107567' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2620884457756107567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/2620884457756107567'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/01/openmoko-android-po-tretie.html' title='OpenMoko a Android po tretie'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-6072845347999953493</id><published>2009-01-18T11:11:00.000-08:00</published><updated>2009-01-18T11:55:22.063-08:00</updated><title type='text'>Android na FreeRunner po druhé</title><content type='html'>Konečne nastal čas čé, keď sa pekné ťažítko (to ako FreeRunner) môže premeniť na motýľa, teda, telefón. Michael Trimarchi totiž &lt;a href="http://lists.openmoko.org/nabble.html#nabble-td2133865"&gt;vydal image androidu pre FreeRunner&lt;/a&gt;, na ktorom funguje WiFi a Suspend! Malá nevýhoda je, že Android je na FreeRunneri stále dosť pomalý, ale ak vás to neodradí, hor sa do práce.&lt;p/&gt;&lt;br /&gt;Začneme prípravou filesystému - to je rozpísané na &lt;a href="http://wiki.openmoko.org/wiki/User:Seanmcneil3#Installation"&gt;openmoko wiki v sekcii Installation&lt;/a&gt;, nebudem to opakovať. &lt;a href="http://panicking.kicks-ass.org/download"&gt;Stiahneme androidí kernel a jffs2 obraz&lt;/a&gt;. Ten flashneme tradične:&lt;br /&gt;&lt;pre&gt;sudo dfu-util -d 0x1d50:0x5119 -a kernel -R -D uImage-v4.bin&lt;br /&gt;sudo dfu-util -d 0x1d50:0x5119 -a rootfs -R -D freerunner-v4.jffs2&lt;/pre&gt;&lt;br /&gt;Kernel je však väčší ako 2mb a u-boot ho len tak neštartne - treba ho k tomu dokopať. Tu je veľká nevýhoda tohto image - telefón nezapnete bez počítača. Postup ukopávania je &lt;a href="http://wiki.openmoko.org/wiki/User:Seanmcneil3#Images"&gt;popísaný tu&lt;/a&gt;, v skratke, v u-boote aktivujeme &lt;code&gt;set console to usb&lt;/code&gt; (uboot sa po chvíli vráti späť do menu, to nevadí):&lt;br/&gt;&lt;br /&gt;&lt;pre&gt;kermit -l /dev/ttyACM0&lt;br /&gt;set speed 115200&lt;br /&gt;c&lt;br /&gt;(tu sa mi kermit nepripojil, musel som ešte napísať "set carrier-watch off" a potom znovu "c")&lt;br /&gt;setenv bootargs ${bootargs_base} ${mtdparts}; nand read.e 0x32000000 kernel; bootm 0x32000000&lt;/pre&gt;&lt;br /&gt;Android bootol, suspend funguje, všetko je tučné a krásne. Michael ešte odporúča patchnúť init.rc - napojíme sa cez usb na počítač a zadáme&lt;br /&gt;&lt;pre&gt;sudo iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24&lt;br /&gt;sudo sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;sudo ifconfig usb0 192.168.0.200&lt;br /&gt;export ADBHOST=192.168.0.202&lt;br /&gt;adb shell mount -o remount,rw /dev/root /&lt;br /&gt;adb push init.rc /init.rc&lt;/pre&gt;&lt;br /&gt;(adb je v Android SDK, stiahnete &lt;a href="http://code.google.com/android/download.html"&gt;tu&lt;/a&gt;)&lt;br/&gt;&lt;br /&gt;Skúsime teda vyskúšať WPA wifi a narazíme na prvý háčik: ako zadať heslo? Vstavaná klávesnica sa nedá aktivovať! Riešenie je použiť &lt;a href="http://slideme.org/content/akeyui"&gt;aKeyUI&lt;/a&gt; (&lt;a href="http://android-app-collection.googlecode.com/files/aKeyUI.apk"&gt;linka na stiahnutie&lt;/a&gt;, potom &lt;code&gt;adb install aKeyUI.apk&lt;/code&gt;). aKeyUI využíva fintu prenesenia textu cez copy'n'paste - do aKeyUI napíšeme heslo, dáme ho skopírovať, potom klikneme na WiFi sieť, v dialógu longclick na editbox (dlhšie podržať stylus a pustiť) a z menu zvolíme Paste. Android sa pripojí, ale stále nemusí byť možné browsovať - dhcpcd niekedy nenastaví DNS správne. Tu je pomoc ľahká: otvoríme Dev Tools / Terminal Emulator a zapneme OpenDNS:&lt;br /&gt;&lt;pre&gt;setprop net.dns1 208.67.222.222&lt;br /&gt;setprop net.dns2 208.67.220.220&lt;/pre&gt;&lt;br /&gt;Priznám sa, GSM kartu som do toho ešte strkať neskúšal: skúsim najprv kúpiť nejakú lacnú testovaciu SIMku a vyskúšať to na nej. Ešte sa ozvem :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-6072845347999953493?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/6072845347999953493/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=6072845347999953493' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6072845347999953493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/6072845347999953493'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/01/android-na-freerunner-po-druh.html' title='Android na FreeRunner po druhé'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-309778023694454272</id><published>2009-01-17T04:27:00.000-08:00</published><updated>2009-02-28T03:29:48.097-08:00</updated><title type='text'>Ubuntu Jaunty, GRUB a ext4</title><content type='html'>Ako každý rok, dal som si novoročný záväzok, že si už konečne nechám stabilný systém a nebudem vymýšľať kraviny. A keďže novoročné záväzky sú tu od toho, aby sa porušili, dal som si Jaunty alpha 2 s filesystémom ext4, ako inak. Všetko fungovalo OK (v rámci možností alpha softvéru ;), až kým som neupdatol kernel a GRUB nezahlásil takôto: &lt;code&gt;Error 13: Invalid or unsupported executable format&lt;/code&gt;. Našťastie, na vine nebol vadný image kernelu, problém bol v GRUBe: vtip je v tom, že až grub 0.97-29ubuntu47 podporuje extents. A keďže grub sa neinštaluje na disk automaticky po upgrade balíčka, treba to spraviť ručne. Bootnite livecd ubuntu a zadajte:&lt;br /&gt;&lt;pre&gt;sudo mkdir /mnt/r&lt;br /&gt;sudo mount /dev/sda1 /mnt/r&lt;br /&gt;sudo mount -t proc proc /mnt/r/proc&lt;br /&gt;sudo mount -o bind /dev /mnt/r/dev&lt;br /&gt;sudo chroot /mnt/r /bin/bash&lt;br /&gt;sudo grub-install /dev/sda&lt;/pre&gt;&lt;br /&gt;Namiesto &lt;code&gt;/dev/sda&lt;/code&gt; si samozrejme dajte svoj disk. Ak vám grub vyhodí&lt;br /&gt;&lt;pre&gt;Could Not Find Device For /boot/boot: Not Found Or Not a Block Device&lt;/pre&gt;&lt;br /&gt;Zadajte (stále v chroote):&lt;br /&gt;&lt;pre&gt;grep -v rootfs /proc/mounts &gt; /etc/mtab&lt;br /&gt;sudo grub-install /dev/sda&lt;/pre&gt;&lt;br /&gt;(Viac na &lt;a href="http://www.gentoo.org/doc/en/grub-error-guide.xml"&gt;Gentoo Grub Error Guide&lt;/a&gt;). Neviem prečo, ale nasledovná kombinácia (ktorá má robiť to isté) nefungovala:&lt;br /&gt;&lt;pre&gt;grub&gt; root (hd0,0)&lt;br /&gt;grub&gt; setup (hd0)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-309778023694454272?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/309778023694454272/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=309778023694454272' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/309778023694454272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/309778023694454272'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/01/ubuntu-jaunty-grub-ext4.html' title='Ubuntu Jaunty, GRUB a ext4'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-5114313361712766385</id><published>2009-01-07T03:35:00.000-08:00</published><updated>2009-03-18T12:10:09.461-07:00</updated><title type='text'>Deň Úprimnej Sústrasti</title><content type='html'>Dostal som nápad: čo keby sme napodobnili akciu &lt;a href="http://www.youtube.com/watch?v=1lqxORnQARw"&gt;Hug a developer&lt;/a&gt; a vyhlásili (kľudne aj celosvetový) Deň Úprimnej Sústrasti pre ľudí, čo sú nútení používať produkty Veľkej Modrej ... Onej. Deň, keď bežní ľudia dajú týmto hrdinom pocítiť, že sú s nimi. Deň, keď si aj kravaťáci z IBM uvedomia, čo za svinstvo predávajú. Proste, jeden krásny deň bez pohlavného styku s DB2, WebSphere a Eclipse. Čo je vlastne také zlé na tomto guľometnom triu?&lt;p/&gt;&lt;br /&gt;&lt;a href="http://techdetails.blogmatrix.com/:entry:techdetails-2007-02-23-0000/"&gt;Eclipse&lt;/a&gt;: nainštalovali ste nejaký plugin a zrazu zmizli Java pluginy? Smola, reštart! Nevie si tá krava nájsť &lt;code&gt;java.lang.Object&lt;/code&gt;? Smola, 2 reštarty, 3x clean a full build, 3x denne antidepresíva. V ťažkých chvíľach pomáha zmazať Workspace a začať zo zelenej lúky. Žerie vám po viacnásobných refreshoch Eclipse 1gb RAM? Reštart! Otvára vám zrazu súbory v externom editore? Smola, musíte kliknúť na *každý* *jeden* *súbor* a dať Open With &amp;gt; Internal Editor. Začnem XML comment &lt;code&gt;&amp;lt;!--&lt;/code&gt; a tá krava ho hneď uzavrie s &lt;code&gt;--&amp;gt;&lt;/code&gt; ? Nie nie, to nie je bug, to je feature!&lt;p/&gt;&lt;br /&gt;DB2: Nedávno tu lietal hate mail o DB2 a jej úžasnom systéme reportovania chýb pomocou errorkódov, tak nebudem mlátiť slamu znovu a už len pridám, že administračné nástroje stoja za hovno. Všeobecne, pri používaní IBM produktov má človek neistý pocit, ako keby ho niekto strašne osral. Ale fakt strašne, veľký hnedý pás od uší po celom chrbte až k chodidlám. Ako keď kupujete ferrari a dostanete rebriňák so zdochýňajúcou mulou a nálepku ferrari k tomu grátis, môžete si s ňou nadšene mávať. Za *poriadne* prachy. Za tie prachy by to malo byť použiteľné, nie?&lt;p/&gt;&lt;br /&gt;Nie. Ak dovolíte, porovnám s Red Hatom. Keď si kúpite Enterprise Red Hat Linux, dostanete k tomu dobrý support a 24/7 dostupnú partu chlápkov, ktorí sú v prípade problémov u vás do hodiny. IBM tento model mení a zmrdí. Keď si prvý krát kúpite DB2 alebo WebSphere, nemáte poňatia, čo s tým. Celé je to nepriateľské, ťažko použiteľné. A teraz, buď budete mesiac nadávať na neskutočne mizernú online dokumentáciu od IBM (predstavte si 10stranovú príručku, ktorú niekto so sadistickým zmyslom mlátiť prázdnu slamu a schopnosťou generovať prázdne frázy natiahol na 2500 strán), alebo si kúpite školenia. Keď sa ten krám poserie počas prevádzky, zavoláte koho? Konzultantov z IBM! Za 2000 EUR na deň vám odporučia upgrade, alebo vás poučia, že lepšie to byť nemôže. Už im chýbajú len čierne háby a nazgúlovia. V skratke, IBM vám predá naschvál dodrbanú vec, aby z vás mohla donekonečna ťahať prachy. Biznis model ako sviňa.&lt;p/&gt;&lt;br /&gt;&lt;a href="http://harry.sufehmi.com/archives/2004-11-30-755/"&gt;WebSphere&lt;/a&gt;: v skratke, &lt;a href="http://www.velocityreviews.com/forums/t145047-save-earth-from-ibm-websphere.html"&gt;hnus velebnosti&lt;/a&gt;. Zavádzajúce chybové hlášky, &lt;a href="http://vivekagarwal.wordpress.com/2008/07/14/resolved-an-exception-stacktrace-related-to-quickrwebsphere-portal-search-tables/"&gt;nezrozumiteľné stacktraces&lt;/a&gt; končiace v kóde WebSphere, patche o veľkosti 100mb, nastavenia zašité v 6 úrovňovom menu... Takto nejak zrejme vyzerá obfuskované GUI. WebSphere je pre každého milovníka programovania tak odporný hnus, že si vyslúžila aj stránku &lt;a href="http://webspheresucks.com"&gt;webspheresucks.com&lt;/a&gt; (refreshujte stránku pre rôzne obrázky) a &lt;a href="http://www.oreillymaker.com/link/20796/websphere-sucks/"&gt;knihu&lt;/a&gt; :-)&lt;p/&gt;&lt;br /&gt;Zakončím citátom, trefnejšie to nedokážem vyjadriť:&lt;blockquote&gt;IBM should be banned from Java world&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-5114313361712766385?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/5114313361712766385/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=5114313361712766385' title='1 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5114313361712766385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/5114313361712766385'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2009/01/de-primnej-sstrasti.html' title='Deň Úprimnej Sústrasti'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-333945844211989885</id><published>2008-11-16T06:54:00.000-08:00</published><updated>2009-01-07T03:35:16.565-08:00</updated><title type='text'>Android na FreeRunner</title><content type='html'>Chlápkovi menom &lt;a href="http://wiki.openmoko.org/wiki/User:Seanmcneil3"&gt;Sean McNeil&lt;/a&gt; sa podaril skutočne husársky kúsok: rozbehať Android na OpenMoko. Android je, čo sa týka end-user usability, vpredu pred OM2008.9 stackom - napríklad netreba zabíjať žiadny proces, aby fungovalo GPRS :) Ako správny lenivec mu z diaľky držím palce, aby sa mu podarilo odstrániť zvyšné muchy:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Android je pomerne pomalý na FreeRunnerovi, akurát neviem, či je to slabším CPU, absenciou 2D akcelerácie, javou, alebo mojím kódom ;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Podpora WiFi&lt;/li&gt;&lt;br /&gt;&lt;li&gt;On-screen klávesnica. Tu je však rozumné počkať na chlapcov z Google, ktorí sa zastrájajú, že takú klávesnicu spáchajú do konca zimy 2009.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Nízka hlasitosť pri telefonovaní&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Večná pliaga suspend. Presnejšie, FreeRunner zaspí spoľahlivo, s preberaním je to horšie.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Trochu odbočím. Istý &lt;a href="http://www.flickr.com/photos/x_jamesmorris/2870742053/"&gt;Veľký Plodný Samec&lt;/a&gt; sa znížil z Olympu medzi smrteľníkov a &lt;a href="http://mjg59.livejournal.com/100221.html"&gt;pozrel sa&lt;/a&gt; na implementáciu suspendu v Androide. Nedá sa nevšimnúť si nasledovná veta:&lt;blockquote&gt;I write in C because using pointer arithmetic lets people know that you're virile (Píšem v C pretože pointre dávajú ľuďom vedieť, že ste mužný/plodný)&lt;/blockquote&gt;To je veta storočia! Ó Plodný, my všetci, čo si používaním vyšších jazykov zmenšujeme penisy, sa vám plazíme pod Vaším Mohutným ... Pohľadom. Prekvapenie, Vaša Mužnosť! Suspend s patchami od Googlu - podľa vás shit - v G1 funguje poriadne (aspoň neviem o nikom, kto by sa sťažoval), na rozdiel od tej vašej.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;p&gt;Oprava: nový Ubuntu Intrepid sa prebúdzal úplne spoľahlivo - takže Matthew, ospravedlňujem sa ;)&lt;/p&gt;&lt;br /&gt;Späť k Androidu a FreeRunneru. Vďaka pánovi Seanovi sa mi podarilo narvať na môj FreeRunner Android a môžem vám ukázať screenshot:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8PWqDMzitsY/SSA8gQlIQiI/AAAAAAAAAAw/raZVwyl_QVQ/s1600-h/large.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://4.bp.blogspot.com/_8PWqDMzitsY/SSA8gQlIQiI/AAAAAAAAAAw/raZVwyl_QVQ/s400/large.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5269278088927658530" /&gt;&lt;/a&gt;&lt;br /&gt;A tým sa dostávame k poslednému bodu: Ambient konečne beží na FreeRunneri! Na reálnom hardvéri beží už dávnejšie (konkrétne na G1). Na screenshote je Ambient 0.3.1, ešte čerstvý, ktorý vyšiel ani nie pred hodinou. Primárne boli opravené chyby, nahlásené prvými reálnymi používateľmi G1. Vyzerá to tak, že komunita okolo Ambientu začína pomaly vznikať :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-333945844211989885?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/333945844211989885/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=333945844211989885' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/333945844211989885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/333945844211989885'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2008/11/android-na-freerunner.html' title='Android na FreeRunner'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_8PWqDMzitsY/SSA8gQlIQiI/AAAAAAAAAAw/raZVwyl_QVQ/s72-c/large.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-8266927497859685745</id><published>2008-11-13T11:20:00.000-08:00</published><updated>2008-11-13T12:07:39.518-08:00</updated><title type='text'>64bit Java skutočne pomalšia ako 32bit</title><content type='html'>&lt;p&gt;Som rád, že s týmto subjektívnym pocitom už nie som sám: podľa performančných testov je 64bitové prasiatko skutočne vykŕmené: je pomalšie o 15% a žerie o 50% viac pamäte ako 32bitové. Riešenie je jednoduché - používať 32bitové pointre, kde sa dá. Viac info &lt;a href="http://asserttrue.blogspot.com/2008/11/why-64-bit-java-is-slow.html"&gt;tu&lt;/a&gt; a &lt;a href="http://www.lowtek.ca/roo/2008/java-performance-in-64bit-land/"&gt;tu&lt;/a&gt;. Testoval som spustenie Eclipse s otvoreným java editorom a browserom, udávané hodnoty su RES:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Sun IcedTea6 1.3.1 (6b12-0ubuntu6) bez compressed pointers: 310Mb&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sun jdk-6u6-p s &lt;code&gt;-XX:+AggressiveOpts -XX:+UseCompressedOops&lt;/code&gt;: 320Mb&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sun jdk-6u6-p s &lt;code&gt;-XX:+UseCompressedOops&lt;/code&gt;: 320Mb&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JRockit jrmc-3.0.3-1.6.0 s &lt;code&gt;-XXcompressedRefs=true&lt;/code&gt;: 238Mb&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JRockit jrmc-3.0.3-1.6.0 s &lt;code&gt;-XXcompressedRefs=true -XXallocClearChunks=true&lt;/code&gt;: 248Mb&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JRockit jrmc-3.0.3-1.6.0 s &lt;code&gt;-XXcompressedRefs=true -XXallocClearChunks=true -XXaggressive&lt;/code&gt;: 302Mb&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;No, zo strany Sun-u zatiaľ nič svetoborné, ich &lt;a href="http://java.sun.com/javase/technologies/performance.jsp"&gt;performančne tuningovaná&lt;/a&gt; java žrala ešte viac pamäte. Jedine JRockit vyčnieva z rady so svojou skoro o 100mb nižšou spotrebou pamäte (teda pokiaľ nezapneme &lt;code&gt;-XXaggressive&lt;/code&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-8266927497859685745?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/8266927497859685745/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=8266927497859685745' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8266927497859685745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/8266927497859685745'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2008/11/64bit-java-skutone-pomalia-ako-32bit.html' title='64bit Java skutočne pomalšia ako 32bit'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3086088571527626591.post-3243339240997666869</id><published>2008-11-08T04:48:00.000-08:00</published><updated>2008-11-08T07:06:42.595-08:00</updated><title type='text'>Hlasovanie o finančne najvýhodnejšie IT výpalné</title><content type='html'>&lt;p&gt;Milí diváci! Rok 2008 sa chýli ku koncu, gigamarkety už vyvesili vianočnú výzdobu, a nám neostáva nič iné, ako vyhlásiť výsledky ankety Výpalné Roka. Gratulujeme všetkým hlasujúcim (t.j. mne), hlasovanie bolo uzavreté a víťazom sa stáva: Microsoft. Firma, známa aj hanlivo ako Mrkvosoft, M$, Nepriateľ z Redmondoru a podobne, si svoje víťazstvo skutočne zaslúžila svojím vzorovým výberom desiatkov pri kúpe hardvéru. Tak dokonca predbehla aj Katolícku Cirkev, keďže tá desiatky pýta len od svojich ovečiek. Je síce pravda, že Cirkev dostáva svoj podiel aj z našich daní, ale to sa neráta: naše dane dostáva aj Microsoft, pomocou typicky slovenských objektívnych tendrov. Navyše, Cirkev nie je IT firma (aspoň nie v pravom slova zmysle, memetické algoritmy bežiace na členoch Cirkvi sa zatiaľ nerátajú).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Sme v nákupnom stredisku MegaShitFuck, ktoré nám dodáva vysúvateľné podložky pod kávu typu DVDRW a oblieka nášho kotolníka. Dovoľte, aby sme vám na príklade vysvetlili, prečo práve Microsoft vyhral túto prestížnu cenu. Opýtajme sa predavačky:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;Skript: záber na dve napudrované ženské, ktoré evidentne vedia o IT ešte menej, ako regionálni predajcovia klávesníc For Windows TM.&lt;/i&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;Moderátorka:&lt;/i&gt; Vidím, že predávate notebooky. Prepáčte hlúpu otázku, ale pýtame sa v mene našich divákov: aký Operačný Systém je predinštalovaný?&lt;br/&gt;&lt;br /&gt;&lt;i&gt;Predavačka:&lt;/i&gt; No samozrejme Májkrosof Vindovs Vista Biznis Edišn Apgrejdid zadarmo so Servis Pek 1!&lt;br/&gt;&lt;br /&gt;&lt;i&gt;M:&lt;/i&gt; Koľko rôznych typov noutbúkov máte?&lt;br/&gt;&lt;br /&gt;&lt;i&gt;P:&lt;/i&gt; Asi 100.&lt;br/&gt;&lt;br /&gt;&lt;i&gt;M:&lt;/i&gt; A koľko noutbúkov je bez Vindovs?&lt;br/&gt;&lt;br /&gt;&lt;i&gt;P:&lt;/i&gt; A to sa dá? Však bez Vindovs to nemôže fungovať!&lt;br/&gt;&lt;br /&gt;&lt;i&gt;M:&lt;/i&gt; Neverili by ste, existujú ľudia, ktorí si myslia pravý opak. Nuž, koľko?&lt;br/&gt;&lt;br /&gt;&lt;i&gt;P:&lt;/i&gt; Hmmm. Asi 6.&lt;br/&gt;&lt;br /&gt;&lt;i&gt;M:&lt;/i&gt; Vďaka za váš čas.&lt;p/&gt;&lt;br /&gt;&lt;p&gt;Sme opäť v štúdiu a vítam nášho hosťa, hekera (trochu sa bojím, ale sľúbil, že nám nič nespraví), známeho pod menom Vyzivus. Čo na to vy?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;Vyzivus:&lt;/i&gt; Podľa mňa je situácia na poli OS rovnako úbohá ako na poli procesorov. Nefunguje trh. Technologicky vynikajúce procesory (operačné systémy) sú tlačené do úzadia, lebo 95% trhu majú krámy ako Windows a x86. Tie krámy sa už zákonite museli rýchlosťou vyrovnať svojim dokonalejším bratom, už len kvôli tomu, že sa do nich tlačí desaťkrát viac peňazí. Nuž, a jedným zo spôsobov udržania si vysokého percenta na trhu a likvidácie konkurencie je aj preväzovanie produktov (to je mimochodom u nás trestné). Microsoft má geniálnu taktiku: systémom zliav a zvýhodnení podpláca predajne, ktoré potom dobrovoľne preväzujú SW a HW. Ak sa podá žaloba, tak na predajňu, Microsoft je čistý - geniálne. Škoda, že géniov majú len v marketingovom a právnickom oddelení. Predstavte si, že si chcem kúpiť notebook bez OS.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;Moderátorka:&lt;/i&gt; A prečo by ste to chceli? Však bez Vindovs sa to ani nezapne?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;Vyzivus:&lt;/i&gt; Do toho vás prd, aj tak ste z celého IT blbá jak patróna. Tých 6 notebookov, ponúkaných v MegaShitFuck, sú úplné shity, a keď si chcem kúpiť lepší notebook, "zadarmo" (1500 sk v cene notebooku) si musím kúpiť aj Cystu. Podľa mňa preväzovanie ako hrom. Ale choďte do riti...&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;Moderátorka:&lt;/i&gt; Bohužiaľ, po Vyzivusa si prišla softvérová polícia so štítkami Microsoft, ďaľších hostí nemáme a tak relácia končí. Spoza mikrofónu sa s vami lúči Moderátorka, ktorú oblieka firma Microsoft.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3086088571527626591-3243339240997666869?l=vyzivus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vyzivus.blogspot.com/feeds/3243339240997666869/comments/default' title='Zverejniť komentáre'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3086088571527626591&amp;postID=3243339240997666869' title='0 komentárov'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3243339240997666869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3086088571527626591/posts/default/3243339240997666869'/><link rel='alternate' type='text/html' href='http://vyzivus.blogspot.com/2008/11/hlasovanie-o-finanne-najvhodnejie-it.html' title='Hlasovanie o finančne najvýhodnejšie IT výpalné'/><author><name>Martin Vysny</name><uri>http://www.blogger.com/profile/08414828249101147365</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
