<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Stipe Grbić</title>
    <description>The latest articles on Forem by Stipe Grbić (@stipegrbic).</description>
    <link>https://forem.com/stipegrbic</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F48365%2F3e92a606-49e1-4c8b-a718-4cfac8002615.jpg</url>
      <title>Forem: Stipe Grbić</title>
      <link>https://forem.com/stipegrbic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/stipegrbic"/>
    <language>en</language>
    <item>
      <title>Side projects (sometimes) pay off</title>
      <dc:creator>Stipe Grbić</dc:creator>
      <pubDate>Wed, 28 Feb 2024 09:29:13 +0000</pubDate>
      <link>https://forem.com/stipegrbic/side-projects-sometimes-pay-off-5336</link>
      <guid>https://forem.com/stipegrbic/side-projects-sometimes-pay-off-5336</guid>
      <description>&lt;p&gt;Having a side project every now and then is beneficial in many ways. Recently I had such positive experience from some of my side projects that are more than five years old. My manager asked me "Hey do you have some node.js experience?" and it was such a good feeling to answer "yes".&lt;/p&gt;

&lt;p&gt;As a reader of my blog, you may have noticed I'm primarily a .NET developer, but during my career and in my spare time, I tried various technologies. One of those is node.js and even though it's more than five years since I worked on it, I learned some concepts and still have the knowledge to work on a basic node.js app.&lt;/p&gt;

&lt;p&gt;This moment felt like a reward for something I even forgot I did. Something I did out of curiosity and fun and never expected to get credits for it, especially this far in the future. It motivated me to write this post to remember myself that trying new stuff, going out of a comfort zone, learning something that interests you, some day may pay off. &lt;/p&gt;

</description>
      <category>node</category>
      <category>backend</category>
      <category>sideprojects</category>
      <category>javascript</category>
    </item>
    <item>
      <title>My first iOS development experience</title>
      <dc:creator>Stipe Grbić</dc:creator>
      <pubDate>Thu, 28 Jan 2021 09:34:43 +0000</pubDate>
      <link>https://forem.com/stipegrbic/my-first-ios-development-experience-3hbl</link>
      <guid>https://forem.com/stipegrbic/my-first-ios-development-experience-3hbl</guid>
      <description>&lt;p&gt;Due to some circumstances, I came in a possession of a Mac mini. This meant only one thing - I had to create an iOS app. My way of thinking was, let’s go completely native - Swift can’t be that hard to learn. Create WatchOS app - I miss a lot of functionality on the Apple Watch. After some attempts and giving up I turned to the good old C# and Xamarin.Forms.&lt;/p&gt;

&lt;h3&gt;
  
  
  iOS native development
&lt;/h3&gt;

&lt;p&gt;Yes, my idea was to create a basic app and was thinking just create a native app from the XCode template, and it shouldn’t be too hard to learn Swift and SwiftUI in the process. The thing is, it’s neither so easy and with my spare time very limited these days, I couldn’t afford to go this way. In addition, my Mac mini is quite slow, and made the developemt (attempt) painfully slow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Xamarin.Forms
&lt;/h3&gt;

&lt;p&gt;Ok, so I concluded it’s better to go the faster way. Using my primary programming language and my primary development PC should speed things up. For a basic app I wanted to created Xamarin.Forms was a good fit, I didn’t miss any functionality from native development. To be fair, the app I want to create was a port of one of my Windows Phone apps and I could reuse most of the bussiness logic code - speed++.&lt;/p&gt;

&lt;p&gt;Using Xamarin.Forms for iOS on a Windows machine works. That’s all :) it works, job can be done but there are a lot of obstacles a native development doesn’t have. Connection to a Mac agent is unstable, often needs a machine restart and just like that you spend 10 minutes and work flow. Deploying to a simulator or a device works good enough, it is a bit slow, but doesn’t get you nervous.&lt;/p&gt;

&lt;h3&gt;
  
  
  Outcome
&lt;/h3&gt;

&lt;p&gt;I created a complete app, but didn’t submit it to the store due to it not being production ready, and my wish not to deal with everything that production involves - users, expectations, fixes and maintenance. The app required to have a push notification server, so I reused and expanded my &lt;a href="http://stipe.xyz/back-to-heroku"&gt;existing server&lt;/a&gt; used for push notification with APNS support. Of course, since I didn’t work on the server for a few years, Heroku wanted me to &lt;a href="https://devcenter.heroku.com/articles/upgrading-to-the-latest-stack"&gt;migrate to the new stack&lt;/a&gt; before I could make new deployments.&lt;/p&gt;

