pátek 24. července 2015

Spray Paint Art na kytaře

Ve sklepě se mi nějakou dobu válela stará tátova rozbitá kytara, kterou jsem sebou brával na různé pijácke akce (voda, hospody, k ohni apod.). Poté, co odešly kladky na uchycení strun, lžela ladem ve sklepě do chvíle, než jsem se dostal k tomu jí zprovoznit a při té příležitosti na ní provést pár experimentů. Lákal mne především "spray paint art", tedy umění vytvořit pomocí vhodné kombinace sprejování zajímavé grafické efekty.



Na kytaře bylo potřeba udělat spousty práce. Starého laku jsem se zbavil odstraňovačem starých nátěrů


Poté jsem nástroj důkladně obrousil



Protože zadní a boční strana má pěkný dřevněný dekor, natřel jsem je bezbarvým lakem.


Bylo potřeba upravit nové sedlo na kobylce, což je kousek plastu, který lze koupit v hudebninách. Sedlo bylo moc vysoké, tak jsem pilníkem přibrousil.


Na přední desku i krk jsem nanesl základní nátěr.


Poté nastříkal černou barvou.


A na závěr paint-art:)




Při barvení jsem udělál pár chybek:
  • Základní barvu jsem nanesl štětcem, což na povrchu zanechalo viditelné tahy štětcem :( 
  • Černý podklad není pro sprejování příliš vhodný. Příště si připravním bílý podklad.


pátek 15. května 2015

Hibernate 4.3.7 patch for schema name customization

The JPA standard allows to hardly define a concrete schema for tables/entites via annotations (for example @Table). For my project was necessary to modify these shema names according to configuration on the realtime, just before EntityManagerFactory is created. Generally, the Hibernate version 4.3.7 provides for a db-to-java name mapping special interface org.hibernate.cfg.naming.NamingStrategyDelegate.

This interface provides lots of nice method for define a mapping between JPA objects names and db objects names, but one thing is missing - schema names customization.

Extending interface

For assurance of backward compatibility, I decided to create new interface as extended existing interface:

package org.hibernate.cfg.naming;
public interface ExtendNamingStrategyDelegate extends NamingStrategyDelegate {
  public String determineSchemaName(String schemaName);
}

Modification of internal behavior of hibernate was not easy. All names modifications is present in very extensive class org.hibernate.cfg.AnnotationBinder. This class contains cca 2800 lines of code and really needs to be refactored :). I added this code fragment on multiple places:

NamingStrategyDelegate n =
  mappings.getNamingStrategyDelegator().getNamingStrategyDelegate(false);

if (n instanceof ExtendNamingStrategyDelegate) {
  schema = ((ExtendNamingStrategyDelegate) n).determineSchemaName(schema);
  if (schema == null) {
    schema = "";
  }
}
If you want to see whole class, please download sourcecode.

Patching of original hibernate

The Hibernate framework is opensource and for building purposes is used the Gradle system. Unfortunately, I haven't any knowledges about Gradle and also our processes in company are hardly maven-oriented. I've decided to do it "dirty" way with 2 maven projects.
  1. hibernate-core-patch (version 4.3.7.1) - contains my created class ExtendNamingStrategyDelegate and modified AnnotationBinder only.  Project version 4.3.7.1 defines that patch is based on hibernate 4.3.7.
  2. hibernate-core (version 4.3.7.1-Patched)- Combination of original hibernate binaries (hibernate-core version 4.3.7) and forced injection of my modifications (hibernate-core-patch 4.3.7.1). This project does not contain any java code and it is defined as a integrator for binaries via maven-dependency-plugin.
Download sourcecode here.

Using of patch

After building and installing patched hibernate-core project, Use in your project patched version of hibernate-core instead of original (replace version 4.3.7 with 4.3.7.1-Patched).

For using NamingStrategyDelegate, please read original documentation

https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch03.html#configuration-namingstrategy

With difference that you will use ExtendedNamingStrategyDelegate interface.

Summary

I'm not a fan of "raping" of frameworks, tools and standard procedures as shows this article:). But sometimes it can be very usefull and it can save lots of time before you find better way to solve a problem. In this time, Hibernate version 5 is comming and according to release notes, it should be refactored and also support for schema name mapping should be added.


pátek 24. dubna 2015

Výroba jednoduchého přebalovacího pultu


Jako všichni nastávající rodiče, tak se i my s přítelkyní připravujeme na příchod nového potomka. Paralelně s duševní přípravou probíhá příprava materiální: oblečky, pleny, odsávačky, kočárek, autosedačka, ...., postýlka a přebalovací pult. Ačkoli se všechny věci dájí pohodlně koupit, mojí drobné kutilské duši nedá tu a tam si něco vymyslet a realiovat po svém. Jediná možná věc,u které si troufnu spáchat samovýrobu, je přebalovací pult. Nahrává tomu několik skutečností:

  • Kamarádi-rodičové doporučují umístit přebalovací pult do koupelny. Blízkost vodního zdroje a omyvatelnost většiny povrchů v okolí ušetří mnoho nervů a času s úklidem.
  • V naší koupelně se nachází vhodné místo, jeho atypycké rozměry však nutí provést výrobu pultu "na míru".
  • Nejjednodušší verze přebalovacího pultu je v podstatě sada čtyř vhodně sešroubovaných dřevotřískových desek.

Místo v těsné blízkosti umyvadla je více než příhodné. Původně bylo zamýšleno na koupelnovou skříňku.:).


První fáze: metrem naměřím všechny rozměry. Nejprve počítám s pracovní deskou s nepravidelným tvarem a zakresuji do návrhu i obdéníkový výklenek o rozměru cca 10x15cm, který bude součástí hlavního obdélníku o rozměrech cca 60x80cm.

Nechat si nařezat dřevotřískové desky na míru umí dnes každý větší hobbymarket. S papírkem vyrážím do nejbližšího z nich. Volím nejlevněší řešení - bílou desku o tloušťce 12mm. Běžně se nábytek montuje z desek 15mm až 18mm. Já se spoléhám na to, že pult bude ze všech stran opřen o pevnou plochu, což by mělo zajistit dostatečnou pevnost a stabilitu.

Pracovník hobbymarketu, který přebírá mé požadavky, mi sděluje, že provádí řez jen na celé obdélníky. Výklenek je tedy nutné odříznout zvlášť a k hlavní ploše "nějak" přidělat. Nedá se nic dělat.


Desky jsou nařezány. Je třeba je vhodně (především pevně) spojit k sobě. K tomu jsem společně s deskami koupil ocelové rohové spojky ve tvaru L na čtyři vruty. Protože jsou ocelové spojky přiliš nápadné, na potenciálně viditelná místa použiji méně pevné, zato decentnější bílé plastové spojky, které navíc obsahují záklopku naschování hlaviček vrutů. Vruty jsem použil 4mm o délce 10mm, aby nedošlo k prošroubování skrz desku.


Po pár hodinách rozměřování, předvrtávání a šroubování je přebalovací pult hotový. Zbývá už jen nainstalovat nažehlovací hrany. Prostor pod pultem nyní využíváme na koš na prádlo, později podle potřeby může být doplněn o poličky.


Na vrch přijde ještě polstrovaná přebalovací podložka. Sousedícím stěnám a umyvadlu je konstrukce celkově stabilní a dítě o váze pár kilo bez problému zvládne. Cena za tento jednoduchý přebalovací pult se vyšplhala asi na 700Kč. Radost z dobře odvedené práce - k nezaplacení:D