Señor Developer Señor Developer Sun, 05 Apr 2020 15:38:19 +0000 en hourly 1 Señor Developer 32 32 Microservice Domain Driven Design template Sun, 22 Mar 2020 10:39:23 +0000 The post Microservice Domain Driven Design template appeared first on Señor Developer.


Free .net core microservice template

I created this .net core template for a microservice setup using Domain driven design.


New Micro-service Template

I have created a new .net core template that creates a micro-service setup, using domain driven design.

Feel free to use it!

For more information on templating

The code used for the domain is from the following article
microserve ebook

The post Microservice Domain Driven Design template appeared first on Señor Developer.

Cape Verde Wed, 12 Feb 2020 18:43:30 +0000 The post Cape Verde appeared first on Señor Developer.


Cape Verde or Cabo Verde is a country made up of a group of islands in the Atlantic Ocean of the Coast of Africa (NW).  Cabo Verde consists of 10 volcanic islands and has approximately 500,000 inhabitants, most of which is Creole. Official language is Portuguese but the common language is called creole

The Cape Verde archipelago was uninhabited until the 15th century, when Portuguese explorers discovered and colonized the islands, establishing the first European settlement in the tropics. Ideally located for the Atlantic slave trade, the islands grew prosperous throughout the 16th and 17th centuries, attracting merchants, privateers, and pirates. The end of transatlantic slavery in the 19th century led to economic decline and emigration. Cape Verde gradually recovered as an important commercial center and stopover for shipping routes. Incorporated as an overseas department of Portugal in 1951, the islands continued to campaign for independence, which was achieved in 1975.

– Wikipedia

Sun, sun and friendly people

We choose Cabo Verde for its promise of sunshine and it truly delivered. Cabo Verde is one of the few places where sunshine is guaranteed all year around.

This was our first visit to this island paradise and when searching for an early February holiday destination, Cape Verde was definitely very attractive with only an average of 2mm of rain in February and over 7 sun hours/day. It is almost another 2 hours flight time from say Canary Islands, but well worth it due to the almost 100% gurantee of great weather.

Climate charts


Ilha do Sal

Sal is one of the 10 islands, and the one we visited. In many ways it looks very much like Fuerte Ventura with a desert like landscape but lovely sandy beaches. Sal (Portuguese for salt) got it’s name from the salt mining that was once its main trade. But today the main business is tourism. Most hotels are located on the southern tip of Sal around the town Santa Maria. We stayed at Meliá llana beach resort & spa which was very luxurious. We have stayed at other Melia hotels and they never disapoint.

As this was our first time in Cape Verde we did not really know what to expect but the friendliness of the people really struck us. The country’s mantra is “No stress”, but don’t let that fool you, they are hard working but ever smiling.

Places visited

We did leave our sun loungers a few times during our stay on Sal;

First we went paddling with the baby lemon sharks that inhabits the east coast of the island (close to Pedra Lume), with mummy shark swimming around 15m out in the deeper water. The baby sharks are only 30-50 cm but mum can be up to 3.5 meters!!

In Pedra Lume you can see the old Salt mining operation, and you can visit the salt crater where you can take a spa bath and float around in the salty water.

We also visited the town of Santa Maria where you can find some shopping, local cuisine and markets.


One evening I spoke to another guest in the bar, he had come to Cape Verde for several years and he asked if I would ever come back? My answer “In a heart beat”. Not only does the place offer great sunshine it also offers a very welcoming population. And a place where the mantra is “No stress” is definately the place to go on holiday.

The post Cape Verde appeared first on Señor Developer.

Snippet vault cli Sun, 08 Dec 2019 19:50:22 +0000 The post Snippet vault cli appeared first on Señor Developer.


If you are anything like me, this is the tool for you. I can never remember terminal/command line interface (CLI) commands. Now a days more and more tools offer a CLI such as Node js, aws, git and many more. I had to find someway to help me.

Many commands like the normal git commands are well etched in to my mind but some less used I always have to google or ask a colleague. Well no longer, now I use snippet-vault-cli

Snippet vault CLI is built using node and some cool command line packages developed by awesome people. Snippet vault offer a simple way to add and search snippets that are executed when selected.

Getting started

Clone the repository and cd to checkout diretory.


npm install
npm link


yarn install
yarn link

if you want to change the “snv” command, edit package.json and run the link command again.