&lt;p&gt;Since I’m an iPhone, Apple Watch and iPad user, and I feel the need to be able to make an app for my own needs, now that I can do it the feeling is great. The unexpected work on the server also refreshed my Node.js knowledge and I felt satisfaction upon successful migration of the server.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>ios</category>
      <category>xamarin</category>
    </item>
    <item>
      <title>My first ASP.NET Core MVC app</title>
      <dc:creator>Stipe Grbić</dc:creator>
      <pubDate>Wed, 08 Jul 2020 20:23:50 +0000</pubDate>
      <link>https://forem.com/stipegrbic/my-first-aspnet-core-mvc-app-5cgk</link>
      <guid>https://forem.com/stipegrbic/my-first-aspnet-core-mvc-app-5cgk</guid>
      <description>&lt;p&gt;As you might have noticed I created a Windows application to calculate time span between two dates &lt;a href="http://stipe.xyz/my-work/"&gt;Event Timing&lt;/a&gt;. Since I’m not always sitting by my Windows PC, I got the need to have this little calculator app available on the web. This evening the web app went from idea to production.  &lt;/p&gt;

&lt;p&gt;The most important motivation for this application was to quickly calculate how old is my baby in days. For this my Event Timing app worked great, with notifications, live tiles and all that, but with one major limitation that it was only available on Windows. Now since I’m spending more time with the baby, I’m not that much by the PC anymore. My phone is always near and I concluded if my application was available as a web app I could easily check the baby’s age in days wherever I am. This and my long time desire to try make an ASP.NET web application made me spend a few hours this evening to create this application.&lt;/p&gt;

&lt;p&gt;Known limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It doesn’t support different time zones. It always calculates based on UTC time.&lt;/li&gt;
&lt;li&gt;Date format is not based on user’s region. Date format in the input field is formatted by users browser. The date in calculated page is formated in dd/MM/yyyy format as I think most of the people use that format.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>softwaredevelopment</category>
      <category>web</category>
    </item>
    <item>
      <title>Blocked? Prepare to unblock</title>
      <dc:creator>Stipe Grbić</dc:creator>
      <pubDate>Sun, 05 Jul 2020 18:15:04 +0000</pubDate>
      <link>https://forem.com/stipegrbic/blocked-prepare-to-unblock-3c6m</link>
      <guid>https://forem.com/stipegrbic/blocked-prepare-to-unblock-3c6m</guid>
      <description>&lt;p&gt;Many times during my career I’ve been blocked from completing my work. Be it feature implementation, bug fix or some kind of software migration I couldn’t finish until someone else does their job first. What to do during this time?  &lt;/p&gt;

&lt;p&gt;I learned that you can’t just say “I’m blocked and can’t do anything until I get unblocked” because there’s so much you can do to prepare for when you get unblocked. Let’s say you are implementing a new feature and need to get the data from server. This new feature is also new for server and it doesn’t have the API you need right now. Instead of waiting or annoy server developers with constant pinging you could prepare for the moment API gets implemented. The goal is to have the least possible amount of work remaining to complete your feature. In this example you could use the time to create tests for your feature before implementation (remember the TDD?). While writing tests you’ll probably need to make some mock data. With mock data you can already continue implementing the feature and get it close to completion. With this approach not only you’ll be faster to complete the feature once you get unblocked, but your implementation will already have covering tests.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Data affects algorithm performance</title>
      <dc:creator>Stipe Grbić</dc:creator>
      <pubDate>Wed, 25 Sep 2019 11:37:59 +0000</pubDate>
      <link>https://forem.com/stipegrbic/data-affects-algorithm-performance-4b5j</link>
      <guid>https://forem.com/stipegrbic/data-affects-algorithm-performance-4b5j</guid>
      <description>&lt;p&gt;The title is so obvious that you’re probably wondering why I had to write a blog post about it. I’m also surprised how obvious truths must be repeated in order to comply with them. I’ll explain what inspired me.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optimize
&lt;/h3&gt;

