What makes me productive?

Yesterday evening I tweeted about my mouse’ battery being drained which caused a lot of tweets. In the end, Ralf asked, what makes you productive?

General workflow

I know and use a lot of shortcuts, wether being it in an IDE, terminal, browser or whatsoever. I start nearly all non-terminal applications via Spotlight or other means of textual inputs. Most of the window handling that one has to do, I also do with keyboard under macOS, although I must give in that I find the window handling in Windows more intuitive till this very day (I’m on Mac OS X since 2003…). Nevertheless, there are still things I prefer doing with a mouse and that’s fine with me.

On the desktop I tried a lot of them, including all styles of Apples Magic mouse. At the moment I’m using a Logitech MX Master, mainly because it has a sane method for horizontal scrolling which is sadly often needed in apps like iTunes and co. I do have some macOS Mission Control shortcuts on one button which I use regularly.

In my opinion there’s still no better touchpad around than Apples implementation regarding notebooks. We have a lot of Lenovos at work which have a great keyboard and still a sucky touchpad, barely useable. Even the red knob is better.

Hardware

Sitting at a permanent desk, I prefer one single display. The bigger the better, with a resolution fitting the size. In my home office I’m using a 2011 27″ iMac, with 32Gb RAM and nice fusion drive. Still very happy with it.

In my current office I have a 2006 EIZO 24″ monitor hooked to a 13″ 2014 MacBook Pro. The monitor is old but has still a better quality than current low cost LED screens. I have a notebook stand for my MacBook to have it approximately the same height as the screen but I rarely use it for more than E-Mail, IM or Twitter.

What mobile work is concerned: I prefer smaller devices. I loved my 11″ MacBook Air very much and I only changed it because I ran out of disk space and RAM. In short: Small screen with a resolution as high as possible (read: Still readable with -8 Dioptrien on both eyes). I’d move to 12″ screen or lower as soon as one company (preferable Apple) decides to offer a device that small with 32Gb RAM.

Keeping stuff in sync

Stuff I edit on both machines is usually in a Git repository, either on GitHub or a private host. I keep presentations and articles in a Dropbox folder.

Backup

Desktop: Time Machine plus automated backup on a local storage device plus manual full bootable backup on 2 external disks via SuperDuper (one disk in my office, on in my drawer).

Laptop: Time Machine in my office and one manual full backup via SuperDuper.

Software

Being a Mac user for over 10 years I’m really used to some features of macOS. Also: I bought a lot of software over the years which I would miss when moving back to Windows. I’m also a big fan of macOS because most of the time it still works very well in all sorts of environment without sacrificing a Unix subsystem. The move back to Windows seems possible because one can have a Bash respectively a linux subsystem since a few months, which is a requirement for me.

Stuff I use on a daily base: zsh, git, vim, SQL*Plus with rlwrap, NetBeans, TextMate, Tower, Texpad, Paw and VMWare fusion. Oh and I love iTunes for my music collection (Yep, I’m that old, I still have one of those).

Environment

I prefer light and cold environment. Light as in actual light but also in light themes in the software I use. I tried some of the dark themes, but I really have a hard time using those.

Regarding noise: I hardly can work in the office if a lot of chatter is going on, especially some rooms away, when people are talking in a high volume about problems in the same area for example. Headphones and music does not help me in those situations. I only listen to music when I’m in the flow. However, I’m very productive in trains, cafes or something similar. That’s quite a different thing of noise.

I literally hate eating at the desk. People munching their apples or stuff in the same room in front of a screen is driving me nuts, the same way as smelly food is.

If you want to know more, just ask in the comments 🙂

(The picture for this post is from Heather Kennedy.)

| Comments (6) »

18-Jun-17


Add pluggable databases to Oracles Database Docker images

I recently needed a database including a huge schema for demo in a very short notice of time. I know know how to run expd/impd but that brings usually hassle regarding users, schemas and so on.

As some of you might know I’m using Oracles Database Images for Docker for quite some time now (first described here). You can still build them to your own needs from the sources (here) or use the new Oracle Container Registry which works quite nice if you already have an OTN account.

Anyhow. Those are the images I use currently:

oracle/database                          12.1.0.2-ee                acb2002fe54b        53 minutes ago      11.4 GB
oracle/database                          12.2.0.1-se2               211d3ba03cb2        7 weeks ago         14.8 GB

The 12c database consists per default of a container database and one or more pluggable databases and the 12c images adhere to that. So does our main development database.

What I did on the development database was: Stopping and unplugging the database containing the schema and user of our application (luckily, I was clever enough to separate those from other applications the last time i set this up). Then, I copy over the files to my local machine. That took about 15 minutes, including giving my coworkers a short note and was way faster than exporting the whole 40Gb or something.

How to do this? Login as sys user or any user with administrative rights: sqlplus / as sysdba will do just nicely on the database server. Than

ALTER PLUGGABLE DATABASE pdb_awesome_app CLOSE;
ALTER PLUGGABLE DATABASE pdb_awesome_app UNPLUG INTO '/tmp/pdb_awesome_app.xml';
DROP PLUGGABLE DATABASE pdb_awesome_app KEEP DATAFILES;

This closes and unplugs the database and writes all metadata into pdb_awesome_app.xml. Then copy the database files. Those usually by in a folder like /opt/oracle/oradata/NAME_OF_THE_CONTAINER_DB/pdb_awesome_app. Copy the whole directory onto the machine that will run the container. Also copy /tmp/pdb_awesome_app.xml onto your machine.

First it’s time to make your coworkers work again. The last command dropped the pluggable database from your server which is fine, since we still have the database files and the metadata. Still on the server execute

CREATE pluggable DATABASE pdb_awesome_app USING '/tmp/pdb_awesome_app.xml' NOCOPY TEMPFILE REUSE;
ALTER PLUGGABLE DATABASE pdb_awesome_app OPEN;

That will plug the database again and open it for your coworkers to enjoy.

Back to your machine running the docker instance. Start the Oracle Database image that fits the version your server has. I was using 12.1.0.2 here. Also note that the container must have the same database options available as the source. You can still add them inside the container with dbca, it’s part of the docker image. dbca has a -silent option so it doesn’t molest you with the X11 UI.

Start the container using something like

docker run -d -p 1521:1521 -v /some/path/OracleFiles:/opt/oracle/oradata oracle/database:12.1.0.2-ee

Note: You might want to check the charset of your database! The container databases charset should match the pluggable database. Oracles Docker images use AL32UTF8 by default. Luckily you can pass the charset with ORACLE_CHARACTERSET. That charset is used for that instance only. For example, use e ORACLE_CHARACTERSET=WE8MS1252 to start a database with WE8MS1252.

It will map /some/path/OracleFiles into the running container. If this folder contains a database (for example when you already used the container), startup will be fast, otherwise the container takes some time to create the initial container database. It’s important that you map a local folder into this docker container here. Oracle databases are huge and slow to create, so it’s not really an option to keep them inside the docker container. Also, it makes the running docker container even bigger than it already is.

Also, for the purpose of this exercise here, it’s important to take note of /some/path/OracleFiles. While your container is starting, you can already move the pdb_awesome_app folder you copied from the database serve into /some/path/OracleFiles. Also copy pdb_awesome_app.xml into the same folder.

Here is an important step: You may have to fix paths inside the xml file if your server doesn’t have it’s database files under /opt/oracle/oradata. Take your favorite editor and fix each entry in the xml file if necessary.

Then, use Kitematic or docker command line tools to execute a bash inside the running database container. Login to the container database as follows

docker exec -i -t ID_OF_THE_CONTAINER /bin/bash 
export ORACLE_SID=ORCLCDB
oraenv
sqlplus / as sysdba
create pluggable database pdb_awesome_app using '/opt/oracle/oradata/pdb_awesome_app.xml' NOCOPY TEMPFILE REUSE;
ALTER PLUGGABLE DATABASE pdb_awesome_app OPEN;

If the database version and all options match: Congratulations, you just copied a 40Gb schema in 30 minutes instead of several hours. I personally had some time to write this blog post before rushing to a JUG meeting and than to a customer 700km away.

| Comments (0) »

07-Jun-17


Spring Boot Buch: May recap

