If you are like me once you entered a Wi-fi password, literally 2 seconds after it's forgotten, so what happens when your colleague asks you for the password? Well it turns out it's quite easy to accomplish on OSX (as long as you have an administrator account, below you will find the required steps
Mainly Spring/Java and Java JEE tips and tutorials based on what i'm working on, usually (Spring, MongoDB, Spring boot, Big Data, Cassandra etc.) or what interests me. Occasionally some gadget tips.
OSX find and display saved wifi password
Top 5 small java libraries for projects (functional, date, etc.)
For some time now most of my Java projects revolve around the Spring Boot Stack which contains pretty much everything you can need, however there's a list of small libraries and utilities that I love to use in my projects
Below is my top 5 small libraries I use in my projects
- TotallyLazy : enhances the functional standard library with some syntaxic sugar
- Lombok : because who wants to write setters/getters manually
- JodaTime Yes, yes I know I should use now the new java API but I still like Joda best!
- jOOλ : More functional sweetness
- Apache Commons : Multi-purpose library
The above are my way-to-go small libraries for my projects, of course there are some specific libraries for a given case Jackson JSON or Caffeine Cache
Docker copy images between hosts
Copying docker images (import/export) between hosts
Sometimes it's useful to export a local docker image to another host without going through a repository
docker save -o [path for generated tar file] [image name]
For example :
docker save -o mycool-container.tar ufasoli/mycool-container:1.0
You will then need to copy the saved .tar image to the target host by however mean suits you (FTP, USB, SCP)
Once the image copied to the target host import the image to the local docker
docker load -i [path to image tar file]
Like so :
docker load -i mycool-container.tar
Depending on the size of the image this can be a long operation, but once it's finished you should be able to see your image with the usual docker images command
docker compose on multiple environments
docker-compose is a pretty cool tool that allows you to bootstrap and run multiple docker containers with 1 configuration file
Below is an example docker-compose file for staring a 3 node confluent kafka cluster
---
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
network_mode: host
environment:
ZOOKEEPER_CLIENT_PORT: 32181
ZOOKEEPER_TICK_TIME: 2000
extra_hosts:
- "moby:127.0.0.1"
restart: always
kafka-1:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://myserver.com:29092
restart: always
extra_hosts:
- "moby:127.0.0.1"
kafka-2:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://myserver.com:29093
restart: always
extra_hosts:
- "moby:127.0.0.1"
kafka-3:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://myserver.com:29094
restart: always
extra_hosts:
- "moby:127.0.0.1"
kafka-rest:
image: confluentinc/cp-kafka-rest:latest
network_mode: host
depends_on:
- kafka-1
- kafka-2
- kafka-3
restart: always
environment:
KAFKA_REST_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_REST_LISTENERS: http://0.0.0.0:8082
KAFKA_REST_HOST_NAME: kafka-rest
extra_hosts:
- "moby:127.0.0.1"
---
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
network_mode: host
environment:
ZOOKEEPER_CLIENT_PORT: 32181
ZOOKEEPER_TICK_TIME: 2000
extra_hosts:
- "moby:127.0.0.1"
restart: always
kafka-1:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://test.myserver.com:29092
restart: always
extra_hosts:
- "moby:127.0.0.1"
kafka-2:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://test.myserver.com:29093
restart: always
extra_hosts:
- "moby:127.0.0.1"
kafka-3:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://test.myserver.com:29094
restart: always
extra_hosts:
- "moby:127.0.0.1"
kafka-rest:
image: confluentinc/cp-kafka-rest:latest
network_mode: host
depends_on:
- kafka-1
- kafka-2
- kafka-3
restart: always
environment:
KAFKA_REST_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_REST_LISTENERS: http://0.0.0.0:8082
KAFKA_REST_HOST_NAME: kafka-rest
extra_hosts:
- "moby:127.0.0.1"
You can now run docker-compose by with a second -f and the redefined properties in the test file will ovewrite those in the base file
docker-compose -f docker-compose.yml -f docker-compose.test.yml up -d
More information regarding docker compose advanced configuration can be found here
Angular6 hiding component selector
It's sometimes useful to have angular's component selector not to be rendered in the page, as sometimes this can cause problems with CSS rendering (since we will have an intermediate tag in between 2 tags)
For example :
@Component({
selector: 'my-component'
})
export class MyComponent{
@Input()
title:String;
}
...
Now you will use your component for example like so :
<html> ..... <div class='container'> <my-component [title]="'Test'" ></my-component> </div> ..... </html>
With this approach in the rendered HTML you will have the angular component tab generated inside the div but what if this causes problems with some CSS code ?
Well luckily enough there's a simple way to change this and that is changer your selector from a tag to an attribute
@Component({
selector: '[my-component]'
})
export class MyComponent{
@Input()
title:String;
}
...
By changing the value of the selector property from my-component to [my-component] you should be able to "apply" your component directly to a standard HTML tag, so this will prevent the <my-component> tag to be rendered in the final HTML
<html> ..... <div class='container' [title]="'Test'" my-component > </div> ..... </html>
OSX paste unformatted text / remove text formatting
So recently I found about what is for me one of the best keyboard shortcuts on OSX often I copy text from somewhere and whenever I paste it it comes with all the original formatting, which TBH mostly of the time is a pain (at least for me) even though a lot of applications have a "paste special" or something like that is a bit cumbersome to me
So the following keyboard shortcut allows you to paste unformatted text in almost any application :
This for me is a great productivity shortcut and one of the best ones I found for OSX
Angular 4/5 override class in body tag (Shadow Piercing combinators approach)
In angular component CSS styles are encapsulated into the component's view and don't affect the rest of the application; usually this is the behaviour that you want however sometimes it's useful to be able to affect tags outside the component, for example the body tag
This can be achieved in a few different ways, like for example tweaking view encapsulation parameters
In this post I will show you a CSS approach to this using The Shadow Piercing combinators, starting in Angular 4.3.0 you can use the custom shadow piercing combinator ::ng-deep to achieve this
For example if we had a component named "CustomComponent" we could have a set of files similar to :
- custom.component.ts
- custom.component.css
- custom.component.html
In order for us to shadow and override the main body tag would be to put the following in the custom.component.css :
::ng-deep body {
min-height: 75rem;
padding-top: 4.5rem;
}
OSX show used ports or listening applications with their PID
On OSX you can display applications listening on a given port using the lsof the commands described below will show listening application...
-
How to create a multi-hop ssh tunnel or how to chain multiple ssh tunnels. (or SSH inception) For security reasons sometimes you need to ju...
-
To give you some context recently while working on a new small project I needed to include a few Jasper Reports that where hosted in a Jas...
-
This is the second part of the Spring boot and spring data jpa tutorial - A sample application using spring 4.0 spring boot and JPA At th...


