Categories
.net Android Development Mono For Android VS 2012

A week of impressions of developing for Android using Xamarin & MvvmCross

Occasionally I watch road bicycling and it happens that I started following Vuelta 2013. Of course I downloaded the official application for Android as well – to keep an eye on standings. The poor quality of the Android application bothered me a bit. Both the lack of data and poor UI. Most notably I really found it hard to see where my favorite bicyclists are standing.

This triggered a well known feeling in me – I have to create my own Android application instead. For quite some time I was eying Android development but so far I didn’t have a proper motivation.Armed with Xamarin and MvvmCross I dived in. I had almost no experience with Android OS development, very little of Xamarin and none of MvvmCross. The goal was to create a MVVM based application that could leverage the common code along different mobile platforms though the current state is Android only application. I could create a version for iOS and Windows Phone 8 as well, I guess, but I don’t have a Mac (required to build for iOS) nor I want to loose a ton of time to enable Windows Phone development environment for a free application (which is a shame because WP8 development doesn’t look bad at all). Perhaps sometime.

The application itself is available for free through Google Play. Go, get it, while it is still actual.

About Xamarin

What they have done is simply amazing. Porting Mono (.net) stack to mobile platforms that is. Including the latest crazy useful async/await.This gives a .net developer an option to provide common code base for Windows RT, desktop Windows, Windows Phone, Android and iOS and to unleash the .net on platforms MS didn’t want you to. The community is there. But it comes with some quirks. Here are some major ones I found while developing with Visual Studio 2012:

  • debugger is often slow. Sometimes it takes quite a lot of tenths of seconds to be able to inspect variables at a breakpoint
  • async/await debugger breakpoints stop at random lines of code and often “Step Over” or “Step Into” means “Continue running”
  • Portable Class Library support is still a problem (most notably, VS Android projects can’t reference PCL assemblies while Xamarin IDE intellisense goes beserk on PCLs)
  • no profilers available (performance, memory) for Android. These are insanely important for mobile devices. Vote here.
  • price for Indie developers (small shops) might be high

I am not exactly sure whether some of these problems might be attributed to VS or Xamarin integration. Anyway, none of these is a showstopper and I am sure they’ll be addressed.

About MvvmCross

This framework is an excellent open source MVVM starting point for cross platform .net mobile development. @slodge. the author, has done and is still doing an insane job. Not just by creating the framework but he is all over the Internet answering questions and writing (well, mostly recording) documentation and samples. That said there are some problems with MvvmCross:

  • huge framework, takes time to grasp
  • I miss better fundamentals description (i.e how DataContext is transferred to children)
  • sometimes slow (i.e. startup time, ListView bindings). NOTE: since there is no performance profiler available I couldn’t exactly determine why it acts slowly sometimes. Could be Xamarin, could be MvvmCross or Android or my code.
  • some error messages could be better (i.e. suggesting you a solution instead of just reporting errors)

But hey, it is open source and I plan to contribute if time permits.

About Android

It is not hard to learn the basics but it has plenty of small issues and traps one has to be aware of. The fragmentation doesn’t help either nor does java stack but overall it isn’t that big of an issue.

Then there are Intel Android x86 images which are used if you want to run the emulator. (Forget about ARM ones due to the slowness). Intel Android x86 v17 image has a quirk that logs messages like nuts making log window pretty much useless. Then there is the v18 image that fixed overlogging issue but introduced a new one. It’d throw “can’t resolve host” when using HttpClient 99% of the time. This issue might be attributed to Xamarin though as its browser doesn’t exhibit same problems.

Google Play store publishing

Straightforward, no issues. Wait, there is a potential problem. If you want to publish an app on Google Play store you have to comply to US laws, most notably they warn you of using encryption. I wonder why (rhetorical).

So, these are my impressions, after a week of development. Note that I mostly listed problems I’ve encountered not described the (bright points of) products in details.

Feel free to feedback me.

Categories
.net Android Development MonoForAndroid

Just developing for Windows 8 Store gives your privacy a funeral

