Hledám práci

(Pozor, tento zápisek není o Javě, ale o mě, takže ho radši nečtěte)

Tak už vám tady na blogu svými nedostižnými články několik let pomáhám. Teď určitě pomůžete vy mě. V prosinci mi skončil kontrakt v Irsku a teď nemám co dělat. Původně jsem chtěl dělat něco do školy (dal jsem se na dálkové doktorandské studium), ale po dvou dnech jsem přišel na to, že mě to vůbec nebaví. Myslím, že na konci ledna mi to už poleze krkem úplně.

Takže jsem si řekl, že je na čase si začít hledat práci. Ale nějak ani moc nevím co bych chtěl dělat, mám dokonce pár protichůdných požadavků. Docela mi vyhovuje práce na volné noze. Pár měsíců pracovat, pak pár týdnů volna a pak znova. Programováním se živím protože mě to baví. Rozhodně se mi nechce sedět někde v bance a prát se s proprietárním frameworkem jenom proto, že mému zaměstnavateli dobře platí. Chtěl bych dělat něco zajímavého. Docela mě baví řešit zajímavé problémy a myslím si, že je umím i docela řešit. Taky bych si chtěl konečně vyzkoušet práci v týmu, který se alespoň pokouší o něco jako je agilní vývoj. To se mi zatím nepodařilo.

A co můžu nabídnout? Jsem hodně dobrý Java programátor, moje nejsilnější stránkou je práce na backendu, Spring umím skrz na skrz, docela se vyznám v ORM a programování nad databází obecně. Jsem fanda do unit testů a automatických testů obecně. Párkrát se mi podařil i vývoj řízený testy. Myslím si, že mám docela přehled o Javovských technologiích. Jsem taky docela silný v objektově orientovaném programování, nebál bych se ani složitější architektury. Strávil jsem i pár měsíců prací na build systému postaveným nad Mavenem, takže i do něj vidím docela obstojně. Pokud si někdo potrpí na papíry, tak mám průkaz mladého řidiče (takový ten s Hurvínkem), asi 25 vysvědčení, jsem inženýrem přírodních věd a mám i SCJP, SCWCD, SCBCD a CAE.

Pokud jde o ty měkčí dovednosti, myslím že bych dokázal i vést pár programátorů, dovedu mluvit i bez většího koktání a to dokonce i anglicky. Vím toho dost i o výrobě programů z širšího pohledu. Tuším co a jak dokumentovat, na co si dát pozor a tak. Dokonce jsem se už skoro naučil dělat to, co je užitečné pro zákazníka, a ne to, co by bylo zajímavé technicky. Ale znáte to, vždycky už si myslím, že vím jak ten software dělat, ale pak mě najednou zas něco překvapí. Taky jsem zrealizoval pár školení a všichni mi tvrdili jak se jim to líbilo.

Samozřejmě mám i slabiny. Z technického hlediska to bude asi frontend. JavaScriptu se pokud možno vyhýbám, ale umím hodně dobře Spring MVC, Spring Web Flow, samozřejmě standardní JSP a dokonce i Struts (nechť je jim země lehká). Ale to je asi tak všechno, JSF, Stripes, Wicket a spol bych se musel naučit. Ale neměl bych s tím problém. Co se týče měkkých nedostatků tak to bude možná prostořekost. Když někoho vidím dělat hloupost, tak mu to obvykle řeknu. Takže pokud potřebujete pomoci s psaním vlastního frameworku, tak vám maximálně řeknu, ať se na to vykašlete. Nebo přinejmenším pořádně zamyslíte.

Pokud tedy víte o někom kdo má zajímavý projekt a potřebuje si najmout špičkového, zkušeného, vzdělaného, zábavného, seniorního, šaramantního a i jinak bezchybného programátora, tak mu prosím pošlete odkaz na můj životopis. Nebo kdybyste měli zájem o školení Springu, neváhejte se na mě obrátit, něco vymyslíme.

JavaFX security