&lt;p&gt;Recently I got a task to optimize a piece of software I worked on. This was a part of code I inherited and wasn’t so familiar with. In short, it had to process a list of data input, compute something and save the information to the database. So simple, right? Of course, it had some complicated computation in each iteration, but to my surprise that wasn’t the bottleneck. The bottlneck was in the storing and retrieving data from database. It was done in each iteration because the previous one affected computation of the next one. So a developer before me decided to use the database as a single point of truth and on each iteration he saved the computed data, and retreived it again in the next iteration. For a short while I was angry with this unknown suspect and couldn’t understand why would he do it like that. Then I realized, he couldn’t see the actual slowness of the application because his database was probably almost empty. The actual customer has a lot of data in it, so in each iteration there’s a lot of data to send and retrieve from database. That’s when I got a bit of understanding for the guy, but also reminded myself, next time when I’m trying to write optimal code, have in mind the actual data might affect its performance.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>An Excel interop trick</title>
      <dc:creator>Stipe Grbić</dc:creator>
      <pubDate>Thu, 09 May 2019 10:10:04 +0000</pubDate>
      <link>https://forem.com/stipegrbic/an-excel-interop-trick-g3e</link>
      <guid>https://forem.com/stipegrbic/an-excel-interop-trick-g3e</guid>
      <description>&lt;p&gt;Yesterday I had a nice little evening spent with a silent failure of my program. The program needed to create an Excel document, save it and export as a PDF. It should also run periodically and automatically, so as a scheduled task right? Yes, and it works fine for me on my Windows 10 PC, but on clients Windows Server 2012? Not really.&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s wrong?
&lt;/h3&gt;

&lt;p&gt;First thing I saw is that Excel file was created, but PDF wasn’t. The Excel file was still in use by an Excel program in background. My scheduled task was still shown as running, and log files didn’t have any new lines after creating Excel file. It meant export to PDF method failed, but why?&lt;/p&gt;

&lt;p&gt;I browsed the web and found a lot of complaints and users telling that you can’t automate Excel with a scheduled task without a user logged in. It made sense, but my task could open Excel, generate a file and save it. It’s just that when it tried to export it to a PDF it halted. And only when ran unattended, meaning when no user is logged in.&lt;/p&gt;

&lt;h3&gt;
  
  
  The printer
&lt;/h3&gt;

&lt;p&gt;I can’t remember all the things I tried to workaround this problem, but after a few hours I got to this &lt;a href="https://stackoverflow.com/questions/10272415/excel-exportasfixedformat-pdf"&gt;StackOverflow question&lt;/a&gt;. There was that one answer that pointed that Excel is not able to print to PDF and I should set Microsoft XPS document writer as a default printer. So I tried that and it worked! These kind of problems make you feel alive and put you out of your comfort zone writing those lines of code :)&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>windows</category>
    </item>
    <item>
      <title>There's no privacy on social networks</title>
      <dc:creator>Stipe Grbić</dc:creator>
      <pubDate>Thu, 18 Jan 2018 08:32:40 +0000</pubDate>
      <link>https://forem.com/stipegrbic/there-s-no-privacy-on-social-networks-2hcf</link>
      <guid>https://forem.com/stipegrbic/there-s-no-privacy-on-social-networks-2hcf</guid>
      <description>&lt;p&gt;This might sound so obvious to people who know how the Internet works, but I think to quite a lot of people this might come as a shock. All the privacy settings on social networks and forums are worthless. Let me explain why I think so.&lt;/p&gt;

&lt;p&gt;Whenever you share a thought or a picture on the web, remember that it can be re-shared by anyone else who has access to it. No privacy setting can prevent another person from taking a screenshot or copy-paste your post. Remember Snapchat’s revolutionary feature of auto-destroy messages? Users quickly learned to bypass it with a simple screenshot.&lt;/p&gt;

&lt;p&gt;This is also a reason I don’t believe in closed social networks and rather share my thoughts publicly on my personal website and on my Twitter account. I don’t want to have a false belief that my stuff is protected by a social network. As a consequence I don’t share anything I’m not comfortable to share with the public. Remember this next time you want to share something more private and find yourself adjusting the privacy settings of your post.&lt;/p&gt;

