Disabled post comments due to spam

Due to the massive spam amount I was getting these days I’ve opted to disable all comments to my posts for the time being. When I figure out a proper anti-spam system I’ll re-enable them, perhaps through reCaptcha or something.

You can still send me the feedback through the Contact form.

Stay tuned.

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.

Logging exceptions with NLog

A feature of my nice WPF application is to log exceptions that bring it down when running standalone. Of course this never happens but still, if such an event occurs I want to understand the cause. Why exceptions in plural? Because an exception might have an InnerException and this InnerException might have another InnerException and so forth.

I use NLog as logging framework. Nice and slick. Here is my really simple configuration:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
<target name="file" xsi:type="File" fileName="log.txt" layout="${longdate}:${message} ${exception:format=message,stacktrace:separator=*}" />
<target name="ds" xsi:type="Debugger"/>
<logger name="*" writeTo="file" minLevel="Warn"/>
<logger name="*" writeTo="ds" />

Basically I log exceptions to log.txt file (as well as pretty much everything to debugger’s output). The layout to write the exception is this: layout="${longdate}:${message} ${exception:format=message,stacktrace:separator=*}". It is a pretty much standard NLog’s format for exceptions. However, the problem with it is that it won’t log InnerExceptions at all.

Hence I need to use the following code:

private bool showingFatal;
private void Application_DispatcherUnhandledException(object sender, 
    DispatcherUnhandledExceptionEventArgs e)
    if (showingFatal)
        e.Handled = true;
    showingFatal = true;
    logger.Error(LogCategory.Engine, "Fatal exception start ********************** ");
        int level = 0;
        Exception ex = e.Exception;
        while (ex != null)
                string.Format("Fatal exception level {0}: ", level++), ex);
            ex = ex.InnerException;
        logger.Error(LogCategory.Engine, "Fatal exception end ********************** ");

I use the flag showingFatal to prevent duplicate entry into the method (not sure why it happens but it happens) and a loop to log all, really all, exceptions and callstacks there are.

This way I have a good information about the exception that caused the crash. If it happens someday…

Managing DVBLink IPTV channels

I’ve been using DVBLink 3.1 for IPTV and Server Network Pack for a week or two now. It is a software that makes IPTV stream available to various clients, Windows Media Center among of them. It works very well with my IPTV provider SIOL (note the SIOL’s IPTV service quality is crap nevertheless) and thus I am quite happy.

While it streams fine DVBLink for IPTV’s UI is a very ascetic one. Very. Imagine having 165 channels and you have to sort them by entering a number for any of them. Horrible, just horrible. Furthermore adding or modifying channels is not easy either if not impossible (luckily channel import works).

And hence here is the first step to the UI solution: Righthand’s DVBLink Editor v1.0.0. It is an application that will let you sort all those channels easily.

editor in action

First you have to load the channels configuration file (application will try to locate it and load automatically upon the start) if it isn’t loaded yet – no channels are listed and no file name is present in the config file editor. Click on […] or enter its full path manually and then hit Load button to load the content. Configuration file is named DVBLinkChannelStorage.xml and is usually found in [Program Files]\DVBLogic\DVBLink2 folder.

Once channels configuration is loaded you can order them. But before sorting the channels make sure grid sorts them by number (default) and they have unique numbers. Reorder button will assign them unique numbers while preserving the original sort order if any (it sorts by exisiting number and then by name). Basically Reorder button is a big friend of yours. Once you have them sorted you can change their order.

You can change channels order in various ways:

  • by rotating mouse wheel while holding Shift key
  • by pressing up or down key while holding Shift key
  • by entering the number directly – the two channels will swap position

Once you’ve done with ordering you have to save the changes by clicking on Save button. By default Stop service checkbox is checked which means that editor will try to stop DVBLink Server service before saving and it will restart it (only if it was running before) afterwards. When unchecked no service will be touched. If you wonder why a service restart is necessary, there is a simple explanation: DVBLink Server won’t pick changes otherwise.

System requirements

.net 4.0 (you will be prompted to downloaded and install it if it is not installed yet on your OS).