May has been a busy month for which I had covering Spring Security for the book on my agenda. You already can see the examples of that chapter here github.com/springbootbuch/security. I think there are some really useful configurations inside. As a matter of fact, shortly after I began that chapter, Spring Security 5.0 M1 has been released. Spring Security 5 will not only support Spring 5s reactive programming model from the ground, but it will also make OAuth a first class citizen. I can probably look forward to change my OAuth example. Anyway, I’ll have to revisit the OAuth examples anyway if I have room left for my cloud examples… But I’ll cover that later:

To my great please I met Joe Grandja, Co-Lead of Spring Security at Sergis great Spring I/O in Barcelona and we could chat about some changes in Spring Security. I actually didn’t plan to go to Barcelona again, my agenda was already packed, but one thing came to another and I ended up with a packed room for my “bootiful databases” talk, covering Spring Boot and jOOQ again:

Thanks to everybody who showed up!

Again, many things are not planed long before. As I had written January, I’m gonna visit Cluj and will do a joint talk on databases with Vlad. Turns out the possibility arrived that several people want me to do a Spring Boot workshop: What a nice surprise. I’m really excited and I hope that turns out as good as the recent talks.

While at Spring I/O I met a lot of friends from the Spring team (see featured post image) which is always great. I also met Johannes, who works at Mesosphere and has invited my to Kassel in July. After his talk I had a good idea what Mesos is about and took to freedom to polish his demo application a bit. I really wish that some people around here would welcome my suggestions only half as euphoric as he did:

You may ask why I am “pedantic” about that stuff: I want to have my infrastructure as simple and streamlined as possible. I don’t want to explain to anybody why I did have to override a handful of classes, provide all kinds of infrastructure to do the most simple things.

What I tried to convey in my book is that many programmers can keep their own configuration very simple. It’s often enough to know which properties to change and how one can take advantage from the sophisticated profiles and environment evaluation in Spring Boot. If custom configuration is necessary, keep that to a minimum too. That is: Extend only classes that are meant to be extended.

The last stance is especially true for Spring Security within Spring Boot: Use the hooks provided, read the docs and my book carefully before overwriting or overriding stuff. That being said: The chapter is finished. My last two milestones are Messaging and the reactive programming model coming up in Spring 5. Messaging is about a third done and for reactive programming I had help of one of the best people to get help from in Germany: Thanks Mark for providing the motivation.

I’ll probably write less in June, but I’m still in time. The problem in the end will be more of a space than a time thing: I’m already over the agreed number of pages and I’m not gonna fit in a complete and in-detail explained microservice story. But hey, that’s maybe a thing for a second book.

Apart from the that, the month was batshit crazy. High workload and a so-so atmosphere at max in the office and several important appointments outside. As usual when I’m stressed I cope with more work, but work that actually has a purpose so I provided a jOOQ test-slice for Spring Boot 2. As it has been the case several times now, I learned more than just some Spring internals from Stéphane reviewing my code.

Hell… I forgot the running sushi apocalypse that happened while discussing internal and external configuration with Franz… Thanks, I appreciate your feedback a lot:



| Comments (0) »

31-May-17


Digging deep into Spring Boots “Starter”

First of all: Congratulations Thorben for releasing Hibernate Tips on time. I’ve read through a lot of the tipps and my review on Amazon still stands: If you want to get a real good knowledge of Hibernate, JPA and databases, make sure you get Thorbens book in combination with Vlads High-Performance Java Persistence. They have both very different approaches, but I think they work very well together. First you read a tipp to manage your daily work, than you can actually look up why it works.

I try to achieve a combination in my book. Meaning: Making up simple examples (see them here), showing how things work, explaining why they work and also adding hints why to use stuff. The feedback I got so far from most of the test readers was good.

I’m using NetBeans with the NB-SpringBoot-Plugin to write all my examples, a real pleasure so far. On the way I created to small clips of some features, check them out. The first one shows you how you can modify an existing start.spring.io project with additional starters:

And the second one actually save me quite some time after some experiments had gone wrong. It shows you can easily restore parts from a files history, being either local or team (usually Git) history:

Speaking of examples: I’m joking that I’m doing BDD (Book driven development), but I’m actually really thankful that the Spring Boot team values my small contributions to the docs. The longer I’m into this business the more I think that a good documentation has a really high value and it speaks for Spring Boot that the documentation is a vital part of the project, too.

Zeeland 2017This month I was on a small vacation with my family at the Dutch coast, this time in Schouwen-Duiveland. I love this place dearly and I’ve been somewhere in Zeeland nearly each year for the last 20 years. I was afraid I didn’t manage to write as much as I set as my April milestone but I actually achieved more than planned and now I’m a little annoyed actually, that I didn’t manage to finish one more section. Anyway, Zeeland is a place I sometimes think I want to live there when the kids have their own live… It always has a positive effect on my overall mood.

Looking back at the table of contents from February, much of the stuff is ready. Part “Mit Spring Boot arbeiten” is finished and also reviewed by different people, most spelling errors should be fixed. “Produktivsetzung” is at the same level, and right now I’m finishing the last chapters of “Spring Boots Funktionen”, in April I managed to cover “Persistenz”, “Caching” and nearly “Spring Web MVC”. I’m gonna drop the part where I wanted to describe the setup of the micro service example with arc42. That’s gonna be part of a website. The (short) part of one possible micro service scenario will be written in from June on.

Apart from that, I restructured some things. “Die Magie hinter Spring Boot” is now part of “Spring Boots Funktionen”: It’s important to understand this in order to get the idea why and how a starter adds functionality to Spring Boot.

Coming up with Spring Boot 2.0 is Spring Web Flux. I organized a talk by my friend Mark Heckler at the Euregio JUG in April about “Going reactive with Project Reactor and Spring 5”. That talk was a lightning fast talk and I hope I have better understanding of it when I start that section 🙂

But, coming up this month is Spring I/O 2017 where I try my best to learn the missing parts when I’m done with my “Bootiful database” talk: I’m speaking again at this great conference and I’m very happy that Sergi invited me again. Thanks to the JUG Essen I had the chance of training the talk one more time: I’m still nervous as hell, but actually I think the talk has a nice timing and hopefully works for the audience as well.



That’s it for today. If you like, follow me on twitter, either personally as @rotnroll666 (and no, I’m no satanist and I never was, the question popped up last week…) or follow the book @springbootbuch. I’m looking forward now to Nikos April recap.

| Comments (1) »

30-Apr-17


Spring Boot Buch: Getting there

The third month was a though one: It started with a workshop in Düsseldorf, lead by innoQs Till. “Skalierbare Web-Architekturen” got me the last points I need to do the ISAQB-CPSA-A, but I wish they workshop had taken a different direction. Anyway, not something I can blame on Till.

I changed my milestones a little bit. After getting really valuable feedback I was occupied working that into the book. As it happened the chapter “Die Magie hinter Spring Boot” was a good fit finishing, so I did this before writing about persistence:



While trying to write the persistence chapter, a lot of stuff happened: I was occupied with an In-House APEX-Workhshop lead by Niels de Bruijn. The Workshop was great and I am convinced I chose the right tool for the special combination of task ahead and people available. Let’s see how that turns out.

Shortly before going to #JavaLand 2017, I setup the Spring Boot Buch Twitter account. Support me here, if you like: @SpringBootBuch. See what I did with the profile picture?

At JavaLand I asked Kai Toedter – to who’s music I am listening while writing the post – if I can share his neat idea to create small Spring Boot Docker files in the book. I can and I am happy about it.

Also in Brühl I finally met Thorben Janssen, who’s Book “Hibernate Tips” will be published on April 4th. It was a pleasure talking with Thorben (and also fun 😉 ) and I’m looking forward to his tips who which I contributed a small part.

I chose the title picture for this post to pay a little tribute to Markus @myfear Eisele. Thanks for kicking of JavaLand 4 years ago.

Next month I’m gonna first finish the persistence topic before finally getting work done on my bigger example project.

Last but not least I want to mention that I didn’t drink any alcohol for nearly the last 3 months. Sadly, I didn’t loose some kilos, but anyway: I actually feel a lot better. I do have more strength again and sleep better. Not more, but a lot better.

So, until next month 🙂

| Comments (0) »

01-Apr-17