I was poking around with excellent MonoGame framework by creating a simple game, or better, starting to create a simple game. So far I’ve spent a day to build some infrastructure from scratch and I am able to show a main screen with simple menu items. Nothing really ground-breaking.

The aspect I am most interested right now is cross platform development with MonoGame. Hence my simple game is built with cross platform support from beginning. Main development target is Windows 7 x64 because it is the easiest to debug the application on. I’ve ported the game successfully to Android as well by using Mono For Android – tested on both emulator and my Google Nexus phone. Port means just creating a bootstraper (an Android app that launches the game within an activity) and linking the sources to Mono For Android projects (here Project Linker comes to great help, though shame that Microsoft Patterns And Practices team seemingly abandoned it).

 

 

Windows Phone 8 emulator requirements are insane

Next I wanted to port it to Windows Phone 8 since its SDK is fresh from the oven and MonoGame supports it (not sure at what stage the support is). However, Windows Phone 8 SDK emulator requirements are just too much: Visual Studio 2012, Windows 8 Pro, 4GB RAM, and CPU with SLAT support to run the emulator which in turn runs on Hyper-V. I don’t have a Windows Phone 8 device so I wanted to give the emulator a test run. I have Windows 8 Pro on my laptop but, albeit perfectly functional, the CPU doesn’t feature SLAT. SLAT is required by Hyper-V on client versions of Windows 8. The interesting fact is that VMWare Workstation runs perfectly well without or with SLAT. Be also aware that VMWare Workstation and Hyper-V on Windows 8 won’t coexist peacefully – Workstation will work only when Hyper-V feature isn’t present. The bottom line is that the Windows Phone 8 emulator won’t run on my laptop. I could run it on my workstation but I haven’t migrated to Windows 8 at this time.

Windows 8 development license isn’t something for privacy consciousness

Next I wanted to run a Metro aka Windows Store Apps version of my game. Those should run just fine on my laptop. I started by creating a new Windows Store application and Visual Studio 2012 immediately notified me that I need a developer license for Windows 8 which is free. But reading its privacy statement made me wonder.


When you request a developer license, Microsoft collects information about your PC and the apps installed on it. This information includes your PC’s name, manufacturer, and model; your IP address; a unique identifier generated based on your PC’s hardware configuration; and the edition of Windows you’re using.
….
Microsoft may access or disclose information about you, including the content of your communications, in order to: (a) comply with the law or respond to lawful requests or legal process; (b) protect the rights or property of Microsoft or our customers, including the enforcement of our agreements or policies governing your use of the services; or (c) act on a good faith belief that such access or disclosure is necessary to protect the personal safety of Microsoft employees, customers, or the public. We may also disclose personal information as part of a corporate transaction such as a merger or sale of assets.

Remember, I wanted to test my game locally. And for that I’d need to send all sort of data to Microsoft? What the heck? Furthermore those legal obligations are really flexible. Not that I have anything to hide or against Microsoft but still why do I have to disclose installed applications on my computer and such? Note that I wouldn’t send my data to any company just to test an application on the local machine. So, for the time being, I will skip Windows Store App version as well.

Progress so far:

  • Windows Desktop [checked]
  • Android [checked]
  • Windows Phone 8 [unknown]
  • Windows Store App [unknown]
  • Windows Phone 7 [unknown,soon]

There is only one platform left to try – Windows Phone 7 where I don’t foresee any problems, just didn’t have time yet.

Categories
.net Android CodeRush DevExpress

FindViewById<> CodeRush template

Here is an useful CodeRush editor template if you work with Mono For Android.

FindViewById<«FieldStart»«Caret»«FieldEnd»>(Resource.Id.«FieldStart»«FieldEnd»);«Target()»

I use string fv as trigger. That makes binding variables/fields to Views a bit faster and with less typing.

Example, I’d type

someView = fv

then I’d press SPACE and I’d get an extended template

someView = FindViewById<|>(Resource.Id.|);|

Then I have to type just TextView, ENTER, someView, ENTER, ENTER and I’d get

