Digital Ocean VPS hosting review

Digital Ocean(DO) is a company that provides easy to set-up SSD-powered virtual private servers(VPS). It’s been growing ever since it’s launch back in 2011.

DO is primarily targeted at developers, system admins, or generally people with some experience administering a server. However if you’re willing to learn and are not scared of command-line use and are not going to host very important stuff as you learn you should totally try out DO. It has a great deal of articles that will guide you through setting-up various environments step-by-step

There are a couple of factors that make DO notable among it’s competitors(like Amazon AWS for instance):

  • Blazing-fast set-up
    You can create a new server in about a minute!
  • Ease of use
    The control panel for managing all of your servers is incredibly simple – you can perform basic tasks, like creating a back-up, keeping note of some statistics, etc.
  • Affordability
    The cheapest VPS that comes(at the moment of writing this article) with 512 MB RAM, 1 processor, 20 GB SSD storage, 1 TB transfer costs only $5 per month!

Combine the above with quite a few coupon codes that can give you 1 to 2 months free VPS hosting for you to try out, you get a pretty nice deal.

Of course nothing in this world is perfect. Here are the things I’ve noticed that can definitely be improved:

  • More statistics
    While I do appreciate the simplicity of the management panel, at least a graph of memory usage would not hurt. Also maybe a quick overview of available disk space.
  • Easier re-sizing
    The current re-sizing method only allows you to increase the computing resources of your server(also called fast-resize). While sometimes that is all you need, in other situations you would also want to get more storage room. And if that’s your case, you have to take a snapshot of your server, create a new server from that snapshot, adjust your DNS settings to point to the new IP, wait for the changes to propagate and then destroy your old server. Pretty clumsy.
  • Better issue notifications
    While usually you would be notified(either as a message in the server management screen, or as an email), sometimes you have to contact support after you notice that something is not working properly for them to tell you that it’s an issue they’re currently working on – that just wastes the time of both parties.

And of course there are some other relatively small issues, but those are the things that I found a bit annoying.

Other than that – support is pretty good, there are plenty of server distributions and a handful of server application images that you can create your server with(like a GitLab server for instance). As with any other VPS, you can do pretty much whatever you want on your server(as long as you’re not violating their ToS).

So – if you’re looking for a new VPS solution, why not go over to Digital Ocean and start your server in a matter of minutes. If you want to show some appreciation, I would love for you to use my referral link to register your account – https://www.digitalocean.com/?refcode=1ba577bd79ab . Otherwise, you can just go to their site – https://www.digitalocean.com/ and set-up your account.

About the tax evasion and the lower insurance income

Disclaimer:
This is a topic on which I haven’t written so far, but lately has started exciting me, after I decided to start my own company(that hasn’t happened yet, but the drive is still there). Also note, that this article is related to the economic situation in Bulgaria.

I guess everyone that has worked in the private sector(I don’t know what’s the situation in the state sector, but I really hope that things are correct there) is aware of part of the schemes that employers use in order to pay higher salaries to their employees and keep more profits for themselves. The most common method is to declare that the employee is being paid less than what they actually are and the rest is handed in cash.

This way the employer has to pay less for social security, healthcare and taxes. Since the employee currently pays 40% of the taxes and social security, they also “take advantage” of that opportunity and “lose” less of their actual net profit.

On the other hand, the negative consequences for both the individual and the whole country are significantly higher. To name a few:

Negative consequences for the employee:

  • Smaller salary during paid leave.
  • Smaller benefits during maternity leave and temporary disability.
  • Smaller benefits during unemployment.
  • Lesser chance and smaller size of credits.

Negative consequences for the whole country:
A smaller amount of money goes into the country’s treasure. That makes paying out pensions and benefits for pensioners and the people in need more difficult(not to say impossible). Which leads to the fact that some of the money in the budget have to be shuffled around and instead of them being used for other means like education, healthcare, etc. they are used to cover pensions and benefits.