</description>
      <category>opinions</category>
    </item>
    <item>
      <title>Be careful with cache</title>
      <dc:creator>Stipe Grbić</dc:creator>
      <pubDate>Wed, 29 Nov 2017 13:49:03 +0000</pubDate>
      <link>https://forem.com/stipegrbic/be-careful-with-cache-44m7</link>
      <guid>https://forem.com/stipegrbic/be-careful-with-cache-44m7</guid>
      <description>&lt;p&gt;There’s a well known saying that goes like this: There are only two hard things in Computer Science: cache invalidation and naming things*. This is a post about the first one.&lt;/p&gt;

&lt;p&gt;Today I experienced a cache invalidation issue where I was presented with cached instead of fresh data which was different. This prevented me from fixing an issue which only my colleague discovered and for a minute we were confused with what was happening.&lt;/p&gt;

&lt;p&gt;This just remembered me to be careful next time when I’m thinking about caching things. It’s extremely important that you know when to invalidate cache. If you don’t determine that moment correctly you are about to put a nasty bug in your product and frustrate your users.&lt;/p&gt;

&lt;p&gt;* &lt;a href="https://martinfowler.com/bliki/TwoHardThings.html"&gt;https://martinfowler.com/bliki/TwoHardThings.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Back to Heroku</title>
      <dc:creator>Stipe Grbić</dc:creator>
      <pubDate>Tue, 24 Oct 2017 11:21:52 +0000</pubDate>
      <link>https://forem.com/stipegrbic/back-to-heroku-3kff</link>
      <guid>https://forem.com/stipegrbic/back-to-heroku-3kff</guid>
      <description>&lt;p&gt;A year and a half ago I moved my backend service from Heroku to Openshift. The reasons were that it didn’t put services to sleep state in free tier. At that time it just looked it offers more for the same price. A month ago Openshift upgraded their service from version 2 to 3, or something like that. They wanted me to do the migration of my service. This is what happened next :) …&lt;/p&gt;

&lt;h3&gt;
  
  
  Migrate!
&lt;/h3&gt;

&lt;p&gt;I had little to no will to do any work for this service again. Especially the maintenance work which adds no features and was basically doing someone else’s work. As it wasn’t that important and hadn’t that many users I was considering leaving the service to die. After a few days and email notifications from Openshift that I need to migrate, I decided to give it a try.&lt;/p&gt;

&lt;p&gt;Their tutorial was very short and at first I liked that, but only when I started working realized it’s just a bad tutorial, short and inaccurate. So I digged deeper trying to understand what needs to be done. As the last step I needed to create a new database, which wouldn’t be a problem if I didn’t need to learn all their nomenclature and architecture. I remembered the same service I had been running on Heroku before might still be alive.&lt;/p&gt;

&lt;h3&gt;
  
  
  To Heroku
&lt;/h3&gt;

&lt;p&gt;Indeed, as I logged in to Heroku I saw my service was switched to maintenance mode. A simple button click put it to being active. An issue I had before with service being put to idle state after some time of inactivity I solved by using cron jobs as Heroku imagined it. After that I updated my client applications pointing to the new (old) endpoint and voila!&lt;/p&gt;

&lt;p&gt;The reason for this post is to remember myself that I like Heroku better. To say that I want the software to live longer without needing for “migrations”. This is something I don’t like from the backend service providers, even though I’m using a free plan, would you please leave my service working as it was. And that was my main reason to do actual work, I felt sad seeing it die.&lt;/p&gt;

</description>
      <category>node</category>
      <category>backend</category>
    </item>
    <item>
      <title>Developers and UI texts</title>
      <dc:creator>Stipe Grbić</dc:creator>
      <pubDate>Sun, 26 Feb 2017 19:17:19 +0000</pubDate>
      <link>https://forem.com/stipegrbic/developers-and-ui-texts-51a0</link>
      <guid>https://forem.com/stipegrbic/developers-and-ui-texts-51a0</guid>
      <description>&lt;p&gt;This post is inspired by uninformative user facing texts in software. Being a software developer, I know that there are situations when we are not aware of how meaningless the text we write can be to the rest of the world. This is an excuse post to all the users affected by such messages and also a reminder to other developers that they should be careful how they communicate with their users.&lt;/p&gt;

&lt;h3&gt;
  
  
  A perfect world
&lt;/h3&gt;