someView = FindViewById<TextView>(Resource.Id.someView);| <- this is cursor

So instead of typing the whole enchillada I had to type only the letters in yellow.

someView = fvSPACEFindViewById<TextView>(Resource.Id.someView);

With Android these statements are quite common and thus the fv template spares me a lot of typing.

But hey it can get better. If stick to a naming convetion that variable name is the same as Id name + View suffix I can enhance the template, I will name it fvx.

«FieldStart(Name)»«Caret»«Link(viewName)»«BlockAnchor»«FieldEnd»View = FindViewById<«FieldStart»«FieldEnd»>(Resource.Id.«FieldStart»«Link(viewName)»«FieldEnd»);«Target()»

Note the «Link» directive that copies the typed text. And the typing result is

fvxSPACEsomeView = FindViewById<TextView>(Resource.Id.some);

Even better now, eh. The only further improvement is to deduce the variable type and type in TextView automatically. I have to investigate this option to refine the template even further.

You can use the two templates by simply creating them in CodeRush (DevExpress/Options/Editor/Selections/Templates) or you can import them (see attached file) into templates – right click in templates list and select Import Templates…

 

CSharp_Righthand_MonoForAndroid.xml (10.42 kb)

Categories
.net Android MonoForAndroid

Writing to SD card and notifying outside world of changes

When writing a logging part of an application (Mono For Android/Visual Studio) I got some, seemingly, weird Android behaviour. Since my application transmits large strings over the net I wanted to have a history of these so I can check them out. I could do it with a simple string visualizer but the thing is that Mono For Android isn’t supporting any visualizer in Visual Studio at all – they are just not there. So I’ve decided to write those strings to a SD card in a folder accessible to Windows Explorer. Which is a better option anyway, as I could manipulate those later.

Here is the (simplified) code I use to write these to SD card

string path = Path.Combine(Context.GetExternalFilesDir(null), "file.txt");
File.WriteAllText(path, "large text here");

And I get a nice file in /Android/data/[package]/files. That’s all fine. However, Windows Explorer is unaware of newly created file at all. The file is there it just doesn’t see it. Looks like the problem is that Android (tested on two devices) doesn’t notify the outside world about the file system changes. Instead one has to do it manually. But how? AFAIK it can’t be done from within Windows Explorer.

After some googling I’ve found this stackoverflow thread. I’ve ported the MediaScannerConnection solution to C#.

public class SingleMediaScanner : Java.Lang.Object, MediaScannerConnection.IMediaScannerConnectionClient
{
    private MediaScannerConnection connection;
    private string file;

    public SingleMediaScanner(Context context, string file)
    {
        connection = new MediaScannerConnection(context, this);
        this.file = file;
    }

    public void Connect()
    {
        connection.Connect();
    }

    public void OnMediaScannerConnected()
    {
        connection.ScanFile(file, null);
    }

    public void OnScanCompleted(string path, Android.Net.Uri uri)
    {
        connection.Disconnect();
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
            connection.Dispose();
        base.Dispose(disposing);
    }

    public static void NotifyFile(Context context, string file)
    {
        SingleMediaScanner scanner = new SingleMediaScanner(context, file);
        scanner.Connect();
    }
}

One would call SingleMediaScanner.NotifyFile(Context, “FILEPATH”) to let the outside world of the changes to the file.

Not sure whether this is the best of even correct solution but it gets the job done.

Categories
.net Android Development Mono For Android

Two dimensional ScrollView for MonoDroid

There is no two dimensional scroll view for Android out of the box – the one that lets user scroll in both horizonal and vertical direction. There are either horizontal (HorizontalScrollView) or vertical (ScrollView) but not both. After some Googling around I’ve found that devs were mosty experimenting with combining HorizontalScrollView within ScrollView. This approach didn’t work for me and even if it did it has some drawbacks (such as scrolling is rectriected by one of the two directions at the same time).