I had some concerns regarding JavaFX security. You know, if you go to JavaFX samples page, most of them are self-signed and you have to give them all permissions to be able to run them. I didn’t like it at all. On Devoxx I asked few guys from Sun about it and their responses were not clear. So I have decided to do few experiments to find out how it works. It’s nothing new, it’s similar to the way applets have worked all the time. But who remembers how applet security works?

I took InterestingPhotos sample application from JavaFX pages and added following code to onNext function (behold, my very first JavaFX code).

try {
	var writer = new FileWriter(new File(System.getProperty("user.home"),"javafx_infection.txt"));
	writer.append("I have escaped the browser. {new Date()}");
	writer.close();
} catch (e:Exception) {
	e.printStackTrace();
}

Now every time user clicks on the “next” button, the applet attempts to write to a file in user home directory. It can be both a malicious code or a legitimate action. There is no way to tell them apart. That’s the reason why we need some security mechanism.

Unsigned application
Example
You can choose not to sign the application at all. Usually it is the best choice. This way the application will run in a sandbox and will not be able to execute any potentially dangerous code. On the other hand it will be safe for user to run it and he will not be troubled by any security alert. If the application attempts to execute dangerous code, the JRE will throw a security exception. In our case it will throw

java.security.AccessControlException: access denied (java.util.PropertyPermission user.home read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at interesting.Main.hackIt(Main.fx:406)
at interesting.Main.onNext(Main.fx:133)

So if you don’t need to do anything dangerous and you are happy to play in the sandbox, unsigned application is the best choice.

Selfsigned application
Example
Most of the samples on JavaFX page are self-signed. It means that the JAR is signed by a certificate that is not verified by any certification authority. In my opinion, that’s the worst option you can choose. You force the user to answer following security dialog.

Security Warning

Basically it’s the same as executing EXE (or binary) file only more dangerous. Some users already know that they should not execute EXE files from unknown sources, but they don’t know that they shouldn’t execute Java applications from unknown sources. I am afraid that we will hear about this issue more in the future.

If the user clicks on Run, the application can do whatever it want, if the user clicks on Cancel, the application will not run at all.

Signed application
Example
We can sign the application by a certificate that is validated by a CA. I have used Thawte Freemail Certificate. Sounds trustworthy, doesn’t it? If you open the example, you will see following security warning.

Security Warning

It looks less threatening than with the selfsigned certificate. It looks less dangerous. The “Always trust” check-box is even checked by default. But in fact, it’s not much safer. It is more complicated to generate such certificate but anyone (even me) can do it. It might be even more dangerous. Everyone who is able to generate a certificate that is validated by the same CA will be allowed to execute the code (if you leave the check box checked). And again, it is all or nothing choice. User can either give the application all permissions or do not run it at all.

Unsigned application with signed JAR
Example
In case you really need to do something potentially dangerous and you do not want to scare the user at the start of the application, you can use signed JAR in an unsigned application. Basically you can put all the dangerous stuff into a jar and sign only this jar. Most of the code can live in the main application which is unsigned. This way the application will start as unsigned and when you attempt to execute the dangerous parts the signed jar will be loaded and the security warning will be shown. In our example the application will start and the security warning will be shown when user clicks on the “next” button. At least that’s how it works on my machine. And I like it. This way user can use my application and is notified only when the application needs to do something insecure. And even if he decides that he doesn’t trust me, he can still use the application. (This idea came from a guy from Sun, unfortunately I don’t remember his name, thanks anyway)

To reiterate, the most secure choice is to write a JavaFX application that does not need any security permissions. If you do not sign it, it runs in the sandbox and everything is fine. If you need to execute some dangerous code, you have to ask user for a permission. Which is good, but users should be instructed that they shouldn’t execute any Java(FX) code if they are not sure what it does. So there is a possibility that they will not execute your applications because they will be afraid to do so. I can imagine that in the next versions of JavaFX there will be a signed library provided by Sun that will contain operations that are potentially dangerous but that are in fact safe. Like opening a file using “Open File dialog” etc.

Disclaimer: I am server-side developer, I know nothing about client-side Java, so do not be surprised if something I have written here turns up being wrong. Just correct it in the comments. Thanks.

Zážitky z Devoxxu

Včera jsem se vrátil z Devoxxu a potřebuji si urovnat myšlenky. Takže následující text je vysoce subjektivní. Pohybuji se hlavně EE prostředí a i tam se zajímám hlavně o backend, podle toho jsem si vybíral přednášky. Takže se tu nedozvíte nic o Grailsech, GWT a ani o JavaFX, které Sun hodně prosazuje. Protože jsem neuvěřitelně líný, popíšu jen pět nejlepších přednášek, na kterých jsem byl.

Be Smart
Ivar Jacobson

Bezkonkurenčně nejlepší bylo povídání Ivara Jacobsona s názvem Be Smart. Ano Toho Ivara Jacobsona, spoluautora UML, RUPu a kdoví čeho ještě. Povídal o tom jak by se měl dělat software a byl naprosto neuvěřitelný. Takže až se přednášky objeví na Parleys, tuhle si rozhodně nenechte ujít Nejen to, pusťte jí svým kolegům, manažerům, zákazníkům, přítelkyni i babičce. Je to něco co prostě musí vidět každý. Je to zábavné a neuvěřitelně zajímavé.

Building Web Applications With The SpringSource DM Server
Sam Brannen

Tato přednáška nebyla ani tak zajímavá tím kdo ji přednášel, ale svým obsahem. Spring DM Server spojuje sílu OSGi a Springu do jednoho pěkného balíku. Když člověk sleduje OSGi tak si říká, že by to mohlo být užitečné, když sleduje DM Server tak to vidí v akci. Uvidíte jak můžete instalovat aplikaci po částech, za běhu prohazovat části, upgradovat na novější verzi bez nutnosti restartu. Když jsem seděl v tom sále, tak jsem si říkal, že takhle by měl vývoj a spouštění aplikací vypadat. Jediné co zážitek kalí je licenční politika. Tvrdili, že se to dá stáhnout pod GPL licencí, ale to se mi zatím nepodařilo. Pravda je, že jsem po tom příliš nepátral.

Java SE 7 update
Mark Reinhold

O novinkách v Javě 7 už jsem psal minule a asi se k tomu ještě dostanu. O novém modulárním systému pak byla ještě jedna přednáška a ve čtvrtek i hodina a půl otázek a odpovědí. Trochu to zmírnilo moje nadšení, je tam ještě mnoho otevřených otázek, takže výsledek může být jak úžasný tak i úplně k ničemu. Dobrá zpráva, ale je, že to berou hodně vážně, evidentně nad tím hodně přemýšlí a jsou hodně opatrní. Takže se snad není čeho bát.

From Concurrent to Parallel
Brian Goetz

Povídání o tom, jak se v Javě dají psát paralelní aplikace. Hlavním tématem bylo ParallelArray. Je to docela jednoduchý nástroj jak spouštět paralelní operace. Zajímavé je, že se to dá použít i na spoustu dalších věcí. Částečně se to dá i použít jako in-memory databáze. Něco jako Microsoftí LINQ.

The Scala Experience
Bill Venners, Ted Neward

Pěkný úvod pro lidi, kteří jako já okusili „dynamické“ jazyky jako Groovy a moc se jim nelíbily. Scala vypadá hezky a přednášející byli taky hodně dobří.

Takže abych to shrnul. Devoxx rozhodně stojí za to, úroveň přednášek i přednášejících byla hodně vysoká. Do mého seznamu pěti nejlepších se nedostalo třeba OSGi, performace tuning a podobně, ale i ty byly hodně zajímavé. Dobrá zpráva je, že by se snad v lednu nebo v únoru měly všechny přednášky objevit na Parleys.com, takže si je bude moci pustit i ten, kdo se letos do Antwerp nedostal.