&lt;p&gt;In a perfect software development world, there are professional content writers and all the user facing texts are approved by them. This covers all the possible screens, information and error messages that can be shown to users. Developer not only doesn’t need to write the string himself, he doesn’t need to worry about the content or even the language of the text. Of course, in this world content writer fully understands the software product, context and message he needs to present to users. He can easily translate technical language we as developers communicate to a non-technical language the rest of the world understands.&lt;/p&gt;

&lt;h3&gt;
  
  
  The real world
&lt;/h3&gt;

&lt;p&gt;In the real world situation is a bit different. Even if you are lucky enough to have a content writer for your software, you most probably had a situation where you had to write the text on your own. In this situation, when writing program code at high speed you just don’t give that much attention, or don’t shift to non-tecnical way of thinking for just that small “detail” such as user facing text message. I’m aware of this situation, but it’s certainily not an excuse. This situation requires to break out from technical way of thinking and put yourself in a situation of your user. Only then you’ll have a chance to write an informative text that your users will find useful. Here are some how-tos for writing user interface texts on &lt;a href="https://msdn.microsoft.com/en-us/library/dn742478.aspx"&gt;MSDN&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The best of
&lt;/h3&gt;

&lt;p&gt;Instead of picking only a few of “the best of” texts, here’s a &lt;a href="https://www.google.hr/search?q=uninformative+error+messages&amp;amp;safe=off&amp;amp;espv=2&amp;amp;biw=1229&amp;amp;bih=588&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ved=0ahUKEwiT5JmhyK7SAhWJ1RQKHVCICkkQ_AUIBigB"&gt;link&lt;/a&gt; to some good examples of what this post was all about.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>I'll miss Windows Phone</title>
      <dc:creator>Stipe Grbić</dc:creator>
      <pubDate>Wed, 15 Jun 2016 15:58:32 +0000</pubDate>
      <link>https://forem.com/stipegrbic/i-ll-miss-windows-phone-58pn</link>
      <guid>https://forem.com/stipegrbic/i-ll-miss-windows-phone-58pn</guid>
      <description>&lt;p&gt;Time is moving fast, it seems like yesterday I got my first Windows phone. It was so exciting to have a bold new platform after getting bored by iOS and Android. More than four years later, Windows Phone was left out on the cold to die on its own.&lt;/p&gt;

&lt;h3&gt;
  
  
  A third platform
&lt;/h3&gt;

&lt;p&gt;What I liked the most when Windows Phone was first introduced is that it was different. It had many things that other, better platforms didn’t have. I appreciated the whole platform was designed with a smartphone in mind. Big live tiles vs. small static icons, big fonts instead of small, swipe actions instead of buttons, browser address bar at the bottom instead at the top. There were also concepts like hubs which really helped you do the desired actions faster than on other platforms. You can check smoked by windows phone videos and see what was that about. The time was now for Microsoft to try and put Windows Phone devices into people hands.&lt;/p&gt;

&lt;h3&gt;
  
  
  How (not) to grow market share
&lt;/h3&gt;

&lt;p&gt;Many people either immediately liked all this different stuff, or they didn’t understand and didn’t want to bother to learn, and that’s when I think (fixing) problems started. Microsoft wanted to keep the platform as it is, different than other and let users learn it. Nokia at that time on its own did really good job on innovating and promoting its Lumia line of phones. But as it turned out, people weren’t willing to learn the new platform, most of them got the Windows Phone because it was affordable and at that time more performant than cheap Android phones. While Microsoft did work on the platform, it didn’t change the look and feel of the platform. All that users saw was leaving WP7 without upgrade, then in 8.1 introducing Cortana and other PC-shared functionality. During this time cheap Android phones got better and there were less reasons for users who didn’t care about apps to choose Windows Phone and market share got stagnating before even taking off.&lt;/p&gt;

&lt;h3&gt;
  
  
  Windows 10
&lt;/h3&gt;