Possible problem

DVBLogic stores configuration file under Program Files folder which is a very problematic practice. Due to the security concerns no writable configuration file should be placed in there. Period. Furthermore you’ll need administrator privileges to change the file in question.

Happy sorting and keep an eye on this blog for further improvements to the Righthand’s DVBLink Editor! Feedback is appreciated.

Find the application here.

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
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

Vtisi o HTC Desire Android napravi (Slovene)

Že nekaj časa spremljam Android telefone na spletu vendar zares nisem imel opravka še z nobenim. Največ kar je, sem si ogledal na hitro kakšen prijateljev telefon. No, zadnje čase malo resneje premišljujem da bi si nabavil enega zase – se mi zdi, da je Android že kar uporaben. Pa sem dokaj nepričakovano dobil priložnost testirat enega izmed njih. Jure iz Mobitela mi je prijazno poslal telefon HTC Desire za testiranje za obdobje dva tedna. HTC Desire je dvojček Googlovega Nexus One – referenčnega telefona Android, ki ga prav tako izdeluje HTC. Za razliko od Nexusa One, Desire nima odpravljanja šuma mikrofona med telefoniranjem, ima pa ščepec več pomnilnika RAM (567MB vs 512MB) – kar pri Androidu, ki vse programe tlači kar v pomnilnik, ni tako zanemarljivo (Froyo naj bi odpravil to omejitev) pa še sledilno kroglico so zamenjali z, zame neuporabnim sledilnikom prsta in gumbe na zaslonu s pravimi fizičnimi gumbi. Pa še kakšna razlika bi se našla.

Za začetek naj povem, da nisem pretiran oboževalec HTCja. Prej nasprotno. Moja najslabša iskušnja z njimi sega nazaj v čas Windows Mobile 6.x in HTC TyTN II telefona. Sicer spodobna stvar (strojna oprema) na papirju, celo grafični pospeševalec je dosegal kakšne 3/4 ravni iPhona. In potem razočaranje. HTC je “pozabil” priložiti grafični gonilnik, brez katerega je bil grafični pospeševalnik manj uporaben kot superračunalnik brez elektrike. Uraden odgovor HTCja na jezo tisočih uporabnikov: “Ah, dejte no, sej nismo nikoli eksplicitno obljubili grafičnega pospeševanja, če ga hočete, si kupite naš nov XY aparat, kjer je to obljubljeno”. Kar me privede do druge zamere HTCju. Non stop proizvajajo nove modele, na stare pa hitro pozabijo. Hja, vse za čim večji dobiček, saj vzdrževanje starih modelov ne prinaša direktnega dobička. To je še posebej veljalo v času Windows Mobile, zdaj je morda malo, ampak res malo, bolje. Ta pristop me še najbolj spominja na tisti vic o neskončnem številu opic, ki jih postaviš pred tipkovnico in ena prej ali slej napiše Hamleta – tako HTC proizvaja morje novih in novih modelov v upanju, da bo kakšen le uporaben. Za kontrast si poglejte Apple, ki skrbi za svoje 3(!) različne iPhone še zdaj, edino prvega ne bo več podpiral s prihajajočim iPhone 4 OS.

Moja merila za Android telefon:

  • ne sme imeti lasten uporabniški vmesnik. Zakaj? Preprosto, ker potem se bo podjetje izgovarjalo, da ne more posodobiti operacijskega sistema, ker je posodobitev lastnega uporabniškega vmesnika zahtevno opravilo.
  • nalagalnik (bootloader) mora biti odklenjen. Zakaj? Zato, da lahko naložimo drugo verzijo OS in nam ni potrebno čakati na proizvajalca (glej zgoraj). Na svetu je kar nekaj ljudi, ki sestavlja verzije po meri in te so večinoma ljudem dostopne in boljše kot proizvajalčeve. Ko se proizvajalec naveliča posodabljati telefon, je to edina možnost za nadgradnjo.
  • spodobna baterija, ki omogoča vsaj dan nezahtevnega dela.
  • vsaj 480x800 zaslon, čim večji, tem bolje.
  • že se le da brez fizične tipkovnice, ker ta naredi telefon večji in težji.
  • WiFi, Bluetooth in 3G.
  • fotoaparat, ki zna narediti spodobno sliko (za nujne primere, ko ni pravega pri roki).