At this point I was considering creating my own proper ScrollView from scratch but luckily I’ve stumbled across an implementation of the same idea by Matt Clark. The only problem was that I am on Mono For Android and Matt’s implementation is in pure java. Plus I didn’t have a clue whether his solution actually worked. Nevertheless I did convert his java code to C#/Mono For Android and voila, it worked almost immediately (after an hour or so of manual conversion – damn those java’s getters and setters instead of properties).

Attached are the C# sources in case anybody else needs it.

TwoDScrollView.cs (50.08 kb)

Categories
.net Android Mono For Android

SignalR client on Mono for Android

While SignalR is a great library for push notifications it has one “flaw”. There is no included Android client implementation currently, and by Android I mean Mono For Android. Luckily SignalR is an open source project and I decided to see how hard is to make it Mono For Android compatible. It turns out that it is pretty simple.

Here is the recipe (tested on Mono For Android 4.0.x):

  • SignalR depends on Newtonsoft.Json library (free, open source) developed by James Newton-King. Again, there is no Android port included with the original library but there is a port that works fine on Mono For Android. Get it here.
  • Get SignalR client sources. Create new Mono For Android class library and import all (WindowsPhone version of the project) files. Add WINDOWS_PHONE conditional compilation symbol to Project Properties/Build. Then reference the Newtonsoft.Json libary.
  • Mono For Android is currently missing TaskExtensions class required for unwrapping tasks. Get the sources for this class here. I assume it will appear in Mono For Android sooner or later. Add this class to the library and add proper using statements if/where necessary.

That’s it. You are now ready to receive SignalR push notifications.

Here is how you create a PersistentConnection (server part), and here is client code (that runs fine on Mono For Android).

Download the libraries and sources below

 MonoForAndroid.SignalR.Client.zip (1.40 mb)

Categories
Android Hardware

ASUS Support? Who cares.

Not long ago I’ve purchased an ASUS Transformer (Eee pad) Honeycomb tablet. Good specs, great price. I’d buy it even sooner if it weren’t for ASUS’ blunder with not providing enough units to the market (for some reason they released this great tablet in ultra-low quantities and it took almost a quarter of the year to provide enough units to satisfy market demands – first ASUS fail – what were they thinking?).

Transformer is really a great tablet, nothing to complain about and ASUS is really taking care of updating the OS in timely fashion. In fact it is the best combination out there right now (for Honeycomb tablets AFAIK) – others should follow their example. Anyway, I was a happy user for a month or so until I’ve come across Kendo UI – an optimized javascript/HTML5 library for UI components. Curiosity took over and I’ve tried few demos just to realize that they are running abnormally slow on a tablet that is supposed to perform very fast. My initial though was that Kendo UI is crap but later I’ve found that I was totally wrong on this assumption. Just to be sure I’ve tried Kendo UI on my Samsung Galaxy S phone and wonders, it runs much faster on my phone (supposedly much slower device) than on my (supposed to be) faster tablet. Makes sense? Not really.

So I started investigating by comparing the two devices. The most objective way of comparison are of course benchmark tests. I started with SunSpider (javascript benchmark – Kendo UI is all about javascript). I’ve got a result that is twice as slower compared to what others are getting on the same tablet. Even my phone scores better. I’ve also run Antutu and Quadrant. The results are below (expected results are from a fellow Transformer owner and from results from various web sites).

SunSpider

Expected

Actual

Difference (the factor of slowness)

lower is better

 

2291

4550

1,99

Note that running a different browser doesn’t change the results significantly.

 

Antutu

Expected

Actual

Difference (the factor of slowness)

lower is better

RAM

806

363

2,22

CPU Integer

1152

519

2,22

CPU floating-point

1014

453

2,24

2D graphics

298

302

0,99

3D graphics

859

725

1,18

Database IO

270

165

1,64

SD card write

189

174

1,09

SD card read

126

119

1,06

Overall

4714

2820

1,67

 

Quadrant

Expected

Actual

Difference (the factor of slowness)

lower is better

 

2399

1005

2,39

What can I gather from results is that there is a problem with CPU but not with GPU (factor is about 2 or more for CPU related tests which means twice as slower as it should be).