&lt;p&gt;Many things happened that affected Windows Phone’s fate, Nokia acquisition, Microsoft CEO change, Windows 10. All these were quite a burden during the time that was crucial for Windows Phone to take off. Microsoft got bored of all this catch-up game and started to focus more on PCs where it had it’s strongest impact. They now wanted to make one OS for all devices that are interested in running it. Phones were now less important, they didn’t want to sell hardware and wanted to leave it all to OEMs. Now, almost a year after Windows 10 release, it’s still not very usable on the phone, it’s simply not a phone OS, not competitive with iOS, Android or even Windows Phone. They hope to make it better next year, but that’s quite some time for Microsoft to change it’s mind again. Terry Myerson says Windows Phone because of its small user base is not the platform to do cool new things at the moment, and that basically sums it all. And here’s a really good &lt;a href="http://www.theregister.co.uk/2016/05/27/windows_phone_history_special_report"&gt;article&lt;/a&gt; that made me write this post.&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s next
&lt;/h3&gt;

&lt;p&gt;For Windows Phone a long and sad death by abandonment. For Windows 10 a hope that it will eventually become a good platform for smartphones. But since Microsoft hopes to get started working on it next year then who knows when and if this will ever happen. For me it will be either iOS or Android. I used both of them before and I’m not happy having to return to one of them, but at the moment we don’t have the third platform like we did with Windows Phone five years ago.&lt;/p&gt;

</description>
      <category>windowsphone</category>
    </item>
    <item>
      <title>Xamarin.Forms hands on</title>
      <dc:creator>Stipe Grbić</dc:creator>
      <pubDate>Thu, 05 May 2016 19:59:03 +0000</pubDate>
      <link>https://forem.com/stipegrbic/xamarin-forms-hands-on-35nc</link>
      <guid>https://forem.com/stipegrbic/xamarin-forms-hands-on-35nc</guid>
      <description>&lt;p&gt;For some time I wanted to try Xamarin for multi platform mobile app development. Recently I got very basic app idea suggested by a friend and it looked like a perfect excuse to finally try Xamarin. Of course that Microsoft recent acquisition of Xamarin and giving the technology to developers for free gave me more reasons to do it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Xamarin + Visual Studio
&lt;/h3&gt;

&lt;p&gt;First things first, I installed Xamarin for Visual Studio and created a new project. In the solution there were Android, iOS, Windows 8 Store and Windows Phone 8.1 apps. I can’t say I was surprised that there was no Windows 10 UWP app, even though I read there is support for Xamarin, maybe it’s too early to abandon Windows (Phone) 8. I didn’t read much of a documentation, but rather learned from code. There was one share component in which you can put all the shared stuff, from DB, networks calls to UI written in XAML. Since my app was so basic and I really wanted to make use of write once run everywhere slogan, I wrote a share page in XAML. There were some usual Android struggles, from installing the SDK, setting up the emulators, to &lt;code&gt;java.lang.OutOfMemoryError: Java heap space&lt;/code&gt; error but eventually I got it working. When I realized I was writing C#/XAML code to run on Android it felt like magic, I couldn’t believe this all works. But soon after I decided the app is ready for testing on a device, I just plugged it in and deployed from Visual Studio, it felt so natural. Just to mention I didn’t try iOS because I don’t have an access to a Mac.&lt;/p&gt;

&lt;h3&gt;
  
  
  OneSignal
&lt;/h3&gt;

&lt;p&gt;My app needed the push notifications service. I already imagined writing a Node.js service for this, but before I started that I investigated about existing services which I could use. OneSignal seemed like a good option, it provided the needed functionality, had good documentation, SDKs for many platforms and was free. I started to work with it, and didn’t regret, I got push notifications working rather quick.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Of course, main disadvantage of Xamarin.Forms is the number of UI controls you have at your disposal. This means Xamarin.Forms can’t really be used for any advanced application with much UI customizations. And that’s OK, for that purpose there’s pure Xamarin where you can write UI natively on each platform. But for what it meant to be, a faster way to build simple apps for multiple platforms or a prototyping tool Xamarin.Forms works really well.&lt;/p&gt;

&lt;p&gt;My most negative surprise was that Windows Phone was least supported by Xamarin.Forms. I mean, it’s C#/XAML after all and one would expect it works the best for Windows, but when you think about it you can understand that there’s no reason for Xamarin team to make extra effort to support Windows Phone developers who already can develop using C#/XAML. Their main target is iOS and Android and I think they’ve done a great job implementing all that stuff, from Mono, Google Play Services, I-don’t-know-what for iOS, to UI layer and supporting XAML on all three platforms.&lt;/p&gt;

</description>
      <category>windowsphone</category>
      <category>xamarin</category>
      <category>android</category>
    </item>
  </channel>
</rss>