Kar sledi ne bo nek strokoven opis, ampak zgolj moje dvotedenske uporabniške izkušnje, s poudarkom na stvareh, ki mi niso všeč. Konec koncev nam nadležne in neuporabne stvari veliko povedo o uporabnosti telefona, mar ne? Telefon je lahko še tako dober, toda če ima napako, ki ga naredi neuporabnega, vse njegove dobre strani niso vredne nič.

In kaj sem ugotovil po dveh tednih uporabe?

No, za začetek bi si želel malo več časa, dva tedna nista ravno dovolj za kakšen poglobljen vtis. Prvi vtisi so pozitivni, ohišje je spodobno in lepo ga lahko spravim v stranski hlačni žep, zaslon lepo sije v živi barvi in stvar je spodobno hitra. Konec koncev ima 1Ghz procesor Snapdragon. Za namestitev SIM kartice je potrebno odpreti zadnji del ohišja in odstraniti baterijo. Mimogrede, zraven je še (tovarniško priložena) Micro SD kartica velikosti 4GB. Klik klik - in če je baterija polna, je telefon pripravljen na uporabo.

Operacijski sistem je aktualni Android 2.1 Eclair in je “onesnažen” s HTC Sense uporabniškim vmesnikom, kar bo zelo verjetno dober izgovor, da bomo na Froyo-ta (Android 2.2, ki na trg prihaja te dni) čakali dosti časa. HTC je sicer izjavil, da lahko pričakujem Froyo-ta za letošnje njihove modele nekje proti koncu leta. Za starejše modele pa se ne ve, kar zelo verjetno pomeni sredinec roke uporabnikom. Ste pomislili, da bo Desire naslednje leto lanski model? In – da ne bo pomote - Froyo ni bistveno (če sploh je) zahtevnejši kot Eclair. Da so to zgolj pohlepni marketinški nameni nam pove dejstvo, da so ljudje celo uspeli G1 (letnik 2008) posodobiti na Eclair. No, na srečo se menda da dobiti dostop do superuser pravic (root) in tako zaobiti neumne omejitve – na lastno odgovornost in izgubo garancije seveda. Kakorkoli, HTC Sense mi deluje precej nepotrebno, mogoče ima nekaj koristnih delov – npr. Flash, deljenje internet povezave preko USB kabla (USB tethering), pa še to ne bo več potrebno s prihodom Froyo-ta. Vremenski del je ravno tako neuporaben, ker v Sloveniji podpira le Ljubljano. Zastonj Weatherbug je precej spodobnejši. Skratka, HTC Sense uporabniški vmesnik je bolj nonsense.

Zaslon je 480x800 3,7 palčni AMOLED, kar pomeni, da naj bi imel boljše barve kot klasičen LCD. In res je lepo gledat vse te žive barve, le na soncu je skoraj neuporaben zaradi odseva. Ima pa tudi eno grdo skrivnost, ki jo neradi oglašujejo, oziroma je sploh ne. Za razliko od navadnih zaslonov, pri katerih ima vsaka pika na zaslonu vse tri barvne komponent (RGB – rdeča, modra, zelena) jih ima Desirejev samo dve, kar je odkril Luke Hutchison na ars technica  (vezano je na Nexus One, ampak Desire je dvojček z istim zaslonom). Ja, vsaka pika ima zeleno komponento, medtem ko se rdeča in modra izmenjujeta.

imageDesire, bela podlaga in črn tekst: lepo se vidi izmenično rdečo in modro, zelena pa je konstantna


TyTN II, bela podlaga in črn tekst: vsaka pika ima RGB komponente