Now, if this was occurring on a rather small scale, the consequences wouldn’t have been so big. The problem is that this is not the case.

Here comes the time to admit, that I totally understand why employees and workers come to breaking the low when we talk about industries where the actual salary is already low enough.

On the other hand, I can’t understand and I don’t justify this behavior in industries where the companies make profits that are big enough to allow them to pay for the actual amount of social security that they should be paying for. An example of such a branch is the IT sector for instance. I’m guessing that most of the IT companies in Bulgaria seek and find clients across the globe, including some wealthier countries(like the US, Great Britain, etc.), which allows them to offer competitive prices compared to the local market all while getting a considerably high income for Bulgaria. Even if some companies don’t work mainly with clients from abroad, some companies offer a pretty costly(for Bulgaria) prices for services like building a website for example. Under any circumstances if the company is managed good and it has well-trained personnel, realization is almost guaranteed.

I don’t have the exact numbers and I can’t certainly state that if most of the sectors with high incomes start reporting the actual income of their employees there will be a tangible change, but I’m very confident about it. Unfortunately most of the people in Bulgaria(and not only) strive aim at improvement on the personal level, instead of towards a global one – and for as long as that is the case, the chances of the situation improving here will be smaller and smaller.

While I know that one swallow does not a summer make, my personal intention is to pay the real social securities and taxes to anyone(including myself) that works for me(in that sense, I’m a terrible capitalist I know ). This way I’ll rest assured that I’ve fulfilled my part of my duties towards the people that have worked their share and the people that will start working tomorrow.

Spring clean-up

Even though I liked the theme that I found and customized, I finally got tired of the look of it(and the general dark tone that it had). I’m a very positive and smiling person and having a dark theme like that didn’t really reflect my nature.

I’ve been looking for redesigning my blog for maybe half a year, but due to other more important tasks(work, personal life, etc.) I never got around to it. To be fair me being not very good with the visual arts(yes – I can match a new piece of an UI to the rest of it, but can’t build anything from ground-up) helped delay the change as well.

But then I just decided that it’s time to get a new theme. I went on looking for one and after a quick Google search, I stumbled upon this article at WPMU Dev – 85 Free Clean and Simple WordPress Themes. To be honest I also enjoyed the Landscape theme from that list, but then decided against it, due to it’s dark colors(I assume that would’ve been easy to fix). While not all of the themes in the list would fit my blog, some of them are pretty cool and can be definitely a good fit different types of sites.

In the end I picked Highwind by James Koster(I didn’t get to the bottom of the list – I was too impressed with it). It’s clean, responsive(which my old theme wasn’t) and content-centered. Easily customizable via Header images and the theme Customizer it gives easy access to the main look of the site(basic colors and sidebar position).

The theme is completely free and open-sourced – it can be found on WordPress.org and GitHub. A quick glance of the code tells me that it’s well-organized and seems to be following the WordPress Coding Standards. It’s also written with child-themes in mind, so extending and overwriting it’s functionality with a child theme is a breeze.

Progress on Multilingual WP

Over the last two weeks I didn’t had the chance to actually spend a lot of time working on the plugin, BUT I’m proud to say that 2 very big things happened over those two weeks:

1. Started using the plugin for a big corporate website

At the company I currently work at, we got the task to convert an ASP.NET site to a WordPress site. The site is in two languages and has quite some content – well it probably has around 70 pages in each language and a big load of files as well, but that’s still more than the average website. Since I’ve decided to stay away from qTranslate when it comes to big multilingual websites, I decided to get my plugin for a spin and see if can handle such a website and it’s needs.

While working on the website a bunch of small issues showed up and I was able to resolve them right on the spot. In general I didn’t come across anything serious, which makes me more confident in the (hopefully)upcoming launch of the plugin to the general public

I also stumbled upon a different issue with multilingual websites – sometimes not every page is available in each language. Sometimes you want to display certain content just for specific language/s. Take the following example:

You have a university and on your website you’ve published information about it – including your address, contacts, etc. You’ve also created a page in your native language about the programs/discounts that local students can take advantage of – that is certainly information that is not suitable for foreign exchange students and they don’t need to be bothered to see it on your website. On the other hand you also have a section in foreign languages explaining what you can offer to exchange students – something that the local students won’t benefit from. So you only want to display those pages to their expected audience.

I tweaked here and there and in the end I came up with a custom-tailored solution that involved a simple meta panel displayed on every page/post/etc with a list of check boxes with all enabled languages. When you check a certain language, this page suddenly becomes unavailable for that language – it’s removed from menus, search results, even if you try to open the exact URL it will still display a 404 error. I’m even thinking of adding this functionality as an option to the plugin(it would be disabled by default), but it would probably need some more work.

2. The first website using Multilingual WP has gone live

Well, ok – it’s the second one of which I know, but I’m not counting themoonwatch.com

This is the website for a team that will participate in the Red Bull X-Alps this year. You can check-out their website here – X-Alps – BasqueTeam. The guy who worked on the website is one of the team members – Iñigo Arizaga. He initially contacted me with a couple of bugs regarding the plugin and then kept on doing that as he was finding various small issues while developing the site. He was of great help to me and I really appreciate it I wish them good luck, favourable wind and meteorological conditions and most importantly to enjoy the event!

 

That being said – if anyone else has successfully launched their website using Multilingual WP to make it multilingual – please feel free to drop a link in the comments and let me(and everyone else) know about it.

Migrating to Multilingual WP

After a long time of working on the code of the multilingual plugin, I finally dared to test the plugin in a live environment – my own site!

The migration wasn’t as smooth as I wished it to be, but that was expected – I fixed a bunch of issues that I hadn’t noticed until then. So far the plugin’s development is moving on very well and hopefully I’ll really be able to release it soon(I’m not coming up with a date for when that would happen, simply because things can change a lot in just a week or so).

After adding support for the excellent Google XML Sitemaps plugin(which was the main thing stopping me from trying the plugin on my site) and making the Taxonomy support better I decided to finally upload the plugin to my website and see what happens.

If you decide to do that, please, PLEASE, make a back-up of your database – in my case I didn’t had to use it, but it’s good to have one just in case something goes terribly wrong.

I activated the plugin, configured the desired languages and went through the migration of my posts(which for just two languages turned out to be extremely fast). The migration worked flawlessly and I ended up with both of my languages in the new interface(migrated from qTranslate) – for both posts and pages, and categories and tags.

I decided to use the feature of the plugin, where I can set custom slugs for each taxonomy(besides the custom slugs for each category/tag). It worked sort-of-okay, and I had to fix some bugs with it. The only concern one might have when using this feature on an already set-up site is that old links will break and you’ll have to use a plugin that redirects the broken URL’s to the correct ones. I used the 404 Redirected plugin for that – it’s a bit clumsy and is lacking Regex support, but I only have a handful of links that I need to fix anyway, so it was fine.

In the case of more URL’s, it’d probably be smarter to use a plugin like Redirection – I personally didn’t like it a lot, because it didn’t had the option of disabling automatic redirection to the home page on 404’s, but it does have support for Regex rules, which would make it much more easier to fix more of the broken links with less entries.

Other than that – the language switcher doesn’t come with built-in styling, so as you can see in my sidebar at the moment the text is not properly aligned with the flags – I don’t consider that an important issue, so I’m putting it off for a bit now – I’ll probably find some time one of these days to do that as well.

One more thing I was going to forget – statistics(of sorts) of the plugin’s performance compared to qTranslate – to be honest, most of the numbers are not that low, compared to qTranslate, but my small website wasn’t causing a lot of trouble for qTranslate anyway. I did 2 scans with qTranslate on and 2 scans with Multilingual WP on – one manual and one automatic for each.

I’m posting the results from just the automatic scans, since they seemed to have “caught” and timed more pages than my manual scans(I think the plugin doesn’t always work correctly).

With qTranslate enabled:

WordPress Plugin Profile Report
===========================================
Report date: June 6, 2013
Theme name: Moon Watch
Pages browsed: 3
Avg. load time: 1.8621 sec
Number of plugins: 19
Plugin impact: 82.56% of load time
Avg. plugin time: 1.5373 sec
Avg. core time: 0.1272 sec
Avg. theme time: 0.0281 sec
Avg. mem usage: 137.17 MB
Avg. ticks: 158,059
Avg. db queries : 52.67
Margin of error : 0.1695 sec

Plugin list:
===========================================
P3 (Plugin Performance Profiler) – 0.0017 sec – 0.11%
qTranslate Separate Comments – 0.0451 sec – 2.93%
qTranslate – 0.8806 sec – 57.28%
Other(13 plugins) – 0.6097 sec – 39.68%

Plugin impact with qTranslate

 

With Multilingual WP enabled:

WordPress Plugin Profile Report
===========================================
Report date: June 6, 2013
Theme name: Moon Watch
Pages browsed: 5
Avg. load time: 0.7518 sec
Number of plugins: 18
Plugin impact: 79.91% of load time
Avg. plugin time: 0.6008 sec
Avg. core time: 0.1270 sec
Avg. theme time: 0.0129 sec
Avg. mem usage: 58.95 MB
Avg. ticks: 14,781
Avg. db queries : 82.60
Margin of error : 0.0111 sec

Plugin list:
===========================================
P3 (Plugin Performance Profiler) – 0.0023 sec – 0.38%
Multilingual Wp – 0.1557 sec – 25.92%
Other(16 plugins) – 0.4426 sec – 73.7%

Plugin impact with Multilingual WP

 

These results are pretty rough – since for more consistent results those tests should’ve been done more and for more pages, but I think some of the information they give is pretty obvious and hard to argue with.

I used the P3 (Plugin Performance Profiler) plugin – I really think it’s an awesome tool – I’m not sure how accurate it its, but it does seem pretty good

 

Well, that’s all for now – feel free to try the beta version of the plugin, by downloading it from GitHub, and wish me luck with releasing the plugin publicly soon!

 

Multilingual WordPress

Multilingual WordPress – that’s the name of the WordPress plugin that I’m currently working on. This plugin will let WordPress administrators to create multilingual versions of their site’s contents.

The idea for it was born, after a couple of times when new versions of WordPress were released, qTranslate(that’s the plugin that I’m using for the same purpose while writing this post) was breaking in an all new and exciting way. The author of this plugin unfortunately doesn’t have the possibility to actively support it and therefore, I decided to build a new plugin starting from scratch, but trying to use mainly built-in WordPress functions in order to reach optimum compatibility of future versions of WordPress.

I started the project about the middle of November 2012, but due to the big amounts of work and some personal stuff, I didn’t had the possibility to work on it a lot. Finally in the end of February, I was able to resume my work on the project and I did a somewhat considerable progress

So far the plugin behaves itself fine in a test environment and can do the following things:

  • Support of undefined amount of languages(adding new languages is really easy, but I haven’t tried to see how many one can add)
  • Adding separate content editors(one per language) to any of the selected post-types(pages/posts/etc)
  • Different URL for each language – besides the part that defines the language, each post can have it’s own “slug” for each language – in order to accomplish this if you are using qTranslate, you’d need to also install the “Qtranslage Slug” plugin
  • Different comments for each language(each comment is automatically displayed in the language that it was written in) – again if you’re using qTranslate, you’d need the “qTranslate Separate Comments” plugin
  • Quicktags “qTranslate” style “[ :bg]content in bulgarian[ :en]content in english”, as well as “[ bg]content in bulgarian[ /bg][ en]content in english[ /en]” and “[ mlwp langs=”bg,en”]content in bulgarian and english[ /mlwp]”
  • And other small things

Of course, there is still some time until the plugin is developed and tested well enough in order to be publicly available in the WordPress.org plugin repositories. Until then, if you’re interested in the plugin, you can follow it’s progress on the GitHub repository.

The Wedding Website

Me and Koji currently live in Istanbul – she’s studying in a univeristy here – and since most of the guests for our wedding live in Bulgaria and some live in USA, sending-out invitation cards via the postal services would be somewhat inefficient and slow. So we decided to make web-based invitations. We looked for an already working solution, but we couldn’t find anything that we liked.

Since I’m more-or-less a computer(well mostly WordPress) geek, I decided that we can make a WordPress-based website that would serve as guests and invitations management application.

So then came the design part. Honestly I’m not good at designing a complete product(well I’ve never tried to make a complete design of something, but I’m pretty sure it won’t turn out really good). So we thought about designers that we know and luckily Koji has a friend that makes designs. She was also one of the first people to know that we’re officially getting married. So we asked her if she’d like to design our wedding invitations. She agreed and we sent her a couple of examples of things that we both like with some ideas that we have. A week or so later(she’s been working on the invitation in her spare time, so that was pretty fast and we really appreciate that! ) she sent us the ready design. Once we got it – we just had no words, because it was really really beautiful and we just fell in love with it right away.

Then came my part – since the design was mainly using custom fonts, I only left the dynamic text(like the guest’s name and labels for the answer) actual text and used the rest as couple of separate images. After all I’m not aiming for high rankings in Google with my invitation, so it’s not a big of a deal that I haven’t done it in a SEO-friendly way

After I’ve done the main stuff, I took care of a couple of some small details – for instance I added a loading animation that would stay there until the whole page is loaded and then fade-out and the invitation would fade-in. I also made the response form submit with AJAX, showing a nice message once it’s submitted.

Now since I’m using pretty permalinks, it’s not super hard to guess a guest’s name and see their invitation(therefore response) on their behalf. To battle that, I added a ?n=longstringofseeminglyranomcharacters where longstringofseeminglyranomcharacters is a unique string for each invitation – it’s generated by a long complicated nonce, combined with the post ID of the invitation, which is then hashed using a PHP algorithm. Basically it’s nearly impossible to guess that nonce – it’s more likely that my server will go down because of the too-excessive use of resources than anyone brute-forcing through that.

Basically what happens when an invitation is about to be displayed is that the script checks the n parameter and compares it with the correct one for this invitation. If it’s missing or it’s not correct – the user gets redirected either to the home page, or to an error page(if it’s defined in the site settings) and doesn’t get to see the invitation. Besides the initial idea, this allows to do one more thing – if I change the nonce(which is not visible anywhere on the site and you need to access the code to be able to see it), all of the invitation links will become invalid – that’s useful if you want to have an exact time until invitation responses should be collected.

Here are a couple of screenshots from the invitation itself:

Invitation - loading

Invitation - main

Invitation - response saved

And last, but not least I want to express my gratitude towards Maria – the designer of our invitations

The Wedding

I’ve never thought that I’d get to the point of getting married so early in my life. I’m the first one of my school friends to get married(well unless someone gets married in the next 2 months ). It’s just a bit strange perhaps, but I’m fine with that – actually I’ve always considered myself more mature in my perception of the world and values than most of my peers(that’s what Google Translate says how people the same age as me are called), so committing to a long-term relationship doesn’t seem that odd.

But the fact is, that I do love her and find her so amazing, great, caring and just perfect that I’m just sure that I want to spend my life with her Besides she’s not into settling-up in one place yet(which I’m perfectly fine with, since I do want to explore the world), so if we are married it will be a whole lot easier to travel and stay in different places together.

Koji is older than me(by a fair amount of years) – some might find that weird, strange, some might not care about that, since they believe in pure and honest love and don’t find age to be an important factor. I don’t really care – I mean it’s everyone’s right to have their own opinion and I’m fine with that.

Any way, the plan for the wedding is great – Koji figured-out a great ceremony with lots of symbolism in it – we’ll do a Hand-fasting ceremony and everyone of the guests will take part of it, by lighting a candle from a torch that has been lit from the first two candles(ours). I really really love the idea of the ceremony and the wedding in general – it will be in a hut in the central Balkan, close to Gabrovo. This is the place where we most-likely met for the first time(it would be around two years before the wedding), even though we didn’t seem to remember much of it About half of the guests will be scouts and the wedding will have more-or-less scout spirit(since both of us find scouting important for our lives).

PP: And no, Koji is not pregnant

Custom Permalinks for hierarchical taxonomies

The title is pretty vast and non-descriptive, but it sets the general idea of the post. In general the Permalinks system that WordPress uses is pretty flexible, but it also has it’s limitations. Quite recently as I was working on a client’s project, I stumbled upon one of them.

The project was to create a Frequently Asked Questions database, using WordPress. The client wanted the following structure for the database(this is a simplified version)::

  • Index of the database ( http://example.com/faq/ ) [Index of the whole database]
    • Main Category ( http://example.com/faq/category/ ) [Index of the Main Category]
      • Post in the Main Category ( http://example.com/faq/category/post-1-slug/ ) [View only Post 1]
      • Sub-Category ( http://example.com/faq/category/sub-category/ ) [Index of the Sub-Category]
        • Post in the Sub-Category ( http://example.com/faq/category/sub-category/post-2-slug/ ) [View only Post 2]
    • Another Main Category ( http://example.com/faq/another-category/ ) [Index of the other Main Category=]

Everything looks normal(as structure of the URL’s) for the regular user, but WordPress has a different idea on the matter Instead of an URL like http://example.com/faq/category/ we will be able to see the index of the Main Category at an URL like http://example.com/faq-category/category/, which as you can notice is quite different from the initial idea. To fix this issue we have to add a couple of custom Rewrite Rules and functions.

The first step is to register the new Custom Post Type and it’s Custom Taxonomy. Here’s how:

This code registers the new post type and it’s “FAQ Categories” taxonomy, which we will use to categorize the questions.

After we register the new post type, we have to add two functions that will make the Permalinks work the way we want them to:

In the code above we registered two functions – register_faq_rewrite_rules() and fix_faq_subcategory_query().

The first function adds the following rewrite rules:

  • faq/([^/]+)/?$ – this rule will be applied when the URL of the page that is being loaded looks something like “faq/any-character/” – in other words when the URL starts(after the part with the home page URL) with “faq/” followed by any combination of symbols, without “/”( “([^/]+)” ), and possibly followed by a “/”( “/?” ). Also in order to match, this part has to be the last part of the URL(in other words there won’t be a match, if the URL is “faq/any-character/something”).When the current URL matches, the page will display a FAQ Category archive for the category(according to the example I gave) “any-character”.
  • faq/([^/]+)/([^/]+)/?$ – this rule is almost the same as the previous, except for the URL that would match this rule looks like “faq/any-character/post-slug/”.This will display a post with slug “post-slug” from a FAQ Category with slug “any-character” OR an FAQ archive for a FAQ category with a slug “post-slug” that is child of the “any-character” FAQ category.
  • faq/([^/]+)/([^/]+)/page/(\d{1,})/?$ – this rule will match paginated results for a sub-category archive.
  • faq/([^/]+)/([^/]+)/([^/]+)/?$ – this rule is almost the same as the previous, except for the URL that would match this rule looks like “faq/any-character/sub-category/post-slug/”.This will display a post with slug “post-slug” from a FAQ Category with slug “sub-category”.

The second function on the other hand fixes the issue with the sub-categories. The issue itself consists in the fact, that when you try to load a page with URL faq/category/child-category/, WordPress would try to load a post with slug “child-category” instead of the sub-category with slug “child-category”. The function itself is probably not the best solution to the problem, at least because we have to make an additional query to the database, but it’s the only solution I was able to come-up with Since the function checks if there are posts with slug “child-category”, if you happen to have posts(from the FAQ post type) and categories with the same slug, you might get unexpected results

That’s enough to make the FAQ database run properly, but right now if you want to fully use the new Rewrite rules, you’d have to write every URL manually(I mean, when you link to content from the FAQ database). This is because WordPress doesn’t know how to generate the links, so that they match our idea. That’s why we add a couple of more functions:

The above functions “filter” the output from two built-in WordPress functions, which take care of creating the correct URL’s for all pages, posts, taxonomy archives, etc.

There is one more issue, that could be a serious problem for some users – the duplicate content issue. There is a rather large chance, that Google or another search engine that crawls your website to get quite upset by the fact that it can find identical content in two different URL’s(for instance faq-item/post-2-slug/ and faq/category/sub-category/post-2-slug/). This can be avoided with a function that redirects the users to the correct address, but I’ll leave this up to you

If you want to see the whole thing in action, you can go to Custom Permalinks Test.

2 Moons

The 2 Moons

People have been using the phases of the Moon to keep track on time for many centuries. I don’t think it’s really common nowadays though In this post I’ll be generally referring to a “Moon” as one full lunar cycle(or approximately 29.5 days)

2 Moons is not a small amount of time, considering the amount of events(including life-changing ones, both globally and personally) that can(and DO) occur in this period. I feel I’m writing nonsense right now, so I’ll move on

About 2 Moons ago, me and my Love laid the foundations of a really strong spiritual(or sensuous) bond. None of us had any idea what it would turn into subsequently. We both kind of jumped into a relationship that wouldn’t make sense to most people(the circumstances were a bit complicated by that time). We just gave it a try and let our feelings run wild.

That was a good decision, maybe perhaps the best choice we’ve ever made. We got to know a lot about each other from the whole beginning of this relationship. We spent about 2 thirds or maybe even more of our first Moon living together – some of the time at her place(at that time), some of it at my place. We got really attached to each other, so attached in fact that at the end of our first Moon, we could barely spend time apart from each other.

She had plans for her near(and not so near ) future and I had none. That made it pretty easy for me to fit into her plans. She was moving to Istanbul at the beginning of September to continue her education in the best university in Turkey. So initially my idea was to spend half of the time here in Varna and half of it in Istanbul. But as I mentioned before by the end of the first Moon together, we could barely stay away from each other.

This required a change in my plans and luckily I’ve arranged my life in such a way that I can work from any place in the world as long as it has a good internet connection available. This gives me the freedom to change my location really really easy. So I decided to move in Istanbul with her. I googled for WordPress jobs in Istanbul and sent-out some emails to a couple of companies that were hiring WordPress experts. One of them(C2A) replied and we started working remotely together. Then when I went to Istanbul I worked a bit from their office and they were happy with my work and decided to hire me

Now we even have our own place in Istanbul – not really big, maybe not perfect, but cosy and ours.

It really amazes me how quickly one’s life can change completely. I’m ok with changes though(a friend of mine used to say that if someone that hasn’t seen you in a long time tells you that you’re the same, then there is something wrong with you). I think that they are an essential part of life – with every second we change more or less – and we should learn to accept changes(of course there are changes that should not just be accepted the way they are, but that’s a different topic).

I still don’t know if I believe in signs and whether things happen for a reason or not, but this whole thing seemed to be full of signs – I’m not going to share them here, but I definitely think there were signs indeed

I feel happy and complete. I feel absolutely lucky for having such an amazing(I don’t think there is a word strong enough to describe her, but this one works as well) girl.

Thank you Love, for sharing your life and love with me!

PP: Sorry for the lack of order in my thoughts, but that’s how things went out of my head – I’m not going to reorder them now that they’re out