I even performed a factory reset and still got the same results. This is the first time I saw a device underperforming and I had no idea why. I’ve contacted Asus UK (I’ve bought it from UK because there is cheaper and it was the only EU country actually selling them) and they suggested a RMA (sending it in for a repair). The ASUS’ response was pretty quick in less than a day. I was supposed to contact a local Slovene company which I did and they dispatched an express courier to pick my tablet up (which was a pleasant surprise, something I am not used to). Slovene guys also warned me that they are not a repair shop, they will just forward it to designated repair service (supposedly in Czech republic) and that it might take a couple of weeks or even three weeks until I get it back. At least I’ll get a properly functioning tablet back I thought at the moment, even though I was getting used to the tablet.

The fail of the ASUS service logistics

So the tablet is gone for a service and after three weeks there was no sign of it – even though I’ve waited eagerly outside the house for the postal courier every day (just kidding). Hence I called the local Slovene company to ask how is it going with my tablet and when I might expect it back. The answer was by far the one I didn’t expect: “hey, in a day or two we will finally send it to the service”. “Errr, what? I think I didn’t understood that sentence, can you repeat it for me?” And the repeated answer was horribly the same. “So, you are telling me that you’ve spent three weeks or so just to prepare for sending my transformer to the service?” “Yes, but that doesn’t depend on us, you know. The Czechs (service) are supposed to organize the physical transfer, they are working on it, we are just the messenger, it doesn’t depend on us. We just (magically) open a case on our application and that’s it as far as we are concerned.”. WTF? ASUS could replace the device immediately without even sending it to the repair service if you care about your customers. But no, everything has to be by the internal rules, which involves stupid internal logistic problems or who knows what.

ASUS, is this the way of treating your customers? Is it really? I mean I had plenty of confidence in ASUS that they will make it right with their excellent tablet. I understand that the tablet might malfunction for a reason or another. But not dealing with failures in timely manner is the second and by far their worst failure (first one is failure to provide enough units at the start). And one wonders why iPad is still reigning the tablet market? It is because Taiwanese companies just don’t get it (nor does Motorola). They don’t get the whole picture nor they take care to provide customer friendly service in every aspect. At this point what is “pushing” the repair is the Slovene law which says that the warranty repair has to be done within 45 days (otherwise they have to replace it with a new device). Same on ASUS of even considering this time limitation.

If I know all this I’d just plan a family vacation somewhere in Czech republic near the repair service.

16.9.2011 Breaking update: A month after I sent my tablet for repair and a week after it was actually sent to the service (and after a week I’ve wrote this rant) I’ve got a replacement back – or at least the attached document says so. It is working as expected now. I am again a happy Honeycomb user.

Categories
Android

Waiting for a tablet

It has been quite a while since I’ve started thinking about an e-Reader. The primary reason is that I have a bunch of e-books (many of them from Manning). I bought them with an e-reader in mind. However, they are in various formats, PDF among them.

The mainstream e-reader is still a 6” device with a single 9” out there – Kindle DX which is quite expensive and run by Amazon. This could be a worrisome fact – they demonstrated it twice at least: first they removed legally bought books from e-readers just like that (ironically those were Orwell’s) and they denied hosting Wikileaks on their cloud servers because of a single phone call made by a politician. Being at the mercy of such a company isn’t really something good, is it? Anyway, the thing is that 6” devices are suitable for displaying more or less e-books only, not all e-content (think PDF) due to the screen size. And e-readers with bigger screens are not coming yet, are they? During this time iPad happened  which shows that a tablet is a good alternative to e-readers if properly done (plus it can be used for many daily tasks where e-readers simply don+t work). Thanks for that, iPad. Hence I shifted my focus to tablets.

Here are my requirements for a tablet capable of displaying e-books in various formats, reading e-mail, surfing, etc:

  1. Real battery life at least 6hrs
  2. Screen resolution at least 1024×600
  3. Screen size at least 7” (not sure if I rather set it to 9” – have to check them in real world)
  4. Not being at the mercy of anybody for content installation
  5. Applications can be developed on PC (.net is preferred)
  6. A decent chipset (nVidia Tegra 2 looks the best bet right now)
  7. Open architecture with an option to install custom OS (when the manufacturer stops supporting it)