Za natančnejši opis te packarije si poglej hiperpovezavo. Razultat? Bolj spackan in slabše čitljiv tekst ter slab občutek v želodcu, ker nas HTC vsaj zavaja, če že ne laže. In pazite - to pri napravi, ki je v prosti prodaji vredna okoli 600€. Obstaja tudi tretja razlaga, da HTC svoje zaslone pač meri v HTC pikah, ne pa kot vsi drugi, v RGB pikah. Očitno HTC kar ne more iz svoje kože in na račun kvalitete malce prireja specifikacije. Vse za dobiček, mar ne.

Drugi problem povezan z zaslonom je večdotičnost (multitouch). Večdotičnost na Desireju je spet en poceni klump, ki deluje samo do neke mere, to je, dokler nista prsta blizu ali na isti osi. Večinoma te hibe med vsakdanjim delom človek niti ne opazi (večinoma uporabljamo samo en prst). Ampak če igramo igrice ali vrtimo kakšne slike, itd., pa zna biti prav moteče. Več si oglejte na tej povezavi, program s katerim omenjeno pomanjkljivost lahko sami testirate pa zastonj dobite na Android tržnici pod imenom Multitouch Visible Test. Spet poceni HTC bližnjica.

1400mAh baterija je prešibka za takole strojno opremo in ne zdrži niti cel dan. Da se popravim, ne zdrži niti cel dan ob relativno nezahtevnem delu, kot je občasno prebiranje e-pošte, Twitterja in Facebooka, kar smatram kot minimum opravil. Ves čas sem imel vklopljen tako bluetooth kot WiFi. Če človek zraven zaigra še kako igro tu in tam in kaj potelefonira, vam telefon crkne prej kot v pol dneva. Mogoče se da baterijo varčevati s kakimi dodatnimi programi, ki izklapljajo bluetooth, ko ni telefonskega klica ali kaj podobnega, ne vem.

1GHz Qualcomm Snapdragon procesor je dovolj hiter, stranski produkt te hitrosti je občasno znatno segrevanje aparata. Froyo pa naj bi delovanje še dodatno bistveno pospešil s programskimi optimizacijami.

Bluetooth sem uporabljal v kombinaciji s Jabra BT530 slušalko in delalo je v redu. Z WiFi-jem prav tako nisem imel problemov, mogoče edinole nima ravno nekega dobrega dometa. Telefonski del deluje brez problema, kompas še kar, merilec pospeška tudi.

Sem pa imel probleme s priloženim odjemalcem za e-pošto (del HTC Sense). Za e-pošto uporabljam exchange strežnik. Največji problem na katerega sem naletel je bil ta, da mi občasno pošte ni in ni hotel poslati in to brez opisa vzroka napake – enostavno jamra, da je težava pri pošiljanju. Večinoma je v roku enega dneva pošto vseeno odpremil. Neugodno, če ti gori hiša in po e-pošti kliceš gasilce na pomoč. Poleg tega me odjemalec ne obvesti, če pride pošta v mapo, ki ni Inbox. Klasičen nedodelan HTCjev program. Bi vsaj pustili Googlov e-mail, ki zgleda bolj uporaben, vsaj meni – je pa res, da ga nisem testiral.

Najhuje kar se mi je tekom testiranja zgodilo, je bila avtodestrukcija SD kartice. Si predstavljate film Mission Impossible: “Tole sporočilo se bo uničilo v roku 5 sekund”? Začelo se je tako, da sem nekega dne spet imel problem s pošiljanjem e-pošte in sem se odločil, da ga poskušam reštartat (reštart je večinoma magična rešitev za večino problemov, če ne deluje, ga pač večkrat ponoviš). Power Off in že po 53ih sekundah je pravilno mrknil. Klik in kakšnih 55 sekund kasneje mi je ponosno javil: “Blank SD card, SD card blank or has unsupported filesystem”. Hua. Kar tako. Še dobro, da nisem imel kaj vrednega gor. Sem poskušal formatirat, pa se ni nič zgodilo. Čudno. Sem dal kartico ven iz telefona in v moj čitalec SD kartic in tudi nič, kot da kartica ni prisotna. Huh? In očitno nisem edini, ki je naletel na to samodestrukcijo. Android Forums in XDA forums imajo podobne in enake probleme (pa še na drugih forumih imajo podobna sporočila). Glede na to, da ljudje javljajo probleme na različnih SD karticah, bi se dalo sklepat, da je nekaj narobe s telefonom. Auč. Si predstavljate tajvansko ruleto: “Daš v Desire SD kartico in če preživi vklop telefona, greš v naslednji krog”?