"bin": {
"snv": "./index.js"

Usage: snv [options]


-a, –add add snippet
-s, –search <searchterm> search snippets
-t, –tag [tagname] search tag
-v, –vers display version number
-h, –help output usage* information


  • delete snippets
  • edit snippets
  • combine usage of snippet-vault and snippet-vault-cli
  • use .env
  • create npm package/ or installer

Clone it on GitHub

Snippet vault CLI is available on GitHub, please feel free to clone, fork or contribute

The post Snippet vault cli appeared first on Señor Developer.

Fuerteventura Mon, 25 Nov 2019 19:22:16 +0000 The post Fuerteventura appeared first on Señor Developer.


The island’s name is a compound word formed by the Spanish words for “strong” (fuerte) and “fortune” (ventura). Traditionally, Fuerteventura’s name has been regarded as a reference to the strong winds around the island and the resulting danger to nautical adventurers. However, it might have referred instead (or also) to wealth, luck or destiny.

In 1339 the Mallorcan navigator Angelino Dulcert, in the Planisferio de Angelino Dulcert, referred to the island as “Forte Ventura”. – Wikipedia


Sun, goats, olives and aloe vera

Some would probably say that Fuerteventure is a barren place, but I think it is a rather striking landscape, where sometime it feels like you are on a different planet. I have been to the island twice, once in February and once in November and both times offered what I was after, sunshine!, however the November visit we did experienced some rain.

Both visits our base has been Costa Calma in the middle region of the island. This part is mostly hotels and costa Calma doesn’t offer a huge range of restaurants and night life, but both time we have been all inclusive which suited our needs as we only wanted to relax by the pool and recharge our batteries.

If you get bored of lying by the pool sipping your favourite cocktail you could do some day trips. As Fuerteventura is rather small you can drive around it in a day including stops. So what is there to see… Fuerteventura has a population of roughly 110,000 people and 150,000 goats! There are several places that make and sell goat cheese.

As mentioned earlier the place is rather barren but 2 things seems to thrive on the island, olives and aloe vera and there are several manufacturers and shops selling aloe vera products that are worth visiting.


Simple Island Geography

Corralejo – Irish pubs, pizzerias and discos

Capital Puerto del Rosario – shopping mals

Costa Calma – wind surfing, relaxing, great beaches and a zoo

Morro Jable – pitoresk and a turtle sanctuary


If you looking for a holiday were you do nothing but lounge around the pool and beach. Then I would highly recommend Fuerteventura’s Costa Calma area. If you want more of a night life the north is probably better for you, but Fuerteventura is not a party island like Ibiza.

The post Fuerteventura appeared first on Señor Developer.

The Cost of saying Yes Wed, 20 Nov 2019 20:26:39 +0000 The post The Cost of saying Yes appeared first on Señor Developer.


Recently I got myself into an unhelpfully stressful situation at work. My team was doing really well, but the larger project was hitting some snags. I was approached by one of the people from the business side to see if my team could help out with a small website as well as our current workload. This extra work was estimated to be a couple of weeks work for one person, and it could be done on the back burner. I asked the team how they felt about it,  and as it seemed fairly straight forward they said yes. 
I rearranged my plan a bit to free up one developer once their current task was done (in a day or two) and, I was going to get a new front-end developer as well, so everything was going fine and we felt great to be helping out, going the extra mile! We only needed to recieve the designs, which was a “simple” landing page and a form page.

A day later (Thursday) I get called in to an “Emergency meeting” – and I was told that I had to be there, so before I get to the meeting I gather that there is a problem! The designs have not been approved and the project manager wanted them delivered by the design team no later than tomorrow, otherwise the development team (i.e my team) wouldn’t have a full week to complete the work and get the site in production by next Friday. Whoooooa! – What happened to the “two weeks on the back burner”? This is where I made my first mistake – I said nothing! I still felt that the team could easily complete the task (after all, it was a simple website) and, if we were getting the designs the next day we would still have a couple of days to deliver. So I started lining up all the stuff we needed. Arranging a meeting to set up content, quickly getting the front end developer on board and telling the other developer to drop what he was doing and prioritise this task. It was now Friday, and as we had to start first thing on Monday morning, I was running around like a blue arsed fly sorting everything out. I asked the infrastructure team for help  to get this to production. The answer “That’s impossible! It takes a week to get the public facing urls.” The content guy came back to say “Translations can take a week to get back.” CRAP! My first feeling, naturally, was I had been let down by everybody, and no one is as dedicated as my team! My second mistake

After stressing about it I escalated it during the weekend, a meeting was set up to see what could be done (the following Monday) and if the delivery date could possibly be pushed back. After the weekend, spent agonising about the whole mess, Monday arrived and the project manager is contacted to see if there is any possibility of pushing the delivery back a couple of days to get everything ready. The answer: “Oh yes, no problem! The original date was something I set as I wanted the designs done quickly.” First reaction – anger! Then I started to think what my part in this whole mess had been, and I came to an ugly truth. It was my own fault! I had made two big mistakes – Firstly by not saying anything when the delivery date was suddenly changed I had committed to something that I did not have full control over. What I should have done was to say: “Okay that’s not the time line I have been given, and as it has dependencies outside my team I will need to check when these teams can deliver. Can I get back to you with an estimate? ” This would have eliminated my second mistake, which was to not account for the things outwith my control. Naturally all the other teams were really busy and I should not have made the assumption that they could help me out without checking first. 

This whole episode made me think of something I read a couple of years ago in The clean coder by Robert C Martin. “The cost of saying yes”

“Most of the time we want to say yes. Indeed, healthy teams strive to find a way to say yes. Manager and developers in well-run teams will negotiate with each other until they come to a mutually agreed upon plan of action. But, as we’ve seen, sometimes the only way to get to the right yes is to be unafraid to say no”

As developers we have this inability to say no, it is seen as a failure or being negative. but sometimes saying no is the correct decision.

Luckily this turned out to not be as big of an issue that it was in my head, and I will now go and re-read the clean coder again.

Until next time, be a clean coder and don’t say yes if you cant commit to it. I highly recommend giving the clean coder a read, it is as an important book as Robert C Martin’s legendary clean code

The post The Cost of saying Yes appeared first on Señor Developer.

LeetSpeak 2019 Tue, 22 Oct 2019 06:54:43 +0000 The post LeetSpeak 2019 appeared first on Señor Developer.


Another Year has gone by since the last LeetSpeak

LeetSpeak is a one day annual developer conference usually held in Malmö or Stockholm and is organised by tretton37 

Each year usually has a theme and this year was about ethics in computing.

“We want to talk about the life-giving power of software, and also make sure that we always keep in mind our responsibility as developers to craft it well – like the true craftsmen we are” – LeetSpeak

I found this year very interesting as this topic should be stressed more in our business. The way society today relies on IT opens up for new challenges in data security and rights violations that we don’t always have measure to counter. Usually conferences are code focused which I also like but this years topic is in my view way more important than what is the latest javascript framework.

As part of my dedication to this topic I will sign up to the ACM code of conduct guidelines and I encourage everybody to to the same so that we can build future systems ethically.

“ACM, the world’s largest educational and scientific computing society, delivers resources that advance computing as a science and a profession. ACM provides the computing field’s premier Digital Library and serves its members and the computing profession with leading-edge publications, conferences, and career resources.” –ACM

On a side note there was some none ethics based talks as-well with Advent of Codes creator and developer, Eric Wastl, sharing anecdotes about the birth and life of his fun web site, and the unexpected usage. If you like puzzles and coding challenges I highly recommend to give the advent (calendar) of code challenge a go and help save Christmas. By the way, it is an awesome website.

Last years LeetSpeak

Find out about last years conference

The post LeetSpeak 2019 appeared first on Señor Developer.

Chinese Ribs Tue, 15 Oct 2019 17:07:07 +0000 The post Chinese Ribs appeared first on Señor Developer.


This simple yet delicious recipe I got from my brother-in-law. When I say it is easy I really mean throw everything in the wok. cook for an hour, serve and be amazed.

Thanks bro


5 cm bit of Fresh ginger (grated)
2 cloves of garlic (pressed)
1 onion onion (diced finely)
a little oil (for frying)
500g – 1kg of ribs (i prefer shorter ribs) (separated to individual ribs)
1 dl sugar (Muscovado)
1 dl soy sauce
1-2 table spoons of fish sauce
juice of 4 limes
approx 1/2 liter of water
1 bunch coriander (chopped coarsely, put 1 dl of the leafs away for garnish) but use stalks for the sauce.
4 sprigs of spring onions (chopped. keep aside one fistful for for garnish)
Salt and black pepper
1 (or less if you are not keen on hot food) Sliced chili (I prefer habanero, chopped finely for garnish).


Prepare all ingredients (i.e chop, dice and juice all required ingredients)

In a wok fry the ribs in some oil until they get some colour on all sides.

Add ginger, garlic, coriander , onion and spring onions, and season with salt and pepper, fry for a bit longer.

Add the sugar

Add the limes juice

Add the soy sauce and fish sauce (don’t get fish sauce on yourself it stinks for a long time)

Add water (the ribs should be covered with liquid) and let it simmer until the sauce is reduced to a sticky mess. keep on adding water if required if the sauce dries out before the ribs are cooked.

Before serving garnish with the chili, spring onions and coriander



Chinese Dumplings

This recipe goes really well with my Chinese dumplings recipe.

Go check it out!

The post Chinese Ribs appeared first on Señor Developer.

The Meeting Manifesto Wed, 02 Oct 2019 16:00:12 +0000 One of my biggest frustrations at work are meetings, as a developer I have always loathed these pointless time-wasting breaks in my working day and I have to say it has not got better now later in my career.

My loathing (and I think this goes for most people) of meetings is not in the concept of meetings and discussions, these are one of the most important aspect of our work. How else are you going to find out what it is we are expected to achieve. My issue is with the format of meeting.

The post The Meeting Manifesto appeared first on Señor Developer.



One of my biggest frustrations at work is meetings. As a developer I have always loathed these pointless time-wasting breaks in my working day and I have to say it has not got better now later in my career.

My loathing (and I think this goes for most people) of meetings is not in the concept of meetings and discussions, these are one of the most important aspects of our work. How else are you going to find out what it is we are expected to achieve. My issue is with the format of meeting.

Too many times I have seen the meeting circus spiraling out of control and people spending their whole day in meetings. Perhaps all these meetings are really important and there are many details to discuss, but I have seen rooms full of participants that have no direct connection to the content being discussed. Sometimes I also believe that the “meeting circus” stems from peoples roles being too vague and they don’t know what is expected of them so a full calendar of meetings must mean that they are really busy.

Better meetings is a cost saving

So let us put the cost of a meeting in perspective. Imagine a meeting with 5 people costing €50 an hour, imagine if that meeting runs for 3 hours and there is no concrete actionable outcome from that meeting. Then the meeting has cost €750. People will also be tired and totally unfocused coming out from that meeting, that cost is probably much higher.

Now imagine the same 5 people costing the same spending one hour in a meeting. They also took an hour each getting up to speed on the topic and the organiser spent one hour on the agenda and the follow up on the administration.

That’s a meeting costing €550 and you probably also have something actionable that came out from it.

So how can you or your company mitigate the meeting circus spiraling out of control? Well here is my suggested solution. I call it the “meeting manifesto”.

The basics

In my view there are two types of meetings, Formal and Informal. A formal meeting to me is slightly more structured, an example would be a meeting that is made up of several different people from different parts of the business or project. An informal meeting is more when a couple of developers gather to work out a particular coding hurdle, so no meeting invite might have been sent out, rather that you continue a discussion that arose at your daily stand up . I still say that both types can conform to my meeting guidelines..

A meetings should be no longer than an hour, the reason for this is that people switch off and lose focus after that. The meeting should also focus on a particular issue so that it is easier to stay focused. Naturally there are cases when meetings needs to be longer but it should be an exception rather than the rule. One such exception might be a workshops (yes they are still meetings). In these exceptions you can still break it up in hourly portions with an agenda for all sections.


A meeting has two different type of actors, the Organiser and the Participants.

The Organiser

Usually requests  the meeting and will send out the meeting invite to all relevant parties. He/She will run the meeting and keep it on track, makes sure that everybody’s voice is heard. Assigns a note-taker. The organiser should include all relevant information and documentation that is required for the discussion, preferably in the meeting invite. The organiser is also responsible for writing up the outcome and any actions

The Participants

Are all relevant people needed to reach the goal of the meeting. It should include relevant stakeholders and decision makers.

The Manifesto

All parties of a meeting:
§ Should always be relevant to the purpose of the meeting
§ Should always be on time
§ Should be prepared for the meeting

§ A meeting should always have a specific purpose
§ A meeting should have an agenda
§ A meeting should have a clear goal
§ A meeting should stay on topic

§ A meeting should always start on time
§ A meeting should have all required decision makers present
§ A meeting should be kept to a maximum of one hour
§ A meeting should always have a note taker
§ A meeting should be mobile and laptop free (only a presenter/note taker should use a laptop)
§ A meetings decisions and actions should be noted and sent out

Your promise

As a meeting Organiser I hereby promise to whenever I require a meeting that I include all relevant parties and all relevant information (Agenda and Goals). I promise to be on time for the meeting (I will actually be there first and set up any equipment). When you attend one of my meetings I guarantee that everybodys voice will be heard. And that correct notes and actions will be sent to all attendees.

As a meeting Participant I here by promise that I will always arrive on time and have prepared by reading any prerequisite material. I also promise whilst in the meeting my phone/laptop/tablet will stay away from my hands or the table.

Summary and more

Meeting rooms

Upon entry put phones away, naturally if someone is expecting their firstborn child the mobile can be switched on but not on the table (and especially not in front of someones face). One way to do this is to have a charging shelf next to the door in your meeting rooms so that you place your phone (on silent) in a charging dock



Some reflections that I have come across:
Large organisations will always struggle to have good meetings because in large organisations dependencies on each other are greater. There will be lots of politics involved in viewpoints. Product companies or organisations who own the whole domain are more likely to have successful meetings (and in my view more likely to succeed in IT projects)

Download the manifesto

Feel free to use and share any part of the Meeting Manifesto

The post The Meeting Manifesto appeared first on Señor Developer.

Chinese Dumplings Mon, 30 Sep 2019 18:27:29 +0000 The post Chinese Dumplings appeared first on Señor Developer.


Awesome Dumplings


A legend goes that dumplings were first invented in the era of the Three Kingdoms, around 225 AD. Zhuge Liang, a general and minister of Shu Han, dammed up a poison marsh on his southern campaign against the Nanman with dumplings instead of the heads that the Nanman used.!


My first dumpling experience was in the China Town district of New York and I fell in love with them (both the city and the dumplings) straight away.

Now I regular make dumplings at home and have a Chinese feast. The dumplings will also freeze well so you don’t have to force down 50 dumplings in one sitting.

So this is my recipe for steamed and partly fried dumplings (approximately 40-50 dumplings)


This recipe will take at least a few hours to complete. You will undoubtedly swear a lot as the dough sticks. but i PROMISE it will be worth it in the end.


For the filling

2 cups/~5 dl of blanched and finely chopped cabbage (10-12 leaves)
400-500g pork mince
1 tablespoon of sesame oil
2 teaspoons of finely chopped ginger
2 cloves of minced garlic
1 tablespoon of rice vinegar
3 tablespoons of soy sauce
1/2 cup 1.2 dl of finely chopped spring onion (approximately 5 sprigs)
750-1l chicken stock

The dough

2.5/6 dl of flour
2/3 cup/160 ml of boiling water, and 1/3 cup/80 ml of cold water

Dipping sauce

Mango 2 dl fresh or frozen (but thawed out)
1 teaspoon ground cinnamon
juice from one lime
1 table spoon – olive oil

Making the filling
  1. Prepare an ice bath for the cabbage by filling a large bowl with cold water and add some ice cubes
  2. Bring some water in a medium pot to a boil, and boil the cabbage leaves for 1 minute
  3. Place cabbage into the ice bath until cool
  4. Remove cabbage from ice bath and pour out the water. Chop the cabbage as thinly as you can, and place into the bowl that we will now make the filling in
  5. Chop and add the spring onions to the filling mix
  6. Press the garlic cloves into the filling bowl
  7. Add the chopped ginger
  8. Add 1 tablespoon of sesame oil, 1 tablespoon of rice vinegar and 3 tablespoons of soy sauce
  9. Lastly, add the pork mince. Now comes the icky part! mix the filling with your hands
  10. Cover the bowl with cling film and let it chill in the fridge for 1 hour
Making the Dough

Now We can start making the dumpling dough

  1. Place the flour in a bowl and make a hole in the middle
  2. Slowly pour in the boiling water in the middle of the bowl and stir with a fork or similar. Then add the cold water to the bowl
  3. You can either knead the dough for 5-10 minutes or use a blender with a dough hook (I use a blender)
  4. When the dough is solid and well kneaded cover the bowl with a damp cloth and place in the fridge for half an hour
Dipping Sauce

And one last thing (dipping sauce)

Last prep before we start assembling the dumplings, let’s make some of my favourite dipping sauce, you don’t want to miss out on this!

Put the mango, cinnamon, olive oil and lime juice in a blender and blend until smooth (it shouldn’t be too thick).

The Assembly Line

now its time to start the grueling work of assembling the dumplings

  1. Flour a flat surface
  2. Start with a golf ball sized piece of dough and roll it out until its thin (use lots of flour otherwise you will struggle to get the dumplings of the surface)
  3. Use a large glass or similar as a stencil to cut out round sections of the rolled out dough
  4. Put a table spoon of filling in the middle of each round piece, use a wet finger around the edge of each piece the fold it
  5. Squeeze/pinch the edges so that there will be no leakage
  6. Put the completed dumplings on a tray covered with grease proof paper and keep them covered with a damp cloth
  7. Repeat process until all dough/filling is used up (be warned this took me a few hours the first time before I perfected my rolling technique)

Finally all dumplings are rolled and filled and by now you probably wondering why you started this project…
but stay with me you are almost there and it will be worth it in the end.

Prepare approx 750ml of chicken stock

  1. Add some vegetable oil to a deep pan/wok (You will need a lid for the steaming) and heat to a medium-high heat (hard to say a specific gas mark as it depends on your cooker)
  2. Add dumplings to the pan (not too many do about 6 at a time), and fry them for approximately a minute until the bottom start getting brown, you can fry all sides if you want them more solid and less rubbery
  3. Pour in 1/4 cup/4 tbl spoons of chicken stock cover with a lid and cook for another 2 minutes (most of the stock should have disappeared by now) and the dumplings should start getting crispy

Well done! time to enjoy it

Well done!

Finally it is time to enjoy your hard labor. I hope you will enjoy this recipe as much as I have.

Until next time!

The post Chinese Dumplings appeared first on Señor Developer.

Dubrovnik Fri, 20 Sep 2019 16:54:08 +0000 The post Dubrovnik appeared first on Señor Developer.


Short trip to Debrovnik (September 2019)

My first visit to Croatia was to the lovely city of Dubrovnik, which I have to admit I did not know much about. As I research the destination beforehand I was excited to find out that Dubrovnik’s old city was the main filming sites for Kings Landing from the epic series Games of Thrones


A brief History

The history of Dubrovnik began in the 7th century, aorund the year of 614. A group of refugies from Epidaurus (present-day Cavtat), while fleeing from the Avars who devasteted and distroyed their town, established a settlement on the small islet called Laus (which in Greek means rock).

Absolut Dubrovnik

Trip details

Arrival Friday evening, depart Monday lunch time.

September to me seemed like a perfect time to visit the city as is towards the end of the season and it would not be packed with tourists, but temperatures would still be in the mid 20’s. As I arrived the weather did not disappoint as it was still a lovely 26 degrees Celsius and a water temperature of 24 degrees. But to my surprise the city was still full of tourists. Two cruise ships was moored in the bay and they shipped in busloads to the old city. Speaking to one of my tour guides, she told me at the height of the season there can be 6 ships every day. This means that walking through the old city (or King’s landing) was not as pleasurable as I was hoping as large groups of tours blocked almost every street.

Day two of the visit was spent on a boat and exploring the beautiful Croatian archipelago and it is truly stunning. I can understand why it is so popular to sail around in this part of the Adriatic Sea.



That Dubrovnik is a very beautiful city there is no doubt about. The coastline is stunning and the water crystal clear, I would recommend bringing your snorkeling equipment!

What I loved
Weather and water temperature. Stunning coast. The old city is amazing

What I thought was less good
Dubrovnik is a rather small place and it gets crowded with tourists, especially the old city. Can’t even imagine what it is like at the hight of the season.

Dubrovnik is not that cheap (a beer costs around 45 Kuna / €6)
Service is not great, They are definitely not rude, the opposite! But it can be very laid back and my longest wait for a beer was over 20 minutes in a pretty empty restaurant.

The post Dubrovnik appeared first on Señor Developer.