So let’s start with the eliminations.

iPad

I’ll never buy iPad due to the conflict with requirements 4, 5 and 7. My biggest problem with iPad is the Apple politics behind it. If you have it then you are at the mercy of Jobs who decides what are you allowed to run, install, share and read – Apple censors content for no reason, at least they don’t even try to explain it, Wikileaks application was one of them. From the hardware point of view it is a fine device though.

Windows 7 tablets aka slates

There are some and come in various forms and factors. However, none of them makes it over my first requirement. They are slow, too – thanks to Windows 7 not being optimized for tablet format. I could survive slowness but not being able to run over 3hrs straight is a complete showstopper. Imagine, you just boot Windows 7, open Word and your document within it and you have to recharge already. It is beyond me why the manufacturers even bother producing them. The only bright point here is that Microsoft announced support for ARM and SoC with forthcoming Windows 8. I guess I’ll have to re-evaluate Windows based tablets in two years or more.

Chrome

No idea.

Android

Which leaves the Android based tablets as the only alternative. Currently the only decent one is Samsung Galaxy Tab which is heavily overpriced. It is more expensive than iPad even though it features much smaller display (7” compared to iPad’s 9”) and a free open source OS. Furthermore it is running Gingerbread (or is it Froyo) without any upgrade commitment from Samsung (you can’t just use stock Android due to Samsung’s customization).

The real deal are many Tegra 2 based tablets running Honeycomb announced at CES and I guess many more are coming in the near future. I think this spring there will be enough tablets on the market to choose from. I don’t know yet which one I’ll buy but I am skeptic about Motorola and HTC. The first one because of Milestone fiasco .They released the same hardware as Droid in the US which is a Google reference device. Meaning Google support and stock Android. But they released its twin as Milestone in EU as completely closed system with rare and very late updates (requirement 7) as if EU doesn’t deserve and open device. Screw you Motorola. Nor do I trust HTC which, rather than supporting their phones or putting some effort and care into them, releases new and new models almost monthly. Not saying others are better or worse but I just don’t trust these two.

To be honest Samsung is very bad at supporting as well. Just look at their flagship Galaxy S phone which could be much better. Having a top notch hardware is FUBAR slow due to the incredible stupid decision to use RFS as their file system. You have to use one of the lagfixes to see it fly. OS customization bloat named Touch Wiz doesn’t help with upgrades – The OS upgrade speed shown so far is poor – upgrading to Froyo took them around 6 months.

I don’t know about other manufacturers but I assume they can be even worse. Hence I’d really appreciate a tablet running a stock Android or the possibility to install a stock Android. This way updates would be piece of cake. This is valid for phones as well, not just tablets.

I am still optimistic for this spring. Am I too demanding?

Categories
Android Hardware Windows Mobile

A good use of an old Windows Mobile phone

Before owning an Android phone (Samsung Galaxy S) I had a HTC TyTN II which is a Windows Mobile 6.1 device. Until recently it was lying in a drawer because I didn’t know what to do with it. I didn’t want to give it away because I was afraid to turn the new owner into an enemy due the the poor quality of the phone. Anyway I am a so-so happy Android user now.

But recently I had to travel to Italy here and there and I was really lost without an internet connection to my laptop. Sure, I could use roaming, but I am not that rich. I figured out that the cheapest way to get connected in Italy is to buy an Italian prepaid SIM card, from TIM in my case. During the buying process I encountered two peculiarities.

1. The vendor asked me for ID. ID? For prepaid SIM card? I learned that they have this fabulous anti terrorism law in Italy that forbids vending SIM cards to anonymous users. Never heard of it in Slovenia. They even forbid vending more than 4 cards to a single person if I recall correctly. Go figure.

2. The guy asked me whether I want to use internet on my phone or on my laptop. Phone of course, why would I pay a premium price? After all Galaxy S comes with a mobile access point and I though it would be fine. It worked in Croatia just fine. Surprise, surprise, it doesn’t work. It works if I access the internet from my phone but not through an access point. After speaking with a fellow MVP network guru Miha Pihler he figured out that they probably inspect TCP/IP packets for traces of NAT and in such cases block the traffic.

One solution to this problem was to switch my Slovene SIM card in Galaxy S with the Italian one each time I travelled to Italy. There are two shortcoming to this solution. It is annoying to switch them again and again and I still couldn’t access internet from my laptop. Hey, I could buy a cheap GPRS modem. Hm, those aren’t that cheap after all, specially because I don’t need it that often.

At this point I remembered my old crappy TyTN II lying in the drawer. I also remembered that there is a really nice internet tethering application out there called WMWiFiRouter. Combining the two and using Bluetooth PAN feature it was a matter of minutes for connecting my laptop through bluetooth to TyTN II to the Italian internet. It is just that easy – a matter of starting the application and clicking a button. Besides Bluetooth PAN WMWiFiRouter can share cellular internet connection through USB and WiFi and much much more, see the features list.

The bottom line is that I finally found a good use for TyTN II and found a good internet tethering application as well which I’d definitely recommended.

Categories
Android Tip

Surfing the Croatia

If you are an Internet addict and can’t live without it even on vacation in Croatia then here is a cheap solution. Forget about roaming because it is insanely expensive (the stupid discussions in EU were all about SMS prices, not a word on data connection prices, though it wouldn’t matter in Croatia anyway). Luckily there is VIP mobile provider which offers prepaid data plans which are not expensive at all – compared to roaming that is. Here is what you need:

1. Check VIP coverage of the are you are going – coverage map. I was on the “edge” of HSDPA – thus I had to use Edge.

2. Next, find a VIP points of sale for VIP broadband SIM card. It should list Vipme under offers I think. Note: not all points of sales have those, specially smaller ones.

3. When in Croatia, find selected point of sale and buy a Vipme broadband box (SIM card only – 20 HRK*) or Vipme Broadband USB stick (149 HRK) if you have a laptop. Since I have a WiFi tethering enabled Android Samsung Galaxy S phone I went with former. 20 HRK were automatically added to my account as well.

4. The default data price is 1 MB/1 HRK which is still expensive. That’s why you should go with options:

  • 50 MB/25 HRK
  • 300 MB/91 HRK
  • 1 GB/191 HRK

5. Once you’ve picked an option that suits you (I went with 300MB/91 HRK which I’ve planned to consume in 10 days) you have to buy enough coupons. In my case I had to buy a coupon for 100 HRK. Perhaps I could buy 20 less but I wanted to be on the safe side. Note that an option is valid for 30 days or something like that, not sure about coupons.

6. Put the SIM into the phone and create an APN**: data.vip.hr. Here I had some problems with my phone, finally I’ve found a working combination – add APN, save it, restart the phone. Not sure what went wrong though, I just played with restarts and APNs until it started working.

7. Open internet browser and go to http://vipmevmc.vipnet.hr (remember that you are using 1 MB/1 HRK at this point). Enter you coupon code, so 100 HRKs are added to the account. Activate the 300MB option (or whicever you want) through the website as well. After I’ve confirmed my option I was notified that the option is going to be enabled within a working day, but in reallity it was activated in an hour or less.

8. That’s it. I was fully internet connected at this point. Then I enabled Mobile AP feature of my Samsung Galaxy S which does tethering over WiFi – Saša’s iPhone and laptops were connected without any problem through WiFi.

Happy surfing in Croatia

* HRK to EUR converter (other currencies supported)

** Full APN specs:

Name: Internet
APN: data.vip.hr
Proxy: 212.91.99.91
Port: 8080
Username: not set
Password: not set
Server: not set
MMSC: not set
MMSC proxy: not set
MMS port: not set
MMC: 219
MNC: 10
APN type: Internet
Authentification Type: None