Kaj pa vem. Meni se tale Desire še vedno zdi, kot pravi HTC izdelek, kjer namečejo noter en kup tehnologije, uberejo bljižnjice in stvar čimprej izstrelijo na tržišče, prodajo čim več in potem pozabijo na reševanje težav. Zraven pa jih še srbijo prsti in si ne morejo kaj, da ne bi napisali svojega vmesnika, uporabnik pa nima možnosti izbire. Je pač tako, da se ljudje delimo na tiste, katerim je HTC Sense všeč in tiste, ki se nam zdi bolj brezveze, pa še nove verzije OS pridejo z ogromnim zamikom zaradi teh dodatnih uporabniških vmesnikov, če sploh pridejo. Desire ima vsaj to prednost, da je dvojček Nexusa One, Googlovega otroka. To pomeni, da bo Google nove verzije najprej priredil za Nexus One in HTC ne bo imel veliko dela. Samo HTC Sense bo potrebno prenesti in že bo kako leto naokoli. Tako npr. uporabniki HTC Hero-ta čakajo na nadgraditve predpotopnega Androida 1.5 že več kot sedem mesecev. Bomo videli, če bodo pri Froyo-vemu Desiru kaj hitrejši (konec leta obeta spet čakanje in čakanje).

Če lahko živite z omenjenimi problemi ter ste se sprijaznili, da vas HTC zavaja, potem vam je telefon lahko celo všeč. Zase vem, da ga ne bom kupil. So mi naštete pomanjkljivosti prehude, da bi žrtvoval kup denarja. Si bom raje še ogledal Motorolinega Milestona ali pa počakal na kaj bolj meni prijaznega.

Getting HRESULT: 0x80131515 when running Righthand DataSet Visualizer?

Are you getting a HRESULT: 0x80131515 when invoking Righthand DataSet Visualizer from Visual Studio like this:


The problem is that OS marked the visualizer assembly as unsecure since it originated from the Internet. The solution to the problem is an easy one.

Locate the Righthand.DebuggerVisualizer.Dataset.2010.dll within File Explorer, right click to get Properties and click on Unblock button:

HRESULT: 0x80131515 error dialog

Happy DataSet/DataTable visualization!

What’s new in C# 4.0 presentation at NTK 2010 in Portorož

Tomorrow I am talking about new features in C# 4.0 at NT Konferenca in Portorož, Slovenia and I’ll be there through all day. So if you want to hear what features were added to C# in its latest incarnation you are welcome to attend the presentation taking place in Emerald 1, 14:45 - 16:00.

Later I’ll participate in MVP Panel in MSTech (Pečina), 16:30 - 17:30 and as a SLODUG lead I’ll be present at SloUG meeting in Sunset, 17:30 as well.

If you just want to talk about something .net-ish or just want to say hi, feel free to find me as I’ll be lurking around during my free time.

BTW, the official NT Konferenca twitter tag is #ntk10.

Righthand DataSet Visualizer now supports Visual Studio 2010

New in 0.9.16: added support for Visual Studio 2010 and updated user interface a bit. As before, everything is merged into a single dll file which is also digitally signed now.

Thanks RedGate {smartassembly} obfuscator tool for merging everything into a single DLL (ILMerge and another 3rd tool failed in this task). So far, I can only praise {smartassembly}.

Read more about Righthand DataSet Visualizer here.

Download the newest and older versions from download section.

Enjoy, and let me know whether you miss features or if you have any other feedback, good or bad.

Visual Studio 2010 and .net 4.0 are being released today

Today is the day. See Soma’s announcement and prepare your browsers pointed to MSDN Subscriber Downloads. The goods should be available for download starting at 10AM PST which translates to 19:00 for Slovenia (you might check out other local times).

Also watch the Visual Studio 2010 launch event live here.

Some useful links: